Minimalna liczba porównań potrzebnych do posortowania (uporządkowania) 5 elementów


22

Znajdź najmniejszą liczbę porównań potrzebną do posortowania (uporządkowania) pięciu elementów i opracuj algorytm, który sortuje te elementy przy użyciu tej liczby porównań.

Rozwiązanie : Jest ich 5! = 120 możliwych wyników. Dlatego drzewo binarne do procedury sortowania będzie miało co najmniej 7 poziomów. Rzeczywiście, ≥ 120 oznacza≥ 7. Ale 7 porównań to za mało. Najmniejsza liczba porównań potrzebnych do posortowania (uporządkowania) pięciu elementów wynosi 8. h2hh

Oto moje aktualne pytanie: znalazłem algorytm, który robi to w porównaniu 8, ale jak mogę udowodnić, że nie da się tego zrobić w 7 porównaniach?


Odpowiedzi:


27

Rozwiązanie jest złe. Demuth [1; przez 2, ust. 5.3.1] pokazuje, że pięć wartości można posortować przy użyciu tylko siedmiu porównań, tj. Że dolna granica „teorii informacji” jest w tym przypadku ścisła.

Odpowiedź jest metodą dostosowaną do , a nie ogólnym algorytmem. To też nie jest zbyt miłe. Oto zarys:n=5

  1. Posortuj dwie pierwsze pary.

  2. Zamów pary we właściwym większym elemencie.

    Nazwij wynik ; znamy ia < b < d[za,b,do,re,mi]za<b<re .do<re

  3. Wstaw do [ a , b , d ] .mi[za,b,re]

  4. Wstaw do wyniku kroku 3.do

Pierwszy krok wyraźnie obejmuje dwa porównania, drugi tylko jeden. Ostatnie dwa kroki wymagają dwóch porównań; w obu przypadkach wstawiamy do trzyelementowej listy (w kroku 4. zauważmy, że z wiemy, że c jest mniejszy niż ostatni element z dostępnej listy) i najpierw porównujemy z środkowym elementem. To daje w sumie siedem porównań.do<redo

Ponieważ nie widzę, jak napisać „ładny” pseudokod tego, zobacz tutaj dla przetestowanej (i miejmy nadzieję, że czytelnej) implementacji.


  1. Doktorat praca dyplomowa (Uniwersytet Stanforda) HB Demuth (1956)

    Zobacz także elektroniczne sortowanie danych według HB Demuth (1985)

  2. Sortowanie i wyszukiwanie według Donalda E. Knutha; The Art of Computer Programming Vol. 3 (wydanie 2, 1998)

5
Test daje pięć punktów za wykazanie, że jest to niemożliwe. Zastanów się, ile punktów uzyskasz za odpowiedź :-) (Prawdopodobnie zero, ponieważ test nie może być zły).
gnasher729

0

Teoretyczna dolna granica sortowania opartego na porównaniu to log(n!) . Oznacza to, że aby posortować n elementów za pomocą porównań < lub > , potrzeba co najmniej 2 logarytmu podstawowego n!, stąd log(5!)6,91 operacji.

Od 5!=120 i 2)7=128 , za pomocą binarnego drzewa decyzyjnego można posortować 5 pozycji w 7 porównaniach. Drzewo dokładnie określa, które ze 120 permutacji masz, a następnie dokonuje zamiany potrzebnej do jego posortowania.

To nie jest ładny ani krótki kod i prawdopodobnie powinieneś użyć metod generowania kodu do stworzenia drzewa decyzyjnego i zamiany zamiast kodowania go ręcznie, ale działa; i sprawdzalnie działa na każdą możliwą permutację 5 przedmiotów, co dowodzi, że możesz posortować 5 przedmiotów w nie więcej niż 7 porównaniach.


O ile pamiętam, teoretyczna dolna granica daje asymptotyczną dolną granicę (tj. ). Czy jesteś absolutnie pewien, że stałym czynnikiem jest 1? Ω(nlogn)
dkaeae

Teoretyczną dolną granicą dla najgorszego przypadku jest sufit (log2 (n!)), Ponieważ jest dokładnie n! permutacje, a jeśli istnieje k porównań, potrzebujesz 2 ^ k ≥ n !. To nie tylko stały współczynnik 1, to jest dokładne.
gnasher729

-1

Myślałem Quicksort. wybierasz jako element obrotowy element, który akurat jest środkowym elementem. porównaj oś obrotu z pozostałymi 4 elementami, co posortuje dwa stosy. każdy z tych stosów można posortować w 1 porównaniu. chyba że popełniłem straszny błąd, 5 pozycji zostało w pełni posortowanych w zaledwie 6 porównaniach i myślę, że jest to absolutnie najmniejsza liczba porównań potrzebnych do wykonania pracy. w pierwotnym pytaniu znaleziono najmniejszą liczbę porównań do sortowania 5 elementów.


1
Jak można ułożyć stos 3 elementów w 1 porównaniu?
xskxzr

o jakim stosie 3 elementów mówisz? to, co opisałem powyżej, daje 2 stosy 2 elementów po pierwszym przejściu.
scottyc

Myślałem, że używasz losowego elementu jako elementu przestawnego. Jak wybrać środkowy element jako oś obrotu w 4 porównaniach?
xskxzr

nie to mówię. z góry „Od 5! = 120 .... używając binarnego drzewa decyzyjnego możesz sortować 5 pozycji w 7 porównaniach”. liczba permutacji elementów wynosi 120, ale musi istnieć gałąź, która ma tylko 6 porównań, ponieważ wykonanie losowej próby Quicksort zajęło tylko 6. jedna z 120 permutacji dotyczy posortowanej listy. gałąź ta może zawierać zaledwie 4 porównania.
scottyc

-2

Jeśli możesz przetestować algorytm, przetestuj go na wszystkich kombinacjach liczb. Jeśli masz dużo liczb, sprawdź wiele losowych kombinacji. Nie precyzyjne, ale szybsze niż wszystkie kombinacje.

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

Maksymalnie
3 ^ 3
4 ^ 4
5 ^ 5

Wstaw do środka, użyj 3-6 dla 4 cyfr.
Scalanie użyj 4-5 dla 4 liczb.
Minimalne porównanie przez wiki to 5 dla 4 liczb :) Dla 5 to 7. Używasz 8, wciąż tyle.
https://en.wikipedia.org/wiki/Comparison_sort#Number_of_comparisons_required_to_sort_a_list
Jeśli znasz wszystko przed porównaniami, możesz przejść do porównań. Moja średnia dla 4 liczb wynosi 3,96 / 1024 dla wszystkich kombinacji.


2
To nie odpowiada na pytanie. Pytanie dotyczy tego, jak udowodnić, że nie ma możliwości sortowania przy użyciu tylko 7 porównań. Aby zastosować twoje podejście, musielibyśmy wymienić wszystkie algorytmy, które wykorzystują maksymalnie 7 porównań. Myślę, że algorytmów jest zbyt wiele, by je wyliczyć w rozsądnym czasie. W każdym razie nie widzę, co to dodaje do istniejącej odpowiedzi, która już dała pełną odpowiedź na pytanie. Wolimy skupić się na odpowiadaniu na pytania, w których możesz dodać coś nowego.
DW

Dodaj jest grafiką i wskazówką dla alg. do przewidywania wartości cmp sprzed cmp. A jego min to 7, inne źródła 8, prawdziwa min. jest 4 !!! 4 działa tylko dla porządku rosnącego / malejącego. Ex1: 00000 01234 43210 10000 ... Ex2: Wstaw do środka: 43210, rozpocznij 4, zdobądź 3, cp 4> 3, zdobądź 2, cp 4> 2, cp 3> 3, zdobądź 1, cp (środek) 3> 1, cp 2> 1, zdobądź 0, cp (mid) 3> 0, cp 2> 0, cp 1> 0 ... 8 cmp. 7 może być możliwe dla konkretnego zamówienia lub alg. Możesz poszukać na mojej stronie 4 liczb mlich.zam.slu.cz/js-sort/x-sort-x2.htm , średnio 3,96. min-max 3-6. Może zmienić się na 5 i przetestować swój alg.
Peter Mlich,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.