Введение

В информатике алгоритм Сети–Уллмана — это алгоритм, названный в честь его изобретателей, Рави Сети и Джеффри Д. Уллмана, предназначенный для преобразования абстрактных синтаксических деревьев в машинный код с использованием минимального количества регистров.

Обзор

При генерации кода для арифметических выражений компилятор должен определить оптимальный способ трансляции выражения с точки зрения количества используемых инструкций и числа регистров, необходимых для вычисления заданного поддерева. Особенно, когда свободных регистров недостаточно, порядок вычисления может существенно влиять на длину генерируемого кода, поскольку различные порядки могут приводить к большему или меньшему числу промежуточных значений, которые необходимо сбрасывать в память и затем восстанавливать. Алгоритм Сети–Уллмана (также известный как нумерация Сети–Уллмана) генерирует код, требующий минимального количества инструкций и минимального числа обращений к памяти (при условии, что коммутативность и ассоциативность применимы к используемым операторам, но законы дистрибутивности – нет). Алгоритм также эффективен, если для используемых выражений не выполняются ни коммутативность, ни ассоциативность, и, следовательно, арифметические преобразования неприменимы. Кроме того, алгоритм не использует общие подвыражения и не применяется напрямую к выражениям, представленным в виде общих ориентированных ациклических графов, а не деревьев.

Расширенный алгоритм Сети-Уллмана

В усовершенствованной версии алгоритма Сети–Уллмана арифметические выражения сначала преобразуются с использованием алгебраических свойств применяемых операторов.