Najah.
Mon plan de révision⚡ Défi flash

Informatique · Écoles d'ingénieurs — ENSIAS

Algorithmique avancée et structures de données

Le cours expliqué simplement, les questions que tous les élèves se posent et des exercices type examen national. Programme marocain, gratuit.

📘 Fiche de cours

L'essentiel du cours

L'algorithmique avancée repose sur l'optimisation. La complexité est mesurée par la notation grand O : $O(1)$ (constant), $O(n)$ (linéaire), $O(n \log n)$ (quasi-linéaire), $O(n^2)$ (quadratique).

  • Structures linéaires : Listes chaînées (insertion/suppression en $O(1)$ si position connue), Piles (LIFO), Files (FIFO).
  • Structures arborescentes : Arbres binaires de recherche (ABR) permettant une recherche en $O(\log n)$ en moyenne.
  • Récursivité : Une fonction qui s'appelle elle-même avec une condition d'arrêt.

Méthodes à maîtriser

  1. Analyse de complexité : Compter le nombre d'opérations élémentaires en fonction de la taille $n$ de l'entrée.
  2. Manipulation de pointeurs : Savoir lier deux nœuds dans une liste chaînée sans perdre l'adresse du suivant.
  3. Parcours d'arbres : Maîtriser le parcours préfixe, infixe et postfixe.

Exemples corrigés

  • Calcul de factorielle : fact(n) = n * fact(n-1) avec fact(0) = 1.
  • Recherche dichotomique : Diviser l'espace de recherche par deux à chaque itération.

Erreurs fréquentes

  • Oublier la condition d'arrêt dans une fonction récursive (boucle infinie).
  • Confondre la complexité au pire cas et au cas moyen.
  • Perdre la référence du premier élément (tête) d'une liste chaînée lors d'une insertion.

🌉 Jisr : les mots du chapitre FR ⇄ AR

Tu as appris les sciences en arabe ? Touche un mot pour voir sa traduction et une explication en darija.

La question que tu n'oses pas poser en classe ? Pose-la à UstadZéro jugement, même en darija, même à minuit. Il t'explique pas à pas et corrige ta démarche. Gratuit.

Défi flash : 4 questions

Sans compte

🎯 Algorithmique avancée et structures de données

1/4

Quelle est la complexité de l'insertion en tête d'une liste chaînée ?

❓ Questions fréquentes

Qu'est-ce que la complexité O(n^2) ?

La notation $O(n^2)$ signifie que le temps d'exécution croît proportionnellement au carré de la taille des données. Si vous doublez la taille de l'entrée, le temps est multiplié par 4. C'est typique des algorithmes de tri simples comme le tri à bulles.

💡 À retenir : $O(n^2)$ est souvent inefficace pour de très grands volumes de données.

Kifach n7seb l-complexité dyal chi boucle?
  1. Chouf ch7al mn mara kat-t-executa l-boucle.
  2. Ila kanet boucle wa7da kat-mchi mn 1 l-n, l-complexité hiya $O(n)$.
  3. Ila kanet boucle dakhla f boucle (imbriquée), kaddir $n \times n$ ya3ni $O(n^2)$.

💡 À retenir : Dima 7seb l-3adad dyal l-i3adat (itérations) dyal l-code li dakhli.

Quelle est la différence entre une Pile et une File ?
  1. La Pile suit le principe LIFO (Last In, First Out) : le dernier élément ajouté est le premier sorti.
  2. La File suit le principe FIFO (First In, First Out) : le premier élément ajouté est le premier sorti.

💡 À retenir : Pile = empiler/dépiler ; File = enfiler/défiler.

Chno hiya l-fayda dyal l-récursivité?

L-récursivité kat-kheli l-code ykon sghir w m9ad (élégant) f l-machakil li fiha t-takaror (ex: factorielle, parcours d'arbres). Kat-kheli l-mouchkil l-kbir ywali machakil sghar.

💡 À retenir : Dima khass tkon "condition d'arrêt" bach mayt-bloquach l-programme.

Pourquoi utilise-t-on des arbres binaires de recherche ?

Ils permettent de stocker des données de manière ordonnée. La recherche, l'insertion et la suppression se font en $O(\log n)$ en moyenne, ce qui est beaucoup plus rapide qu'un tableau non trié ($O(n)$).

💡 À retenir : L'efficacité dépend de l'équilibre de l'arbre.

Comment insérer un élément dans une liste chaînée ?
  1. Créer un nouveau nœud.
  2. Pointer le next du nouveau nœud vers le nœud suivant actuel.
  3. Mettre à jour le pointeur du nœud précédent pour qu'il pointe vers le nouveau.

💡 À retenir : Ne jamais perdre le pointeur next avant d'avoir lié le nouveau nœud.

Kifach n-optimizi l-code dyali?
  1. 7awel t-evita l-boucles li dakhlin f b3diyat-hom (imbriquées) ila kan momkin.
  2. St3mel structures dyal l-ma3loumat li mnasba (ex: Hash Map bdl tableau).
  3. 7yed l-i3adat li ma-3ndhomch l-fayda.

💡 À retenir : L'optimisation doit se faire sur les parties du code les plus utilisées.

Qu'est-ce qu'un pointeur ?

C'est une variable qui ne contient pas une valeur directe, mais l'adresse mémoire d'une autre variable. Cela permet de manipuler des données dynamiquement sans les copier.

💡 À retenir : Un pointeur pointe vers une "case" mémoire précise.

La recherche dichotomique fonctionne-t-elle sur un tableau non trié ?

Non, elle nécessite impérativement un tableau trié pour pouvoir comparer la valeur cherchée avec l'élément central et décider de la moitié à éliminer.

💡 À retenir : Tri obligatoire avant dichotomie.

Quelle est la complexité de l'accès à un élément dans un tableau ?

L'accès est en $O(1)$ car on calcule l'adresse mémoire directement via l'index : adresse = base + index * taille_element.

💡 À retenir : Le tableau est la structure la plus rapide pour l'accès direct.

Pourquoi la récursivité peut-elle causer un "Stack Overflow" ?

Chaque appel récursif ajoute une couche à la pile d'appels (stack) en mémoire. Si la profondeur est trop grande, la pile sature et le programme plante.

💡 À retenir : La récursivité profonde est risquée pour la mémoire.

C'est quoi un arbre binaire complet ?

C'est un arbre où tous les niveaux sont remplis, sauf éventuellement le dernier qui est rempli de gauche à droite.

💡 À retenir : Cette structure est idéale pour implémenter des tas (heaps).

✍️ Exercices type examen national

Exercice 1

Soit une liste chaînée simple où chaque nœud contient un entier val et un pointeur next. Écrire un algorithme (pseudo-code) permettant de calculer la somme des éléments de la liste.

Voir la correction détaillée : inscription gratuite

Exercice 2

On dispose d'un tableau T de taille $n$. Proposer un algorithme de recherche d'un élément x et donner sa complexité dans le pire des cas.

Voir la correction détaillée : inscription gratuite

Exercice 3

Écrire une fonction récursive qui calcule la puissance $a^n$ (avec $n \geq 0$).

Voir la correction détaillée : inscription gratuite

Un prof de Informatique pour aller plus loin

Les cours du soir avec des profs vérifiés arrivent : inscris-toi pour être prévenu(e) en premier.

Être prévenu(e) gratuitement

Autres chapitres de Informatique