En informática , un diagrama de decisión binaria ( DDB ) o programa de ramificación es una estructura de datos que se utiliza para representar una función booleana . En un nivel más abstracto, los DDB pueden considerarse como una representación comprimida de conjuntos o relaciones . A diferencia de otras representaciones comprimidas, las operaciones se realizan directamente sobre la representación comprimida, es decir, sin descompresión.
Entre las estructuras de datos similares se incluyen la forma normal de negación (NNF), los polinomios de Zhegalkin y los grafos acíclicos dirigidos proposicionales (PDAG).
Definición
Una función booleana se puede representar como un grafo acíclico, dirigido y con raíz , que consta de varios nodos (de decisión) y dos nodos terminales. Los dos nodos terminales están etiquetados como 0 (FALSO) y 1 (VERDADERO). Cada nodo (de decisión)está etiquetado por una variable booleanay tiene dos nodos hijos llamados hijo bajo e hijo alto. La arista desde el nodoA un niño de bajo (o alto) nivel se le asigna el valor FALSO (o VERDADERO, respectivamente) a la variable.Un BDD se denomina "ordenado" si las diferentes variables aparecen en el mismo orden en todos los caminos desde la raíz. Un BDD se considera "reducido" si se han aplicado las dos reglas siguientes a su grafo:
- Fusiona cualquier subgrafo isomorfo .
- Elimine cualquier nodo cuyos dos hijos sean isomorfos.
En el uso común, el término BDD casi siempre se refiere al Diagrama de Decisión Binaria Ordenada Reducida ( ROBDD en la literatura, utilizado cuando es necesario enfatizar los aspectos de ordenación y reducción). La ventaja de un ROBDD es que es canónico (único salvo isomorfismo) para un orden de función y variable particular. [ 1 ] Esta propiedad lo hace útil en la verificación de equivalencia funcional y otras operaciones como el mapeo de tecnología funcional.
Una ruta desde el nodo raíz hasta el terminal 1 representa una asignación de variable (posiblemente parcial) para la cual la función booleana representada es verdadera. A medida que la ruta desciende a un hijo de menor (o mayor) nivel desde un nodo, la variable de ese nodo se asigna a 0 (o 1, respectivamente).
Ejemplo
La figura de la izquierda a continuación muestra un árbol de decisión binario (no se aplican las reglas de reducción) y una tabla de verdad , cada una de las cuales representa la función.En el árbol de la izquierda, el valor de la función se puede determinar para una asignación de variable dada siguiendo un camino hacia abajo en el gráfico hasta un terminal. En las figuras siguientes, las líneas punteadas representan aristas a un hijo bajo, mientras que las líneas continuas representan aristas a un hijo alto. Por lo tanto, para encontrar, comienza en x 1 , recorre la línea punteada hacia abajo hasta x 2 (ya que x 1 tiene una asignación de 0), luego hacia abajo dos líneas continuas (ya que x 2 y x 3 tienen cada una una asignación de uno). Esto conduce al terminal 1, que es el valor de.
El árbol de decisión binario de la figura izquierda se puede transformar en un diagrama de decisión binario reduciéndolo al máximo según las dos reglas de reducción. El diagrama de decisión binario resultante se muestra en la figura derecha.
Otra notación para escribir esta función booleana es.
Bordes complementados

