Uma eficiência mínima possível pode ser comprovada?

7

Dado um problema, é possível provar qual seria a melhor eficiência de pior algoritmo de um algoritmo para resolver esse problema?

Por exemplo, vamos dar o problema de classificar uma matriz.

Muitos dos algoritmos de classificação mais simples têm uma eficiência de pior caso de O(n2)como Classificação rápida e Classificação de bolha. No entanto, existem outros algoritmos, como Timsort e Smoothsort, que possuem , o que é mais eficiente.O(nregistron)

Nenhum outro algoritmo (que eu saiba) conseguiu classificar uma matriz com mais eficiência que . É possível provar que não existe outro algoritmo que seja mais eficiente?Θ(nregistron)

Se existe uma maneira de provar os algoritmos de classificação, se existe um algoritmo mais eficiente, isso também se aplica a outros problemas?

erdekhayser
fonte

Respostas:

10

Certamente, existem maneiras de mostrar que certos algoritmos devem levar um certo tempo ou determinadas estruturas de dados requerem uma certa quantidade de espaço. Uma maneira comum é usar a teoria da informação.

Uma matriz não classificada é uma permutação da matriz classificada. temn!possíveis permutações. O trabalho de classificar, no sentido teórico da informação, é descobrir exatamente qual permutação é essa.

Para transmitir um número entre 1 1 e m requer transmissão registro2mbits de informação. Para transmitir uma permutação den elementos, portanto, requer registro2n!bits de informação. Pela aproximação de Stirling, isso acaba sendonregistro2n+O(pequena ordem) bits.

Uma operação de comparação binária descobre um pouco de informação. Daqui resulta que qualquer algoritmo de classificação que use apenas uma operação de comparação binária deve executar pelo menosnregistro2n+o(nregistron)comparações. Se assumirmos que uma comparação leva uma quantidade constante de tempo, isso significa que a classificação deve levar pelo menosΩ(nregistron) Tempo.

Uma classificação radical poderia superar isso descobrindo mais de um bit de informações por consulta.

Um argumento semelhante mostra que a pesquisa binária é ideal. Você está tentando encontrar um número entre1 1 e n, o que significa descobrir registro2nbits de informação. Se sua operação de consulta retornar um pouco de informação, você precisará de pelo menosregistro2n consultas para encontrar um elemento.

É uma história semelhante com o uso do espaço. Suponha que você precise armazenar uma permutação na memória. Por um argumento idêntico, isso requer pelo menosnregistro2n+o(nregistron)pedaços de armazenamento. Desde que você precisaregistro2n bits para armazenar um número inteiro entre 1 1 e n, você basicamente não pode fazer nada melhor do que armazenar n inteiros.

Pseudônimo
fonte
7

A classificação, de fato, foi comprovada levar pelo menosO(nregistron)tempo se a classificação for baseada em comparações. Para números inteiros de tamanho fixo, existem métodos mais rápidos (classificação de raiz).

No entanto, a classificação é um dos raros problemas em que isso foi feito. Em geral, não conhecemos limites inferiores para a complexidade de tempo da maioria dos problemas. Por exemplo, se sabemos queO(2n) foi um limite inferior para NPproblemas completos, saberíamos que PNP. Mas nenhum resultado foi provado, entãoP vs NP permanece um mistério.

Para problemas em geral, não existe um algoritmo capaz de representar um problema e retornar um limite inferior à sua complexidade de tempo. Isso ocorre porque o conjunto de tais complexidades seria um conjunto de índices: isto é, representa uma propriedade das linguagens (problemas), não dos algoritmos. Há um resultado chamado Teorema de Rice, que diz que esses conjuntos são indecidíveis.

jmite
fonte
2

Em geral, isso é possível, mas é crucial que você especifique o modelo de computação ao fazê-lo. Um exemplo clássico bem conhecido é oΩ(nregistron)vinculado à classificação no modelo de árvore de decisão. Para contornar o limite inferior de classificação comprovado no modelo de árvore de decisão, você não deve realizar comparações.

Outro exemplo é o modelo da sonda celular . Além dos exemplos na Wikipedia, você pode ver, por exemplo, Fredman-Saks (STOC'89) . Este é um modelo forte; se você deseja ultrapassar um limite com um algoritmo, não deve acessar a memória.

Juho
fonte