Queremos um algoritmo que, considerando uma matriz de comprimento de números inteiros, encontre a diferença mínima entre dois números inteiros na matriz.
Um desses algoritmos é classificar a matriz e verificar pares de números adjacentes. Isso leva tempo .
Existe uma maneira mais rápida, por exemplo, um algoritmo ?
algorithms
arrays
boaten
fonte
fonte
Respostas:
Isso depende do seu modelo de computação. Se você permitir apenas aritmética e comparações (o modelo de árvore de decisão algébrica), haverá um limite inferior para a distinção de elementos , o problema de decidir se todos os elementos são distintos. Seu problema é obviamente ainda mais difícil, portanto o mesmo limite inferior se aplica.Ω(nlogn)
(Há algumas letras miúdas: o limite inferior só é válido se o grau dos polinômios comparados estiver limitado. Se tudo o que você está fazendo é comparar várias diferenças , então está . O modelo de árvore de decisão algébrica também permite comparar polinômios mais gerais nas entradas, desde que tenham graus limitados.)xi−xj
Existem outros modelos que podem ter um desempenho melhor - por exemplo, em alguns modelos, você pode classificar números inteiros em . Mas imagino que você não queira permitir o tipo de truque usado em tais algoritmos.o(nlogn)
fonte
Se os números inteiros na matriz tiverem um número limitado de dígitos, você poderá classificar uma matriz com o algoritmo de classificação radix , que é O (kN) e verificar os pares adjacentes de números (O (N))? A complexidade resultante será O ((k + 1) N), linear.
fonte