Articulo de referencia

rosal

En informática , un árbol de rosas es el valor de una estructura de datos de árbol con un número variable e ilimitado de ramas por nodo. [ 1 ] El término se usa principalmente e...

En informática , un árbol de rosas es el valor de una estructura de datos de árbol con un número variable e ilimitado de ramas por nodo. [ 1 ] El término se usa principalmente en la comunidad de programación funcional , por ejemplo, en el contexto del formalismo de Bird-Meertens . [ 2 ] Aparte de la propiedad de ramificación múltiple, la característica más esencial de los árboles de rosas es la coincidencia de bisimilitud con identidad : dos árboles de rosas distintos nunca son bisimilares.

Nomenclatura

El nombre "árbol de rosas" fue acuñado por Lambert Meertens para evocar al rododendro común , de nombre y estructura similares . [ 3 ]

Llamaremos a estos árboles rosales , una traducción literal de rododendro (griego ῥόδον = rosa, δένδρον = árbol), debido a su parecido con el porte de este arbusto, excepto que este último no crece al revés en el hemisferio norte.

Definición recursiva

Los árboles de rosas bien fundados pueden definirse mediante una construcción recursiva de entidades de los siguientes tipos:

  1. Una entidad base es un elemento de un conjunto base predefinido V de valores (los valores "punta" [ 3 ] ).
  2. Una entidad ramificada (o, alternativamente, una entidad bifurcada o una entidad forestal ) es uno de los siguientes subtipos:
    1. Un conjunto de entidades.
    2. Una secuencia de entidades.
    3. Un mapeo parcial de un conjunto predefinido Σ de nombres a entidades.

    Cualquiera de (a), (b) o (c) puede estar vacío. Nótese que (b) puede verse como un caso especial de (c): una secuencia es simplemente una función que parte de un segmento inicial del conjunto.norte{\displaystyle \mathbb {N} }de números naturales.

  3. Una entidad de emparejamiento es un par ordenado ( F , x ) tal que F es una entidad ramificada y x es un elemento de un conjunto predefinido L de valores de "etiqueta". Dado que una entidad de emparejamiento solo puede contener una entidad ramificada como componente, se produce una división inducida en subtipos (3a), (3b) o (3c) que corresponden a subtipos de entidades ramificadas.

Normalmente, solo se utilizan algunas combinaciones de tipos de entidades para la construcción. El artículo original [ 3 ] solo considera 1+2b (árboles de rosas con bifurcación de secuencia) y 1+2a (árboles de rosas con bifurcación de conjuntos). En la literatura posterior, la variante 1+2b se introduce habitualmente mediante la siguiente definición:

Datos Árbol a = Hoja a | Nodo [Árbol a] 

Un árbol de rosas [...] es una hoja que contiene un valor, o un nodo que puede tener una lista arbitraria de subárboles . [ 4 ]

La definición más común utilizada en la programación funcional (particularmente en Haskell ) combina 3+2b:

datos Rosa α = Nodo α [Rose α] 

Un elemento de Rose α consiste en un nodo etiquetado junto con una lista de subárboles . [ 1 ] Es decir, un árbol de rosas es una entidad de emparejamiento (tipo 3) cuya entidad de ramificación es una secuencia (por lo tanto, de tipo 2b) de árboles de rosas.

A veces incluso se considera la combinación 1+3b. [ 5 ] [ 6 ] La siguiente tabla proporciona un resumen de las combinaciones de entidades más establecidas.

Notas:

  1. 1 2 Para las combinaciones (2a)(3) y (3)(2b), el segundo tipo de entidad indicado es solo intermedio; se utiliza únicamente para la definición de la entidad "final", que es del primer tipo indicado. Además, los tipos son estrictamente alternados, es decir, una entidad ramificada solo puede contener una entidad emparejada como miembro.

Definición general

Los árboles de rosas generales se pueden definir mediante la bisimilitud de multidigrafos accesibles con punta , con el etiquetado adecuado de nodos y flechas. Estas estructuras son una generalización de la noción de grafo accesible con punta (abreviado como apg ) de la teoría de conjuntos no bien fundamentada . Usaremos el acrónimo apq para las estructuras de multidigrafos que se describen a continuación. Esto se entiende como una abreviatura de "carcaj accesible con punta", donde " carcaj " es un sinónimo establecido de "multidigrafo".

