forked from hofmannol/AlgoDatSoSe25
Copied basic structure, added sanityChecks and implemented Algo_2
This commit is contained in:
parent
bff98d35a7
commit
8df24e2aa1
78
schoeffelbe/pr01.py
Normal file
78
schoeffelbe/pr01.py
Normal file
@ -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])
|
Loading…
x
Reference in New Issue
Block a user