Jumlah perbandingan yang dibutuhkan paling sedikit untuk mengurutkan (memesan) 5 elemen

22

Temukan jumlah perbandingan paling sedikit yang diperlukan untuk mengurutkan (memesan) lima elemen dan menyusun algoritma yang mengurutkan elemen-elemen ini menggunakan jumlah perbandingan ini.

Solusi : Ada 5! = 120 hasil yang mungkin. Oleh karena itu pohon biner untuk prosedur penyortiran akan memiliki setidaknya 7 level. Memang, ≥ 120 menyiratkan jam ≥ 7. Tetapi 7 perbandingan tidak cukup. Jumlah perbandingan paling sedikit yang diperlukan untuk mengurutkan (memesan) lima elemen adalah 8.2hh

Berikut adalah pertanyaan saya yang sebenarnya: Saya menemukan sebuah algoritma yang melakukannya dalam 8 perbandingan tetapi bagaimana saya bisa membuktikan bahwa itu tidak dapat dilakukan dalam 7 perbandingan?

Tolong bantu
sumber

Jawaban:

27

Solusinya salah. Demuth [1; via 2, dtk. 5.3.1] menunjukkan bahwa lima nilai dapat diurutkan menggunakan hanya tujuh perbandingan, yaitu bahwa batas bawah "teori informasi" ketat dalam hal ini.

Jawabannya adalah metode yang disesuaikan dengan , bukan algoritma umum. Ini juga tidak terlalu bagus. Inilah garis besarnya:n=5

  1. Sortir dua pasangan pertama.

  2. Memesan pasangan dengan elemen yang lebih besar.

    Sebut hasilnya ; kita tahu a < b < d dan c < d .[a,b,c,d,e]a<b<dc<d

  3. Masukkan ke [ a , b , d ] .e[a,b,d]

  4. Masukkan ke hasil langkah 3.c

Langkah pertama jelas membutuhkan dua perbandingan, yang kedua hanya satu. Dua langkah terakhir masing-masing mengambil dua perbandingan; kita memasukkan ke dalam daftar tiga elemen dalam kedua kasus (untuk langkah 4., perhatikan bahwa kita tahu dari bahwa c lebih kecil dari elemen terakhir dari daftar yang ada di tangan) dan bandingkan dengan elemen tengah terlebih dahulu. Itu membuat total tujuh perbandingan.c<dc

Karena saya tidak melihat bagaimana cara menulis pseudocode "bagus" ini, lihat di sini untuk implementasi yang teruji (dan mudah-mudahan dapat dibaca).


  1. Ph.D. tesis (Universitas Stanford) oleh HB Demuth (1956)

    Lihat juga Penyortiran Data Elektronik oleh HB Demuth (1985)

  2. Penyortiran dan Pencarian oleh Donald E. Knuth; Seni Pemrograman Komputer Vol. 3 (2nd ed, 1998)
Raphael
sumber
5
Tes memberi lima poin untuk menunjukkan itu tidak mungkin. Bertanya-tanya berapa banyak poin yang akan Anda dapatkan untuk jawaban Anda :-) (Mungkin nol karena tes tidak dapat salah).
gnasher729
0

log(n!)n<>n!log(5!)6.91

5!=12027=128

Ini bukan kode yang cantik atau pendek, dan Anda mungkin harus menggunakan metode pembuatan kode untuk membuat pohon keputusan dan bertukar daripada mengkodekannya dengan tangan, tetapi ini berfungsi; dan terbukti bekerja untuk setiap permutasi yang memungkinkan dari 5 item, dengan demikian membuktikan Anda dapat mengurutkan 5 item dalam tidak lebih dari 7 perbandingan.

Ron Peacetree
sumber
Ω(nlogn)
Batas bawah teoritis untuk kasus terburuk adalah ceil (log2 (n!)), Karena ada persis n! permutasi, dan jika ada perbandingan k Anda membutuhkan 2 ^ k ≥ n !. Ini bukan hanya faktor konstan 1, ini tepat.
gnasher729
-1