En correspondencia con los tipos de entidades utilizadas en la definición recursiva, a cada nodo de un apq se le asigna un tipo (1), (2a), (2b), (2c) o (3). Los apqs están sujetos a condiciones que imitan las propiedades de las entidades construidas recursivamente.

    1. Un nodo de tipo (1) es un elemento del conjunto predefinido V de valores base.
    2. Un nodo de tipo (1) no aparece como origen de una flecha.
    1. Un nodo de tipo (3) aparece como la fuente de exactamente una flecha.
    2. El objetivo de la flecha mencionada en (a) es un nodo de tipo (2).
  1. Dos flechas distintas con el mismo nodo de origen de tipo (2a) tienen objetivos distintos.
  2. Un nodo está etiquetado si y solo si es de tipo (3). La etiqueta pertenece al conjunto predefinido L.
    1. Una flecha está etiquetada por un índice desdenorte{\displaystyle \mathbb {N} }si su nodo de origen es de tipo (2b).
    2. Una flecha se etiqueta con un nombre de un conjunto predefinido Σ si su nodo de origen es de tipo (2c).
    3. De lo contrario, la flecha no tiene etiqueta.
  3. Las etiquetas de las flechas con el mismo nodo de origen son distintas.
  4. Las etiquetas de las flechas con el mismo nodo fuente de tipo (2b) forman un segmento inicial denorte{\displaystyle \mathbb {N} }.

Una bisimilitud entre apqs 𝒳 = ( X , ...) y 𝒴 = ( Y , ...) es una relación RX × Y entre nodos tal que las raíces de 𝒳 y 𝒴 están relacionadas por R y para cada par ( x , y ) de nodos relacionados por R , se cumplen las siguientes condiciones:

  1. Los nodos x e y son del mismo tipo.
  2. Si x e y son de tipo (1), entonces son idénticos.
  3. Si x e y son de tipo (3), entonces tienen la misma etiqueta.
  4. Para cada flecha a de 𝒳 cuyo nodo fuente es x, existe una flecha b de 𝒴 cuyo origen es y y
    1. Los nodos objetivo de a y b están relacionados con R ,
    2. Las etiquetas de a y b , si están definidas, son idénticas.

    Se cumple una condición de simetría intercambiando 𝒳 y 𝒴 .

Se dice que dos apqs 𝒳 y 𝒴 son bisimilares si existe una relación de bisimilitud R entre ellos. Esto establece una relación de equivalencia en la clase de todos los apqs.

Un árbol de rosas es entonces una representación fija de la clase 𝒞 de apqs que son bisimilares a algún apq 𝒳 dado . Si el nodo raíz de 𝒳 es de tipo (1), entonces 𝒞 = {𝒳 }, por lo que 𝒞 puede representarse mediante este nodo raíz. De lo contrario, 𝒞 es una clase propia ; en este caso, la representación puede proporcionarse mediante el truco de Scott como el conjunto de aquellos elementos de 𝒞 que tienen el rango más bajo.

Como resultado de la construcción teórica de conjuntos anterior, se define la clase de todos los árboles de rosas, dependiendo de los conjuntos V (valores base), Σ (nombres de flechas) y L (etiquetas de nodos) como constituyentes definitorios. Posteriormente, la estructura de apqs se puede llevar a una estructura de multidigrafo etiquetado sobre . Es decir, los elementos de pueden considerarse como "nodos" con asignación de tipo inducida, etiquetado de nodos y flechas. La clase 𝒜 de flechas es una subclase de (ℛ × ℛ) ∪ (ℛ × (norte{\displaystyle \mathbb {N} }Σ ) × ℛ) , es decir, las flechas son pares fuente-objetivo o tríos fuente-etiqueta-objetivo según el tipo de fuente.

Para cada elemento r de existe un apq inducido 𝒳 = ( X , A , r , ...) tal que r es el nodo raíz de 𝒳 y los conjuntos respectivos X y A de nodos y flechas de 𝒳 están formados por aquellos elementos de y 𝒜 que son accesibles a través de un camino de flechas que comienza en r . El apq inducido 𝒳 es bisimilar a los apqs utilizados para la construcción de r .

Mapas de nombres de ruta

Los árboles de rosas que no contienen nodos de ramificación de conjuntos (tipo 2a) pueden representarse mediante mapas de nombres de ruta. Un nombre de ruta es simplemente una secuencia finita de etiquetas de flecha. Para una ruta de flecha a = [ a 1 , ..., a n ] (una secuencia finita de flechas consecutivas), el nombre de ruta de p es la secuencia correspondiente σ ( a ) = [ σ ( a 1 ), ..., σ ( a n )] de etiquetas de flecha. Aquí se supone que cada flecha está etiquetada ( σ denota la función de etiquetado). En general, cada ruta de flecha debe reducirse primero eliminando todas sus flechas que se originan en nodos de emparejamiento (tipo 3).

