Estoy usando un diccionario ordenado para mantener una lista de elementos, de los cuales regularmente debo monitorear el estado de los principales x elementos. Cada vez que actualizo un artículo, me gustaría encontrar una forma rápida de determinar a qué índice está usando el ítem al que me refiero. Entiendo que puedo enumerar la lista completa y contar mi posición, pero estoy buscando algo con O (log n) time o mejor, después de que todo el diccionario ordenado esté en un árbol RedBlack. Cada nodo debe ser capaz de realizar un seguimiento de sus hijos, y esto debería ser un cálculo rápido.La forma más eficiente de encontrar el índice de un artículo en SortedDictionary
Respuesta
Usted puede simplemente cambiar su SortedDictionary<TKey, TValue>
en un SortedList<TKey, TValue>
y luego usar IndexOfKey(key)
:
var s = new SortedList<string, string>
{ { "a", "Ay" }, { "b", "Bee" }, { "c", "Cee" } };
// Outputs 1
Console.WriteLine(s.IndexOfKey("b"));
utiliza internamente Array.BinarySearch<TKey>()
, por lo que será O (log n), que es más rápido que O (n) (que sería si usted buscara de adelante hacia atrás iterando a través de él).
¿Qué sucede si necesita una O (1) inserción y Eliminar además de la búsqueda O (log (n)? –
@eranotzer: Entonces tendrá que usar un 'Diccionario
Se podría construir una estructura de árbol para acceder a los elementos por índice o informar el índice de un elemento existente en tiempo de lgN, lo que requiere un tiempo extra muy ligero para las inserciones y eliminaciones. Una forma de hacerlo sería realizar un seguimiento de cuántos elementos se encuentran en las ramas izquierda y derecha de cada nodo (en una inserción o eliminación, cambie el recuento de nodos de los nodos principales al cambiar el recuento de los hijos). Sin embargo, si una estructura basada en árboles no ofrece tal facilidad, no conozco ninguna manera fácil de actualizarla.
Este es el ángulo que estaba buscando, pero estoy buscando una estructura que ya lo tenga o una forma fácil de actualizar. – Superman
- 1. ¿Mejor forma de encontrar el índice del artículo en ArrayList?
- 2. ¿Cuál es la forma más elegante de encontrar el índice de elementos duplicados en C# List
- 3. ¿La forma más rápida de encontrar un artículo en la lista?
- 4. ¿Cuál es la forma más eficiente de encontrar una de varias subcadenas en Python?
- 5. ¿Cuál es la forma más eficiente de encontrar el índice del bit unset izquierdo/derecho en Java?
- 6. Obteniendo el índice de un artículo particular en el arreglo
- 7. ¿Cuál es la forma más eficiente de ordenar un NSSet?
- 8. La forma más eficiente de leer el archivo
- 9. ¿Forma más eficiente de contar intersecciones?
- 10. ¿Cuál es la forma más eficiente de encontrar qué usuarios prefieren un tweet específico?
- 11. La forma más eficiente de calcular la distancia de Levenshtein
- 12. ¿Cómo encontrar un índice en el que se puede insertar un nuevo artículo en la lista ordenada y mantenerlo ordenado?
- 13. Dada una matriz de booleanos, ¿cuál es la forma más eficiente de seleccionar el índice de un valor TRUE aleatorio?
- 14. ¿Cuál es la forma más eficiente de iterar a través de una lista en python?
- 15. R: encontrar el índice más cercana
- 16. ¿Cómo encontrar el índice de sublista en la lista?
- 17. ¿La forma más eficiente de buscar en SQL?
- 18. forma más eficiente de encontrar el flotador mínimo de una lista de pitón
- 19. La forma más eficiente de almacenar direcciones IP en MySQL
- 20. ¿La forma más eficiente de agregar matrices en C#?
- 21. La forma más rápida de obtener un carácter dentro de una cadena dado el índice (PHP)
- 22. Forma más eficiente de almacenar un valor GUID en la base de datos SQL Server
- 23. ¿La forma más eficiente de Python para elegir la cadena más larga en la lista?
- 24. manera más eficiente de encontrar cadenas parciales en un archivo grande de cadenas (python)
- 25. la forma más eficiente de la cadena separada
- 26. ¿Cuál es la forma más eficiente de mover/cambiar el nombre de un nodo en NetworkX?
- 27. La forma más eficiente de leer datos de una secuencia
- 28. ¿Algoritmo más eficiente para encontrar la primera concordancia de prefijo de una matriz de cadenas ordenadas?
- 29. ¿Forma más eficiente de ejecutar la consulta de fecha/aaaa?
- 30. C# forma más eficiente de la comparación de dos colecciones
¿Ha considerado cambiar a 'SortedList'? Puede hacer 'O (1)' recuperación por índice. Sin embargo, tiene un rendimiento horrible en insertos y elimina. –
Ani
Dado que esta es una estructura en árbol, no existe el concepto de índice. Solo nodos con un enlace secundario izquierdo y derecho. –
No entiendo esta pregunta: los elementos en los árboles no tienen un índice. – Lee