Articulo de referencia

Lista de asociaciones

En programación informática , y en particular en Lisp , una lista asociativa , a menudo denominada lista de asociación , es una lista enlazada en la que cada elemento (o nodo ) ...

En programación informática , y en particular en Lisp , una lista asociativa , a menudo denominada lista de asociación , es una lista enlazada en la que cada elemento (o nodo ) consta de una clave y un valor . Se dice que la lista asocia el valor con la clave. Para encontrar el valor asociado a una clave dada, se utiliza una búsqueda secuencial : se busca en cada elemento de la lista, comenzando por el primero, hasta encontrar la clave. Las listas asociativas proporcionan una forma sencilla de implementar un array asociativo , pero solo son eficientes cuando el número de claves es muy pequeño.

Operación

Un array asociativo es un tipo de dato abstracto que se puede usar para mantener una colección de pares clave-valor y buscar el valor asociado a una clave determinada. La lista de asociación proporciona una forma sencilla de implementar este tipo de dato.

Para comprobar si una clave está asociada a un valor en una lista de asociaciones determinada, busque en la lista comenzando por su primer nodo y continuando hasta que se encuentre un nodo que contenga la clave o hasta que la búsqueda llegue al final de la lista (en cuyo caso la clave no está presente). Para añadir un nuevo par clave-valor a una lista de asociaciones, cree un nuevo nodo para ese par clave-valor, establezca el enlace del nodo como el primer elemento anterior de la lista de asociaciones y reemplace el primer elemento de la lista de asociaciones con el nuevo nodo. [ 1 ] Aunque algunas implementaciones de listas de asociaciones no permiten tener varios nodos con las mismas claves, tales duplicaciones no son problemáticas para este algoritmo de búsqueda: las claves duplicadas que aparecen más adelante en la lista se ignoran. [ 2 ]

También es posible eliminar una clave de una lista de asociaciones, escaneando la lista para encontrar cada aparición de la clave y eliminando de la lista los nodos que la contienen. [ 1 ] El escaneo debe continuar hasta el final de la lista, incluso cuando se encuentre la clave, en caso de que la misma clave se haya insertado varias veces.

Actuación

La desventaja de las listas asociativas es que el tiempo de búsqueda es O ( n ) , donde n es la longitud de la lista. [ 3 ] Para listas grandes, esto puede ser mucho más lento que los tiempos que se pueden obtener al representar un arreglo asociativo como un árbol de búsqueda binaria o como una tabla hash . Además, a menos que la lista se pode regularmente para eliminar elementos con claves duplicadas, los múltiples valores asociados con la misma clave aumentarán el tamaño de la lista y, por lo tanto, el tiempo de búsqueda, sin proporcionar ninguna ventaja compensatoria.

Una ventaja de las listas de asociación es que se puede agregar un nuevo elemento en tiempo constante. Además, cuando el número de claves es muy pequeño, la búsqueda en una lista de asociación puede ser más eficiente que la búsqueda en un árbol de búsqueda binaria o una tabla hash, debido a la mayor simplicidad de su implementación. [ 4 ]

Aplicaciones y bibliotecas de software

En el desarrollo inicial de Lisp, se utilizaban listas de asociación para resolver referencias a variables libres en procedimientos. [ 5 ] [ 6 ] En esta aplicación, resulta conveniente ampliar las listas de asociación con una operación adicional que revierte la adición de un par clave-valor sin buscar en la lista otras copias de la misma clave. De esta forma, la lista de asociación puede funcionar como una pila , permitiendo que las variables locales oculten temporalmente otras variables con los mismos nombres, sin destruir los valores de estas últimas. [ 7 ]

Muchos lenguajes de programación, incluidos Lisp, [ 5 ] Scheme , [ 8 ] OCaml , [ 9 ] y Haskell [ 10 ] tienen funciones para manejar listas de asociación en sus bibliotecas estándar .

Véase también

  • Lista autoorganizada , una estrategia para reordenar las claves en una lista de asociación con el fin de acelerar las búsquedas de claves a las que se accede con frecuencia.
  • Lista de propiedades, o plist, otra estructura de datos de matriz asociativa utilizada en Lisp [ 11 ] (no confundir con listas de propiedades , un formato de archivo también llamado archivos plist).

Referencias

  1. 1 2 Marriott, Kim; Stuckey, Peter J. (1998). Programación con restricciones: Una introducción . MIT Press. págs. 193–195 . ISBN  9780262133418.
  2. Frické, Martin (2012). «2.8.3 Listas de asociación» . Lógica y organización de la información . Springer. págs. 44–45 . ISBN  9781461430872.
  3. Knuth, Donald (1998). "6.1 Búsqueda secuencial". El arte de la programación informática , vol. 3: Ordenación y búsqueda (2.ª ed.). Addison Wesley. págs. 396–405 . ISBN   0-201-89685-0.
  4. Janes, Calvin (2011). "Uso de listas de asociación para matrices asociativas" . Guía del desarrollador para colecciones en Microsoft .NET . Pearson Education. pág. 191. ISBN  9780735665279.
  5. 1 2 McCarthy, John; Abrahams, Paul W.; Edwards, Daniel J.; Hart, Timothy P.; Levin, Michael I. (1985). LISP 1.5 Programmer's Manual . MIT Press . ISBN 0-262-13011-4.Véase en particular la página  12 para ver las funciones que buscan en una lista de asociaciones y la utilizan para sustituir símbolos en otra expresión, y la página  103 para la aplicación de listas de asociaciones en el mantenimiento de las vinculaciones de variables.
  6. van de Snepscheut, Jan LA (1993). What Computing Is All About . Monographs in Computer Science. Springer. p. 201. ISBN  9781461227106.
  7. Scott, Michael Lee (2000). "3.3.4 Listas de asociación y tablas de referencia central" . Pragmática de los lenguajes de programación . Morgan Kaufmann. pág. 137. ISBN  9781558604421.
  8. Pearce, Jon (2012). Programación y metaprogramación en Scheme . Textos de pregrado en informática. Springer. pág. 214. ISBN  9781461216827.
  9. Minsky, Yaron; Madhavapeddy, Anil; Hickey, Jason (2013). Real World OCaml: Functional Programming for the Masses . O'Reilly Media. p. 253. ISBN  9781449324766.
  10. O'Sullivan, Bryan; Goerzen, John; Stewart, Donald Bruce (2008). Real World Haskell: Code You Can Believe In . O'Reilly Media. pág. 299. ISBN  9780596554309.
  11. "10.1. La lista de propiedades" . Cs.cmu.edu . Consultado el 29 de septiembre de 2017 .