Fehlerbehebung bei bin. Treesa

This commit is contained in:
Oliver Hofmann 2026-05-04 16:03:23 +02:00
parent 24d15e1e44
commit a553d7fd01
4 changed files with 25 additions and 15 deletions

View File

@ -4,19 +4,23 @@ from vorlesung.L05_binaere_baeume.avl_tree import AVLTree
def analyze_complexity(sizes):
import random
sizes = list(sizes)
elements = random.sample(range(max(sizes) * 10), max(sizes))
ctx = AlgoContext()
tree = AVLTree(ctx)
prev = 0
for size in sizes:
z = Array.random(size, -100, 100, ctx)
tree = AVLTree(ctx)
for i in range(size - 1):
tree.insert(z[i].value)
for i in range(prev, size - 1):
tree.insert(elements[i])
ctx.reset()
tree.insert(z[size - 1].value)
tree.insert(elements[size - 1])
ctx.save_stats(size)
prev = size
ctx.plot_stats(["comparisons"])
if __name__ == "__main__":
sizes = range(1, 1001, 2)
sizes = range(10, 501, 10)
analyze_complexity(sizes)

View File

@ -4,19 +4,25 @@ from vorlesung.L05_binaere_baeume.bin_tree import BinaryTree
def analyze_complexity(sizes):
import random
sizes = list(sizes)
# Alle Elemente vorab erzeugen Baum wird inkrementell aufgebaut statt
# für jede Größe neu, dadurch O(n log n) statt O(n²) Gesamtaufwand.
elements = random.sample(range(max(sizes) * 10), max(sizes))
ctx = AlgoContext()
tree = BinaryTree(ctx)
prev = 0
for size in sizes:
z = Array.random(size, -100, 100, ctx)
tree = BinaryTree(ctx)
for i in range(size - 1):
tree.insert(z[i].value)
for i in range(prev, size - 1): # Warm-up: ohne Messung einfügen
tree.insert(elements[i])
ctx.reset()
tree.insert(z[size - 1].value)
tree.insert(elements[size - 1]) # gemessener Insert
ctx.save_stats(size)
prev = size
ctx.plot_stats(["comparisons"])
if __name__ == "__main__":
sizes = range(1, 1001, 2)
sizes = range(10, 501, 10)
analyze_complexity(sizes)

View File

@ -42,7 +42,7 @@ class BinaryTree:
def search(self, value):
current = self.root
value = self.new_node(value)
while current:
while current is not None:
if value < current:
current = current.left
elif value > current:

View File

@ -16,8 +16,8 @@ class BinaryTreeNode(Int):
self.right = None
def height(self):
left_height = self.left.height() if self.left else 0
right_height = self.right.height() if self.right else 0
left_height = self.left.height() if self.left is not None else 0
right_height = self.right.height() if self.right is not None else 0
return 1 + max(left_height, right_height)
def __repr__(self):