Encontrar la distancia entre dos polinomios (representados como árboles)

20

Un colega que trabaja en programación genética me hizo la siguiente pregunta. Primero intenté resolverlo basado en un enfoque codicioso, pero en un segundo pensamiento, encontré un contraejemplo al algoritmo codicioso. Entonces, pensé que vale la pena mencionarlo aquí.


Considere dos polinomios que están representados por sus árboles de expresión. Por ejemplo, x32x+1 y x2+4 se ilustran a continuación:

Reglas:

  1. Cada nodo es un nombre de variable ( x,y,z, ), un número o una operación (+, -, ×).
  2. El recorrido en orden del árbol debe dar como resultado un polinomio válido.
  3. Los nodos de operación tienen un grado de entrada 2. Otros nodos tienen un grado de entrada 0. Todos los nodos tienen un grado de salida 1 (excepto la raíz, cuyo grado de salida es 0).

En un nodo N del árbol, defina la operación básica de la siguiente manera:

  1. x×
  2. Una operación básica puede construir un árbol de expresión encima de N (vea el ejemplo a continuación).

El costo de la operación básica del tipo 1 es 1. El costo del tipo 2 es igual al número de operaciones {+, -, ×} en el árbol de expresión recién construido.

Ejemplo para el tipo 2: El costo de la siguiente operación básica es 2, ya que el árbol de expresión construido en la parte superior del nodo N usa dos operaciones (- y ×).

Deje que T1 y T2 sean dos árboles de expresión que representan polinomios. Defina la distancia de T1 y T2 de la siguiente manera: el costo mínimo de las operaciones básicas para convertir T1 a T2. Tenga en cuenta que no requerimos que el árbol convertido tenga la misma estructura que T2. Solo queremos que calcule el mismo polinomio que T2. (Vea los comentarios para ver un ejemplo).

El problema: Dados T1 y T2, presentan un algoritmo que calcula su distancia.

Ejemplo 1: Sea T1 y T2 los dos árboles ilustrados al comienzo de esta publicación. Para convertir el árbol derecho al árbol izquierdo, se puede construir un árbol de costo 3 encima de × y cambiar 4 a 1 (el costo total es 4).

x4x4+4x3+6x2+4x+1x(x+1)4x4x36x24x

MS Dousti
fuente
2
Si la operación "borrar" no está permitida, entonces la distancia no es una distancia. Por ejemplo: un árbol T1 = (x * x) +4 no se puede transformar en T2 = x, pero T2 se puede transformar en T1 agregando (* x) y luego (+4) encima de x. Está bien ? O debe definir la distancia como las operaciones mínimas requeridas para convertir T1 a T2 o T2 a T1.
Marzio De Biasi
44
El costo es igual a 0 si y solo si las dos fórmulas aritméticas dadas (sin división) representan el mismo polinomio. Si lo recuerdo correctamente, este es un problema típico en coRP (por asignación aleatoria) que no se sabe que está en P.
Tsuyoshi Ito
44
@ Tsuyoshi: Oh, ya veo. Estás señalando el problema de prueba de identidad polinómica . (Buenas referencias: [1 ] y [2 ]). Debo pensar en esto. Mientras tanto, cualquier sugerencia es bienvenida.
MS Dousti
44
Si eso es. Parece que en la versión típica del problema de prueba de identidad polinómica, dos polinomios de entrada se dan como circuitos, no como fórmulas. Así que mi redacción de que la versión de la fórmula es "típica" probablemente era inexacta. De todos modos, poner incluso la versión de la fórmula en P parece ser un problema abierto.
Tsuyoshi Ito
2
@Vor: en la formulación actual, la entrada T1 es realmente un árbol y la entrada T2 es un polinomio que se da como un árbol, en el siguiente sentido. Cambiar T1 a un árbol diferente que representa el mismo polinomio puede cambiar la respuesta en general, mientras que cambiar T2 de manera similar no lo hace.
Tsuyoshi Ito

Respuestas:

10

La distancia de edición de árbol es una generalización de la distancia de edición de cadena. La distancia entre dos árboles es el número mínimo de inserciones \ eliminaciones \ y etiquetas que se requieren para convertir un árbol en el otro. (cuando eliminamos el nodo v, los hijos de v se convierten en hijos del padre (v)). El problema es NP-duro cuando los árboles no están ordenados, pero cuando están ordenados (es decir, hay un orden de izquierda a derecha entre hermanos) el problema se puede resolver en el tiempo O (n ^ 3) (como en el documento que Sadeq mencionado). Una buena encuesta que describe esto: http://portal.acm.org/citation.cfm?id=1085283

Aviv
fuente
1
Gracias aviv Será genial si combina sus respuestas (creo que tiene problemas con su cuenta anterior). Puedes usar los consejos en esta publicación (Especialmente, este enlace ).
MS Dousti
¿Cómo este enfoque cubriría diferentes árboles con polinomios
equivalentes?