Encontre o menor número de comparações necessário para classificar (ordenar) cinco elementos e invente um algoritmo que classifique esses elementos usando esse número de comparações.
Solução : Existem 5! = 120 resultados possíveis. Portanto, uma árvore binária para o procedimento de classificação terá pelo menos 7 níveis. De fato, ≥ 120 implica h ≥ 7. Mas 7 comparações não são suficientes. O menor número de comparações necessárias para classificar (ordenar) cinco elementos é 8.
Aqui está minha pergunta real: Encontrei um algoritmo que faz isso em 8 comparações, mas como posso provar que isso não pode ser feito em 7 comparações?
algorithms
sorting
lower-bounds
Por favor ajude
fonte
fonte
Respostas:
A solução está errada. Demuth [1; via 2, seg. 5.3.1] mostra que cinco valores podem ser classificados usando apenas sete comparações, ou seja, que o limite inferior "teórico da informação" é rígido nesse caso.
A resposta é um método adaptado para , não um algoritmo geral. Também não é muito agradável. Este é o esboço:n=5
Classifique os dois primeiros pares.
Ordene os pares por seu respectivo elemento maior.
Chame o resultado ; sabemos a < b < d e c < d .[a,b,c,d,e] a<b<d c<d
Insira em [ a , b , d ] .e [a,b,d]
Insira no resultado da etapa 3.c
O primeiro passo leva claramente duas comparações, o segundo único. Os dois últimos passos fazem duas comparações cada; inserimos em uma lista de três elementos em ambos os casos (para a etapa 4., observe que sabemos de que c é menor que o último elemento da lista em questão) e comparamos primeiro com o elemento do meio. Isso totaliza sete comparações.c<d c
Como não vejo como escrever pseudocódigo "bom" disso, veja aqui uma implementação testada (e espero que seja legível).
Ph.D. tese (Universidade de Stanford) de HB Demuth (1956)
Veja também Classificação Eletrônica de Dados por HB Demuth (1985)
fonte
O limite inferior teórico da classificação baseada em comparação élog(n!) . Ou seja, para classificar n itens usando apenas comparações < ou > é necessário pelo menos o logaritmo base 2 de n! , portanto, log(5!)≈6.91 operações.
Desde5!=120 e 27=128 , usando uma árvore de decisão binária, você pode classificar 5 itens em 7 comparações. A árvore descobre exatamente qual das 120 permutações que você possui e realiza as trocas necessárias para classificá-la.
Não é um código bonito ou curto, e você provavelmente deve usar métodos de geração de código para criar a árvore de decisão e trocar em vez de codificá-lo manualmente, mas funciona; e provavelmente funciona para qualquer permutação possível de 5 itens, provando assim que você pode classificar 5 itens em não mais que 7 comparações.
fonte
eu estava pensando em quicksort. você seleciona como pivô o elemento que por acaso é o elemento do meio. compare o pivô com os 4 itens restantes, resultando em duas pilhas a serem classificadas. cada uma dessas pilhas pode ser classificada em 1 comparação. a menos que eu tenha cometido um erro terrível, os 5 itens foram totalmente classificados em apenas 6 comparações e acho que esse é o menor número absoluto de comparações necessárias para realizar o trabalho. a pergunta original era encontrar o menor número de comparações para classificar 5 elementos.
fonte
Se você pode testar o algoritmo, teste-o em todas as combinações de números. Se você tiver muitos números, teste em muitas combinações aleatórias. Não preciso, mas mais rápido que todas as combinações.
Mínimo
a <b <c = 2
a <b <c <d = 3
a <b <c <d <e = 4
Máximo
3 ^ 3
4 ^ 4
5 ^ 5
Insira no meio do uso 3-6 para 4 números.
Mesclando use 4-5 para 4 números.
A comparação mínima pelo wiki é de 5 para 4 números :) Para 5 é 7. Você usa 8, ainda muito.
https://en.wikipedia.org/wiki/Comparison_sort#Number_of_comparisons_required_to_sort_a_list
Se você souber tudo antes das comparações, poderá compará-las. Minha média para 4 números é 3,96 / 1024 todas as combinações.
fonte