Numero minimo di confronti necessari per ordinare (ordinare) 5 elementi


22

Trova il numero minimo di confronti necessari per ordinare (ordinare) cinque elementi e escogitare un algoritmo che ordina questi elementi usando questo numero di confronti.

Soluzione : ce ne sono 5! = 120 possibili esiti. Pertanto, un albero binario per la procedura di ordinamento avrà almeno 7 livelli. In effetti, ≥ 120 implica h ≥ 7. Ma 7 confronti non sono sufficienti. Il numero minimo di confronti necessari per ordinare (ordinare) cinque elementi è 8.2hh

Ecco la mia vera domanda: ho trovato un algoritmo che lo fa in 8 confronti ma come posso dimostrare che non può essere fatto in 7 confronti?


Risposte:


27

La soluzione è sbagliata Demuth [1; via 2, sec. 5.3.1] mostra che cinque valori possono essere ordinati usando solo sette confronti, vale a dire che il limite inferiore di "teoria dell'informazione" è stretto in questo caso.

La risposta è un metodo su misura per , non un algoritmo generale. Inoltre non è molto carino. Questo è lo schema:n=5

  1. Ordina le prime due coppie.

  2. Ordina le coppie con il rispettivo elemento più grande.

    Chiama il risultato ; conosciamo a < b < d e c < d .[a,b,c,d,e]un'<B<dc<d

  3. Inserisci in [ a , b , d ] .e[a,b,d]

  4. Inserisci nel risultato del passaggio 3.c

Il primo passo prende chiaramente due confronti, il secondo solo. Gli ultimi due passaggi prendono due confronti ciascuno; inseriamo in un elenco di tre elementi in entrambi i casi (per il passaggio 4., nota che sappiamo da che c è più piccolo dell'ultimo elemento dell'elenco a portata di mano) e confrontiamo prima con l'elemento centrale. Ciò fa un totale di sette confronti.c<dc

Dal momento che non vedo come scrivere "bello" pseudocodice di questo, vedere qui per un'implementazione testata (e si spera leggibile).


  1. Ph.D. tesi (Stanford University) di HB Demuth (1956)

    Vedi anche Ordinamento elettronico dei dati di HB Demuth (1985)

  2. Ordinamento e ricerca di Donald E. Knuth; L'arte della programmazione per computer Vol. 3 (2a edizione, 1998)

5
Il test dà cinque punti per dimostrarlo impossibile. Mi chiedo quanti punti otterresti per la tua risposta :-) (Probabilmente zero poiché il test non può essere sbagliato).
gnasher729,

0

Il limite inferiore teorico dell'ordinamento basato sul confronto è log(n!) . Vale a dire che per ordinare n elementi usando solo < o > confronti ci vuole almeno il logaritmo in base 2 di n!, quindi log(5!)6.91 operazioni.

Dal 5!=120 e 27=128 , utilizzando un albero decisionale binario è possibile ordinare 5 elementi in 7 confronti. L'albero capisce esattamente quale delle 120 permutazioni hai, quindi esegue gli swap necessari per ordinarla.

Non è un codice carino o abbreviato, e probabilmente dovresti usare i metodi di generazione del codice per creare l'albero decisionale e gli scambi piuttosto che codificarlo manualmente, ma funziona; e funziona in modo dimostrabile per ogni possibile permutazione di 5 articoli, dimostrando così che è possibile ordinare 5 articoli in non più di 7 confronti.


Per quanto posso ricordare, il limite inferiore teorico dà un limite inferiore asintotico (cioè ). Sei assolutamente sicuro che il fattore costante sia 1? Ω(nlogn)
dkaeae

Il limite inferiore teorico per il caso peggiore è ceil (log2 (n!)), Perché ci sono esattamente n! permutazioni, e se ci sono k confronti hai bisogno di 2 ^ k ≥ n !. Non è solo un fattore costante 1, è esatto.
gnasher729,

-1

stavo pensando a quicksort. si seleziona come perno l'elemento che sembra essere l'elemento centrale. confrontare il perno con i restanti 4 elementi risultanti in due pile da ordinare. ognuna di quelle pile può essere ordinata in 1 confronto. a meno che non abbia commesso un terribile errore, i 5 articoli sono stati completamente ordinati in soli 6 confronti e penso che sia il numero minimo assoluto di confronti necessari per fare il lavoro. la domanda originale era trovare il minor numero di confronti per ordinare 5 elementi.


1
Come si può ordinare una pila di 3 elementi in 1 confronto?
xskxzr

di quale pila di 3 elementi stai parlando? quello che ho descritto sopra produce 2 pile di 2 elementi dopo il primo passaggio.
scottyc

Ho pensato che tu usi un elemento casuale come perno. Come puoi selezionare l'elemento centrale come perno in 4 confronti?
xskxzr,

non è quello che sto dicendo. dall'alto "Da 5! = 120 .... usando un albero decisionale binario puoi ordinare 5 elementi in 7 confronti." il numero di permutazioni degli elementi è 120 ma deve esserci un ramo che ha solo 6 confronti perché un campionamento casuale di quicksort ha richiesto solo 6 per fare il lavoro. una delle 120 permutazioni è per l'elenco ordinato. quel ramo potrebbe contenere fino a 4 confronti.
scottyc,

-2

Se riesci a testare l'algoritmo, testalo su tutte le combinazioni di numeri. Se hai molti numeri, prova molte combinazioni casuali. Non preciso, ma più veloce di tutte le combinazioni.

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

Massimo
3 ^ 3
4 ^ 4
5 ^ 5

Inserire a metà uso 3-6 per 4 numeri.
La fusione usa 4-5 per 4 numeri.
Il confronto minimo per wiki è 5 per 4 numeri :) Per 5 è 7. Usi 8, ancora così tanto.
https://en.wikipedia.org/wiki/Comparison_sort#Number_of_comparisons_required_to_sort_a_list
Se conosci tutti i confronti precedenti, puoi scendere con i confronti. La mia media per 4 numeri è 3.96 / 1024 tutte le combinazioni.


2
Questo non risponde alla domanda. La domanda chiede come provare che non c'è modo di ordinare usando solo 7 confronti. Per utilizzare il tuo approccio, dovremmo enumerare tutti gli algoritmi che utilizzano al massimo 7 confronti. Penso che ci siano troppi algoritmi per enumerarli in un ragionevole lasso di tempo. In ogni caso, non vedo cosa si aggiunge alla risposta esistente, che ha già dato una risposta completa alla domanda. Preferiamo che ti concentri sul rispondere alle domande in cui puoi aggiungere qualcosa di nuovo.
DW

Aggiungi è grafica e punta per alg. per prevedere il valore cmp prima di cmp. E il suo min è 7, altre fonti 8, vero min. è 4 !!! 4 funziona solo per l'ordine asc / desc. Ex1: 00000 01234 43210 10000 ... Ex2: Inserisci al centro: 43210, inizia 4, ottieni 3, cp 4> 3, ottieni 2, cp 4> 2, cp 3> 3, ottieni 1, cp (metà) 3> 1, cp 2> 1, ottieni 0, cp (metà) 3> 0, cp 2> 0, cp 1> 0 ... 8 cmp. 7 può essere possibile per ordine conncrete o alg. Puoi cercare sulla mia pagina 4 numeri mlich.zam.slu.cz/js-sort/x-sort-x2.htm , in media 3,96. min-max 3-6. Può cambiare per 5 e testare la sua alg.
Peter Mlich,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.