Tôi đã tự hỏi nếu chúng ta bằng cách nào đó có thể sửa đổi thuật toán sắp xếp nhanh để tạo ra sự phức tạp thời gian trường hợp xấu nhất của O (n logn). Mặc dù điều này có thể được thực hiện bằng cách hoán đổi dữ liệu và sau đó giả định rằng chúng ta sẽ nhận được sự phức tạp của trường hợp trung bình hơn là trường hợp xấu nhất. Nhưng đây không phải là một giải pháp chứng minh đầy đủ vì chúng ta có thể một lần nữa rơi vào trường hợp xấu nhất sau khi hoán đổi. Có cách nào khác xung quanh mà bạn có thể đề nghị.Chúng ta có thể nhanh chóng sắp xếp với độ phức tạp của trường hợp xấu nhất?
Trả lời
Vâng, vâng, chúng tôi có thể đưa nó xuống O (nlogn). Tất cả các thuật toán tôi đã thấy rằng cố gắng để đưa ra điều này được dựa trên lựa chọn điểm pivot của bạn. Nếu bạn có thể "thông minh" chọn điểm xoay của bạn, nó có thể được đưa xuống.
Tùy chọn 1. Intro Sort. Nó bây giờ không còn là một "nhanh" tinh khiết. Nó sử dụng sắp xếp hợp nhất sau này. 2. Chọn trung vị làm trục xoay. Bây giờ việc tìm kiếm trung bình có thể mất rất nhiều thời gian nếu được thực hiện theo cách thông thường NHƯNG có đề cập đến trong số Introduction to Algorithms.
Dưới đây là một cái gì đó trực tiếp từ miệng của ngựa Introduction to Algorithms
- Divide mảng vào [n/5] nhóm với mỗi nhóm có 5 yếu tố
- Tìm trung bình của mỗi nhóm sử dụng chèn sắp xếp và sau đó chọn trung bình từ danh sách này
- Sau đó, bạn cần phải thử đệ quy và tìm trung bình [n/5] số trung vị được tính từ mỗi nhóm.
- phân vùng các mảng xung quanh trung bình
này Có một số công cụ phức tạp hơn trong thuật toán này mà tôi đã ẩn. Bạn có thể đi qua nó trong cùng một cuốn sách nếu bạn muốn. Thông thường, tôi không cố gắng sử dụng thuật toán này. Tôi sử dụng một phép chọn ngẫu nhiên để tìm trục xoay và làm việc với nó.
Cảm ơn S.P. Tôi đoán đây là những gì tôi đang tìm kiếm. – pseudocode
+1 để đề cập đến trung bình của người trung bình từ CLRS – Adrian
Đối với tùy chọn 1, nó không phải là sắp xếp hợp nhất nhưng heap sắp xếp mà một quicksort chạy đi chuyển sang. Bạn muốn bảo tồn tài sản tại chỗ của quicksort. Vì lý do phối hợp lý do hiệu suất hiếm khi được triển khai tại chỗ, mặc dù nó có thể là. – user515430
Vâng "sửa đổi" là một từ khá chủ quan ở đây. Có một số cách bạn có thể tăng nhanh để làm cho nó chạy trong O(n log n)
. Có hay không bạn vẫn có thể gọi nó là một loại nhanh chóng được xác định.
Một trong số đó là introsort. Introsort bắt đầu với quicksort nhưng sau đó chuyển sang hợp nhất sắp xếp có trường hợp phức tạp tồi tệ nhất O(n log n)
. Một trong những mục đích của introsort là để chống lại danh sách kẻ giết người trung bình-of-3.
Cảm ơn tskuzzy. Điều này sẽ giúp.. – pseudocode
- 1. Độ phức tạp của trường hợp xấu nhất đối với việc sắp xếp nhóm là gì?
- 2. Độ phức tạp của thời gian đối với Shell sắp xếp?
- 3. Độ phức tạp về thời gian đếm
- 4. Việc sắp xếp danh sách phức tạp của Jackson
- 5. cách sắp xếp hợp nhất nhanh hơn so với các câu đố sắp xếp chèn tôi
- 6. Sắp xếp phức tạp với nhiều thông số?
- 7. Sự phức tạp của trường hợp xấu nhất đối với KMP khi mục tiêu là tìm tất cả các lần xuất hiện của một chuỗi nhất định?
- 8. Đa giác, phức tạp nhanh chóng (với lỗ) triangulation c/C++ thư viện với giấy phép cho phép
- 9. OSGi có thể giúp giảm độ phức tạp?
- 10. Độ phức tạp về thời gian của erlang dict
- 11. Tại sao hợp nhất sắp xếp trường hợp xấu nhất thời gian chạy O (n log n)?
- 12. Phân tích các thuật toán (phức tạp)
- 13. Có triển khai trường hợp xấu nhất của JVM không?
- 14. Độ phức tạp của thuật toán
- 15. Javascript: Giá trị tra cứu nhanh chóng trong đối tượng (như chúng ta có thể với thuộc tính)
- 16. Độ phức tạp của set_intersection trong C++ là gì?
- 17. Rắc rối với Hợp nhất Sắp xếp
- 18. sắp xếp danh sách mảng của các đối tượng phức tạp theo thứ tự abc
- 19. Độ phức tạp của thuật toán
- 20. Độ phức tạp của OrderedDictionary là gì?
- 21. Ví dụ về Danh sách phức tạp với dữ liệu phức tạp và bố cục phức tạp của mỗi hàng?
- 22. Độ phức tạp của ưu tiênQueue addAll()
- 23. Độ phức tạp thời gian của random.sample
- 24. C++: Cách nhanh nhất để sắp xếp danh sách số và chỉ mục của chúng
- 25. Các công cụ phân tích phức tạp mã vượt quá độ phức tạp của chu trình
- 26. Số học phức tạp nhanh ở Clojure
- 27. yêu cầu lặp lại nhanh chóng loại
- 28. Độ phức tạp về thời gian của việc xóa một nút trong cây nhị phân
- 29. Hợp nhất hai đối tượng phức tạp trong PHP
- 30. Có lệnh Git nào để kết hợp tất cả các cam kết xấu xí của chúng ta với nhau không?
Một cách tầm thường là thêm hai dòng vào đầu hàm: một dòng sẽ thực hiện sắp xếp đống hoặc hợp nhất và thứ hai trong số đó trả về. Tôi hiểu rằng điều này có lẽ không phải là những gì bạn có trong tâm trí, nhưng tôi hy vọng điều này minh họa rằng bạn sẽ cần phải cụ thể hơn về những loại "sửa đổi" được phép thuật toán quicksort tiêu chuẩn ... bạn sẽ phải khá chính xác trong giới hạn của bạn để tạo ra một thứ gì đó như tôi đã đề xuất những giới hạn ngoài. – Patrick87
Tôi đã nghĩ đến việc liệu chúng ta có thể chỉnh sửa nhanh bản thân sắp xếp nhanh hay không. Giống như đặt một số hạn chế đối với trục xoay. Tôi chỉ có thể sử dụng sắp xếp hợp nhất thay vì sắp xếp nhanh, thay vì sử dụng nhiều loại. Tôi đang tìm một số tinh chỉnh trong sắp xếp nhanh chỉ. – pseudocode
Xem: http://stackoverflow.com/a/70631/44522 – MicSim