El número único mínimo en una matriz se define como min{v|v occurs only once in the array}
Por ejemplo, el número mínimo único de {1, 4, 1, 2, 3} es 2. ¿Hay alguna mucho mejor que ordenar?Encontrar el número único mínimo en una matriz
Respuesta
Creo que esta es una solución de O (N) en el tiempo y el espacio:
HashSet seenOnce; // sufficiently large that access is O(1)
HashSet seenMultiple; // sufficiently large that access is O(1)
for each in input // O(N)
if item in seenMultiple
next
if item in seenOnce
remove item from seenOnce
add to item seenMultiple
else
add to item seeOnce
smallest = SENTINEL
for each in seenOnce // worst case, O(N)
if item < smallest
smallest = item
Si usted tiene una gama limitada de valores enteros, puede reemplazar los HashSets con BitArrays indexado por el valor.
Esto es genial, señor, pero ¿dónde puedo encontrar esta mágica función de hash de acceso aleatorio O (1) de la que usted habla? Por lo que yo (y el resto del mundo) sé que el "mejor" tiempo de acceso aleatorio para la función hash es O (logn). – ElKamina
A menos que me falta algo, no se necesita acceso aleatorio. El primer pase pasa por encima de 'input' (O (N)) y realiza búsquedas, inserciones y eliminaciones en los conjuntos de hash, cada O (1). Total: O (N). El segundo pase, como está escrito actualmente, gira sobre 'seenOnce', pero eso se soluciona fácilmente: simplemente vuelva a repetir' input' (O (N)), pruebe la membresía en 'seenOnce' (O (1)), y si está allí, añádalo a un nuevo 'seenOnceList' (O (1)), total O (N). Finalmente haga un escaneo para el mínimo, O (N). Net O (N), ¿no? – DSM
@ElKamina - Estás confundiendo un árbol con un hash. Consulte http://en.wikipedia.org/wiki/Big_O_notation#Orders_of_common_functions y mire la lista debajo de O (1). Con una gran mesa y una función hash apropiada, las colisiones son insignificantes. – walrii
No es necesario hacer una clasificación completa. Realice un bucle interno de clasificación de burbujas hasta que obtenga un valor mínimo distinto en un extremo. En el mejor de los casos, esto tendrá una complejidad de tiempo O (k * n) donde k = número de valores mínimos no diferenciados. Sin embargo, la peor de las complicaciones es O (n * n). Por lo tanto, esto puede ser eficiente cuando el valor esperado de k < < n.
Creo que esta sería la complejidad de tiempo mínima posible a menos que pueda adaptar cualquier algoritmo de clasificación O (n * logn) a la tarea anterior.
- 1. ¿Cómo encontrar el valor mínimo en una matriz numpy?
- 2. ¿Encontrar el mínimo de una matriz usando la recursión?
- 3. ¿Cómo ordenar una matriz con el mínimo número de escrituras?
- 4. encontrar la mediana con el mínimo tiempo de una matriz
- 5. Número mínimo de operaciones para hacer una matriz ordenada
- 6. encontrar el valor mínimo en int matriz con C#
- 7. Ordenar una matriz con un número mínimo de comparaciones
- 8. C: encontrar el número de elementos en una matriz []
- 9. Encontrar el número más cercano en una matriz
- 10. ¿Cómo encontrar el número más alto en una matriz?
- 11. ¿Cómo encontrar el número de inversiones en una matriz?
- 12. Encontrar el único desconocido en una ecuación
- 13. Encontrar el mínimo y máximo en python
- 14. Ruby: ¿Cómo encontrar el índice del elemento de matriz mínimo?
- 15. graph - ¿Cómo encontrar el ciclo dirigido mínimo (peso mínimo total)?
- 16. ¿Cómo puedo encontrar el máximo o el mínimo de una matriz multidimensional en MATLAB?
- 17. Encuentre el valor mínimo distinto de cero en una matriz
- 18. Encontrar elemento mínimo en matriz, y su índice de
- 19. Encontrar el valor mínimo en un mapa
- 20. ¿Cómo encontrar el máximo/mínimo de una matriz anidada en javascript?
- 21. Encontrar el número en una matriz que está más cerca de un número dado
- 22. ¿Cómo encontrar el número mínimo de transferencias para una red de metro o ferrocarril?
- 23. Cómo utilizar linq para encontrar el mínimo
- 24. El número más frecuente en una matriz
- 25. C++ Encontrar el mayor número en serie
- 26. mínimo de la SED número
- 27. hallazgo clave del valor mínimo en una matriz asociativa
- 28. Encontrar mínimo de vector en Rcpp
- 29. ¿Cómo diferenciar entre un doble pico y una matriz de pico único en MATLAB?
- 30. Encontrar el número de secuencias posibles en una matriz, con condiciones adicionales
"Mejor", que significa "menor complejidad de tiempo"? –
@VaughnCato: sí, me pregunto si podemos hacer mejor que O (nlogn). – shilk
¿El rango de sus valores es limitado o está restringido? Si son integrales con un rango restringido, creo que O (N) es posible. – walrii