master > master: code - next greater element messages leicht verbessert
This commit is contained in:
parent
8d2de4fa2b
commit
cccc6a14ba
@ -27,32 +27,32 @@ Outputs: Liste von Paaren von Elementen und ihrem nächsten größeren Element
|
|||||||
*/
|
*/
|
||||||
func NextGreaterElement(L []int) [][2]int {
|
func NextGreaterElement(L []int) [][2]int {
|
||||||
clearOutput()
|
clearOutput()
|
||||||
if len(L) == 0 {
|
|
||||||
return output()
|
|
||||||
}
|
|
||||||
|
|
||||||
S := stacks.CREATE()
|
S := stacks.CREATE()
|
||||||
|
S.INIT()
|
||||||
|
|
||||||
for i := 0; i < len(L); i++ {
|
for i := 0; i < len(L); i++ {
|
||||||
|
logging.Debug("Stack S | %v", S)
|
||||||
logging.Debug("Nächstes List-Element L[%v] = %v betrachten", i, L[i])
|
logging.Debug("Nächstes List-Element L[%v] = %v betrachten", i, L[i])
|
||||||
nextElement := L[i]
|
nextElement := L[i]
|
||||||
|
|
||||||
logging.Debug("Alle top Elemente vom Stack, die < nextElement sind, mit L[i] paaren")
|
logging.Debug("Alle top Elemente vom Stack, die < nextElement sind, mit L[i] paaren")
|
||||||
// Führe aus, bis top Element >= nextElement oder Stack leer ist.
|
// Führe aus, bis top Element >= nextElement oder Stack leer ist.
|
||||||
// Führe aus, bis top Element >= nextElement oder Stack leer ist.
|
for !S.EMPTY() { // ACHTUNG: schreibe 'while' im Pseudocode, denn dies ist eine while-Schleife in golang
|
||||||
logging.Debug("Stack S | %v", S)
|
|
||||||
for !S.EMPTY() { // ACHTUNG: dies ist eine while-Schleife in golang
|
|
||||||
element := S.TOP()
|
element := S.TOP()
|
||||||
S.POP()
|
|
||||||
metrics.AddMovesCost()
|
|
||||||
logging.Debug("Stack S | %v; (popped) Top-Element = %v", S, element)
|
|
||||||
// falls element < next Element, zum Output hinzufügen
|
|
||||||
if element < nextElement {
|
if element < nextElement {
|
||||||
|
logging.Debug("Stack S | %v; top Element > nextElement; ==> pop und Paar zum Output hinzufügen", S)
|
||||||
|
// falls top Element < next Element, zum Output hinzufügen und vom Stack
|
||||||
addToOutput(element, nextElement)
|
addToOutput(element, nextElement)
|
||||||
// sonst Element auf Stack zurücklegen und Schleife abbrechen.
|
S.POP()
|
||||||
|
metrics.AddMovesCost()
|
||||||
|
logging.Debug("Stack S | %v", S)
|
||||||
|
} else if element > nextElement {
|
||||||
|
// falls top Element > next Element, auf Stack lassen und Schleife abbrechen.
|
||||||
|
break
|
||||||
} else {
|
} else {
|
||||||
logging.Debug("Stack-Element >= nextElement ==> zurücklegen")
|
// falls top Element == next Element, vom Stack entfernen und Schleife abbrechen.
|
||||||
S.PUSH(element)
|
S.POP()
|
||||||
metrics.AddMovesCost()
|
metrics.AddMovesCost()
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
@ -60,19 +60,21 @@ func NextGreaterElement(L []int) [][2]int {
|
|||||||
|
|
||||||
logging.Debug("L[%v] auf Stack legen", i)
|
logging.Debug("L[%v] auf Stack legen", i)
|
||||||
S.PUSH(nextElement)
|
S.PUSH(nextElement)
|
||||||
logging.Debug("Stack S | %v", S)
|
|
||||||
metrics.AddMovesCost()
|
metrics.AddMovesCost()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
logging.Debug("Stack S | %v", S)
|
||||||
|
|
||||||
// was übrig bleibt hat kein größeres Element
|
// was übrig bleibt hat kein größeres Element
|
||||||
logging.Debug("Alles übrige auf Stack hat kein nächstes größeres Element")
|
logging.Debug("Alles übrige auf Stack hat kein nächstes größeres Element")
|
||||||
for !S.EMPTY() { // ACHTUNG: dies ist eine while-Schleife in golang
|
for !S.EMPTY() { // ACHTUNG: schreibe 'while' im Pseudocode, denn dies ist eine while-Schleife in golang
|
||||||
logging.Debug("Stack S | %v", S)
|
logging.Debug("Stack S | %v", S)
|
||||||
element := S.TOP()
|
element := S.TOP()
|
||||||
S.POP()
|
S.POP()
|
||||||
metrics.AddMovesCost()
|
metrics.AddMovesCost()
|
||||||
addToOutput(element, -1)
|
addToOutput(element, -1)
|
||||||
}
|
}
|
||||||
|
|
||||||
logging.Debug("Stack S | %v", S)
|
logging.Debug("Stack S | %v", S)
|
||||||
|
|
||||||
return output()
|
return output()
|
||||||
|
@ -34,7 +34,7 @@ func postChecks(L []int, pairs [][2]int, _ ...interface{}) error {
|
|||||||
* ---------------------------------------------------------------- */
|
* ---------------------------------------------------------------- */
|
||||||
|
|
||||||
func FancyNextGreaterElement(input_L []int) ([][2]int, error) {
|
func FancyNextGreaterElement(input_L []int) ([][2]int, error) {
|
||||||
var name = "Binärsuchalgorithmus"
|
var name = "Next Greater Element"
|
||||||
var inputs = map[string]interface{}{
|
var inputs = map[string]interface{}{
|
||||||
"L": input_L,
|
"L": input_L,
|
||||||
}
|
}
|
||||||
|
@ -46,6 +46,7 @@ def NextGreaterElement(L: List[int]) -> List[Tuple[int,int]]:
|
|||||||
S.INIT();
|
S.INIT();
|
||||||
|
|
||||||
for i in range(len(L)):
|
for i in range(len(L)):
|
||||||
|
logDebug('Stack S | {S}'.format(S=S));
|
||||||
logDebug('Nächstes List-Element L[{i}] = {el} betrachten'.format(i=i, el=L[i]));
|
logDebug('Nächstes List-Element L[{i}] = {el} betrachten'.format(i=i, el=L[i]));
|
||||||
nextElement = L[i];
|
nextElement = L[i];
|
||||||
|
|
||||||
@ -54,25 +55,29 @@ def NextGreaterElement(L: List[int]) -> List[Tuple[int,int]]:
|
|||||||
logDebug('Stack S | {S}'.format(S=S));
|
logDebug('Stack S | {S}'.format(S=S));
|
||||||
while not S.EMPTY():
|
while not S.EMPTY():
|
||||||
element = S.TOP();
|
element = S.TOP();
|
||||||
S.POP();
|
|
||||||
AddMovesCost();
|
|
||||||
logDebug('Stack S | {S}; (popped) Top-Element = {el}'.format(S=S, el=element))
|
|
||||||
# falls element < next Element, zum Output hinzufügen
|
# falls element < next Element, zum Output hinzufügen
|
||||||
if element < nextElement:
|
if element < nextElement:
|
||||||
|
logDebug('Stack S | {S}; top Element > nextElement; ==> pop und Paar zum Output hinzufügen'.format(S=S))
|
||||||
addToOutput(element, nextElement);
|
addToOutput(element, nextElement);
|
||||||
# sonst Element auf Stack zurücklegen und Schleife abbrechen.
|
S.POP();
|
||||||
else:
|
|
||||||
logDebug('Stack element >= nextElement ==> zurücklegen')
|
|
||||||
S.PUSH(element);
|
|
||||||
AddMovesCost();
|
AddMovesCost();
|
||||||
break;
|
logDebug('Stack S | {S}'.format(S=S));
|
||||||
|
# falls top Element > next Element, auf Stack lassen und Schleife abbrechen.
|
||||||
|
elif element > nextElement:
|
||||||
|
break
|
||||||
|
# falls top Element == next Element, vom Stack entfernen und Schleife abbrechen.
|
||||||
|
else:
|
||||||
|
S.POP()
|
||||||
|
AddMovesCost()
|
||||||
|
break
|
||||||
logDebug('Stack S | {S}'.format(S=S));
|
logDebug('Stack S | {S}'.format(S=S));
|
||||||
|
|
||||||
logDebug('L[{i}] auf Stack legen'.format(i=i));
|
logDebug('L[{i}] auf Stack legen'.format(i=i));
|
||||||
S.PUSH(nextElement);
|
S.PUSH(nextElement);
|
||||||
logDebug('Stack S | {S}'.format(S=S));
|
|
||||||
AddMovesCost();
|
AddMovesCost();
|
||||||
|
|
||||||
|
logDebug('Stack S | {S}'.format(S=S));
|
||||||
|
|
||||||
# was übrig bleibt hat kein größeres Element
|
# was übrig bleibt hat kein größeres Element
|
||||||
logDebug('Alles übrige auf Stack hat kein nächstes größeres Element')
|
logDebug('Alles übrige auf Stack hat kein nächstes größeres Element')
|
||||||
while not S.EMPTY():
|
while not S.EMPTY():
|
||||||
|
Loading…
x
Reference in New Issue
Block a user