2010-12-31 14 views
5

Recientemente me he encontrado con algunas de las estructuras de datos PHP-SPL y he estado revisando la primera, the doubly linked list. Tengo una idea aproximada de qué es una lista vinculada y ahora puedo ver qué es una lista doblemente vinculada, pero mi pregunta es: ¿Qué haría en el mundo con esto?¿Por qué alguna vez usaría una DoublyLinkedList en PHP?

Parece que sería tan fácil de usar una matriz. ¿Puede algún tipo de Informática iluminarme?

+3

Estoy totalmente de acuerdo con su escepticismo. –

Respuesta

9

A diferencia de una lista enlazada individualmente, una lista doblemente enlazada puede recorrer la lista en cualquier dirección, y hacer la inserción y eliminación de objetos en el medio de la lista en O (1) (siempre que usted tenga acceso para detectar en el Indique dónde va a suceder, a diferencia de una lista vinculada por sí sola. Dicho esto, las listas doblemente vinculadas son inferiores en otras formas y definitivamente no son algo que se encontrará en la práctica.

+2

Tienen sus usos en ciertas situaciones y para ciertos algoritmos. Son menos importantes en PHP, donde una matriz es bastante dinámica. En otros idiomas, donde el tamaño de una matriz se fija en la declaración, entonces una lista vinculada, doblemente vinculada o no, podría ser una mejor opción para la solución. El costo de cambiar el tamaño de una matriz en estos idiomas a veces puede ser mucho mayor que la sobrecarga de una lista vinculada. – RobertB

+0

la implementación de SPL no parece permitir la inserción en el medio de la lista, aunque si lo hiciera podría ver el valor. – Will

2

En mi humilde opinión, las posibilidades de encontrar algo como esto en la naturaleza es improbable, a menos que trabaje para una empresa como Google o Facebook, donde manejan cantidades insanas de datos y tienen una necesidad para optimizar la transferencia de listas para permitir la eliminación y adición de nodos. Como regla general, yo Si su solicitud es que lento, lo más probable es que esté haciendo algo mal en otro lado (sé que esa no es su pregunta, pero pensé que simplemente lo lanzaría;)).

Para sitios pequeños y medianos con requisitos de datos pequeños a medianos, diría que una matriz sería suficiente (sin mencionar que es más legible y comprensible para el desarrollador web promedio;)).

3

Elegir una estructura de datos adecuada no es necesariamente sobre lo que es fácil para usted, pero lo que utiliza menos memoria y es más rápido para la máquina. En el caso de una lista doblemente vinculada, sería útil cuando necesite repetir en cualquier dirección, inserte en cualquier lugar a velocidad constante, pero no necesita acceso aleatorio.

Ahora que en PHP generalmente trabajas con pequeños conjuntos de datos, no tienes que preocuparte demasiado por ese tipo de cosas. Y si trabaja con grandes conjuntos de datos, es mejor que escriba el código en C. Por lo tanto, es poco probable que alguna vez se beneficie lo suficiente de tales estructuras en PHP como para necesitar usarlas alguna vez.

Pero podría haber ese área "intermedia" en la que el uso de una de las estructuras de datos Spl reduce el uso de la memoria lo suficiente como para ser útil. (Hice una prueba simple, y 1M enteros en una matriz lleva 200 MB. La lista de doble enlace lleva 150 MB. El tiempo para iterar sobre ellos fue muy comparable.)

Cuestiones relacionadas