Apakah tidak ada algoritma penyortiran dengan semua properti spesifik yang diinginkan?

22

Di situs web Sorting Algorithms , klaim berikut dibuat:

Algoritma pengurutan yang ideal akan memiliki properti berikut:

  • Stabil: Kunci yang sama tidak disusun ulang.
  • Beroperasi di tempat, membutuhkan ruang ekstra.O(1)
  • Perbandingan kunci kasus terburuk .O(nlg(n))
  • Kasus terburuk bertukar.O(n)
  • Adaptif: Mempercepat hingga ketika data hampir diurutkan atau ketika ada beberapa kunci unik.HAI(n)

Tidak ada algoritma yang memiliki semua properti ini, sehingga pilihan algoritma pengurutan tergantung pada aplikasi.

Pertanyaan saya adalah, benarkah itu

tidak ada algoritma [sorting] yang memiliki semua properti ini

dan jika demikian, mengapa? Ada apa dengan sifat-sifat ini yang membuat semuanya secara bersamaan mustahil untuk dipenuhi?

James Faulcon
sumber
4
Mereka mungkin hanya berarti bahwa tidak ada algoritma pengurutan yang diketahui memiliki semua properti ini.
Yuval Filmus
3
Apakah bahkan ada satu pertemuan sortir berbasis perbandingan 3 & 4?
greybeard
4
@JohnFeminella Membutuhkan setidaknya perbandingan , tetapi bagaimana itu memberi tahu kami apa-apa tentang jumlah swap? Ω(nlog(n))
Tom van der Zanden
2
@JohnFeminella Nitpick: "lebih baik daripada " adalah pernyataan kosong. Anda harus menggunakan Ω atau Θ jika Anda ingin berbicara tentang batas bawah. HAI(_)ΩΘ
Raphael
1
Algoritma pemilahan apa pun dapat dibuat stabil dengan menambahkan kunci sekunder posisi elemen asli. Namun, itu membuatnya tidak pada tempatnya karena akan mengambil O (n) memori tambahan.
Giovanni Botta

Jawaban:

6

WikiSort dan GrailSort dua algoritma yang lumayan baru yang melakukan di tempat, stabil, kasus terburuk perbandingan kunci. Sayangnya saya tidak memahami mereka dengan cukup baik untuk mengetahui apakah mereka mendekati O ( n ) bertukar atau adaptif sehingga saya tidak tahu apakah mereka melanggar kondisi keempat dan kelima yang Anda miliki.HAI(n lg(n))HAI(n)

Dari melihat kertas "Rasio berbasis stabil di tempat menggabungkan", oleh Pok-Son Kim dan Arne Kutzner terkait dengan oleh halaman WikiSort GitHub, Kim dan Kutzner mengklaim memiliki operasi 'merger' yaitu (WikiSort adalah varian Mergesort) tapi saya tidak yakin apakah itu berarti WikiSort memilikiO(n)swap. GrailSort diklaim lebih cepat (di halaman WikiSort GitHub) jadi saya bisa membayangkan bahwa mereka mungkin memiliki kasus terburukO(n)swap dan adaptif.HAI(m(nm+1))HAI(n)HAI(n)

Jika ada yang berhasil memahami WikiSort dan / atau GrailSort saya akan menghargai mereka juga menjawab pertanyaan terbuka saya tentang hal itu

pengguna834
sumber
5

Smoothsort Dijkstra nyaris, tetapi tidak stabil.

vonbrand
sumber
3

Tidak ada algoritma yang dikenal memenuhi semua properti ini. Properti ini dicari setelah kami mengembangkan lebih banyak algoritma penyortiran. Sebagai contoh, bubble sort (bisa dibilang algoritma sorting paling primitif), kemungkinan besar tidak stabil pada implementasi pertama, tetapi dirancang untuk menjadi stabil karena para ilmuwan komputer berusaha membuatnya lebih efisien dalam implementasi selanjutnya. Jadi, para ilmuwan komputer kemungkinan besar memilih sifat-sifat terbaik dari algoritma terbaik, dan sebagai hasilnya, Anda telah memunculkan daftar semua sifat yang diinginkan ini. Pada kenyataannya, sulit untuk mendapatkan yang terbaik dari semua dunia dalam hal apa pun. Bukan tidak mungkin, tetapi mungkin tidak mungkin dengan arsitektur kita saat ini.

HAIΩΘ

Siggy
sumber
1
Selamat datang! Ini bagus tapi saya tidak melihat apa yang harus dilakukan dengan efisiensi: itu hanya preferensi bahwa bagian daftar dengan kunci yang identik tidak boleh "secara acak" diijinkan oleh algoritma.
David Richerby
Ya, tetapi apakah itu terbukti mungkin atau tidak mungkin?
James Faulcon
1

(Meskipun ini adalah pertanyaan lama, saya menemukannya dan mungkin juga orang lain.)

Memang ada algoritma yang memenuhi (1) - (4) dan paruh kedua (5), jadi datang sangat dekat dengan persyaratan di atas. Ini dijelaskan dalam [1] dan menggabungkan beberapa trik yang ditemukan selama beberapa dekade terakhir.

[1]: Franceschini, G. Theory Comput Syst (2007) 40: 327. https://doi.org/10.1007/s00224-006-1311-1

Sebastian
sumber