Una ruta p es resoluble si y solo si existe una ruta de flecha a que se origina en la raíz y cuya ruta es p . Dicha ruta a se asigna de forma única a una posible última flecha sin etiquetar (que se origina en un nodo de emparejamiento). El nodo de destino de una ruta resoluble no vacía es el nodo de destino de la última flecha de la ruta de flecha correspondiente que se origina en la raíz y que no termina con una flecha sin etiquetar. El destino de la ruta vacía es el nodo raíz.

Dado un árbol de rosas r que no contiene nodos de ramificación de conjuntos, el mapa de nombres de ruta de r es un mapa t que asigna a cada nombre de ruta resoluble p su valor t ( p ) de acuerdo con el siguiente esquema general:

(norte{\displaystyle \mathbb {N} }Σ ) ⊇ dom( t ) t ——— ( V ∪ {⊥} ∪ L ) × T

Recuerda que norte{\displaystyle \mathbb {N} }Σ es el conjunto de etiquetas de flechas (norte{\displaystyle \mathbb {N} }es el conjunto de números naturales y Σ es el conjunto de nombres de flechas) L es el conjunto de etiquetas de nodos, y V es el conjunto de valores base. Los símbolos adicionales y T significan respectivamente un indicador de un nombre de ruta resoluble y el conjunto de etiquetas de tipo, T = {'1', '2b', '2c', '3b', '3c' }. El mapa t se define mediante la siguiente prescripción ( x denota el objetivo de p ):

Se puede demostrar que los distintos árboles de rosas tienen distintos mapas de nombres de ruta. Para los árboles de rosas "homogéneos" no es necesario el etiquetado de tipos, y su mapa de nombres de ruta t se puede definir como se resume a continuación:

En cada caso, existe una axiomatización simple en términos de rutas de archivo:

  1. dom( t ) es un subconjunto cerrado por prefijo no vacío denorte{\displaystyle \mathbb {N} } o Σ . En caso denorte{\displaystyle \mathbb {N} } , dom( t ) también necesita ser "izquierdo-hermano-cerrado" para formar un dominio de árbol , ver Codificación por secuencias .
  2. En caso de una lista anidada o un valor de diccionario anidado, si p es un nombre de ruta que no es máximo en dom( t ) , entonces t ( p ) = ⊥ . [ p 2 ]

En concreto, un árbol de rosas, en el sentido más común de Haskell, es simplemente una función que mapea un conjunto no vacío de secuencias finitas de números naturales, cerrado por prefijo y por hermanos izquierdos, a un conjunto L. Esta definición se utiliza principalmente fuera del ámbito de la programación funcional; véase Árbol (teoría de autómatas) . Por lo general, los documentos que emplean esta definición no mencionan el término «árbol de rosas».

Notas:

  1. 1 2 Si dom( t ) = M para un subconjunto denorte{\displaystyle \mathbb {N} } or Σ then the pathname map t is a mapping of sequences of input symbols to output symbols of a Moore machine. Specifically, every Moore machine with the set M of input symbols being an initial segment of N{\displaystyle \mathbb {N} } and with all states reachable is bisimilar to a rose tree in the Haskell sense, see the example of a non-well-founded rose tree. Similar relationship can be observed between nested dictionaries (or lists) and Mealy machines, see Nested dictionary.
  2. To ensure that a nested list or a nested dictionary is respectively a list or dictionary in the first place, the condition t(p) = ⊥ must be explicitly required to hold for the empty pathname p. This asserts that cases like x = 5 are not considered to be "tree values".

Examples

The diagrams below show two examples of rose trees together with the correspondent Haskell code. In both cases, the Data.Tree module[11] is used as it is provided by the Haskell containers package.[12] The module introduces rose trees as pairing entities by the following definition:

dataTreea=Node{rootLabel::a,-- ^ label valuesubForest::[Treea]-- ^ zero or more child trees}

