Dada uma matriz classificada de números inteiros, quero encontrar o número de pares que somam . Por exemplo, dado, o número de pares soma a zero é .
Deixei seja o número de elementos na matriz de entrada. Se eu usar a pesquisa binária para encontrar o aditivo inverso para um elemento na matriz, a ordem será. Se eu percorrer todos os elementos do conjunto, a ordem será.
Como encontrar um algoritmo de ordem ?
algorithms
Laura
fonte
fonte
Respostas:
DeixeiA seja a matriz de entrada classificada. Mantenha dois ponteirosl e r que passam pelos elementos em A . O ponteirol passará pela "parte esquerda" de A , ou seja, números inteiros negativos. O ponteiror faz o mesmo para a "parte direita", os números inteiros positivos. Abaixo, descreverei uma solução de pseudocódigo e assumirei que0∉A para menor simplicidade. Omitidas também são as verificações dos casos em que existem apenas números inteiros positivos ou negativos emA .
É óbvio que o algoritmo levaO(N) Tempo.
fonte
A abordagem mais simples, pelo que entendi, parece usar uma tabela de hash, H = {a [0] = true, .., a [n-1] = true}. Esta tabela de hash pode ser construída em O (n) tempo. Depois que a Hash-Table for criada, itere através de A [0, .., n-1] e verifique se H [-1 * a [i]] existe. Caso isso aconteça, aumente um contador em 1 e retorne o resultado final. Isto é claramente O (n).
fonte
Observe que podemos procurar um valor em um Python definido em tempo constante.
fonte