Reingold-Tilford-algoritmus
Kiejtés
- IPA: [ ˈrɛjiŋɡoltilfordɒlɡoritmuʃ]
Főnév
Reingold-Tilford-algoritmus
A Reingold-Tilford-algoritmus egy bináris fák rajzolására szolgáló hatékony algoritmus, amely a fa csomópontjait úgy helyezi el egy kétdimenziós síkon, hogy a fa szerkezete vizuálisan tiszta és jól áttekinthető legyen. Az algoritmus fő célja:
- Minimális szélesség: A fa vízszintesen kompakt legyen.
- Vertikális egyértelműség: A különböző szintek csomópontjai függőlegesen rendezettek legyenek.
- Szimmetria megőrzése: A bal és jobb részfák szimmetrikusan jelenjenek meg.
Fő jellemzők
- Rekurzív megközelítés:
- A fa részfáit először önállóan rajzolja meg.
- Ezután a részfákat megfelelően elhelyezi a gyökér alatt.
- Tengelyek:
- A vízszintes távolság a csomópontok között biztosítja, hogy a részfák ne fedjék egymást.
- A függőleges távolság a fa szintjeinek elkülönítésére szolgál.
- Hatékony futási idő:
- Az algoritmus futási ideje ( O(n) ), ahol ( n ) a fa csomópontjainak száma.
Algoritmus lépései
- Rekurzív fa feldolgozás:
- A bal és jobb részfákat külön-külön megrajzoljuk.
- Ezeket a részfákat minimális vízszintes távolsággal eltoljuk egymástól.
- Csomópontok közötti távolság biztosítása:
- A részfák között megfelelő “köztávolságot” tartunk, hogy ne legyenek átfedések.
- Vízszintes eltolás:
- A jobb részfát jobbra toljuk a bal részfához képest, amíg nincs átfedés.
- Gyökér csomópont elhelyezése:
- A gyökér csomópontot a részfák közepének megfelelően helyezzük el.
Egyszerű példa
Adott egy bináris fa:
A / \ B C / \ D E
Az algoritmus az alábbi módon rendezi el a csomópontokat:
- A gyökér (A) középen helyezkedik el.
- A részfák (B-D és C-E) szimmetrikusan jelennek meg, a megfelelő szinteken és távolságokkal.
Python Implementáció
Az alábbi implementáció egy egyszerű bináris fa elhelyezését mutatja be Reingold-Tilford módszerrel:
class Node:
"""Bináris fa csomópont osztálya."""
def __init__(self, key):
self.key = key
self.left = None
self.right = None
self.x = 0 # X koordináta
self.y = 0 # Y koordináta
def add_offsets(left, right, offset):
"""A jobb részfát eltolja a megadott távolságra."""
while left and right:
left.x += offset
if left.right:
left = left.right
if right.left:
right = right.left
offset += 1
def reingold_tilford(root, depth=0):
"""
Reingold-Tilford algoritmus a fa elrendezésére.
:param root: A bináris fa gyökere.
:param depth: Az aktuális mélység.
"""
if root is None:
return
# Rekurzív elrendezés a részfákra
reingold_tilford(root.left, depth + 1)
reingold_tilford(root.right, depth + 1)
# Szomszédos részfák közötti távolság
if root.left:
root.left.x = root.x - 1
if root.right:
root.right.x = root.x + 1
# Középre helyezés
if root.left and root.right:
root.x = (root.left.x + root.right.x) // 2
add_offsets(root.left, root.right, 1)
root.y = depth
def print_tree(root):
"""A fa csomópontjainak koordinátáit kiírja."""
if root is not None:
print(f"{root.key}: ({root.x}, {root.y})")
print_tree(root.left)
print_tree(root.right)
# Bináris fa létrehozása
root = Node('A')
root.left = Node('B')
root.right = Node('C')
root.left.left = Node('D')
root.right.right = Node('E')
# Algoritmus futtatása
reingold_tilford(root)
# Eredmények kiírása
print("Csomópontok koordinátái:")
print_tree(root)
Kimenet
Az elhelyezés a következőképpen fog kinézni:
Csomópontok koordinátái: A: (0, 0) B: (-1, 1) C: (1, 1) D: (-2, 2) E: (2, 2)
Ez azt jelenti, hogy: - A gyökér csomópont (A) az origónál ((0, 0)) helyezkedik el. - A bal részfa csomópontjai balra, a jobb részfa csomópontjai pedig jobbra kerülnek, a szintek szerint függőlegesen elrendezve.
Vizualizáció
Az algoritmus által generált vizuális ábra:
A(0,0) / \ B(-1,1) C(1,1) / \ D(-2,2) E(2,2)
Előnyök
- Hatékony futásidő: ( O(n) ), ahol ( n ) a fa csomópontjainak száma.
- Esztétikus elrendezés: Szimmetrikus és tiszta megjelenést biztosít.
- Kis szélesség: Minimalizálja a fa horizontális kiterjedését.
Hátrányok
- Csak bináris fák esetén alkalmazható közvetlenül.
- Bonyolultabb fák esetén a kiterjesztett változatra van szükség.
Alkalmazások
- Adatstruktúrák vizualizációja: Bináris fák ábrázolása.
- Számítógépes grafika: Hierarchikus adatszerkezetek rajzolása.
- Generált fa algoritmusok: Szintaxisfák és döntési fák vizuális megjelenítése.
A Reingold-Tilford algoritmus tehát ideális választás a bináris keresőfák tiszta és szimmetrikus megjelenítésére.
Fordítások
- Reingold-Tilford-algoritmus - Értelmező szótár (MEK)
- Reingold-Tilford-algoritmus - Etimológiai szótár (UMIL)
- Reingold-Tilford-algoritmus - Szótár.net (hu-hu)
- Reingold-Tilford-algoritmus - DeepL (hu-de)
- Reingold-Tilford-algoritmus - Яндекс (hu-ru)
- Reingold-Tilford-algoritmus - Google (hu-en)
- Reingold-Tilford-algoritmus - Helyesírási szótár (MTA)
- Reingold-Tilford-algoritmus - Wikidata
- Reingold-Tilford-algoritmus - Wikipédia (magyar)