29 lines
891 B
Python
29 lines
891 B
Python
from utils.algo_context import AlgoContext
|
||
from utils.algo_array import Array
|
||
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:
|
||
for i in range(prev, size - 1): # Warm-up: ohne Messung einfügen
|
||
tree.insert(elements[i])
|
||
ctx.reset()
|
||
tree.insert(elements[size - 1]) # gemessener Insert
|
||
ctx.save_stats(size)
|
||
prev = size
|
||
|
||
ctx.plot_stats(["comparisons"])
|
||
|
||
|
||
if __name__ == "__main__":
|
||
sizes = range(10, 501, 10)
|
||
analyze_complexity(sizes)
|