Apakah ada algoritma sorting berbasis perbandingan yang menggunakan rata-rata perbandingan?
Keberadaan terburuk algoritma perbandingan merupakan masalah terbuka, tapi sudah cukup kasus rata-rata untuk algoritma acak dengan yang diharapkan perbandingan untuk setiap masukan . Signifikansi adalah bahwa hal itu perbandingan dari optimal, membuang-buang rata-rata hanya perbandingan per elemen.
Karena saya sudah memiliki algoritma seperti itu, saya memasukkannya sebagai jawaban (menggunakan format Q / A ), tetapi saya menyambut jawaban tambahan, termasuk algoritma lain, apakah algoritma tersebut sudah diketahui, meningkatkan , dan terburuk- kasus .
Pekerjaan sebelumnya:
Gabung semacam menggunakan perbandingan (bahkan dalam kasus terburuk).
Sortir gabungan-penyisipan (juga dikenal sebagai jenis Ford-Johnson) juga menggunakan perbandingan tetapi dengan konstanta yang jauh lebih kecil di . Kompleksitas Rata-Rata yang Ditingkatkan untuk Penyortiran Berbasis Perbandingan (oleh Kazuo Iwama dan Junichi Teruyama) - mereka (1,2) algoritma penyisipan menyerupai sebagian dari jawaban saya di bawah ini.
sumber
Jawaban:
Pembaruan: Saya memperluas jawaban ini menjadi makalah Menyortir dengan rata-rata perbandinganlg(n!)+o(n) .
Ya, algoritma seperti itu ada. Saya hanya akan membuktikan terikat, tetapi dengan asumsi pengacakan yang mungkin kita juga mendapatkan . Saya juga akan menjelaskan upaya untuk dan .lg(n!)+o(n) lg(n!)+O(n1−ε) n0.5+o(1) O(n0.5−ε)
Kita dapat mengasumsikan bahwa semua elemen berbeda, dengan memberi anotasi jika perlu; case rata-rata menggunakan elemen berbeda dalam urutan acak. Kami dapat menghitung jumlah rata-rata perbandingan dengan menambahkan kerugian entropi untuk setiap perbandingan relatif terhadap menggunakan koin yang adil.
Titik awal adalah penyisipan sortir dengan pencarian biner untuk memutuskan di mana memasukkan elemen berikutnya ke dalam subset diurutkan . Kapan , penyisipan menggunakan paling banyak perbandingan , yang (dalam hal entropi) optimal hingga faktor aditif (dan untuk kompleksitas kasus rata-rata, juga berfungsi). Sekarang, ketikatidak mendekati kekuatan 2, penyisipan elemen adalah suboptimal (bahkan dalam kasus rata-rata dan terlepas dari bagaimana kita menyeimbangkan setiap permintaan), tetapi jika membuang perbandingan, kita bisa mengarahkan ke distribusi yang kurang lebih seragam lebih dari satu intervalS (1−ε)2m≤|S|≤2m−1 m O(ε) 2m≤|S|≤(1+ε)2m |S| A o(1) A S panjang dekat dengan kekuatan 2, kita mendapatkan optimalitas yang diinginkan.
Kami mencapai ini dengan menambahkan elemen dalam batch, dan kadang-kadang secara efisien membandingkan elemen batch dengan satu sama lain, sehingga interval sesuai dengan elemen berkurang secara acak (dan dengan distribusi probabilitas di dalam interval) hampir seragam), dan ketika panjang interval cukup dekat dengan kekuatan 2, melakukan pencarian biner untuk menyisipkan .A A AS A A A
Konstruksi umum
Kami akan menyimpan subset elemen yang diurutkan, dan untuk setiap elemen disortir , kami akan melacak interval minimal dari mana diketahui berada. adalah panjang ; adalah dengan identitas interval.A I A S A | I A | I A I A = I BS A IA S A |IA| IA IA=IB
Misalkan menjadi: Bandingkan dengan , dan kemudian (dalam urutan acak) membandingkan dan terhadap elemen sesuai sampai intervalnya terpisah (atau memiliki panjang 1). Elemen dipilih (secara konsisten) untuk membuat probabilitas untuk perbandingan sedekat 1/2 mungkin, dengan asumsi bahwa ketika dipanggil, didistribusikan secara seragam pada . Karena ketidakjelasan pada akhirnya, mempertahankan asumsi keseragaman.A B A B S S C o m p a r e ( A , B ) I A ⨯ I B C o m p a r eCompare(A,B) A B A B S S Compare (A,B) IA×IB Compare
Bagian berikut ini dapat dibaca secara terpisah satu sama lain.
Algoritma Alg(n!)+o(n)
Diberikan: Daftar diurutkan , dan kumpulan elemen yang tidak disortir; ; elemen disortir relatif acak untuk .m m ∈ ω ( 1 ) ∩ o ( | S | ) SS m m∈ω(1)∩o(|S|) S
Ulangi (1) - (3) selagi memungkinkan:A B IA=IB
Compare(A,B)
|IA| A IA B
S
1. Pilih dua elemen dan dari batch dengan (pilihan apa pun akan berhasil). 2. Jalankan . 3. Jikacukup dekat dengan kekuatan 2, (catatan 1) menghapus dari batch (tanpa melupakan ); dan melakukan sama dengan . Akhirnya: Masukkan semua elemen ke dan lengkapi pengurutan.B I A = I B C o m p a r e ( A , B ) | I A | A I A B S
Catatan 1: Untuk "cukup dekat", setiap kesalahan relatif (sebagai fungsi dari ) bekerja selama elemen akan dihapus pada langkah (4) (mungkin dengan catatan 2). Di bawah asumsi pengacakan terkira, menggunakan kesalahan relatif menangkap elemen , memungkinkan Algoritma pengurutan perbandingan rata-rata .m m - o ( m ) c log log m / log m m ( 1 - log - Θ ( c ) m ) l g ( n ! ) + O ( n log log n / log n )o(1) m m−o(m) cloglogm/logm m(1−log−Θ(c)m) lg(n!)+O(nloglogn/logn)
Catatan 2: Karena urutan perbandingan yang sama mengarah ke interval terikat yang sama, hampir semua elemen akan melalui langkah (1) kali (kecuali dihilangkan pada langkah 4). Pada awalnya, jika dan kami memilih , kami membandingkan terhadap elemen , dan setiap aplikasi langkah (3) ke memiliki kemungkinan mengurangidalam kali. Sekarang untuk setiap rasio yang bukan kekuatan rasional 2, kami memiliki , jadi kita mendapatkanA < B A A S [ ≈ ( 1 - 1 / √Ω(logm) A<B A A AO(1)| IA| ≈1/(1-1/ √S[≈(1−1/2–√)|S|] A O(1) |IA| a>1∀ε>0∀d>0∃m,n∈N≈1/(1−1/2–√) a>1 o(n)∀ε>0∀d>0∃m,n∈N1−ε<amd2n<1+ε o(n) terikat.
Kemungkinan algoritmalg(n!)+O(n1−ε)
Dengan asumsi pengacakan, kita dapat mencapai perbandingan rata-rata sebagai berikut.lg(n!)+O(n1−ε)
Acak item secara acak, dan urutkan bagian pertama ke dalam daftar , sambil menjaga bagian kedua sebagai batch yang tidak disortir.S
Ulangi sampai kumpulan kosong:A∈batch G={B∈batch:|P(A<B)−0.5|<n−0.51ε} G A S
Pilih secara acak . Misalkan . Jika kosong, menghapus dari batch dan masukkan ke . Jika tidak:G = { B ∈ batch : | P ( A < B ) - 0,5 | < n - 0,51 ε } G A S
Jika asumsi pengacakan kami berhasil (yaitu distribusi panjang interval dan posisi cukup acak), maka di sebagian besar proses, tipikal dapat secara efisien dibandingkan dengan pilihan elemen (dengan panjang interval berbeda). Jadi, kita biasanya dapat memilih perbandingan untuk (1) di atas, dan jika kita tidak beruntung dengan hasil perbandingan, kita masih mendapatkan peluang, dengan demikian mencapai (jika cukup kecil, katakan 0,01) a algoritma perbandingan. Dengan beberapa perubahan dan perkiraan, penghitungan total dapat dilakukan sesekali: Diberikan elemenA nΘ(1) nΘ(1) Θ(logn) ε lg(n!)+O(n1−ε) A , hitung panjang interval yang menjanjikan, dan kemudian cari dengan perkiraan panjang pusat dan interval yang tepat.B
Ada beberapa cara untuk mengoptimalkan perbandingan, tetapi kendalanya adalah bahwa setiap perbandingan mungkin berakhir dengan ketidakberuntungan dan kami memiliki sejumlah perbandingan. Jika setelah optimasi, melakukan rata-rata 4 perbandingan dan 'berhasil' dengan probabilitas 1/4, kita mendapatkan .Compare(A,B) ε≈(1−ε)/4/log4/32≈0.09
Pendekatan yang mungkin jauh lebih baik adalah menunggu sampai interval mendekati kekuatan 2, bukan mengontrol panjang interval individu tetapi distribusi panjang.
Upaya pada algoritmalg(n!)+n0.5+o(1)
Misalkan dan kami diberi kumpulan elemen tidak disortir dengan interval juga diberikan, denganbiasanya dan dengan didistribusikan secara seragam (hingga kesalahan acak, dan tahan dengan presisi yang memadai bahkan jika dikondisikan pada ). Kemudian, kita dapat mengurutkan item yang membuang rata-rata perbandingan sebagai berikut: (*) Masukkan semua elemen dalam urutan awal . Dengan cara ini semua elemen dimasukkan ketika panjang intervalnya mendekati kekuatan 2.|S|=n n IA |IA| n1−o(1) |IA|2⌊lg|IA|⌋ A<S[i] n0.5+o(1)
|IA|2⌊lg|IA|⌋
Algoritma pengurutan akan menjadi: Acak acak daftar dan urutkan setengah pertama . Untuk menyisipkan bagian kedua, buat distribusi benar, dan lakukan (*) di atas.S
Untuk membuat distribusi benar, kita dapat membuat distribusi 'acak', dan kemudian menahan fraksi elemen yang tepat untuk setiap saat mengacak sisanya (ulangi jika perlu). Namun, sementara ini harus memperbaiki secara global, kita tidak tahu apakah itu dapat dikontrol secara lokal dengan presisi yang diperlukan (karenanya kata "upaya" di atas).|IA|2⌊lg|IA|⌋ |IA|/2⌊lg|IA|⌋ |IA|2⌊lg|IA|⌋
Untuk membuat distribusi 'acak', kita dapat secara acak menggunakan dengan , kecuali bahwa dengan awal semuanya identik, kita tidak mengharapkan pengacakan pada kedalaman sublogaritmik (Yaitu dengan cukup lama). Namun, saya menduga bahwa kita mendapatkan pengacakan pada kedalaman sublogaritmik menggunakan generalisasi (mungkin setiap pilihan yang masuk akal akan bekerja) dari elemen ke : Jika kita membiarkan elemen terjerat (yaitu Koneksi menggunakan hasil perbandingan), kita harus memiliki sekitar noncommuting pilihan untuk setiap perbandingan dengan . Ini harus memungkinkanCompare(A,B) P(A<B)≈0.5 IA IA Compare k=ω(1) k=ω(1) k S O(logkn+logk) kedalaman pengacakan, seperti yang diinginkan (dengan asumsi bahwa tidak terlalu besar seperti yang kita butuhkan kedalaman untuk menguraikan elemen). Saya berharap bahwa penghitungan dapat dibuat quasilinear jika menggunakan cukup kecil .k Θ(logk) k
Karena perbandingan dengan ya probabilitas hanya memboroskan entropi , pengacakan awal dan sedikit ketidakseragaman elemen dalam interval pembatasnya hanya perlu limbah entropi. Jika bentuk distribusi berhasil cukup baik, limbah entropi terutama berasal dari ketidakcocokan panjang interval selama (*) (maka ).1/2+n−0.5 O(1/n) no(1) n0.5+o(1)
Kemungkinan Kombinasi:lg(n!)+O(n0.5−ε) Jika membentuk distribusi bekerja cukup baik dan kami membuat ukuran batch yang sama dan menolak secara selektif dalam (*) (di atas), kita dapat memasukkan semua selain dengan limbah entropi sebagai berikut. Membagi menjadi interval yang hampir sama, dan ketika selama penyisipan, menetap pada suatu interval, tolak (yaitu membatalkan penyisipan) jika intervalnya terlalu panjang, sehingga mengurangi variasi dalam panjang interval ini|S|+n0.5+ε ≈n0.5+ε ≈n0.5+ε n0.5−ε/2+o(1) S nε IA Θ(nε/2) kali, yang pada gilirannya mengurangi variasi panjang panjang acak interval dalam kali, sesuai kebutuhan. Sekarang, kita dapat menggunakan algoritma untuk memasukkan elemen yang tersisa dengan limbah jika kecil cukup. n ε / 2 - o ( 1 ) l g (n!)+O( n 1 - ε )O( n 0,5 - ε ′ ) εn1−o(1) nε/2−o(1) lg(n!)+O(n1−ε) O(n0.5−ε′) ε
Kompleksitas penyortiran kasus terburuk: Kemungkinan besar, ada algoritma penyortiran dengan perbandingan kasus terburuk. Untuk menemukan median, ada kesenjangan linear antara perbandingan kasus rata-rata ( ) dan kasus terburuk (setidaknya perbandingan). Namun, untuk penyortiran, ada banyak kebebasan untuk mengatur perbandingan dan untuk menemukan algoritma penyortiran baru.1.5 n + o ( n ) ( 2 + ε ) n - O ( 1 )lg(n!)+o(n) 1.5n+o(n) (2+ε)n−O(1)
sumber