Suponha que queremos classificar uma lista de números reais. Suponha que recebamos uma caixa preta que pode classificar números reais instantaneamente. Quanta vantagem podemos obter usando esta caixa preta?n √
Por exemplo, podemos classificar os números com apenas chamadas para a caixa preta? O melhor algoritmo que eu encontrei usa chamadas para a caixa preta. Mas não consegui melhorá-lo ainda mais. Aqui está o meu algoritmo, que é semelhante ao merge-sort:n
Primeiro, particione a lista em lista com tamanho aproximadamente . Em seguida, use chamadas para a caixa preta para classificar essas listas. Por fim, mescle as listas classificadas usando a caixa preta da seguinte maneira:√ s1,s2,. . . ,s √ √ √
Coloque os menores elementos das listas em uma nova lista e chame a caixa preta para classificá-la. O número em (primeiro e menor elemento de ) será o menor número em . Podemos colocá-lo em primeiro lugar da lista de saída.
Assumindo que o elemento foi escolhido a partir de , substituímos com o segundo menor elemento da lista de classificação , e novamente executar a caixa preta sobre ele para calcular a segunda menor membro da .
Continuamos até que todos os elementos sejam classificados. O número total de chamadas de caixa preta para esta parte seráL [ 1 ] L S s j L [ 1 ] s j S n - √
. Portanto, no geral, o número total de chamadas será .
Por outro lado, parece que deveríamos obter um limite inferior usando o limite inferior nas comparações de números necessárias para classificar da seguinte maneira: Podemos implementar a caixa preta usando comparações. Se pudermos resolver o problema com chamadas para a caixa preta e mesclando em tempo linear, podemos classificar números reais com comparações que é impossível.o( √no(nlgn)
Acho que poderíamos provar que é um limite inferior para o número de chamadas para a caixa preta, pois muitas comparações usadas na caixa preta seriam compartilhadas e, portanto, são recontadas em nosso argumento.
ATUALIZAÇÃO: Como as outras postagens sugerem, um também é possível.