Articulo de referencia

Estructura de datos concisa

En informática , una estructura de datos sucinta es aquella que utiliza una cantidad de espacio cercana al límite inferior teórico de la información , pero que (a diferencia de ...

En informática , una estructura de datos sucinta es aquella que utiliza una cantidad de espacio cercana al límite inferior teórico de la información , pero que (a diferencia de otras representaciones comprimidas) permite realizar consultas eficientes. El concepto fue introducido originalmente por Jacobson [ 1 ] para codificar vectores de bits , árboles (sin etiquetar) y grafos planares . A diferencia de los algoritmos generales de compresión de datos sin pérdida , las estructuras de datos sucintas conservan la capacidad de utilizarlas directamente, sin necesidad de descomprimirlas previamente. Un concepto relacionado es el de estructura de datos comprimida , en el que el tamaño de los datos almacenados o codificados depende igualmente del contenido específico de los mismos.

Supongamos queZ{\displaystyle Z}es el número óptimo de bits necesarios desde el punto de vista de la teoría de la información para almacenar ciertos datos. Una representación de estos datos se denomina:

  • implícito si se tomaZ+O(1){\displaystyle Z+O(1)}trozos de espacio,
  • sucinto si hace faltaZ+o(Z){\displaystyle Z+o(Z)}trozos de espacio, y
  • compacto si se necesitaO(Z){\displaystyle O(Z)}trozos de espacio.

Por ejemplo, una estructura de datos que utiliza2Z{\displaystyle 2Z}El almacenamiento de bits es compacto,Z+Z{\displaystyle Z+{\sqrt {Z}}}bits es conciso,Z+lgZ{\displaystyle Z+\lg Z}bits también es sucinto, yZ+3{\displaystyle Z+3}bits es implícito.

Las estructuras implícitas se reducen, por lo general, a almacenar información utilizando alguna permutación de los datos de entrada; el ejemplo más conocido de esto es el montón .

Diccionarios indexables concisos

Los diccionarios indexables sucintos, también llamados diccionarios de rango/selección , forman la base de varias técnicas de representación sucinta, incluidos los árboles binarios ,k{\displaystyle k}árboles y multiconjuntos -arios , [ 2 ] así como árboles y arreglos de sufijos . [ 3 ] El problema básico es almacenar un subconjuntoS{\displaystyle S}de un universoU=[0norte)={0,1,,norte1}{\displaystyle U=[0\dots n)=\{0,1,\dots ,n-1\}}, generalmente representado como una matriz de bitsB[0norte){\displaystyle B[0\dots n)}dóndeB[i]=1{\displaystyle B[i]=1}si y solo siiS.{\displaystyle i\in S.}Un diccionario indexable admite los métodos habituales de los diccionarios (consultas e inserciones/eliminaciones en el caso dinámico), así como las siguientes operaciones:

  • ranortekq(incógnita)=|{k[0incógnita]:B[k]=q}|{\displaystyle \mathbf {rank} _{q}(x)=|\{k\in [0\dots x]:B[k]=q\}|}
  • smilmidotq(incógnita)=min{k[0norte):ranortekq(k)=incógnita}{\displaystyle \mathbf {seleccionar} _{q}(x)=\min\{k\in [0\dots n):\mathbf {rango} _{q}(k)=x\}}

paraq{0,1}{\displaystyle q\in \{0,1\}}.

En otras palabras,ranortekq(incógnita){\displaystyle \mathbf {rank} _{q}(x)}devuelve el número de elementos igual aq{\displaystyle q}hasta la posiciónincógnita{\displaystyle x}mientras smilmidotq(incógnita){\displaystyle \mathbf {seleccionar} _{q}(x)}devuelve la posición delincógnita{\displaystyle x}-ésima ocurrencia deq{\displaystyle q}.

Existe una representación simple [ 4 ] que utilizanorte+o(norte){\displaystyle n+o(n)}bits de espacio de almacenamiento (la matriz de bits original y unao(norte){\displaystyle o(n)}estructura auxiliar) y admite clasificación y selección en tiempo constante. Utiliza una idea similar a la de las consultas de mínimo de rango ; hay un número constante de recursiones antes de detenerse en un subproblema de tamaño limitado. La matriz de bitsB{\displaystyle B}está dividido en grandes bloques de tamañol=lg2norte{\displaystyle l=\lg ^{2}n}trozos y pequeños bloques de tamaños=lgnorte/2{\displaystyle s=\lg n/2}bits. Para cada bloque grande, el rango de su primer bit se almacena en una tabla separada.Rl[0norte/l){\displaystyle R_{l}[0\dots n/l)}; cada entrada de este tipo tomalgnorte{\displaystyle \lg n}bits para un total de(norte/l)lgnorte=norte/lgnorte{\displaystyle (n/l)\lg n=n/\lg n}bits de almacenamiento. Dentro de un bloque grande, otro directorioRs[0l/s){\displaystyle R_{s}[0\dots l/s)}almacena el rango de cada uno de losl/s=2lgnorte{\displaystyle l/s=2\lg n}pequeños bloques que contiene. La diferencia aquí es que solo necesitalgl=lglg2norte=2lglgnorte{\displaystyle \lg l=\lg \lg ^{2}n=2\lg \lg n}bits para cada entrada, ya que solo es necesario almacenar las diferencias con respecto al rango del primer bit en el bloque grande contenedor. Por lo tanto, esta tabla toma un total de(norte/s)lgl=4nortelglgnorte/lgnorte{\displaystyle (n/s)\lg l=4n\lg \lg n/\lg n}bits. Una tabla de búsquedaRpag{\displaystyle R_{p}}Luego se puede utilizar que almacena la respuesta a cada posible consulta de clasificación en una cadena de bits de longituds{\displaystyle s}parai[0,s){\displaystyle i\in [0,s)}; esto requiere2sslgs=O(nortelgnortelglgnorte){\displaystyle 2^{s}s\lg s=O({\sqrt {n}}\lg n\lg \lg n)}bits de espacio de almacenamiento. Por lo tanto, dado que cada una de estas tablas auxiliares ocupao(norte){\displaystyle o(n)}espacio, esta estructura de datos admite consultas de clasificación enO(1){\displaystyle O(1)}tiempo ynorte+o(norte){\displaystyle n+o(n)}trozos de espacio.

Para responder a una consulta sobreranortek1(incógnita){\displaystyle \mathbf {rank} _{1}(x)}En tiempo constante, un algoritmo de tiempo constante calcula:

  • ranortek1(incógnita)=Rl[incógnita/l]+Rs[incógnita/s]+Rpag[incógnitaincógnita/s,incógnita mod s]{\displaystyle \mathbf {rank} _{1}(x)=R_{l}[\lfloor x/l\rfloor ]+R_{s}[\lfloor x/s\rfloor ]+R_{p}[x\lfloor x/s\rfloor ,x{\text{ mod }}s]}

En la práctica, la tabla de búsquedaRpag{\displaystyle R_{p}}puede reemplazarse por operaciones bit a bit y tablas más pequeñas que se pueden usar para encontrar el número de bits establecidos en los bloques pequeños. Esto suele ser beneficioso, ya que las estructuras de datos concisas se utilizan en grandes conjuntos de datos, en cuyo caso los fallos de caché se vuelven mucho más frecuentes y las posibilidades de que la tabla de búsqueda sea desalojada de las cachés de CPU más cercanas aumentan. [ 5 ] Las consultas de selección se pueden admitir fácilmente realizando una búsqueda binaria en la misma estructura auxiliar utilizada para el rango ; sin embargo, esto llevaO(lgnorte){\displaystyle O(\lg n)}tiempo en el peor de los casos. Una estructura más complicada que utiliza3norte/lglgnorte+O(nortelgnortelglgnorte)=o(norte){\displaystyle 3n/\lg \lg n+O({\sqrt {n}}\lg n\lg \lg n)=o(n)}Se pueden utilizar bits de almacenamiento adicional para admitir la selección en tiempo constante. [ 6 ] En la práctica, muchas de estas soluciones tienen constantes ocultas en elO(){\displaystyle O(\cdot )}notación que domina antes de que se haga evidente cualquier ventaja asintótica; las implementaciones que utilizan operaciones de palabras amplias y bloques alineados a palabras suelen tener un mejor rendimiento en la práctica. [ 7 ]

Soluciones con entropía comprimida

Elnorte+o(norte){\displaystyle n+o(n)}El enfoque espacial se puede mejorar teniendo en cuenta que hay(nortemetro){\displaystyle \textstyle {\binom {n}{m}}}distintometro{\displaystyle m}-subconjuntos de[norte){\displaystyle [n)}(o cadenas binarias de longitudnorte{\displaystyle n}con exactamentemetro{\displaystyle m}1), y por lo tantoB(metro,norte)=lg(nortemetro){\displaystyle \textstyle {\mathcal {B}}(m,n)=\lceil \lg {\binom {n}{m}}\rceil }es una cota inferior teórica de la información sobre el número de bits necesarios para almacenarB{\displaystyle B}. Existe un diccionario sucinto (estático) que alcanza este límite, a saber, utilizandoB(metro,norte)+o(B(metro,norte)){\displaystyle {\mathcal {B}}(m,n)+o({\mathcal {B}}(m,n))}espacio. [ 8 ] Esta estructura se puede extender para admitir consultas de clasificación y selección y tomaB(metro,norte)+O(metro+nortelglgnorte/lgnorte){\displaystyle {\mathcal {B}}(m,n)+O(m+n\lg \lg n/\lg n)}espacio. [ 2 ] Sin embargo, las consultas de rango correctas en esta estructura están limitadas a los elementos contenidos en el conjunto, de forma análoga a cómo funcionan las funciones hash perfectas mínimas. Este límite se puede reducir a una compensación espacio/tiempo reduciendo el espacio de almacenamiento del diccionario aB(metro,norte)+O(nortett/lgtnorte+norte3/4){\displaystyle {\mathcal {B}}(m,n)+O(nt^{t}/\lg ^{t}n+n^{3/4})}con consultas tomandoO(t){\displaystyle O(t)}tiempo. [ 9 ]

Si se desea admitir inserciones y eliminaciones, es posible lograr un límite de espacio deB(metro,norte)+O(norte/2(registronorte)Ω(1)){\displaystyle {\mathcal {B}}(m,n)+O(n/2^{(\log n)^{\Omega (1)}})}al tiempo que se admite cada operación (inserción, eliminación, clasificación o selección) en el tiempo previsto.O(1+registronorte/registroregistrometro){\displaystyle O(1+\log n/\log \log m)}. [ 10 ]

También es posible construir un diccionario indexable que admita rango (pero no selección) que utilice menos deB(metro,norte){\displaystyle \textstyle {\mathcal {B}}(m,n)}bits, siempre que las consultas de rango se limiten a los elementos contenidos en el conjunto. Dicho diccionario se denomina función hash perfecta mínima monótona y puede implementarse utilizando tan solo comoO(metroregistroregistroregistronorte){\displaystyle O(m\log \log \log n)}bits. [ 11 ] [ 12 ]

Tablas hash concisas

Una tabla hash sucinta , también conocida como diccionario desordenado sucinto, es una estructura de datos que almacenametro{\displaystyle m}llaves de un universo{0,1,,norte1}{\displaystyle \{0,1,\dots ,n-1\}}utilizando el espacio(1+o(1))B(metro,norte){\displaystyle (1+o(1)){\mathcal {B}}(m,n)}bits, y admite consultas de membresía en un tiempo esperado constante. Si una tabla hash concisa también admite inserciones y eliminaciones en un tiempo esperado constante, entonces se la denomina dinámica , y de lo contrario se la denomina estática.

La primera tabla hash dinámica sucinta se debe a Raman y Rao en 2003. [ 13 ] En el caso dondenorte=escuela politécnica(metro){\displaystyle n={\text{poly}}(m)}, su solución utiliza espacioB(metro,norte)+O(metroregistroregistrometro){\displaystyle {\mathcal {B}}(m,n)+O(m\log \log m)}bits. Posteriormente, se demostró que este límite de espacio podía mejorarse aB(metro,norte)+O(metroregistroregistroregistroregistrometro){\displaystyle {\mathcal {B}}(m,n)+O(m\log \log \log \cdots \log m)}bits para cualquier número constante de logaritmos [ 14 ] y poco después este límite también fue óptimo. [ 15 ] [ 16 ] Esta última solución admite todas las operaciones en el peor caso de tiempo constante con alta probabilidad .

La primera tabla hash estática sucinta se debe a Pagh en 1999. [ 17 ] [ 18 ] En el caso dondenorte=escuela politécnica(metro){\displaystyle n={\text{poly}}(m)}, su solución utiliza espacioB(metro,norte)+O(metro(registroregistrometro)2/registrometro){\displaystyle {\mathcal {B}}(m,n)+O(m(\log \log m)^{2}/\log m)}bits, y admite consultas de tiempo constante en el peor de los casos . Este límite se mejoró posteriormente aB(metro,norte)+metro/escuela politécnicaregistrometro{\displaystyle {\mathcal {B}}(m,n)+m/{\text{poly}}\log m}bits, [ 9 ] y luego aB(metro,norte)+escuela politécnicaregistrometro{\displaystyle {\mathcal {B}}(m,n)+{\text{poly}}\log m}bits. [ 19 ] Mientras que las dos primeras soluciones [ 18 ] [ 9 ] admiten consultas de tiempo constante en el peor de los casos, la última admite consultas de tiempo esperado constante. [ 19 ] La solución final también requiere acceso a una tabla de búsqueda de tamañonorteϵ{\displaystyle n^{\epsilon }}, pero esta tabla de búsqueda es independiente del conjunto de elementos que se almacenan. [ 19 ] Más recientemente, Hu et al. [ 20 ] idearon una solución que utiliza espacioB(metro,norte)+norteϵ{\displaystyle {\mathcal {B}}(m,n)+n^{\epsilon }}al tiempo que admite consultas de tiempo constante en el peor de los casos.

Otros ejemplos

Una cadena con una longitud arbitraria ( cadena Pascal ) ocupa Z + log( Z ) espacio y, por lo tanto, es concisa. Si existe una longitud máxima, lo cual ocurre en la práctica, ya que 2³² = 4 GiB de datos es una cadena muy larga, y 2⁶⁴ = 16 EiB de datos es mayor que cualquier cadena en la práctica, entonces una cadena con una longitud también es implícita, ocupando Z + k espacio, donde k es el número de datos para representar la longitud máxima (por ejemplo, 64 bits).

Cuando se necesita codificar una secuencia de elementos de longitud variable (como cadenas), existen varias posibilidades. Un enfoque directo consiste en almacenar una longitud y un elemento en cada registro; estos se pueden colocar uno tras otro. Esto permite una búsqueda eficiente del siguiente elemento, pero no la búsqueda del k -ésimo elemento. Una alternativa es colocar los elementos en orden con un delimitador (por ejemplo, una cadena terminada en nulo ). Esto utiliza un delimitador en lugar de una longitud y es sustancialmente más lento, ya que se debe escanear toda la secuencia en busca de delimitadores. Ambos son eficientes en cuanto a espacio. Un enfoque alternativo es la separación fuera de banda: los elementos se pueden colocar simplemente uno tras otro, sin delimitadores. Los límites de los elementos se pueden almacenar como una secuencia de longitud, o mejor, desplazamientos dentro de esta secuencia. Alternativamente, se codifica junto con él una cadena binaria separada que consta de 1s en las posiciones donde comienza un elemento y 0s en todas partes. Dada esta cadena,smilmidot{\displaystyle seleccionar}La función puede determinar rápidamente dónde comienza cada elemento, dado su índice. [ 21 ] Esto es compacto pero no conciso, ya que ocupa 2 Z espacio, que es O( Z ).

Otro ejemplo es la representación de un árbol binario : un árbol binario arbitrario ennorte{\displaystyle n}Los nodos pueden representarse en2norte+o(norte){\displaystyle 2n+o(n)}bits mientras admite una variedad de operaciones en cualquier nodo, que incluyen encontrar su padre, su hijo izquierdo y derecho, y devolver el tamaño de su subárbol, cada una en tiempo constante. El número de árboles binarios diferentes ennorte{\displaystyle n}nodos es(2nortenorte){\displaystyle {\tbinom {2n}{n}}}/(norte+1){\displaystyle /(n+1)}Para grandesnorte{\displaystyle n}, esto es sobre4norte{\displaystyle 4^{n}}; por lo tanto necesitamos al menos aproximadamenteregistro2(4norte)=2norte{\displaystyle \log _{2}(4^{n})=2n}bits para codificarlo. Por lo tanto, un árbol binario sucinto ocuparía solo2{\displaystyle 2}bits por nodo.

Véase también

Referencias

  1. Jacobson, G. J (1988). Estructuras de datos estáticas sucintas (tesis doctoral). Pittsburgh, PA: Universidad Carnegie Mellon.
  2. 1 2 Raman, R.; V. Raman; S. S Rao (2002). "Diccionarios indexables sucintos con aplicaciones a la codificación de árboles k-arios y multiconjuntos" . Actas del decimotercer simposio anual ACM-SIAM sobre algoritmos discretos . págs. 233–242 . arXiv : 0705.0552 . CiteSeerX 10.1.1.246.3123 . doi : 10.1145/1290672.1290680 . ISBN   0-89871-513-X.
  3. Sadakane, K.; R. Grossi (2006). "Comprimiendo estructuras de datos sucintas dentro de límites de entropía" (PDF) . Actas del decimoséptimo simposio anual ACM-SIAM sobre algoritmos discretos . págs. 1230–1239 . ISBN  0-89871-605-5Archivado del original (PDF) el 29 de septiembre de 2011.
  4. Jacobson, G. (1 de noviembre de 1989). Árboles y grafos estáticos eficientes en espacio (PDF) . 30.º Simposio IEEE sobre Fundamentos de la Informática. doi : 10.1109/SFCS.1989.63533 . Archivado del original (PDF) el 12 de marzo de 2016.
  5. González, R.; S. Grabowski; V. Mäkinen; G. Navarro (2005). "Implementación práctica de consultas de clasificación y selección" (PDF) . Actas de pósteres del 4.º Taller sobre algoritmos eficientes y experimentales (WEA) . págs. 27–38 . 
  6. Clark, David (1996). Árboles de pat compactos (PDF) (tesis doctoral). Universidad de Waterloo.
  7. Vigna, S. (2008). "Implementación de Broadword de consultas de clasificación/selección" (PDF) . Algoritmos experimentales . Notas de clase en ciencias de la computación. Vol. 5038. págs. 154–168 . CiteSeerX 10.1.1.649.8950 . doi : 10.1007/978-3-540-68552-4_12 . ISBN    978-3-540-68548-7. S2CID 13963489 . 
  8. Brodnik, A.; J. I Munro (1999). "Membresía en tiempo constante y espacio casi mínimo" (PDF) . SIAM J. Comput . 28 (5): 1627– 1640. CiteSeerX 10.1.1.530.9223 . doi : 10.1137/S0097539795294165 . 
  9. 1 2 3 Patrascu, Mihai (octubre de 2008). "Succincter" . 49.º Simposio Anual IEEE sobre Fundamentos de la Informática , 2008. IEEE. págs. 305–313 . doi : 10.1109/focs.2008.83 . ISBN  978-0-7695-3436-7. S2CID 257721481 . 
  10. Kuszmaul, William; Liang, Jingxun; Zhou, Renfei (2026), "Selección/Clasificación dinámica sucinta: superando el cuello de botella de la estructura de árbol" , Actas del Simposio anual ACM-SIAM de 2026 sobre algoritmos discretos (SODA) , Filadelfia, PA: Society for Industrial and Applied Mathematics, pp. 3760–3804 , doi : 10.1137/1.9781611978971.138 , ISBN  978-1-61197-897-1, recuperado el 3 de abril de 2026{{citation}}: CS1 mantenimiento: parámetro de trabajo con ISBN ( enlace )
  11. Belazzougui, Djamal; Boldi, Paolo; Pagh, Rasmus; Vigna, Sebastiano (2009-01-04). "Monotone Minimal Perfect Hashing: Searching a Sorted Table with O (1) Accesses". Proceedings of the Twentieth Annual ACM-SIAM Symposium on Discrete Algorithms . Philadelphia, PA: Society for Industrial and Applied Mathematics. pp. 785–794 . doi : 10.1137/1.9781611973068.86 . ISBN  978-0-89871-680-1.
  12. Assadi, Sepehr; Farach-Colton, Martín; Kuszmaul, William (enero de 2023), "Límites ajustados para el hash perfecto mínimo monótono" , Actas del Simposio Anual ACM-SIAM de 2023 sobre Algoritmos Discretos (SODA) , Filadelfia, PA: Society for Industrial and Applied Mathematics, págs. 456–476 , arXiv : 2207.10556 , doi : 10.1137/1.9781611977554.ch20 , ISBN  978-1-61197-755-4, consultado el 28 de abril de 2023{{citation}}: CS1 mantenimiento: parámetro de trabajo con ISBN ( enlace )
  13. Raman, Rajeev; Rao, Satti Srinivasa (2003), "Diccionarios y árboles dinámicos sucintos" , Autómatas, lenguajes y programación , Berlín, Heidelberg: Springer Berlin Heidelberg, pp. 357–368 , doi : 10.1007/3-540-45061-0_30 , ISBN  978-3-540-40493-4, consultado el 28 de abril de 2023{{citation}}: CS1 mantenimiento: parámetro de trabajo con ISBN ( enlace )
  14. Bender, Michael A.; Farach-Colton, Martín; Kuszmaul, John; Kuszmaul, William; Liu, Mingmou (2022-06-09). "Sobre el equilibrio óptimo tiempo/espacio para tablas hash" . Actas del 54.º Simposio Anual ACM SIGACT sobre Teoría de la Computación . Nueva York, NY, EE. UU.: ACM. págs. 1284–1297 . arXiv : 2111.00602 . doi : 10.1145/3519935.3519969 . hdl : 1721.1/146419 . ISBN  9781450392648. S2CID 240354692 . 
  15. Li, Tianxiao; Liang, Jingxun; Yu, Huacheng; Zhou, Renfei (2023). "Límites inferiores ajustados de la sonda celular para diccionarios dinámicos y sucintos". arXiv : 2306.02253 [ cs.DS ].
  16. Nadis, Steve (8 de febrero de 2024). "Los científicos encuentran el equilibrio óptimo entre el almacenamiento de datos y el tiempo" . Quanta Magazine .
  17. Pagh, Rasmus (1998-01-28). "Baja redundancia en diccionarios con tiempo de búsqueda en el peor de los casos O(1)" . Serie de informes BRICS . 5 (28). doi : 10.7146/brics.v5i28.19434 . ISSN 1601-5355 . 
  18. 1 2 Pagh, Rasmus (enero de 2001). "Baja redundancia en diccionarios estáticos con tiempo de consulta constante" . SIAM Journal on Computing . 31 (2): 353– 363. doi : 10.1137/s0097539700369909 . ISSN 0097-5397 . 
  19. 1 2 3 Yu, Huacheng ( 22 de junio de 2020). «Diccionario sucinto estático de Las Vegas casi óptimo» . Actas del 52.º Simposio Anual ACM SIGACT sobre Teoría de la Computación . Nueva York, NY, EE. UU.: ACM. págs. 1389–1401 . arXiv : 1911.01348 . doi : 10.1145/3357713.3384274 . ISBN  9781450369794. S2CID 207780523 . 
  20. Hu, Yang; Liang, Jingxun; Yu, Huacheng; Zhang, Junkai; Zhou, Renfei (15 de junio de 2025). «Diccionario estático óptimo con tiempo de consulta constante en el peor de los casos» . Actas del 57.º Simposio Anual de la ACM sobre Teoría de la Computación . Nueva York, NY, EE. UU.: ACM. págs. 278–289 . doi : 10.1145/3717823.3718278 . ISBN  979-8-4007-1510-5.
  21. Belazzougui, Djamal. "Hash, displace, and compress" (PDF) .
Obtenido de " https://en.wikipedia.org/w/index.php?title=Succinct_data_structure&oldid=1362655311 "