Sắp xếp với trung bình so sánh


10

Có một thuật toán sắp xếp dựa trên so sánh sử dụng trung bình so sánh lg(n!)+o(n) không?

Sự tồn tại của thuật toán so sánh trường hợp xấu nhất lg(n!)+o(n)là một vấn đề mở, nhưng trường hợp trung bình đủ cho một thuật toán ngẫu nhiên với so sánh dự kiến lg(n!)+o(n) cho mọi đầu vào . Ý nghĩa của lg(n!)+o(n) là so sánh o(n) từ tối ưu, lãng phí trung bình chỉ o(1) so sánh cho mỗi yếu tố.

Vì tôi đã có một thuật toán như vậy, tôi đưa nó vào như một câu trả lời (sử dụng định dạng Q / A ), nhưng tôi hoan nghênh các câu trả lời bổ sung, bao gồm các thuật toán khác, cho dù thuật toán đó đã được biết đến, cải thiện o(n) và tệ nhất- trường hợp lg(n!)+o(n) .

Công việc trước:
Sắp xếp hợp nhất sử dụng so sánh (ngay cả trong trường hợp xấu nhất). Sắp xếp hợp nhất (còn được gọi là sắp xếp Ford bồi Johnson) cũng sử dụng so sánh nhưng với hằng số nhỏ hơn nhiều trong . Cải thiện độ phức tạp trung bình để phân loại dựa trên so sánh (của Kazuo Iwama và Junichi Teruyama) - thuật toán chèn (1,2) của họ giống như một phần câu trả lời của tôi dưới đây.l g ( n ! ) + Θ ( n ) Θ ( n )lg(n!)+Θ(n)
lg(n!)+Θ(n)Θ(n)


Câu hỏi này trùng lặp với sắp xếp so sánh ngẫu nhiên tối ưu , nhưng được nhấn mạnh khác nhau (hành vi tiệm cận cụ thể ở đây - so với trạng thái kiến ​​thức chung, tất cả các kích cỡ đầu vào và khác biệt với trường hợp xấu nhất ở đó), tôi quyết định sử dụng một câu hỏi mới.
Dmytro Taranovsky

Câu trả lời:


4

Cập nhật: Tôi đã mở rộng câu trả lời này thành một bài viết Sắp xếp với mức trung bình của so sánhlg(n!)+o(n) .

Vâng, một thuật toán như vậy tồn tại. Tôi sẽ chỉ chứng minh ràng buộc , nhưng theo giả định ngẫu nhiên có khả năng, chúng tôi cũng nhận được . Tôi cũng sẽ mô tả một nỗ lực cho và .l g ( n ! ) + O ( n 1 - ε ) n 0,5 + o ( 1 ) O ( n 0,5 - ε )lg(n!)+o(n)lg(n!)+O(n1ε)n0.5+o(1)O(n0.5ε)

Chúng ta có thể giả định rằng tất cả các yếu tố là khác biệt, bằng cách chú thích chúng nếu cần thiết; trường hợp trung bình sử dụng các yếu tố riêng biệt theo thứ tự ngẫu nhiên. Chúng ta có thể tính toán số lượng so sánh trung bình bằng cách thêm tổn thất entropy cho mỗi so sánh liên quan đến việc sử dụng một đồng tiền công bằng.

Điểm bắt đầu là sắp xếp chèn với tìm kiếm nhị phân để quyết định vị trí chèn phần tử tiếp theo vào tập hợp con sắp xếp . Khi , một phép chèn sử dụng tối đa so sánh, trong đó (về mặt entropy) là tối ưu cho đến một yếu tố phụ (và đối với độ phức tạp trong trường hợp trung bình, cũng hoạt động). Bây giờ, khikhông gần với lũy thừa 2, chèn một phần tử là tối ưu (ngay cả trong trường hợp trung bình và bất kể chúng ta cân bằng mỗi truy vấn như thế nào), nhưng nếu lãng phí so sánh , chúng ta có thể điều khiển phân phối đồng đều trong một khoảng( 1 - ε ) 2 m| S | 2 m - 1 m O ( ε ) 2 m| S | ( 1 + ε ) 2 m | S | A o ( 1 ) A SS(1ε)2m|S|2m1mO(ε)2m|S|(1+ε)2m|S|Ao(1)AS có độ dài gần bằng công suất 2, chúng ta có được sự tối ưu mong muốn.