saya sedang berpikir quicksort. Anda memilih sebagai pivot elemen yang kebetulan menjadi elemen tengah. bandingkan pivot dengan 4 item yang tersisa yang menghasilkan dua tumpukan untuk disortir. masing-masing tumpukan dapat disortir dalam 1 perbandingan. kecuali saya telah melakukan kesalahan yang mengerikan, 5 item sepenuhnya disortir hanya dalam 6 perbandingan dan saya pikir itu adalah perbandingan paling sedikit mutlak yang diperlukan untuk melakukan pekerjaan itu. pertanyaan awal adalah menemukan perbandingan jumlah paling sedikit untuk mengurutkan 5 elemen.

scottyc
sumber
1
Bagaimana tumpukan 3 elemen dapat disortir dalam 1 perbandingan?
xskxzr
tumpukan elemen 3 apa yang kamu bicarakan? apa yang saya jelaskan di atas menghasilkan 2 tumpukan 2 elemen setelah lulus pertama.
scottyc
Saya pikir Anda menggunakan elemen acak sebagai poros. Bagaimana Anda bisa memilih elemen tengah sebagai poros dalam 4 perbandingan?
xskxzr
Bukan itu yang saya katakan. dari atas "Sejak 5! = 120 .... menggunakan pohon keputusan biner, Anda dapat mengurutkan 5 item dalam 7 perbandingan." jumlah permutasi elemen adalah 120 tetapi harus ada cabang yang hanya memiliki 6 perbandingan karena sampel acak menjalankan quicksort hanya membutuhkan 6 untuk melakukan pekerjaan itu. salah satu dari 120 permutasi adalah untuk daftar yang diurutkan. cabang itu dapat memuat sedikitnya 4 perbandingan.
scottyc
-2

Jika Anda dapat menguji algoritme, ujilah pada semua kombinasi angka. Jika Anda memiliki banyak angka, uji banyak kombinasi acak. Tidak tepat, tetapi lebih cepat dari semua kombinasi.

Minimal
a <b <c = 2
a <b <c <d = 3
a <b <c <d <e = 4

Maksimal
3 ^ 3
4 ^ 4
5 ^ 5

Masukkan ke tengah gunakan 3-6 untuk 4 angka.
Penggabungan menggunakan 4-5 untuk 4 angka.
Minimal dibandingkan dengan wiki adalah 5 untuk 4 angka :) Untuk 5 adalah 7. Anda menggunakan 8, masih sangat banyak.
https://en.wikipedia.org/wiki/Comparison_sort#Number_of_comparisons_required_to_sort_a_list
Jika Anda tahu semua sebelum perbandingan, Anda bisa turun dengan perbandingan. Rata-rata saya untuk 4 angka adalah 3,96 / 1024 semua kombinasi.

Peter Mlich
sumber
2
Ini tidak menjawab pertanyaan. Pertanyaannya adalah bagaimana cara membuktikan bahwa tidak ada cara untuk menyortir hanya menggunakan 7 perbandingan. Untuk menggunakan pendekatan Anda, kami harus menghitung semua algoritma yang menggunakan paling banyak 7 perbandingan. Saya pikir ada terlalu banyak algoritma untuk disebutkan dalam jumlah waktu yang wajar. Bagaimanapun, saya tidak melihat apa yang ditambahkan di atas jawaban yang ada, yang sudah memberikan jawaban lengkap untuk pertanyaan itu. Kami lebih suka Anda fokus menjawab pertanyaan di mana Anda dapat menambahkan sesuatu yang baru.
DW
Tambahkan adalah grafik dan tip untuk alg. untuk memprediksi nilai cmp dari sebelum cmp. Dan min-nya adalah 7, sumber-sumber lain 8, min benar. adalah 4 !!! 4 hanya berfungsi untuk pesanan asc / desc. Ex1: 00000 01234 43210 10000 ... Ex2: Masukkan ke tengah: 43210, mulai 4, dapatkan 3, cp 4> 3, dapatkan 2, cp 4> 2, cp 3> 3, dapatkan 1, cp (pertengahan) 3> 1, cp 2> 1, dapatkan 0, cp (pertengahan) 3> 0, cp 2> 0, cp 1> 0 ... 8 cmp. 7 dapat dimungkinkan untuk pesanan koncrete atau alg. Anda dapat melihat pada halaman saya untuk 4 angka mlich.zam.slu.cz/js-sort/x-sort-x2.htm , Rata-rata 3,96. min-max 3-6. Dapat mengubah untuk 5 dan menguji alg-nya.
Peter Mlich