Queremos un algoritmo que, dada una matriz de longitud de enteros, encuentre la diferencia mínima entre dos enteros en la matriz.
Uno de estos algoritmos es ordenar la matriz y verificar pares de números adyacentes. Esto lleva tiempo.
¿Hay una forma más rápida, por ejemplo, un ¿algoritmo?
algorithms
arrays
comido
fuente
fuente
Respuestas:
Esto depende de su modelo de cálculo. Si solo permite la aritmética y las comparaciones (el modelo de árbol de decisión algebraico), entonces hay unΩ(nlogn) límite inferior para la distinción de elementos , el problema de decidir si todos los elementos son distintos. Su problema es, por supuesto, aún más difícil, por lo que se aplica el mismo límite inferior.
(Hay algunas letras pequeñas: el límite inferior solo se mantiene si el grado de los polinomios que se comparan está limitado. Si todo lo que está haciendo es comparar varias diferenciasxi−xj , entonces estás listo para irte. El modelo de árbol de decisión algebraico también le permite comparar polinomios más generales en las entradas, siempre que tengan un grado acotado).
Hay otros modelos que podrían funcionar mejor, por ejemplo, en algunos modelos puede ordenar enteros eno(nlogn) . Pero me imagino que no quieres permitir el tipo de truco utilizado en tales algoritmos.
fuente
Si los enteros en la matriz tienen un número limitado de dígitos, puede ordenar una matriz con el algoritmo de clasificación de radix , eso es O (kN) y luego verificar los pares de números adyacentes (O (N))? La complejidad resultante será O ((k + 1) N), lineal.
fuente