forked from hofmannol/AlgoDatSoSe25
Implemented graphvizify
This commit is contained in:
parent
141ff08b82
commit
552f226e76
78
schoeffelbe/pr05.py
Normal file
78
schoeffelbe/pr05.py
Normal file
@ -0,0 +1,78 @@
|
||||
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())
|
Loading…
x
Reference in New Issue
Block a user