Алгоритмы преобразования упорядоченного дерева в ориентированный ациклический граф

Допустим, у меня есть язык программирования, на котором я могу написать: x = f(g(1), h(1)) в этом случае ориентированный ациклический граф покажет зависимости вычислений, как в электронной таблице (предполагая нерекурсивные выражения):

 1
| \
g  h
 \ /
  f

Это простой пример, но становится интересно попытаться «сжать» более сложные выражения в DAG. Целью здесь является оптимизация количества перерасчетов на основе зависимостей.

Какие алгоритмы и документы доступны для решения этой проблемы?


person sw.    schedule 14.11.2011    source источник


Ответы (2)


Немного более конкретно, это Устранение локальных общих подвыражений. Алгоритм приведен в Dragon Book, "6.1 .2 Метод «значение-число» для построения DAG»

person chill    schedule 14.11.2011

Разработчики компиляторов называют эту проблему удалением общих подвыражений. Каждый достойный учебник по компиляторам освещает эту тему.

Без потока управления вы сможете сделать что-то простое, похожее на сбор хэша.

person Per    schedule 14.11.2011