Je dois implémenter un algorithme de division et de conquête en C++ pour une fonction max
, qui renvoie la valeur maximale dans un tableau. Je comprends l'algorithme et ai déjà conçu la fonction, mais je rencontre des problèmes avec les indices de tableau.Trouver des indices de tableau pour l'algorithme "diviser pour régner"?
En pseudocode, voici ma fonction:
def max(array, startIndex, endIndex)
// if there is only one element, return it
if startIdx = endIdx
return array[startIdx];
leftHigh = max(array, startIdx, endIdx/2);
rightHigh = max(array, endIdx/2 + 1, endIdx);
return maximum of leftHigh and rightHigh;
Cependant, je rencontre un problème avec ces valeurs pour les paramètres d'appel récursives. Le paragraphe suivant montre ce que j'ai trouvé lorsque j'ai mentalement traversé l'algorithme:
Le cas le plus simple est un tableau de 4 éléments. Le premier appel à max
prendra les paramètres d'index 0, 3
et effectuera les appels avec les paramètres 0, 1
et 2, 3
. Le premier appel récursif se traduira par des appels avec 0, 0
et 1, 1
qui se terminera correctement. Cependant, le deuxième appel récursif se traduira par des appels avec 2, 1
et 2, 3
. La première résulte finalement de dépasser les limites du tableau et la seconde résulte en une boucle infinie puisque ces paramètres ont déjà été utilisés.
J'ai essayé de jouer avec, par exemple en utilisant (startIdx, endIdx/2 -1)
pour les premières limites et (endIdx/2, endIdx)
pour les secondes limites, et cela corrige la deuxième branche des appels récursifs, mais endommage le premier.
Existe-t-il un moyen de trouver ces indices résultant du comportement correct? J'apprécie l'aide.
le point médian entre A et B n'est pas B/2. Ca doit dépendre de A d'une façon ou d'une autre. –