Algorytm Sethi-Ullmana: Różnice pomiędzy wersjami
[wersja nieprzejrzana] | [wersja nieprzejrzana] |
Usunięta treść Dodana treść
m robot dodaje: ja:セシィ-ウルマン法 |
m językowe |
||
Linia 6:
Kod:
x = a + (b + (c + (d + x)))
można przekształcić zgodnie z zasadą
t1 = a
t2 = b
Linia 15:
t1 = t1 + t2
x = t1
lub też zgodnie z zasadą
t1 = d + x
t1 = c + t1
Linia 26:
=== Algorytm ===
Algorytm Sethi-Ullmana pozwala nam zawsze znaleźć optymalną postać.
Krok pierwszy polega na
* każdy liść otrzymuje wartość 0;
* jeśli węzeł ma 2 podwęzły o różnych wartościach, otrzymuje wartość większego z nich;
Linia 47:
* w przeciwnym razie:
** generujemy kod dla poddrzewa o większym numerze,
** wykorzystujemy jeden z rejestrów, które zaalokowaliśmy na potrzeby
** generujemy kod dla drugiego poddrzewa,
** scalamy wynik.
Algorytm ten ustali „optymalną” kolejność wykonywania obliczeń.
Oczywiście w praktyce możliwe są inne optymalizacje – możemy przekształcić drzewo korzystając z praw [[Łączność (matematyka)|łączności]] i [[przemienność|przemienności]] działań,
[[kategoria:algorytmy|Sethi-Ullmana]]
|