Adloun

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

Escalier : compter

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

Énoncé

Le tableau à lignes et colonnes est trié par lignes (croissant de gauche à droite) et par colonnes (croissant de haut en bas), comme dans la recherche en escalier du cours. Écrire une fonction en qui compte les cases de dont la valeur est inférieure ou égale à . On partira du coin en bas à gauche et on donnera l'invariant.

Corrigé

On part de la case , en bas à gauche.

  • Si : la colonne croît vers le bas, donc les cases sont toutes . On les compte et on passe à la colonne suivante.
  • Sinon : la ligne croît vers la droite, donc sont toutes . On élimine la ligne .

Invariant : « est le nombre de cases des colonnes , et dans les colonnes , toutes les cases des lignes sont ».


static int compterInfEgal(int[][] G, int x) { int L = G.length, C = G[0].length;
    int l = L - 1, c = 0, nb = 0;     // coin en bas à gauche
    while (l >= 0 && c < C) {
        if (G[l][c] <= x) { nb += l + 1; c++; } // la colonne c jusqu'à l est <= x
        else l--;                               // la ligne l à partir de c est > x
    }
    return nb;
}

À l'arrêt, soit et toutes les colonnes sont comptées, soit et les colonnes ne contiennent aucune case . Chaque tour élimine une colonne ou une ligne : au plus tours, donc . Le programme Sequentielles.java compare le résultat à un comptage exhaustif sur une grille pour : les résultats sont identiques.

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 →