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
- 10 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.