forked from hofmannol/AlgoDatSoSe25
79 lines
2.5 KiB
Python
79 lines
2.5 KiB
Python
import logging
|
|
logger = logging.getLogger(__name__)
|
|
# logging.basicConfig(level=logging.DEBUG)
|
|
|
|
import time
|
|
|
|
def timeMS(func, *args, **kwargs):
|
|
startTime = time.perf_counter()
|
|
result = func(*args, **kwargs)
|
|
endTime = time.perf_counter()
|
|
elapsedMS = (endTime - startTime) * 1000 # Convert to milliseconds
|
|
print(f"{func.__name__} took {elapsedMS:.2f} ms")
|
|
return result
|
|
|
|
|
|
from utils.memory_array import MemoryArray
|
|
from utils.memory_cell import MemoryCell
|
|
from utils.literal import Literal
|
|
from utils.constants import MAX_VALUE
|
|
from utils.memory_manager import MemoryManager
|
|
from utils.memory_range import mrange
|
|
from vorlesung.L05_binaere_baeume.bin_tree import BinaryTree
|
|
from vorlesung.L05_binaere_baeume.bin_tree_node import BinaryTreeNode
|
|
|
|
def analyze_complexity(fn, sizes):
|
|
"""
|
|
Analysiert die Komplexität einer maximalen Teilfolgenfunktion.
|
|
|
|
:param max_sequence_func: Die Funktion, die analysiert wird.
|
|
:param sizes: Eine Liste von Eingabegrößen für die Analyse.
|
|
"""
|
|
for size in sizes:
|
|
MemoryManager.purge() # Speicher zurücksetzen
|
|
random_array = MemoryArray.create_random_array(size, -100, 100)
|
|
fn(random_array, Literal(0), random_array.length().pred())
|
|
MemoryManager.save_stats(size)
|
|
|
|
MemoryManager.plot_stats(["cells", "adds", "compares", "reads", "writes"])
|
|
|
|
lineAccumulator = []
|
|
|
|
# its not getting forwarded so we can not work with return. I will try glob vars to append the string
|
|
# Signature: def print_node(node, indent=0, line=None):
|
|
def clbk_graphvizify(toDecorate : BinaryTreeNode, indent=0, line=None):
|
|
global lineAccumulator
|
|
|
|
lineAccumulator.append(f"n_{id(toDecorate)} [label={toDecorate.value}]")
|
|
|
|
# Create edges for nodes with Child (use l - r)
|
|
if toDecorate.left is not None:
|
|
lineAccumulator.append(f"n_{id(toDecorate)} -> n_{id(toDecorate.left)}")
|
|
|
|
if toDecorate.right is not None:
|
|
lineAccumulator.append(f"n_{id(toDecorate)} -> n_{id(toDecorate.right)}")
|
|
|
|
def graphvizify() -> str:
|
|
# Header
|
|
result = "digraph {\n\t"
|
|
# Body
|
|
result += ('\n\t'.join(str(item) for item in lineAccumulator))
|
|
# Foot
|
|
result += "\n}"
|
|
return result
|
|
|
|
|
|
if __name__ == '__main__':
|
|
tree = BinaryTree()
|
|
values = [5, 3, 7, 2, 4, 6, 5, 8]
|
|
|
|
binTreeData = MemoryArray.create_array_from_file("data/seq0.txt")
|
|
for value in binTreeData:
|
|
tree.insert(value)
|
|
|
|
# for value in values:
|
|
# tree.insert(value)
|
|
|
|
tree.in_order_traversal(clbk_graphvizify)
|
|
print(graphvizify())
|