forked from hofmannol/AlgoDatSoSe25
succ / pred
This commit is contained in:
parent
36383991d6
commit
74f118d11c
2
.idea/AlgoDatSoSe25.iml
generated
2
.idea/AlgoDatSoSe25.iml
generated
@ -5,7 +5,7 @@
|
|||||||
<excludeFolder url="file://$MODULE_DIR$/.venv" />
|
<excludeFolder url="file://$MODULE_DIR$/.venv" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/venv" />
|
<excludeFolder url="file://$MODULE_DIR$/venv" />
|
||||||
</content>
|
</content>
|
||||||
<orderEntry type="jdk" jdkName="Python 3.12 (AlgoDatSoSe25)" jdkType="Python SDK" />
|
<orderEntry type="jdk" jdkName="Python 3.12 (SoSe25)" jdkType="Python SDK" />
|
||||||
<orderEntry type="sourceFolder" forTests="false" />
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
</component>
|
</component>
|
||||||
</module>
|
</module>
|
@ -42,12 +42,12 @@ def max_sequence_3(z: MemoryArray, l = None, r = None):
|
|||||||
if l is None:
|
if l is None:
|
||||||
l = Literal(0)
|
l = Literal(0)
|
||||||
if r is None:
|
if r is None:
|
||||||
r = Literal(len(z)-1)
|
r = z.length().pred()
|
||||||
if l == r:
|
if l == r:
|
||||||
return z[l], l, r
|
return z[l], l, r
|
||||||
m = Literal((int(l) + int(r)) // 2)
|
m = Literal((int(l) + int(r)) // 2)
|
||||||
lm, ll, lr = max_sequence_3(z, l, m)
|
lm, ll, lr = max_sequence_3(z, l, m)
|
||||||
rm, rl, rr = max_sequence_3(z, Literal(int(m) + 1), r)
|
rm, rl, rr = max_sequence_3(z, m.succ(), r)
|
||||||
zm, zl, zr = find_between(z, l, m, r)
|
zm, zl, zr = find_between(z, l, m, r)
|
||||||
if lm >= rm and lm >= zm:
|
if lm >= rm and lm >= zm:
|
||||||
return lm, ll, lr
|
return lm, ll, lr
|
||||||
@ -59,7 +59,7 @@ def find_between(z: MemoryArray, l, m, r):
|
|||||||
max_sum = MemoryCell(MIN_VALUE)
|
max_sum = MemoryCell(MIN_VALUE)
|
||||||
s = MemoryCell(0)
|
s = MemoryCell(0)
|
||||||
border = MemoryCell()
|
border = MemoryCell()
|
||||||
for i in mrange(m, int(l)-1, -1):
|
for i in mrange(m, l.pred(), -1):
|
||||||
s += z[i]
|
s += z[i]
|
||||||
if s > max_sum:
|
if s > max_sum:
|
||||||
max_sum.set(s)
|
max_sum.set(s)
|
||||||
@ -68,7 +68,7 @@ def find_between(z: MemoryArray, l, m, r):
|
|||||||
left_border = Literal(border)
|
left_border = Literal(border)
|
||||||
max_sum = MemoryCell(MIN_VALUE)
|
max_sum = MemoryCell(MIN_VALUE)
|
||||||
s.set(0)
|
s.set(0)
|
||||||
for i in mrange(int(m) + 1, int(r)+1):
|
for i in mrange(m.succ(), r.succ()):
|
||||||
s += z[i]
|
s += z[i]
|
||||||
if s > max_sum:
|
if s > max_sum:
|
||||||
max_sum.set(s)
|
max_sum.set(s)
|
||||||
@ -91,7 +91,7 @@ def max_sequence_4(z: MemoryArray):
|
|||||||
r.set(i)
|
r.set(i)
|
||||||
if curr_sum < Literal(0):
|
if curr_sum < Literal(0):
|
||||||
curr_sum.set(0)
|
curr_sum.set(0)
|
||||||
curr_left.set(int(i) + 1)
|
curr_left.set(i.succ())
|
||||||
return max_sum, l, r
|
return max_sum, l, r
|
||||||
|
|
||||||
def example(max_sequence_func):
|
def example(max_sequence_func):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user