Both examples are contrived so as to demonstrate the concept of "sharing of substructures"[13] which is a distinguished feature of rose trees. In both cases, the labelling function is injective (so that the labels 'a', 'b', 'c' or 'd' uniquely identify a subtree / node) which does not need to be satisfied in general. The natural numbers (0,1,2 or 3) along the arrows indicate the zero-based position in which a tree appears in the subForest sequence of a particular "super-tree". As a consequence of possible repetitions in subForest, there can be multiple arrows between nodes. In each of the examples, the rose tree in question is labelled by 'a' and equals the value of the a variable in the code. In both diagrams, the tree is pointed to by a source-less arrow.

Rosal bien fundado

Well-founded rose tree
import Data.Tree main :: IO () main = do let d = Node { rootLabel = 'd' , subForest = [] } let c = Node { rootLabel = 'c' , subForest = [ d ] } let b = Node { rootLabel = 'b' , subForest = [ d , c ] } let a = Node { rootLabel = 'a' , subForest = [ b , c , c , c ] } print a

rosal sin fundamento

rosal sin fundamento
import Data.Tree main :: IO () main = do let root x = case x of 'a' -> ( x ,[ x , 'b' ]) 'b' -> ( x ,[ x , 'c' ]) 'c' -> ( x ,[ x , 'a' ]) let a = unfoldTree root 'a' putStrLn ( take 900 ( show a ) ++ " ... (y así sucesivamente)" )

El primer ejemplo presenta un árbol de rosas bien fundamentado aobtenido mediante una construcción incremental. Primero dse construye, luego cy bfinalmente a. El árbol de rosas se puede representar mediante el mapa de nombres de ruta que se muestra a la izquierda.

El segundo ejemplo presenta un árbol de rosas no bien fundamentado aconstruido por un constructor en amplitud unfoldTree. El árbol de rosas es una máquina de Moore, ver notas arriba. Su mapa de nombres de ruta t  : {0,1} → {'a','b','c' } se define por t ( p ) ser respectivamente igual a 'a' o 'b' o 'c' según n  mod  3 donde n es el número de ocurrencias de 1 en p .

Relación con las estructuras de datos de árbol

La definición general establece una conexión con las estructuras de datos de árbol:

Los rosales son estructuras arbóreas módulo bisimilitud.

Valores de las estructuras de datos de árbol

Asignación de estructuras de datos de árbol a sus valores

Las "estructuras de árbol" son aquellos apq (denominados multidigrafos según la definición general) en los que cada nodo es accesible mediante una única ruta de flecha. Todo árbol de rosas es bisimilar a una estructura de árbol de este tipo (ya que todo apq es bisimilar a su despliegue ) y toda estructura de árbol de este tipo es bisimilar a exactamente un árbol de rosas, que por lo tanto puede considerarse como el valor de la estructura de árbol.

El diagrama de la derecha muestra un ejemplo de este tipo de mapeo de estructura a valor. En la parte superior del diagrama, se muestra un árbol ordenado T , con 23 nodos etiquetados. En la parte inferior, se muestra un árbol rosa R , que es el valor de T. (Tanto en T como en R , las flechas de los nodos hermanos están implícitamente ordenadas de izquierda a derecha). Existe un mapeo inducido de subárbol a subvalor, parcialmente representado por flechas azules.

Obsérvese que la correspondencia es de muchos a uno: distintas estructuras de datos de árbol pueden tener el mismo valor. Como consecuencia particular, un árbol de rosas en general no es un árbol en términos de la relación de "subvalores" entre sus subvalores, véase #Controversia_terminológica .

Tipo de datos de árbol

El mapeo de valores descrito anteriormente se puede utilizar para aclarar la diferencia entre los términos "estructura de datos de árbol" y "tipo de datos de árbol":

Un tipo de datos de árbol es un conjunto de valores de estructuras de datos de árbol . [ dt 1 ]

Cabe señalar que existe un grado de discrepancia entre ambos términos. Esto se hace evidente al comparar un único tipo de dato de árbol con una única estructura de datos de árbol. Un único tipo de dato de árbol contiene infinitos valores, cada uno de los cuales está representado por infinitos tipos de datos de árbol.

Por ejemplo, dado un conjunto L = {'a','b','c','d' } de etiquetas, el conjunto de árboles de rosas en el sentido de Haskell (3b) con etiquetas tomadas de L es un único tipo de dato de árbol. Todos los ejemplos anteriores de árboles de rosas pertenecen a este tipo de dato.

Notas:

  1. Sin embargo, no todos los conjuntos de valores de las estructuras de datos de árbol son un tipo de dato de árbol.

Controversia terminológica

