Adloun

algorithmique (école d'ingénieur) · Chapitre 12 · Exercice de TD

Tableau trié puis décalé

Recherche séquentielle, dichotomique, arrière · niveau 2

Énoncé

Un tableau trié de valeurs distinctes a subi une rotation, par exemple . Écrire une fonction en qui retourne l'indice de sa plus petite valeur. On comparera à et on donnera l'invariant.

Corrigé

Notons l'indice du minimum. Les valeurs de sont toutes supérieures à , celles de toutes inférieures ou égales à . Le test « » dit donc de quel côté de la cassure se trouve .

Invariant : « l'indice du minimum est dans ». Au départ , . Si , alors et ; sinon et . On s'arrête quand .


static int indiceMin(int[] T) { int n = T.length;
    int g = 0, d = n - 1;
    // I(g,d) : l'indice du minimum est dans [g:d+1]
    while (g < d) {
        int m = g + (d - g) / 2;        // g <= m < d
        if (T[m] > T[n - 1]) g = m + 1; // m est avant la cassure
        else d = m;                     // m est après la cassure (ou dessus)
    }
    return g;
}

[11, 15, 1, 3, 6, 8] -> 2
[1, 3, 6, 8, 11, 15] -> 0
[15, 1, 3, 6, 8, 11] -> 1
[3, 6, 8, 11, 15, 1] -> 5

nom : T
valeurs : 11 15 1 3 6 8
vert : 2
pointeurs : g=2 d=2
zone : 0..1 > 8
zone : 2..5 au plus 8
legende : T[n-1] = 8 : le test T[m] > 8 dit de quel côté de la cassure est m

La zone est divisée par deux à chaque tour : .

100 % gratuit

La suite du chapitre est sur Adloun

Exercice suivant et tuteur

Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →