Längste aufsteigende, zusammenhängende Teilfolge?
Hallo,
ich suche eine Divide & Conquer-Methode, mit der man die Länge der längsten, aufsteigenden, zusammenhängenden Teilfolge in einem Array ermitteln kann.
Bsp.:
{ 3, -2, -1, 1, 3, 1, -2, 3 },
lazT = { -2, -1, 1, 3 },
Also wäre die Länge 4.
Meine erste Idee in Pseudo-Code:
lazT(Array A, n, q, r) //Aufruf mit n = 1, q = 0 und r = A.length
if q = r then
return n
else if A[q] < A[q+1] then
return lazT(A, n+1, q+1, r)
else
return max { lazT(A, 1, q+1, r), n }
Wenn ich aber D&C richtig verstanden habe, ist das ja nur eine rekursive Methode, ohne irgendein Teilen oder Herrschen.
Wie kann ich daraus D&C machen oder einfach, wie sieht die Methode aus?
Vielen Dank im Voraus!
2 Antworten
![](https://images.gutefrage.net/media/user/regex9/1455660989427_nmmslarge__0_13_270_270_615d5a3bc6888f4c1486ce2b4d9d8f60.png?v=1455660989000)
Teile und herrsche bedeutet, dass du ein Problem so lange in Teilprobleme zerlegst, bis diese beherrschbar sind. Rekursion wäre daher für einen Lösungsweg nicht ungeeignet.
Ich teile an dieser Stelle nur eine iterative Lösung (Pseudocode):
getMaxSequence(arr):
maxSequence = 1
currentSequence = 1
from i = 0 to sizeof(arr) - 1:
if arr[i] >= arr[i + 1]:
maxSequence = max(maxSequence, currentSequence)
currentSequence = 1
else:
currentSequence = currentSequence + 1
return max(maxSequence, currentSequence)
Wenn du das unbedingt rekursiv haben möchtest, überlasse ich eine Implementation dir. 😉
![](https://images.gutefrage.net/media/user/Einstein0815/1543356110062_nmmslarge__179_95_397_397_b62412058df7eaca15bfeb39be17e714.jpg?v=1543356110000)
![](https://images.gutefrage.net/media/default/user/9_nmmslarge.png?v=1551279448000)