From 8df24e2aa18c73f893e6a8c36f6e29dd935b3212 Mon Sep 17 00:00:00 2001 From: schoeffelbe82781 Date: Thu, 27 Mar 2025 15:25:43 +0100 Subject: [PATCH] Copied basic structure, added sanityChecks and implemented Algo_2 --- schoeffelbe/pr01.py | 78 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 schoeffelbe/pr01.py diff --git a/schoeffelbe/pr01.py b/schoeffelbe/pr01.py new file mode 100644 index 0000000..0447190 --- /dev/null +++ b/schoeffelbe/pr01.py @@ -0,0 +1,78 @@ +from utils.memory_array import MemoryArray +from utils.memory_cell import MemoryCell +from utils.literal import Literal +from utils.constants import MIN_VALUE +from utils.memory_manager import MemoryManager +from utils.memory_range import mrange + +def max_sequence_1(z: MemoryArray): + n = z.length() + m = MemoryCell(MIN_VALUE) + s = MemoryCell() + l = MemoryCell() + r = MemoryCell() + for i in mrange(n): + for j in mrange(i, n): + s.set(0) + for k in mrange(i, j): + s += z[k] + if s > m: + m.set(s) + l.set(i) + r.set(j) + return m, l, r + +def max_sequence_2(z: MemoryArray): + n = z.length() + m = MemoryCell(MIN_VALUE) + s = MemoryCell() + l = MemoryCell() + r = MemoryCell() + for i in mrange(n): + s.set(0) + for j in mrange(i, n): + s += z[j] + if s > m: + m.set(s) + l.set(i) + r.set(j) + return m, l, r + + +def example(max_sequence_func): + l = [-59, 52, 46, 14, -50, 58, -87, -77, 34, 15] + print(l) + z = MemoryArray(l) + m, l, r = max_sequence_func(z) + print(m, l, r) + assert(m == Literal(120)) + +def seq(filename, max_sequence_func): + z = MemoryArray.create_array_from_file(filename) + m, l, r = max_sequence_func(z) + print(m, l, r) + + +def analyze_complexity(max_sequence_func, 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) + max_sequence_func(random_array) + MemoryManager.save_stats(size) + + MemoryManager.plot_stats(["cells", "adds"]) + + +if __name__ == '__main__': + fn = max_sequence_2 + example(fn) + for filename in ["data/seq0.txt", "data/seq1.txt"]: + print(filename) + seq(filename, fn) + analyze_complexity(fn, [10, 20, 30, 40, 50, 60, 70, 80, 90, 100])