Un ROBDD puede representarse aún más compactamente, utilizando aristas complementadas, también conocidas como enlaces de complemento . [ 2 ] [ 3 ] El BDD resultante a veces se conoce como un BDD tipado [ 4 ] o BDD con signo . Las aristas complementadas se forman anotando las aristas bajas como complementadas o no. Si una arista está complementada, entonces se refiere a la negación de la función booleana que corresponde al nodo al que apunta la arista (la función booleana representada por el BDD con raíz en ese nodo). Las aristas altas no están complementadas, para asegurar que la representación BDD resultante sea una forma canónica. En esta representación, los BDD tienen un único nodo hoja, por razones que se explican más adelante.
Dos ventajas de utilizar aristas complementadas al representar BDD son:
- Calcular la negación de un BDD lleva tiempo constante
- El uso de espacio (es decir, la memoria requerida) se reduce (en un factor máximo de 2).
Sin embargo, Knuth [ 5 ] argumenta lo contrario:
Si bien este tipo de enlaces son utilizados por todos los paquetes BDD principales, resulta difícil recomendarlos, ya que los programas informáticos se vuelven mucho más complejos. El ahorro de memoria suele ser insignificante, y nunca supera el doble; además, los experimentos del autor muestran una escasa mejora en el tiempo de ejecución.
En esta representación, una referencia a un BDD es una arista (posiblemente complementada) que apunta a la raíz del BDD. Esto contrasta con una referencia a un BDD en la representación sin el uso de aristas complementadas, que es el nodo raíz del BDD. La razón por la que una referencia en esta representación debe ser una arista es que, para cada función booleana, la función y su negación se representan mediante una arista a la raíz de un BDD y una arista complementada a la raíz del mismo BDD. Por eso la negación requiere un tiempo constante. También explica por qué basta con un solo nodo hoja: FALSO se representa mediante una arista complementada que apunta al nodo hoja, y VERDADERO se representa mediante una arista ordinaria (es decir, no complementada) que apunta al nodo hoja.
Por ejemplo, supongamos que una función booleana se representa mediante un BDD utilizando aristas complementadas. Para hallar el valor de la función booleana para una asignación dada de valores (booleanos) a las variables, comenzamos en la arista de referencia, que apunta a la raíz del BDD, y seguimos la ruta definida por los valores de las variables (siguiendo una arista baja si la variable que etiqueta un nodo es FALSE, y siguiendo la arista alta si la variable que etiqueta un nodo es TRUE), hasta llegar al nodo hoja. Mientras seguimos esta ruta, contamos cuántas aristas complementadas hemos recorrido. Si al llegar al nodo hoja hemos cruzado un número impar de aristas complementadas, entonces el valor de la función booleana para la asignación de variables dada es FALSE; de lo contrario (si hemos cruzado un número par de aristas complementadas), entonces el valor de la función booleana para la asignación de variables dada es TRUE.
A la derecha se muestra un diagrama de ejemplo de un BDD en esta representación, que representa la misma expresión booleana que se muestra en los diagramas anteriores, es decir,Las aristas bajas se representan con líneas discontinuas, las altas con líneas continuas y las aristas complementadas con un círculo en su origen. El nodo con el símbolo @ representa la referencia al BDD; es decir, la arista de referencia es la que parte de este nodo.
Historia
La idea básica a partir de la cual se creó la estructura de datos es la expansión de Shannon . Una función de conmutación se divide en dos subfunciones (cofactores) al asignar una variable (cf. forma normal if-then-else ). Si dicha subfunción se considera como un subárbol, puede representarse mediante un árbol de decisión binario . Los diagramas de decisión binarios (BDD) fueron introducidos por CY Lee, [ 6 ] y posteriormente estudiados y divulgados por Sheldon B. Akers [ 7 ] y Raymond T. Boute. [ 8 ] Independientemente de estos autores, Yu. V. Mamrukov implementó un BDD bajo el nombre de "forma de corchete canónico" en un CAD para el análisis de circuitos independientes de la velocidad. [ 9 ] Randal Bryant , de la Universidad Carnegie Mellon , investigó todo el potencial de los algoritmos eficientes basados en la estructura de datos : sus extensiones clave fueron el uso de un orden fijo de variables (para la representación canónica) y subgrafos compartidos (para la compresión). La aplicación de estos dos conceptos da como resultado una estructura de datos eficiente y algoritmos para la representación de conjuntos y relaciones. [ 10 ] [ 11 ] Al extender el uso compartido a varios BDD, es decir, un subgrafo es utilizado por varios BDD, se define la estructura de datos Diagrama de Decisión Binaria Ordenada Reducida Compartida . [ 2 ] La noción de BDD se utiliza ahora generalmente para referirse a esa estructura de datos en particular.
En su videoconferencia " Diversión con diagramas de decisión binarios (BDD)" , Donald Knuth afirma que los BDD son "una de las pocas estructuras de datos realmente fundamentales que surgieron en los últimos veinticinco años" y menciona que el artículo de Bryant de 1986 fue durante un tiempo uno de los artículos más citados en ciencias de la computación. [ 12 ]
Adnan Darwiche y sus colaboradores han demostrado que los BDD son una de las diversas formas normales para funciones booleanas, cada una inducida por una combinación diferente de requisitos. Otra forma normal importante identificada por Darwiche es la forma normal de negación descomponible o DNNF.
Aplicaciones
Los BDD se utilizan ampliamente en software CAD para sintetizar circuitos ( síntesis lógica ) y en verificación formal y verificación de redes . Existen varias aplicaciones menos conocidas de BDD, como el análisis de árboles de fallos , el razonamiento bayesiano , la configuración de productos y la recuperación de información privada . [ 13 ] [ 14 ]
Cualquier BDD arbitrario (incluso si no es reducido u ordenado) puede implementarse directamente en hardware reemplazando cada nodo con un multiplexor de 2 a 1 ; cada multiplexor puede implementarse directamente con una LUT de 4 bits en una FPGA . No es tan sencillo convertir una red arbitraria de puertas lógicas a un BDD (a diferencia del grafo inversor AND ).
Los BDD se han aplicado en intérpretes Datalog eficientes . [ 15 ]
Ordenación variable
El tamaño del BDD está determinado tanto por la función que se representa como por el orden elegido de las variables. Existen funciones booleanas.para lo cual, dependiendo del orden de las variables, terminaríamos obteniendo un grafo cuyo número de nodos sería lineal (en n ) en el mejor de los casos y exponencial en el peor (por ejemplo, un sumador de acarreo en cascada ). Consideremos la función booleana Utilizando el orden de variables, el BDD necesitanodos para representar la función. Utilizando el ordenamiento, el BDD consta denodos.
Es de vital importancia considerar el orden de las variables al aplicar esta estructura de datos en la práctica. El problema de encontrar el mejor orden de variables es NP-difícil . [ 16 ] Para cualquier constante c > 1, es incluso NP-difícil calcular un orden de variables que dé como resultado un OBDD con un tamaño que sea como máximo c veces mayor que uno óptimo. [ 17 ] Sin embargo, existen heurísticas eficientes para abordar el problema. [ 18 ]
Perfeccionamientos
Hay funciones para las cuales el tamaño de la gráfica siempre es exponencial, independientemente del orden de las variables. Esto se cumple, por ejemplo, para la función de multiplicación. [ 1 ] De hecho, la función que calcula el bit central del producto de dos-los números de bits no tienen un OBDD menor quevértices. [ 19 ] (Si la función de multiplicación tuviera OBDD de tamaño polinomial, mostraría que la factorización entera está en P/poly , lo cual no se sabe que sea cierto. [ 20 ] ) Otro ejemplo notorio es la función de bit de peso oculto, considerada como la función más simple con un BDD de tamaño exponencial. [ 21 ]
Los investigadores han sugerido mejoras en la estructura de datos BDD, dando lugar a una serie de gráficos relacionados, tales como:
- BMD ( diagramas de momentos binarios ),
- ZDD ( diagramas de decisión con supresión de ceros ),
- FBDD ( diagramas de decisión binarios libres ), donde cualquier ruta desde la raíz hasta un nodo hoja lee cada variable como máximo una vez. Cualquier OBDD es un FBDD.
- FDD ( diagramas de decisión funcional ),
- MDD ( diagramas de decisión multivaluados ), que generalizan los BDD al permitir que las variables de decisión tomen más de dos valores, [ 22 ]
- PDD ( diagramas de decisión de paridad ),
- MTBDD (BDD de múltiples terminales),
- TDD ( diagramas de decisión ternarios ), donde se agrega una rama "desconocida" para hacer que las operaciones consecutivas de unión/disyunción sean perezosas , evitando el crecimiento exponencial del tamaño. [ 23 ]
- NDD ( diagramas de decisión de red ),
Operaciones lógicas en BDD
Muchas operaciones lógicas en BDD se pueden implementar mediante algoritmos de manipulación de grafos de tiempo polinomial : [ 24 ] : 20
Sin embargo, repetir estas operaciones varias veces, por ejemplo, formar la conjunción o disyunción de un conjunto de BDD, puede, en el peor de los casos, resultar en un BDD exponencialmente grande. Esto se debe a que cualquiera de las operaciones anteriores para dos BDD puede resultar en un BDD con un tamaño proporcional al producto de los tamaños de los BDD, y, en consecuencia, para varios BDD el tamaño puede ser exponencial en el número de operaciones. Es necesario reconsiderar el orden de las variables; lo que puede ser un buen orden para (algunos de) los BDD del conjunto puede no ser un buen orden para el resultado de la operación. Además, dado que la construcción del BDD de una función booleana resuelve el problema de satisfacibilidad booleana NP-completo y el problema de tautología co-NP-completo , la construcción del BDD puede tomar un tiempo exponencial en el tamaño de la fórmula booleana, incluso cuando el BDD resultante es pequeño.
El cálculo de la abstracción existencial sobre múltiples variables de BDD reducidos es NP-completo. [ 25 ]
El conteo de modelos, que consiste en contar el número de asignaciones que satisfacen una fórmula booleana, se puede realizar en tiempo polinomial para BDDs. Para fórmulas proposicionales generales, el problema es ♯P -completo y los mejores algoritmos conocidos requieren un tiempo exponencial en el peor de los casos.
Véase también
- Problema de satisfacibilidad booleana , el problema computacional NP-completo canónico.
- L/poly , una clase de complejidad que contiene estrictamente el conjunto de problemas con BDD de tamaño polinomial.
- Verificación de modelos
- Árbol de raíz
- Teorema de Barrington
- aceleración de hardware
- Mapa de Karnaugh , un método para simplificar expresiones de álgebra booleana.
- Diagrama de decisión con supresión de ceros
- Diagrama de decisión algebraico , una generalización de los BDD desde conjuntos de dos elementos a conjuntos finitos arbitrarios.
- Diagrama de decisión sentencial , una generalización de OBDD
- Diagrama de influencia
Referencias
- 1 2 Bryant, Randal E. (agosto de 1986). "Algoritmos basados en grafos para la manipulación de funciones booleanas" (PDF) . IEEE Transactions on Computers . C-35 (8): 677– 691. CiteSeerX 10.1.1.476.2952 . doi : 10.1109/TC.1986.1676819 . S2CID 10385726 .
- 1 2 Brace, Karl S.; Rudell, Richard L.; Bryant, Randal E. (1990). "Implementación eficiente de un paquete BDD". Actas de la 27.ª Conferencia ACM/IEEE sobre Automatización del Diseño (DAC 1990) . IEEE Computer Society Press. págs. 40–45 . doi : 10.1145/123186.123222 . ISBN 978-0-89791-363-8.
- ↑ Somenzi, Fabio (1999). «Diagramas de decisión binarios» (PDF) . Diseño de sistemas de cálculo . Serie científica F de la OTAN: Ciencias de la computación y de sistemas. Vol. 173. IOS Press. págs. 303–366 . ISBN 978-90-5199-459-9.
- ↑ Jean-Christophe Madre; Jean-Paul Billon (1988). «Demostración de la corrección de circuitos mediante la comparación formal entre el comportamiento esperado y el extraído». Actas de la 25.ª Conferencia ACM/IEEE sobre Automatización del Diseño, DAC '88, Anaheim, CA, EE. UU., 12-15 de junio de 1988. págs. 205-210 . doi : 10.1109/DAC.1988.14759 . ISBN 0-8186-0864-1.
- ↑ Knuth, DE (2009). Fascículo 1: Trucos y técnicas bit a bit; Diagramas de decisión binarios . El arte de la programación informática . Vol. 4. Addison–Wesley. ISBN 978-0-321-58050-4.Borrador del fascículo 1b archivado el 12 de marzo de 2016 en Wayback Machine, disponible para su descarga.
- ↑ Lee, CY (1959). "Representación de circuitos de conmutación mediante programas de decisión binaria". Bell System Technical Journal . 38 (4): 985– 999. doi : 10.1002/j.1538-7305.1959.tb01585.x .
- ↑ Akers, Jr., Sheldon B (junio de 1978). "Diagramas de decisión binarios". IEEE Transactions on Computers . C-27 (6): 509– 516. doi : 10.1109/TC.1978.1675141 . S2CID 21028055 .
- ↑ Boute, Raymond T. (enero de 1976). "La máquina de decisión binaria como controlador programable". Boletín EUROMICRO . 1 (2): 16– 22. doi : 10.1016/0303-1268(76)90033-X .
- ↑ Mamrukov, Yu. V. (1984). Análisis de circuitos aperiódicos y procesos asíncronos (Tesis doctoral). Instituto Electrotécnico de Leningrado.
- ↑ Bryant., Randal E. (1986). "Algoritmos basados en grafos para la manipulación de funciones booleanas" (PDF) . IEEE Transactions on Computers . C-35 (8): 677– 691. doi : 10.1109/TC.1986.1676819 . S2CID 10385726 .
- ↑ Bryant, Randal E. (septiembre de 1992). "Manipulación booleana simbólica con diagramas de decisión binarios ordenados" . ACM Computing Surveys . 24 (3): 293– 318. doi : 10.1145/136035.136043 . S2CID 1933530 .
- ↑ "Centro de Desarrollo Profesional de Stanford" . scpd.stanford.edu . Archivado del original el 4 de junio de 2014. Consultado el 23 de abril de 2018 .
- ↑ Jensen, RM (2004). "CLab: Una biblioteca C++ para la configuración interactiva rápida de productos sin retroceso" . Actas de la Décima Conferencia Internacional sobre Principios y Práctica de la Programación con Restricciones . Lecture Notes in Computer Science. Vol. 3258. Springer. p. 816. doi : 10.1007/978-3-540-30201-8_94 . ISBN 978-3-540-30201-8.
- ↑ Lipmaa, HL (2009). "Primer protocolo CPIR con computación dependiente de datos" (PDF) . Conferencia Internacional sobre Seguridad de la Información y Criptología . Lecture Notes in Computer Science. Vol. 5984. Springer. pp. 193–210 . doi : 10.1007/978-3-642-14423-3_14 . ISBN 978-3-642-14423-3.
- ↑ Whaley, John; Avots, Dzintars; Carbin, Michael; Lam, Monica S. (2005). "Uso de Datalog con diagramas de decisión binarios para el análisis de programas" . En Yi, Kwangkeun (ed.). Lenguajes y sistemas de programación . Lecture Notes in Computer Science. Vol. 3780. Berlín, Heidelberg: Springer. pp. 97–118 . doi : 10.1007/11575467_8 . ISBN 978-3-540-32247-4. S2CID 5223577 .
- ↑ Bollig, Beate; Wegener, Ingo (septiembre de 1996). "Mejorar el ordenamiento de variables de OBDD es NP-completo". IEEE Transactions on Computers . 45 (9): 993– 1002. doi : 10.1109/12.537122 .
- ↑ Sieling, Detlef (2002). "La no aproximabilidad de la minimización OBDD" . Information and Computation . 172 (2): 103– 138. doi : 10.1006/inco.2001.3076 .
- ↑ Rice, Michael. "Un estudio de heurísticas de ordenación estática de variables para la construcción eficiente de BDD/MDD" (PDF) .
- ↑ Woelfel, Philipp (2005). "Límites del tamaño OBDD de la multiplicación de enteros mediante hash universal" . Journal of Computer and System Sciences . 71 (4): 520– 534. CiteSeerX 10.1.1.138.6771 . doi : 10.1016/j.jcss.2005.05.004 .
- ↑ Richard J. Lipton . "BDD y factorización" . Gödel's Lost Letter and P=NP , 2009.
- ↑ Méaux, Pierrick; Seuré, Tim; Deng, Tang (2024). "La función de bit de peso oculto revisada" (PDF) . Archivo de preimpresiones de criptología de la IACR : 24. Recuperado el 19 de junio de 2025 .
- ↑ Miller, D. Michael; Drechsler, Rolf (1998). "Sobre la construcción de diagramas de decisión multivaluados". Actas del 28.º Simposio Internacional IEEE sobre Lógica Multivaluada (ISMVL) . págs. 264–269 . doi : 10.1109/ISMVL.1998.679191 .
- ↑
- ↑ Andersen, HR (1999). "Introducción a los diagramas de decisión binarios" (PDF) . Apuntes de clase . Universidad de TI de Copenhague.
- ↑ Huth, Michael; Ryan, Mark (2004). Lógica en informática: modelado y razonamiento sobre sistemas (2.ª ed.). Cambridge University Press. pp. 380–. ISBN 978-0-52154310-1OCLC 54960031
Lecturas adicionales
- Ubar, R. (1976). "Generación de pruebas para circuitos digitales mediante grafos alternativos". Actas de la Universidad Técnica de Tallin (en ruso) (409). Tallin, Estonia: 75–81 .
- Meinel, C.; Theobald, T. (2012) [1998]. Algoritmos y estructuras de datos en el diseño VLSI: OBDD – Fundamentos y aplicaciones (PDF) . Springer. ISBN 978-3-642-58940-9.Libro de texto completo disponible para su descarga.
- Ebendt, Rüdiger; Fey, Görschwin; Drechsler, Rolf (2005). Optimización BDD avanzada . Saltador. ISBN 978-0-387-25453-1.
- Becker, Bernd; Drechsler, Rolf (1998). Diagramas de decisión binaria: teoría e implementación . Saltador. ISBN 978-1-4419-5047-5.
Enlaces externos
- Diversión con diagramas de decisión binarios (BDD) , conferencia de Donald Knuth
- Lista de bibliotecas de software BDD para varios lenguajes de programación.
- Diagramas
- Estructuras de datos de grafos
- Verificación de modelos
- Álgebra booleana
- Recopilación de conocimientos