Considere o seguinte problema:
Entrada : lista de números inteiros
Objetivo : determine se existe um número inteiro nas duas listas.
Suponha que ambas as listas sejam do tamanho n . Existe um algoritmo determinístico de tempo linear para esse problema? Em outras palavras, você pode resolver esse problema em O ( n ) tempo deterministicamente, sem usar aleatoriedade?
Infelizmente, você não pode assumir que os elementos da lista são todos pequenos.
Eu posso ver como resolvê-lo no tempo esperado de usando um algoritmo aleatório: escolha aleatoriamente uma função hash 2 universal h , armazene os elementos de X em uma hashtable (usando h como função hash) e, em seguida, procure cada elemento de Y para ver se está na hashtable. O tempo de execução esperado será O ( n ) . No entanto, não consigo ver como encontrar um algoritmo determinístico com O ( n ) tempo de execução. Se você tentar des randomizar isso e corrigir uma única função hash específica, haverá uma entrada no pior caso que fará com que este procedimento seja executado em tempo. O melhor algoritmo determinístico que posso encontrar envolve a classificação dos valores, mas isso não será em tempo linear. Podemos obter tempo de execução linear?
Além disso, eu posso ver como resolvê-lo em tempo linear se você assumir que todos os elementos da lista são números inteiros no intervalo (basicamente, faça a contagem de classificação) - mas estou interessado no que acontece no geral caso em que não podemos assumir isso.
Se a resposta depende do modelo de computação, o modelo de RAM é lembrado, mas eu estaria interessado nos resultados de qualquer modelo razoável de computação. Estou ciente de limites inferiores para algoritmos de árvore de decisão para exclusividade do elemento , mas isso não é definitivo, pois às vezes podemos encontrar algoritmos de tempo linear mesmo quando existe um Ω ( n log n ) vinculado em o modelo da árvore de decisão.