Como se puede observar en el texto y los diagramas anteriores, el término "rosal" es controvertido. Hay dos cuestiones interrelacionadas:

  1. Significado oscuro de "nodo".
  2. Discrepancia entre "árbol" y "compartición de subestructuras".

Curiosamente, el término «nodo» no aparece en el artículo original [ 3 ], salvo una única mención de «nodos» en un párrafo informal de la página 20. En la literatura posterior, la palabra se utiliza con frecuencia. Esto ya se puede observar en los comentarios citados a las definiciones:

  • Un rosal [...] es una hoja [...] o un nudo [...] . [ 4 ]
  • Un elemento de Rose α consiste en un nodo etiquetado [...] . [ 1 ]

En particular, la definición de árboles de rosas en el sentido más común de Haskell sugiere que (en el contexto del discurso) "nodo" y "árbol" son sinónimos. ¿Significa esto que cada árbol de rosas coincide con su nodo raíz? De ser así, ¿se considera esta propiedad específica de los árboles de rosas o también se aplica a otros árboles? Estas preguntas quedan sin respuesta.

El problema (B) se hace evidente al observar los diagramas de los ejemplos anteriores. Ambos diagramas son fieles en el sentido de que cada nodo se dibuja exactamente una vez . Se puede ver inmediatamente que los grafos subyacentes no son árboles. Citando a Tree (teoría de grafos):

Los distintos tipos de estructuras de datos denominadas árboles en informática tienen grafos subyacentes que son árboles en la teoría de grafos [...]

Se puede concluir que los rosales en general no son árboles en el sentido habitual que se conoce en la informática.

rosal bayesiano

Existe al menos una adopción del término "árbol de rosas" en informática en la que se excluye el "compartir subestructuras". El concepto de un árbol de rosas bayesiano se basa en la siguiente definición de árboles de rosas:

T es un árbol de rosas si T = {x } para algún punto de datos x o T = { T1 , ..., TnT } donde los Ti son árboles de rosas sobre conjuntos disjuntos de puntos de datos. [ 14 ]

Referencias

  1. 1 2 3 Bird, Richard (1998). Introducción a la programación funcional con Haskell . Hemel Hempstead, Hertfordshire, Reino Unido: Prentice Hall Europe. pág.  195. ISBN 0-13-484346-0.
  2. Malcolm, Grant (1990). "Estructuras de datos y transformación de programas" . Science of Computer Programming . 14 (2): 255– 279. doi : 10.1016/0167-6423(90)90023-7 .
  3. 1 2 3 4 Meertens, Lambert (enero de 1988). "Primeros pasos hacia la teoría de los árboles de rosas" (PDF) .{{cite journal}}: Para citar una revista se requiere |journal=( ayuda )
  4. 1 2 Bird, Richard; Gibbons, Jeremy (2020). Diseño de algoritmos con Haskell . Cambridge University Press. ISBN 9781108491617.
  5. Skillicorn, David B. (1996). "Implementación paralela de esqueletos de árboles" (PDF) . Journal of Parallel and Distributed Computing . 39 (2): 115– 125. doi : 10.1006/jpdc.1996.0160 .
  6. Seemann, Mark. "Rosacarrón con código eclesiástico" .
  7. Morawietz, Frank (2008). Enfoques de dos pasos para el formalismo del lenguaje natural . Walter de Gruyter. ISBN 9783110197259.
  8. Kosky, Anthony (1995). Transformación de bases de datos con estructuras de datos recursivas (Tesis).
  9. Niwiński, Damian (1997). "Caracterización de punto fijo del comportamiento infinito de sistemas de estados finitos" (PDF) . Theoretical Computer Science . 189 ( 1–2 ): 1–69 . doi : 10.1016/S0304-3975(97)00039-X .
  10. Dagnino, Francesco (2020). "Coaxiomas: definiciones coinductivas flexibles mediante sistemas de inferencia" . Métodos lógicos en informática . 15 4745. arXiv : 1808.02943 . doi : 10.23638/LMCS-15(1:26)2019 . S2CID 51955443 . 
  11. "Data.Tree" .
  12. "contenedores: Surtidos tipos de contenedores de hormigón" .
  13. Gibbons, Jeremy (1991). Álgebras para algoritmos de árboles (PDF) (Ph.D.). Universidad de Oxford.
  14. Blundell, Charles; Whye Teh, Yee; Heller, Katherine A. (2010). Árboles de rosas bayesianos (PDF) . 26.ª Conferencia sobre Incertidumbre en Inteligencia Artificial.