Chúng tôi đạt được điều này bằng cách thêm các phần tử theo lô và đôi khi so sánh hiệu quả các phần tử của lô với nhau, sao cho khoảng tương ứng với phần tử giảm theo cách bán ngẫu nhiên (và với phân phối xác suất của trong khoảng gần thống nhất), và khi chiều dài khoảng là đủ gần để một sức mạnh của 2, làm việc tìm kiếm nhị phân để chèn .A A ASAAA

Cấu trúc chung

Chúng tôi sẽ giữ một tập hợp con của các phần tử được sắp xếp và với mỗi phần tử chưa được sắp xếp , chúng tôi sẽ theo dõi khoảng thời gian tối thiểu của nơi được biết là nằm. là độ dài của ; là theo danh tính của các khoảng.A I A S A | Tôi A | I A I A = I BSAIASA|IA|IAIA=IB

Đặt là: So sánh với và sau đó (theo thứ tự ngẫu nhiên) so sánh và với các phần tử tương ứng của cho đến khi các khoảng của chúng tách rời nhau (hoặc có độ dài 1). Phần tử của được chọn (một cách nhất quán) để làm cho xác suất so sánh càng gần 1/2 càng tốt, giả sử rằng khi được gọi, được phân phối đồng đều trên . Do sự khác biệt cuối cùng, duy trì giả định tính đồng nhất.Compare(A,B)ABABSSCompare(A,B)IAIBCompare

Các phần sau đây có thể được đọc độc lập với nhau.

Một thuật toánlg(n!)+o(n)

Đưa ra: Một sắp xếp danh sách , và một loạt yếu tố không được phân loại; ; các yếu tố không được phân loại là ngẫu nhiên so với .m m w ( 1 ) o ( | S | ) SSmmω(1)o(|S|)S

Lặp lại (1) - (3) trong khi có thể:
1. Chọn hai phần tử B từ lô có I A = I B (mọi lựa chọn sẽ hoạt động). 2. Chạy C o m p a r e ( A , B ) . 3. Nếu | Tôi A | đủ gần với công suất 2, (lưu ý 1) loại bỏ A khỏi lô (mà không quên I A ); và làm tương tự với B . Cuối cùng: Chèn tất cả các yếu tố vàoABIA=IB
Compare(A,B)
|IA|AIAB
và hoàn thành việc sắp xếp.S

Lưu ý 1: Đối với "đủ gần", mọi lỗi tương đối (như hàm của m ) hoạt động miễn là các phần tử m - o ( m ) sẽ bị xóa trong bước (4) (có thể bằng ghi chú 2). Theo giả định ngẫu nhiên được phỏng đoán, sử dụng c log log m / log m lỗi tương đối bắt được các phần tử m ( 1 - log - Θ ( c ) m ) , cho phép một l g ( n ! )o(1)mmo(m)cloglogm/logmm(1logΘ(c)m) so sánh trung bình thuật toán sắp xếp.lg(n!)+O(nloglogn/logn)

