Arbol de dedos

Arbol de dedos

Árbol de la separación

Los árboles de dedos son, sin duda, la estructura de datos más interesante que nunca me enseñaron en la escuela. La esencia de los árboles de dedos es que representan secuencias de elementos en las que los elementos también tienen un “descriptor” medible de algún tipo. Si eso suena vago es porque lo es. La generalidad es lo que permite a los árboles de dedos resolver muchos tipos de problemas, pero requiere algunos ejemplos y explicaciones para entenderlos. En este post hablaremos de cómo funcionan los árboles a alto nivel, y luego los usaremos para construir una estructura tipo array de acceso aleatorio con características de rendimiento razonables.

Los monoides son increíblemente útiles; y cuanto más aprendo sobre la Teoría de Categorías, más aplicaciones encuentro para las estructuras monoidales. Una vez que empiezas a pensar en monoides empiezas a darte cuenta de cuántas cosas que antes pensabas que eran problemas únicos e interesantes son en realidad sólo un monoide y un pliegue de algún otro problema bien resuelto. Vamos a empezar introduciendo una nueva herramienta (es decir, una estructura de datos) que emplea los monoides para hacer cosas increíbles. ¡Introduzca Finger Trees! Los Finger Trees son una estructura de datos puramente funcional y adaptable; en realidad son una estructura extremadamente general que hace que sea un poco difícil de explicar sin un caso de uso concreto. Esto es porque utilizan un Monoide en la base de la estructura de datos, y el Monoide que elijas puede afectar drásticamente a cómo se comporta la estructura. Aquí hay un vistazo al tipo de cosas que puedes hacer eligiendo diferentes Monoides:

  El árbol del vivir

2-3 árboles

El Finger tree, conocido por el nombre científico de Euphorbia Tiruculli, es una planta muy peculiar, ya que casi no tiene hojas, por lo que sus tallos se vuelven verdes para realizar la fotosíntesis.

Aunque suele encontrarse a la venta en macetas pequeñas, no te dejes engañar por su tamaño: puede llegar a medir hasta quince metros de altura. Pero si te parece mucho, no te preocupes: puedes podarlo durante los meses de calor. Conozcamos más sobre él.

La Euphorbia Tiruculli., a veces llamada como Arbusto de Goma, Arbusto de Leche, Abá, o Palitroque, además de como Árbol de los dedos, es un tipo de euforbia endémica desde África hasta la India, donde vive en regiones secas de clima tropical. Se caracteriza por tener ramas cilíndricas y carnosas de color verde. Es una planta que se ramifica mucho desde joven, pero a medida que el tronco crece queda casi sin ramas, como se puede ver en la imagen superior.

Como decíamos al principio, aunque su crecimiento es más bien lento, aumentando su tamaño en unos 20 centímetros/año, puede alcanzar hasta 15 metros de altura. Por este motivo, hay que pensar bien dónde se va a tener para que en el futuro no tengamos problemas. En este sentido, también hay que tener en cuenta que es una planta tóxica, por lo que hay que mantenerla alejada de los niños así como de las mascotas.

  Arbol de la sidra

Estructuras de datos puramente funcionales

En informática, un árbol de dedos es una estructura de datos puramente funcional que puede utilizarse para implementar de forma eficiente otras estructuras de datos funcionales. Un árbol de dedos permite acceder en tiempo constante amortizado a los “dedos” (hojas) del árbol, que es donde se almacenan los datos, y concatenar y dividir en tiempo logarítmico el tamaño del trozo más pequeño. También almacena en cada nodo interno el resultado de aplicar alguna operación asociativa a sus descendientes. Estos datos “resumidos” almacenados en los nodos internos pueden utilizarse para proporcionar la funcionalidad de otras estructuras de datos distintas de los árboles.

Árbol de dedos utilizado como una simple cola con operaciones amortizadas O(1) put & get. Los enteros del 1 al 21 se insertan a la derecha y se extraen de la izquierda. Los bloques cuadrados representan valores, “Dígito” (azul cielo) puede tener 1-4 hijos, “Nodo” (azul oscuro) puede tener 2-3 hijos, el círculo blanco es para “Vacío”, el nodo rojo representa un valor “Simple” y los nodos verdes representan valores “Profundos”. Tenga en cuenta que en cada paso que damos hacia abajo en la columna vertebral, los valores individuales y los hijos de los dígitos se anidan con un nuevo nivel de nodos.

Lista de estructuras de datos

En este cuaderno, veremos los árboles de dedos, una estructura de datos funcional de propósito general desarrollada en el artículo de Hinze y Paterson. Los árboles de dedos proporcionan una estructura de datos de secuencia funcional, que proporciona acceso amortizado en tiempo constante y anexión al principio y al final de la secuencia, así como concatenación en tiempo logarítmico y acceso aleatorio. Además de los buenos límites asintóticos de tiempo de ejecución, la estructura de datos resulta ser increíblemente flexible: cuando se combina con etiquetas monoidales en los elementos, los árboles de dedos pueden utilizarse para implementar secuencias eficientes de acceso aleatorio, secuencias ordenadas, árboles de intervalos y colas de prioridad.

  Arbol pino caracteristicas

Tenga en cuenta que todos los algoritmos de este cuaderno se han extraído del artículo enlazado anteriormente; algunas de las imágenes también se han extraído del artículo. Recomiendo encarecidamente la lectura del propio documento, antes o después de esta guía.

Este árbol almacena catorce elementos. El acceso a cualquiera de ellos requiere tres pasos, y si añadiéramos más elementos, el número de pasos para cada uno crecería logarítmicamente. Nos gustaría utilizar estos árboles para modelar secuencias. Sin embargo, en muchas aplicaciones es muy frecuente que se acceda a las secuencias repetidamente en la parte delantera o trasera, y mucho menos en la parte central. Para acomodar este caso de uso, podemos modificar esta estructura de datos para priorizar el acceso frontal y posterior sobre otras características.

Esta web utiliza cookies propias para su correcto funcionamiento. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad