Saltar al contenido

Lista enlazada vs Vector

Esta es la respuesta más correcta que encomtrarás dar, sin embargo mírala detenidamente y analiza si es compatible a tu trabajo.

Solución:

Vector es otro nombre para matrices dinámicas. Es el nombre que se usa para la dinámica. array Estructura de datos en C++. Si tienes experiencia en Java quizás los conozcas con el nombre ArrayList. (Java también tiene una clase de colección antigua llamada Vector que no se usa hoy en día debido a problemas en la forma en que se diseñó).

Los vectores son buenos para el acceso de lectura aleatoria y la inserción y eliminación en la parte posterior (toma un tiempo constante amortizado), pero malos para las inserciones y eliminaciones en el frente o en cualquier otra posición (tiempo lineal, ya que los elementos deben moverse). Los vectores generalmente se distribuyen de forma contigua en la memoria, por lo que atravesar uno es eficiente porque la memoria caché de la CPU se usa de manera efectiva.

Las listas enlazadas, por otro lado, son buenas para insertar y eliminar elementos en la parte delantera o trasera (tiempo constante), pero no particularmente buenas para mucho más: por ejemplo, eliminar un elemento en un índice arbitrario en el medio de la lista toma tiempo lineal porque primero debe encontrar el nodo. Por otro lado, una vez que haya encontrado un nodo en particular, puede eliminarlo o insertar un nuevo elemento después de él en tiempo constante, algo que no puede hacer con un vector. Las listas vinculadas también son muy simples de implementar, lo que las convierte en una estructura de datos popular.

Sé que es un poco tarde para este interrogador, pero este es un video muy revelador de Bjarne Stroustrup (el inventor de C ++) sobre por qué debe evitar las listas vinculadas con hardware moderno. https://www.youtube.com/watch?v=YQs6IC-vgmo Con la rápida asignación de memoria en las computadoras de hoy, es mucho más rápido crear una copia del vector con los elementos actualizados.

No me gusta la respuesta número uno aquí, así que pensé en compartir una investigación real sobre esto realizada por Herb Sutter de Microsoft. Los resultados de la prueba fueron con hasta 100k elementos en un contenedor, pero también afirmaron que continuaría superando una lista vinculada incluso en medio millón de entidades. A menos que planee que su contenedor tenga millones de entidades, su contenedor predeterminado para un contenedor dinámico debería sea ​​el vector. Resumí más o menos lo que dice, pero también vincularé la referencia en la parte inferior:

“[Even if] preasignas los nodos dentro de una lista vinculada, eso te devuelve la mitad del rendimiento, pero aún es peor [than a vector]. ¿Por qué? En primer lugar, es más espacio: la sobrecarga por elemento (es parte de la razón), los punteros hacia adelante y hacia atrás involucrados dentro de una lista vinculada, pero también (y más importante) el orden de acceso. La lista enlazada tiene que atravesar para encontrar un punto de inserción, haciendo todo este seguimiento del puntero, que es lo mismo que estaba haciendo el vector, pero lo que realmente está ocurriendo es que los prebuscadores son así de rápidos. Al realizar recorridos lineales con datos que se mapean de manera eficiente dentro de la memoria (asignar y usar, por ejemplo, un vector de punteros que se define y presenta), superará a las listas vinculadas en casi todos los escenarios”.

Aquí puedes ver las reseñas y valoraciones de los usuarios

Nos puedes añadir valor a nuestra información contribuyendo tu experiencia en los informes.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *