Sẽ sử dụng giá trị trung bình như trục tăng tốc quicksort?


7

Bằng cách nào đó tôi đã nghĩ về quicksort đêm qua và đang đọc về nó trên Wikipedia. Phần thú vị đối với tôi là: 'Nếu chúng tôi luôn có thể chọn một trục từ 50% giữa, chúng tôi sẽ chỉ phải chia danh sách nhiều nhấtđăng nhập4/3n. Sự lựa chọn của trục dường như là một vấn đề có thể xảy ra của quicksort có thể dẫn đếnÔi(n2) hành vi.

Ý tưởng của tôi là: Nếu trong mỗi bước, người ta sẽ sử dụng giá trị trung bình của phân vùng làm trục , điều này có thể tăng tốc độ đáng kể. Đặc biệt là sau một vài bước, khi các ngoại lệ nằm trong phân chia danh sách của riêng họ, giá trị trung bình và trung bình phải rất gần nhau (một lần nữa, nhìn vào danh sách lớn). Thời gian bổ sung trong mỗi bước để tính giá trị trung bình nên làn. Vì thế:

Thời gian ước tính Quicksort: nMộtđăng nhập4/3n

Thời gian ước tính Quicksort_mean:2nMộtđăng nhập5/3n

(5/3 rất có thể là một ước tính bảo thủ của tôi, cũng có thể gần hơn với 2, vì các tập hợp con sẽ nhanh chóng không có ngoại lệ). Vì vậy, bắt đầu từ khoảng 10.000 mục Quicksort_mean sẽ nhanh hơn (trung bình) so với Quicksort. Hơn nữa, nó sẽ không bao giờ có nguy cơ trở thành , vì nó bị ràng buộc là không lấy phần tử tối thiểu hoặc tối đa của ngăn xếp.Ôi(n2)

Câu hỏi chính của tôi là: Tôi có bỏ lỡ điều gì không? Tôi phải thừa nhận, bản thân tôi chưa bao giờ thực hiện quicksort, vì vậy tôi có thể bỏ lỡ các phần khác của toàn bộ (lưu trữ, v.v.)


1
Bạn đã thực sự giải quyết sự tái diễn được cập nhật để có được "thời gian chạy" đó hay bạn chỉ cần thêm một lần nữa n? (Điều thứ hai sẽ sai.)
Raphael

(từ chối trách nhiệm: đã lâu rồi kể từ khi tôi nghiêm túc xem xét nội dung này và kiến ​​thức của tôi có thể bị lỗi thời) Sắp xếp nhanh chỉ là một yếu tố nhanh hơn hai đối thủ cạnh tranh chính có hành vi xấu nhất thực hiện sắp xếp nhanh chậm hơn đáng kể trong trường hợp tốt nhất loại bỏ lý do sử dụng nó thay vì các thuật toán khác.

Tôi chỉ đơn giản là thêm một n. Tôi biết rằng đó là 'sai', nhưng tính toán giá trị trung bình phải là cực nhanh (n bổ sung, có thể được thực hiện trong khi sắp xếp và số lượng phân chia phân vùng). Kiến thức của tôi về các đối thủ cạnh tranh không tốt lắm (như tôi đã nói, chỉ là một suy nghĩ hoàn toàn ngẫu nhiên trong khi đang ngủ một nửa ...)
Julian Becker

Câu trả lời:


10

Sử dụng giá trị trung bình cho phân vùng của bạn không ngăn được Ω(n2)hành vi xấu nhất. Nó xảy ra khi danh sách đầu vào tăng theo cấp số nhân. Xem xét đầu vào:

1,n2,n3,Giáo dục,nn

Giá trị trung bình của bộ này là (không có triệu chứng) nn-1để bạn có được phân vùng tồi tệ nhất có thể. Đây là một chút gian lận khi xem xét việc lưu trữ danh sáchΩ(n2)không gian nếu các số được biểu diễn dưới dạng số nguyên. Nhưng nếu bạn đang sắp xếp các số dấu phẩy động thì kịch bản này là có thể giải thích được.

Tuy nhiên, có thể tính toán trung vị của một tập hợp (hoặc bất kỳ thống kê thứ tự nào khác cho vấn đề đó) trongÔi(n) thời gian vì vậy nếu bạn thực sự quan tâm đến việc đảm bảo thời gian chạy để sắp xếp nhanh chóng, bạn nên sử dụng nó thay vì trung bình.

Tuy nhiên, trong tất cả các kịch bản thực tế, chi phí tính toán bổ sung trung bình / trung bình quá lớn nên việc chọn một trục ngẫu nhiên hầu như luôn luôn nhanh hơn.


Đó là một danh sách trung bình: D (Tôi đoán bạn sẽ đạt đến vô cực khá nhanh, vì vậy bạn sẽ không thể có số n rất cao). Quan điểm của tôi là O (n) không tự động O (n). Trong so sánh, tính toán trung vị là A * n với A lớn hơn 1. So sánh, tính giá trị trung bình phải gần bằng 1 * n. Vì vậy, tôi nghĩ rằng nó có thể tăng trung bình thời gian chạy (không quan tâm đến việc đảm bảo thời gian chạy). Tôi phải thừa nhận, toàn bộ sự việc chỉ là một dòng suy nghĩ đã không để tôi một mình tối nay. Vì vậy, tôi quyết định đặt nó ở đây trong trường hợp ai đó thấy nó thú vị ...
Johannes Becker

1
Đoạn cuối rất quan trọng: có, bạn có thể tối ưu hóa độ sâu đệ quy bằng cách chọn các trục tốt hơn, nhưng nó có chi phí. Phân tích nghiêm ngặt là cần thiết để xác định liệu nó có giá trị nó. Xem ví dụ luận án của Sedgewick; câu trả lời thường là "không" (trực giác: bạn luôn trả tiền cho việc chọn pivots tốt hơn nhưng đôi khi chỉ chọn cách ngây thơ hơn.).
Raphael

Nhiều tiêu chí sắp xếp không có "ý nghĩa", ví dụ như sắp xếp danh sách những người theo họ.
gnasher729
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.