5 öğeyi sıralamak için gereken en az karşılaştırma sayısı (sipariş)


22

Beş öğeyi sıralamak (sıralamak) için gerekli olan en az karşılaştırma sayısını bulun ve bu öğeleri bu karşılaştırmaları kullanarak sıralayan bir algoritma geliştirin.

Çözüm : 5 tane var! = 120 olası sonuçlar. Bu nedenle, sıralama prosedürü için bir ikili ağaç en az 7 seviyeye sahip olacaktır. Gerçekten, ≥ 120 sa ≥ 7anlamına gelir. Ancak 7 karşılaştırma yeterli değildir. Beş öğeyi sıralamak (sıralamak) için gereken en az karşılaştırma sayısı 8'dir.2hh

İşte benim gerçek soru: Ben 8 karşılaştırıldığında yapar bir algoritma buldunuz ama nasıl bunu ispatlayabiliriz edemez 7 karşılaştırmalar yapılabilir?


Yanıtlar:


27

Çözüm yanlış. Demuth [1; 2 ile, sn. 5.3.1], yalnızca yedi karşılaştırma kullanılarak beş değerin sıralanabileceğini, yani "bilgi teorisi" alt sınırının bu örnekte sıkı olduğunu göstermektedir.

Cevap, genel bir algoritma değil, uyarlanmış bir yöntemdir . Aynı zamanda pek hoş değil. Bu anahat:n=5

  1. İlk iki çifti sıralayın.

  2. Çiftleri kendilerine göre daha büyük olan elemanlara göre sıralayın.

    [a,b,c,d,e]a<b<dc<d

  3. e[a,b,d]

  4. c

c<dc eldeki listesinin son elemanından daha küçük olan) birinci ara elemanı ve karşılaştırın. Bu toplam yedi karşılaştırma yapar.

Bunun "güzel" sahte kodunu nasıl yazacağımı göremediğim için, test edilmiş (ve umarım okunabilir) bir uygulama için buraya bakın .


  1. Doktora tezi (Stanford Üniversitesi) tarafından HB Demuth (1956)

    Ayrıca bakınız HB Demuth Elektronik Veri Sıralama (1985)

  2. Donald E. Knuth'a Göre Sıralama ve Arama ; Bilgisayar Programlama Sanatı Vol. 3 (2. baskı, 1998)

5
Test, imkansız olduğunu göstermek için beş puan verir. Cevabınız için kaç puan alacağınızı merak edin :-) (Test yanlış olamayacağından muhtemelen sıfır).
gnasher729

0

günlük(n!)n<>n!günlük(5!)6.91

5!=12027=128

Güzel ya da kısa kod değildir ve muhtemelen karar ağacı oluşturmak için kod oluşturma yöntemlerini kullanmanız ve bunları elle kodlamak yerine takas etmelisiniz, ancak çalışır; ve 5 öğenin olası bir permütasyonu için kanıtlanmış bir şekilde çalışır, böylece 5 öğeyi en fazla 7 karşılaştırmada sıralayabileceğinizi kanıtlarsınız.


Ω(ngünlükn)

En kötü durum için teorik alt sınır tavandır (log2 (n!)), Çünkü tam olarak n var! permütasyonlar ve k karşılaştırması varsa 2 ^ k ≥ n! Bu sadece sabit bir faktör 1 değil, kesin.
gnasher729

-1

hızlı bağlantı noktası düşünüyordum. sadece ortadaki öğe olan ekseni seçtiniz. Pivotu kalan 4 maddeyle karşılaştırın ve iki istifin ayrılmasını sağlayın. Bu yığınların her biri 1 karşılaştırmalı olarak sıralanabilir. korkunç bir hata yapmadığım sürece, 5 madde sadece 6 kıyaslamada tamamen sıralandı ve işin yapılması için gerekli olan en az karşılaştırma olduğunu düşünüyorum. Asıl soru, 5 öğeyi sıralamak için en az karşılaştırmayı bulmaktı.


1
3 element yığını 1 kıyaslamada nasıl sıralanabilir?
xskxzr

Hangi 3 element yığınından bahsediyorsun? Yukarıda tarif ettiğim şey, ilk geçişten sonra 2 element 2 yığını üretir.
scottyc

Pivot olarak rastgele bir öğe kullandığınızı sanıyordum. Ortadaki öğeyi 4 karşılaştırmada pivot olarak nasıl seçersiniz?
xskxzr

Söylediğim şey bu değil. yukarıdan "5! = 120 .... bir ikili karar ağacı kullanarak 7 karşılaştırmada 5 öğeyi sıralayabilirsiniz." Elementlerin permütasyon sayısı 120'dir, ancak yalnızca 6 karşılaştırmalı bir branş olmalıdır, çünkü bir quicksort çalışan rastgele örnek işi yapmak için sadece 6 aldı. 120 permütasyondan biri sıralanmış liste içindir. bu dal, en az 4 karşılaştırma içerebilir.
scottyc

-2

Algoritmayı test edebiliyorsanız, tüm sayı kombinasyonlarında test edin. Çok sayıda numaranız varsa, çok fazla rastgele kombinasyon üzerinde test edin. Kesin değil, ancak tüm kombinasyonlardan daha hızlı.

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

Maksimum
3 ^ 3
4 ^ 4
5 ^ 5

4 sayı için ortadaki kullanım 3-6'yı kullanın.
Birleştirme 4 numara için 4-5 kullanın.
Wiki'ye göre en az karşılaştırma 4 sayı için 5'tir :) 5 için 7'dir.
https://en.wikipedia.org/wiki/Comparison_sort#Number_of_comparisons_required_to_sort_a_list
Karşılaştırmalardan önce hepsini biliyorsanız, karşılaştırmalar yapabilirsiniz. 4 sayı için ortalamam tüm kombinasyonlarda 3.96 / 1024.


2
Bu soruya cevap vermiyor. Soru, sadece 7 karşılaştırmayı kullanarak sıralama yapmanın mümkün olmadığını nasıl kanıtlayacağını soruyor. Yaklaşımınızı kullanmak için en fazla 7 karşılaştırmayı kullanan tüm algoritmaları numaralandırmamız gerekir. Makul bir sürede sayılabilecek çok fazla algoritma olduğunu düşünüyorum. Her durumda, bu sorunun cevabına tam bir cevap veren mevcut cevaba ne kattığını göremiyorum. Yeni bir şey ekleyebileceğiniz soruları yanıtlamaya odaklanmanızı tercih ederiz.
DW

Ekle alg için grafik ve ipucu. cmp'den önceki cmp değerini tahmin etmek için. Min'i 7, diğer kaynaklar 8, gerçek min. 4 !!! 4 yalnızca yükseliş / azalan düzen için işe yarar. Örn1: 00000 01234 43210 10000 ... Örn2: Ortaya: 43210 1, cp 2> 1, 0 olsun, cp (ortada) 3> 0, cp 2> 0, cp 1> 0 ... 8 cmp. 7, sıralı düzen veya alg için mümkün olabilir. 4 numara için sayfamda bakabilirsiniz mlich.zam.slu.cz/js-sort/x-sort-x2.htm , Ortalama 3.96. en fazla 3-6. 5 için değişebilir ve algını test edebilir.
Peter Mlich
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.