Lưu ý 2: Bởi vì cùng một chuỗi so sánh dẫn đến khoảng bounding cùng, gần như tất cả các yếu tố sẽ đi qua bước (1) lần (trừ khi bị loại bỏ ở bước 4). Ban đầu, nếu A < B và chúng tôi chọn Một , chúng ta so sánh Một chống lại yếu tố S [ ( 1 - 1 / Ω(logm)A<BAAvà mỗi ứng dụng của bước (3) đếnAcóxác suất giảmO(1)| TôiA| trong1/(1-1/S[(11/2)|S|]AO(1)|IA|lần. Bây giờ cho mỗi tỷ lệmột>1mà không phải là một cường quốc hợp lý 2, chúng tôi đãε>0d>0m,nN1/(11/2)a>1, và vì vậy chúng tôi có đượco(n)bị ràng buộc.ε>0d>0m,nN1ε<amd2n<1+εo(n)

Một khả năng thuật toánlg(n!)+O(n1ε)

Modulo một giả định ngẫu nhiên, chúng ta có thể đạt được so sánh trung bình như sau.lg(n!)+O(n1ε)

  • Xáo trộn ngẫu nhiên các mục và sắp xếp nửa đầu vào danh sách , trong khi giữ nửa sau là một lô chưa sắp xếp.S

  • Lặp lại cho đến khi lô trống:
    Chọn ngẫu nhiên . Đặt G = { B : | P ( A < B ) - 0,5 | < N - 0,51 ε } . Nếu G là trống rỗng, loại bỏ Một từ hàng loạt và chèn vào S . Nếu không thì:AbatchG={Bbatch:|P(A<B)0.5|<n0.51ε}GAS

    1. Nếu có mà với xác suất Θ ( 1 ) (nói ≥0.05), C o m p một r e ( A , B ) làm | Tôi A | trong phạm vi n - error lỗi tương đối của lũy thừa 2, chạy C o m p a r e ( A , B ) và nếu thành công (tức là | I A | nằm trong nBGΘ(1)Compare(A,B)|IA|nεCompare(A,B)|IA| sai số tương đối của một sức mạnh của 2), removeMộttừ hàng loạt và chèn vàoS.nεAS
    2. Nếu không có như vậy , hãy chạy C o m p a r e ( A , B ) cho B G ngẫu nhiên .BGCompare(A,B)BG

Nếu giả định ngẫu nhiên của chúng tôi hoạt động ra (tức là sự phân bố của độ dài khoảng thời gian và vị trí là đủ ngẫu nhiên), sau đó trong suốt phần lớn quá trình này, một điển hình có thể được hiệu quả so với lựa chọn n Θ ( 1 ) các yếu tố (với n Θ ( 1 ) độ dài khoảng khác nhau). Do đó, chúng tôi thường có thể chọn một so sánh cho (1) ở trên, và nếu chúng ta không may mắn với kết quả so sánh, chúng tôi vẫn nhận được Θ ( log n ) cơ hội, do đó đạt được (nếu ε là đủ nhỏ, nói 0.01) một l g ( n ! ) +AnΘ(1)nΘ(1)Θ(logn)εThuật toán O ( n 1 - ε ) -comparison. Với một số thay đổi và xấp xỉ, phép tính tổng có thể được thực hiện theo chuẩn: Cho một phần tử A , tính độ dài khoảng thời gian hứa hẹn, sau đó tra cứu B s với tâm xấp xỉ đúng và độ dài khoảng.lg(n!)+O(n1ε)AB

Có một số cách để tối ưu hóa các so sánh, nhưng trở ngại là mỗi so sánh có thể không may mắn và chúng ta có một số lượng so sánh hạn chế. Nếu sau khi tối ưu hóa, thực hiện trung bình 4 so sánh và 'thành công' với 1/4 xác suất, chúng tôi nhận ε( 1 - ε ) / 4 / log 4 / 3 2 0,09 .Compare(A,B)ε(1ε)/4/log4/320.09

Một cách tiếp cận có lẽ tốt hơn nhiều là đợi cho đến khi một khoảng gần với công suất 2, kiểm soát không phải độ dài khoảng riêng lẻ mà là phân phối độ dài.

Nỗ lực ở thuật toán lg(n!)+n0.5+o(1)

Giả sử rằng và chúng tôi được cung cấp một lô n phần tử chưa được sắp xếp với các khoảng I A cũng được đưa ra, với | Tôi A | thường là n 1 - o ( 1 ) và với | Tôi A ||S|=nnIA|IA|n1o(1) phân bố đều (lên đến một lỗi ngẫu nhiên, và giữ đủ độ chính xác ngay cả khi điều kiện trênMột<S[i]). Sau đó, chúng ta có thể sắp xếp các mục lãng phí trung bìnhn0,5+o(1)so sánh như sau: (*) Chèn tất cả các phần tử theo thứ tự ban đầu| TôiA||IA|2lg|IA|A<S[i]n0.5+o(1)
. Bằng cách này, tất cả các phần tử được chèn khi độ dài khoảng của chúng gần với công suất 2.|IA|2lg|IA|

Thuật toán sắp xếp sẽ là: Xáo trộn ngẫu nhiên danh sách và sắp xếp nửa đầu tiên . Để chèn nửa thứ hai, hãy phân phối đúng và thực hiện (*) ở trên.S

Để làm quyền phân phối, chúng ta có thể thực hiện phân phối 'ngẫu nhiên', và sau đó giữ lại phần đúng của các phần tử cho mỗi| TôiA| /2lg| TôiA| khi ngẫu nhiên phần còn lại (lặp lại nếu cần thiết). Tuy nhiên, trong khi điều này nên sửa| TôiA||IA|2lg|IA||IA|/2lg|IA| toàn cầu, chúng tôi không biết liệu nó có thể được kiểm soát cục bộ với độ chính xác cần thiết hay không (do đó từ "nỗ lực" ở trên).|IA|2lg|IA|

Để thực hiện phân phối 'ngẫu nhiên', chúng ta có thể sử dụng ngẫu nhiên với P ( A < B ) 0,5 , ngoại trừ với I A ban đầu hoàn toàn giống nhau, chúng ta không mong đợi ngẫu nhiên tại một độ sâu sublogarithmic (tức là với I A đủ lâu). Tuy nhiên, tôi phỏng đoán rằng chúng ta có được sự ngẫu nhiên hóa ở độ sâu sublogarithmic bằng cách sử dụng các khái quát hóa (có thể là bất kỳ lựa chọn hợp lý nào sẽ hoạt động) của C o m p a r e đểCompare(A,B)P(A<B)0.5IAIACompare các yếu tố: Nếu chúng tôi tiếp tục k = ω ( 1 ) các yếu tố vướng (tức là kết nối sử dụng kết quả so sánh), chúng ta nên có khoảng k noncommuting sự lựa chọn cho từng so sánh với S . Điều này sẽ cho phép O ( log k n + log k ) sâu ngẫu nhiên, như mong muốn (giả định rằng k là không quá lớn như chúng ta cần phải sâu Θ ( log k )k=ω(1)k=ω(1)kSO(logkn+logk)kΘ(logk)để phân tâm các yếu tố). Tôi hy vọng rằng tính toán có thể được thực hiện quasilinear nếu sử dụng một đủ nhỏ .k

Kể từ khi so sánh với có khả năng chỉ chất thải O ( 1 / n ) entropy, các ngẫu nhiên ban đầu và nonuniformity nhẹ các yếu tố trong khoảng bounding của họ nên chỉ cần n o ( 1 ) entropy thải. Nếu việc định hình phân phối thành công đủ tốt, chất thải entropy bắt nguồn chủ yếu từ sự không phù hợp độ dài khoảng thời gian trong (*) (do đó n 0,5 + o ( 1 ) ).1/2+n0.5O(1/n)no(1)n0.5+o(1)

Một tổ hợp :lg(n!)+O(n0.5ε) Nếu việc định hình phân phối hoạt động đủ tốt và chúng ta làm cho kích thước lô bằng nhau và chọn lọc từ chối n 0,5 + ε yếu tố trong (*) (ở trên), chúng ta có thể chèn tất cả nhưng những n 0,5 + ε yếu tố với chất thải entropy n 0,5 - ε / 2 + o|S|+n0.5+εn0.5+εn0.5+ε như sau. ChiaSthành n ε khoảng gần bằng nhau, và khi trong chèn, tôi Một lắng về một khoảng thời gian, từ chối (tức là hủy chèn) nếu khoảng thời gian quá dài, do đó làm giảm sự biến đổi về độ dài của những khoảng thời gian Θ ( n ε / 2 )lần, lần lượt làm giảm các biến thể độ dài của các khoảng thời gian n 1 - o ( 1 ) ngẫu nhiêntrong n ε / 2 - o ( 1 )n0.5ε/2+o(1)SnεIAΘ(nε/2)n1o(1)nε/2o(1)lần, khi cần thiết Bây giờ, chúng ta có thể sử dụng trên thuật toán để chèn các yếu tố còn lại với O ( n 0,5 - ε ' ) chất thải nếu ε là đủ nhỏ.lg(n!)+O(n1ε)O(n0.5ε)ε

Độ phức tạp trong trường hợp xấu nhất của sắp xếp: Rất có thể, có một thuật toán sắp xếp với so sánh trường hợp xấu nhất. Để tìm trung vị, có một khoảng cách tuyến tính giữa các trường hợp trung bình ( so sánh 1,5 n + o ( n ) ) và trường hợp xấu nhất (ít nhất ( 2 + ε ) n - O ( 1 ) so sánh). Tuy nhiên, để sắp xếp, có rất nhiều sự tự do để sắp xếp so sánh và tìm kiếm các thuật toán sắp xếp mới.lg(n!)+o(n)1.5n+o(n)(2+ε)nO(1)


1
Tôi nghĩ bạn nên viết nó lên như một tờ giấy.
Emil Jeřábek

@ EmilJeřábek Đồng ý. Là một trang web cấp độ nghiên cứu, nhiều câu hỏi và câu trả lời ở đây là các bài báo nhỏ, nhưng với độ dài và tầm quan trọng ở đây, một bài viết chính thức là đáng mong đợi. Vui lòng cho tôi biết (tại dmytro@mit.edu) về phần nào sẽ được mở rộng trong bài viết (với câu trả lời này vẫn là phiên bản ngắn gọn).
Dmytro Taranovsky
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.