60 lines
2.0 KiB
Python
60 lines
2.0 KiB
Python
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
|
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
# IMPORTS
|
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
from local.maths import *;
|
|
from local.typing import *;
|
|
|
|
from code.core.log import *;
|
|
from code.algorithms.methods import *;
|
|
|
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
# GLOBAL VARIABLES/CONSTANTS
|
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
#
|
|
|
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
# CHECKS
|
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
def preChecks(L: List[int], **_):
|
|
assert len(L) > 0, 'Liste darf nicht leer sein.';
|
|
return;
|
|
|
|
def postChecks(L: List[int], **_):
|
|
# TODO
|
|
return;
|
|
|
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
# ALGORITHM max sub sum
|
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
@algorithmInfos(name='MaxSubSum (Maximale Teilsumme)', outputnames=('maxSum', 'index_from', 'index_to'), checks=True, metrics=True, preChecks=preChecks, postChecks=postChecks)
|
|
def MaxSubSum(L: List[float]) -> Tuple[float, int, int]:
|
|
'''
|
|
Inputs: L = Liste von Zahlen
|
|
Outputs:
|
|
- maxSum = Wert der maximalen Summe einer Teilliste aufeinanderfolgender Elemente
|
|
- u, v = Indexes so dass die Teilliste [L[u], L[u+1], ..., L[v]] die maximale Summe aufweist
|
|
'''
|
|
maxSum: float = 0;
|
|
u: int = 0;
|
|
v: int = 0;
|
|
for i in range(len(L)):
|
|
for j in range(i+1, len(L)):
|
|
thisSum = 0;
|
|
# NOTE: Schleibe über Indexes von von i bis j
|
|
for k in range(i, j+1):
|
|
AddToCounter();
|
|
thisSum += L[k]
|
|
if thisSum > maxSum:
|
|
logDebug('max Teilsumme aktualisiert: Summe L[i] von i={i} bis {j} = {value}'.format(
|
|
i = i, j = j, value = thisSum
|
|
));
|
|
maxSum, u, v = thisSum, i, j;
|
|
return maxSum, u, v;
|