Графы-выражения.
(x+1)*(x+1)2+(x+1)*x
![]() |
![]() | ![]() | ![]() | ![]() | ||||
![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
Дерево хранит многократно каждое вхождение, но не собственно выражение.
![]() |
Ациклический граф.
Такие графы соответствуют выражениям
частичного порядка.
Задача вычисления выражения, представленного графом, аналогична случаю дерева.
Подзадача «поиск атома, значения атома» аналогична. Но уничтожить терм теперь можно лишь в случае, когда на него нет других ссылок.
1 способ – хранить обратные ссылки и, в случае удаления, проверять, присутствуют ли они.
2 способ – хранить в каждой вершине счётчик ссылок на эту вершину. При каждом вычислении уменьшать значение счётчика. В случае равенства нулю – удалять вершину.
Упражнение. Завершить задачу о вычислении выражения.
* Преобразовать выражение из представления деревом в представление графом и обратно.
Раздельное описание абстрактных типов.