Oliver Hofmann ecb417eba2 Max Sequence
2025-03-25 20:52:19 +01:00

52 lines
1.5 KiB
Python

from utils.memory_array import MemoryArray
from utils.literal import Literal
from utils.memory_cell import MemoryCell
from utils.constants import MIN_VALUE
from utils.memory_manager import MemoryManager
def max_sequence_1(z: MemoryArray):
n = len(z)
m = MemoryCell(MIN_VALUE)
s = MemoryCell()
l = MemoryCell()
r = MemoryCell()
for i in range(n):
for j in range(i, n):
s.set(0)
for k in range(i, j):
s += z[Literal(k)]
if s > m:
m.set(s)
l.set(i)
r.set(j)
return m, l, r
def example(max_sequende_func):
z = MemoryArray(Literal(10))
for i, v in enumerate([-59, 52, 46, 14, -50, 58, -87, -77, 34, 15]):
z[Literal(i)] = Literal(v)
m, l, r = max_sequende_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__':
example(max_sequence_1)
analyze_complexity(max_sequence_1, [10, 20, 30, 40, 50, 60, 70, 80, 90, 100])