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.
- Perbandingan kunci kasus terburuk .
- Kasus terburuk bertukar.
- Adaptif: Mempercepat hingga ketika data hampir diurutkan atau ketika ada beberapa kunci unik.
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?
algorithms
sorting
James Faulcon
sumber
sumber
Jawaban:
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.O ( n l g ( n ) ) O ( 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.O ( m ( nm+ 1 ) ) O ( n ) O ( n )
Jika ada yang berhasil memahami WikiSort dan / atau GrailSort saya akan menghargai mereka juga menjawab pertanyaan terbuka saya tentang hal itu
sumber
Smoothsort Dijkstra nyaris, tetapi tidak stabil.
sumber
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.
sumber
(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
sumber