Implementando la eliminación de subexpresiones comunes

Estoy buscando implementar la eliminación de subexpresiones comunes (CSE) para gráficos de expresión correspondientes a grandes expresiones matemáticas (millones de nodos).

¿Qué algoritmos son adecuados para realizar esto? Estaba buscando en Internet un algoritmo fácil de implementar pero no pude encontrar nada. Si es posible, el algoritmo debe tener una complejidad lineal en el número de nodos del gráfico de expresión completo.

preguntado el 04 de julio de 12 a las 10:07

Esta representación podría ayudar: masonchang.com/blog/2010/8/9/… -

1 Respuestas

¿Estas son expresiones sin efectos secundarios? Luego, lo más fácil es dividir los árboles de cada subexpresión en cubos para determinar los candidatos para la eliminación de la subexpresión. Este es un caso especial de CSE donde todas las expresiones están en un solo (enorme) "bloque básico". (Utilizo esta idea como base para detectar codigo duplicado.)

Si las expresiones tienen orden y efectos secundarios, es posible que desee considerar Numeración de valores.

Respondido 04 Jul 12, 11:07

Bien, no hay efectos secundarios. Si entiendo su sugerencia correctamente, debería recorrer los nodos de la expresión, en el orden de las dependencias, y en cada paso verificar si una expresión ya está presente en un mapa hash. Si está presente, use esta subexpresión en su lugar, si no, agréguela al mapa hash. ¿Se entiende esto correctamente? - Joel

Sí. "En el orden de las dependencias" significa de abajo hacia arriba para cada árbol. - ira baxter

En realidad estaba pensando en esta estrategia. ¿Qué tipo de hash usarías? - Joel

No importa mucho Desea una función hash que mapee la mayoría de los árboles de manera uniforme en los contenedores. Si puede construir una función hash sin procesar (algo que produce 32 o 64 bits de valor hash) en un nodo de hoja única, puede componer hashes de niños para obtener un código hash principal simplemente agregando/excluyendo los hash de los niños. Entonces, el código hash es simplemente ese valor hash módulo el número de cubos en su mapa hash. - ira baxter

está bien. Voy a intentar eso entonces. ¡Gracias! - Joel

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.