Estructura de datos útil para el siguiente caso

Cuáles pueden ser las mejores estructuras de datos para el siguiente caso.

1. Debe tener operaciones como buscar, insertar y eliminar. La mayoría de las actividades de búsqueda estarán allí. Alrededor del 90% de las operaciones serán de búsqueda y el resto se eliminarán e insertarán.

2 La inserción, el borrado y la búsqueda se basarán en la clave de los objetos. Cada tecla apuntará a un objeto. Las claves se ordenarán.

Cualquier sugerencia para una estructura de datos óptima será muy apreciada.

preguntado el 16 de mayo de 11 a las 19:05

"óptimo"? ¿Qué quieres optimizar? ¿Hora? ¿Uso de memoria? ¿Líneas de código? -

@ S.Lott, hay una regla de dónde vengo, en caso de duda, "óptimo" es una medida de aliteración y, por lo tanto, una lista enlazada suele ser la respuesta correcta. -

¿Qué quiere decir con "las claves se ordenarán"? ¿Vienen en orden ordenado? ¿Quieres iterar sobre ellos en orden ordenado? -

@davin: Buen punto. Pasé mucho tiempo trabajando para "Big, In-House IT", donde los medios óptimos "utilizan el RDBMS que ya tenemos licenciado". No podría encajar eso con la pregunta muy bien. -

5 Respuestas

Árbol AVL, o al menos BST.

Si desea acceder a menudo a los mismos elementos, es posible que también desee considerar los árboles de splay.

(¿Debería explicar por qué?)

contestado el 16 de mayo de 11 a las 23:05

Ambos árboles AVL y Splay son bastante buenos para las estructuras de memoria, pero tienden a funcionar mal (o son difíciles de implementar de manera óptima) en el disco. Para los medios orientados a bloques, el árbol B * es difícil de superar: Javier

Los árboles AVL tienen una complejidad garantizada de O (log n) para las tres operaciones, pero son bastante difíciles de implementar correctamente (bueno, hay muchos buenos ejemplos en la red). Los árboles Splay son árboles AVL que están diseñados para que el último elemento de la estructura al que se haya accedido se coloque en la raíz del árbol (por lo que es accesible en O (1)) Se usa mejor cuando a menudo busca las mismas cosas porque las cosas a las que se accede recientemente permanece cerca de la cima. - Sword22

No estoy seguro de lo que quiere decir con "estructuras de datos"

Yo sugeriría MySQL. Leer más aquí: WikiPedia

contestado el 16 de mayo de 11 a las 23:05

Por estructuras de datos, lo más probable es que se refiera a una estructura en memoria como una matriz, lista, diccionario, árbol, montón, etc. KeithS

¡Oh, está bien, genial! Pensé que. Pero cuando mencionó las "operaciones", pensé en DB. ¡Gracias! - LouwHopley

Una especie de árbol de autoequilibrio (AVL, RB) o una tabla hash.

contestado el 16 de mayo de 11 a las 23:05

Supongo que desea optimizar el tiempo. En general, un árbol rojo-negro tendrá un rendimiento de tiempo logarítmico en las tres operaciones. Probablemente será su mejor apuesta general en cuanto al tiempo de ejecución; sin embargo, los árboles rojo-negro son complejos de implementar y requieren una estructura de nodo, lo que significa que se almacenarán utilizando más memoria de la que requieren los datos contenidos.

contestado el 16 de mayo de 11 a las 23:05

En realidad, hay pocas estructuras de datos que no utilicen más memoria que los propios datos. - Sword22

Quieres un mapa con respaldo de árbol; Básicamente, solo desea un árbol donde los nodos se clasifiquen dinámicamente ("autoequilibrados") por clave, con sus objetos colgando de cada nodo con la clave correspondiente.

Si desea una estructura de datos "óptima", eso depende completamente de la distribución de patrones de entradas que espera. Lo bueno de un árbol de autoequilibrio es que realmente no necesita preocuparse demasiado por el patrón de entradas. Si realmente desea la mejor suposición lo más cercana a la óptima posible que conozcamos, y no sabe mucho acerca de las secuencias específicas de consultas, puede usar un http://en.wikipedia.org/wiki/Tango_tree cual es O(log(log(N))-competitivo. Esto crece tan lentamente que, para todos los propósitos prácticos, tiene algo que no funciona peor que un factor constante de la mejor estructura de datos posible que podría haber elegido.

Sin embargo, es algo complicado de implementar, puede que sea mejor usar una biblioteca para un árbol de autoequilibrio.

Pitón: https://github.com/pgrafov/python-avl-tree/

Java: si solo es Java, utilice un TreeMap (basado en árbol rojo-negro) e ignore los detalles de implementación. La mayoría de los lenguajes tienen estructuras de datos similares en sus bibliotecas estándar.

contestado el 17 de mayo de 11 a las 11:05

Pero me enteré por el artículo de Wikipedia que no es compatible con la eliminación y la inserción. Útil solo para datos estáticos. Pero también necesito esas operaciones de eliminación e inserción. - thetna

Lo siento, parece que mi edición no se realizó antes de tu comentario: según tu idioma, hay muchas herramientas que hacen lo que quieres. Di ejemplos para Python y Java. - ninjagecko

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.