Sắp xếp một mảng gồm


8

Tôi đang cố gắng hiểu làm thế nào tôi có thể sắp xếp một mảng gồm phần tử khi chỉ không có .nlogn

Tôi nghe nói rằng việc sắp xếp một mảng với tối đa đảo ngược có độ phức tạp . Vì có các phần tử chưa được sắp xếp, nên trong trường hợp của tôi có nhiều nhất là đảo ngược .IO(nlog(I/n))lognnlogn

Câu trả lời cho câu hỏi là phù hợp với công thức, nhưng tôi không thể hiểu "ý tưởng đằng sau nó, hoặc thuật toán sắp xếp nào đạt được nó.O(nloglogn)

Câu trả lời:


9

Giả sử rằng " phần tử không đúng vị trí" có nghĩa là tồn tại k phần tử mà phần xóa của phần còn lại của mảng được sắp xếp, có thuật toán thời gian O ( n + k log k ) để sắp xếp toàn bộ mảng.kkÔi(n+kđăng nhậpk)

Tóm lại, tính toán một chiều dài tăng dần ít nhất , sắp xếp các phần tử khác và hợp nhất. Cái trước có thể được hoàn thành trong thời gian O ( n ) bằng thuật toán ngăn xếp đơn giản, đẩy từng phần tử một và bật hai phần trên cùng bất cứ khi nào chúng không hoạt động. Chiến lược xóa tối ưu phải xóa ít nhất một trong các yếu tố này, do đó tổng thiệt hại được đưa lên trên bằng cách xóa 2 k .n-2kÔi(n)2k


+1 cho ý tưởng gọn gàng. Chỉ cần một điều (và có lẽ tôi đang chia tóc ở đây), bạn có thể thực sự chèn vào những nơi tùy ý để tránh "mọi người thay đổi đúng không"? Tôi tin rằng chúng ta nên theo dõi các phần chèn trong một cấu trúc riêng biệt, thực hiện một lần vượt qua cuối cùng để tạo ra mảng được sắp xếp. Ôi(n)
quicksort

@quicksort tốt hơn là chỉ sắp xếp các mẩu tin lưu niệm và hợp nhất methinks
David Eisenstat

1
Đó là điều tương tự, nhưng hợp nhất là sạch hơn, tôi đồng ý.
quicksort

1
Đáng nói là đây là tối ưu không có triệu chứng (sử dụng so sánh) phụ thuộc vào cả n và k.
aelguindy

Chà, thuật toán mà bạn mô tả có vẻ là sắp xếp hợp nhất .
Morwenn

5

Hãy nói rằng có yếu tố không tại chỗ.k

Chia mảng thành các phần con không giảm. Điều này có thể được thực hiện trong thời gian và sẽ cho kết quả tối đa là 2 k subarrays. Bây giờ chúng ta chỉ cần ghép từng cặp trong thời gian Θ ( n log k ) , thu được một mảng được sắp xếp.Θ(n)2kΘ(nđăng nhậpk)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.