Revision sheet: Introduction aux Structures et Algorithmes Essentiels

Plan du Cours

  1. POO et structures de données
  2. Arbres binaires et recherche
  3. Parcours et arbres équilibrés
  4. Graphes et parcours
  5. ModĂšle relationnel et SQL
  6. Routage et protocoles
  7. Récursivité et tri fusion
  8. Modularité et fonctions
  9. Tri par insertion et sélection
  10. Congruences et arithmétique

1. POO et structures de données

Notions clés & Définitions

  • Interface : Une interface dĂ©crit les fonctionnalitĂ©s attendues d’une classe ou d’un module sans donner l’implĂ©mentation concrĂšte.
  • Encapsulation : L’encapsulation protĂšge les donnĂ©es internes d’une classe en utilisant des attributs privĂ©s accessibles via des mĂ©thodes publiques.
  • HĂ©ritage : L’hĂ©ritage permet Ă  une classe de rĂ©utiliser et d’étendre le comportement d’une autre classe.
  • Polymorphisme : Le polymorphisme permet d’utiliser une mĂȘme interface avec des types diffĂ©rents, en utilisant des mĂ©thodes redĂ©finies.
  • Pile : Une pile est une structure LIFO oĂč le dernier Ă©lĂ©ment ajoutĂ© est le premier Ă©lĂ©ment retirĂ©.

Points essentiels

  • Une implĂ©mentation est la rĂ©alisation concrĂšte des fonctionnalitĂ©s annoncĂ©es par l’interface.
  • En POO, l’interface fixe le “quoi” et l’implĂ©mentation fournit le “comment” pour exĂ©cuter les fonctionnalitĂ©s.
  • Dans une pile, le retrait avec pop correspond au dernier Ă©lĂ©ment entrĂ©, et dans une file pop(0) retire le premier Ă©lĂ©ment entrĂ©.
  • Pour un dictionnaire, les opĂ©rations de recherche, insertion et suppression ont une complexitĂ© moyenne de 𝑂(1).
  • Un dictionnaire permet d’accĂ©der Ă  une valeur uniquement Ă  partir de sa clĂ©, et on peut ajouter ou supprimer une clĂ© avec une syntaxe dĂ©diĂ©e.

Astuce mémo

LIFO = Last In First Out, FIFO = First In First Out.

2. Arbres binaires et recherche

Notions clés & Définitions

  • Racine : La racine est le nƓud de dĂ©part d’un arbre, qui n’a pas de parent.
  • Feuille : Une feuille est un nƓud qui ne possĂšde aucun enfant.
  • Arbre binaire : Un arbre binaire est un arbre oĂč chaque nƓud a au plus deux enfants.
  • Arbre binaire de recherche : Un ABR est un arbre binaire oĂč le sous-arbre gauche contient des valeurs plus petites et le sous-arbre droit des valeurs plus grandes que le nƓud.
  • Taille d’un arbre : La taille d’un arbre est le nombre total de nƓuds dans l’arbre.

Points essentiels

  • Dans un ABR, pour rechercher une valeur, on compare Ă  la valeur du nƓud puis on descend Ă  gauche si la valeur cherchĂ©e est plus petite, sinon Ă  droite.
  • L’insertion dans un ABR suit les mĂȘmes comparaisons : chaque valeur est envoyĂ©e dans le sous-arbre gauche ou droit jusqu’à trouver une position de nƓud vide.
  • La hauteur est comptĂ©e en nombre d’arĂȘtes entre la racine et le nƓud le plus profond, et vaut −1 si l’arbre est vide dans l’exemple donnĂ©.
  • La taille se calcule rĂ©cursivement comme 1 + taille(gauche) + taille(droit), et renvoie 0 si le nƓud est None.
  • Dans le code de recherche, si le nƓud est None la fonction renvoie False, ce qui correspond Ă  l’absence de la valeur.

Astuce mémo

ABR = gauche plus petit, droit plus grand, donc comparaison à chaque nƓud.

3. Parcours et arbres équilibrés

Notions clés & Définitions

  • Parcours prĂ©fixe : Un parcours prĂ©fixe visite d’abord la racine, puis le sous-arbre gauche, puis le sous-arbre droit.
  • Parcours infixe : Un parcours infixe visite d’abord le sous-arbre gauche, puis la racine, puis le sous-arbre droit.
  • Parcours suffixe : Un parcours suffixe visite d’abord le sous-arbre gauche, puis le sous-arbre droit, puis la racine.
  • Parcours en largeur : Un parcours en largeur visite les nƓuds niveau par niveau, de gauche Ă  droite.
  • Arbre AVL : Un arbre AVL est un ABR auto-Ă©quilibrĂ© qui maintient une hauteur logarithmique pour garder des opĂ©rations efficaces.

Points essentiels

  • Pour un parcours infixe d’un ABR, l’ordre des valeurs obtenues est croissant car tout gauche est infĂ©rieur et tout droit est supĂ©rieur au parent.
  • Le parcours en largeur utilise une file et ajoute d’abord les voisins gauche puis droit du nƓud courant pour respecter l’ordre par niveaux.
  • La recherche dans un arbre AVL a une complexitĂ© en 𝑂(log(𝑛)), alors qu’un ABR trĂšs dĂ©sĂ©quilibrĂ© peut dĂ©grader la recherche Ă  𝑂(𝑛).
  • La hauteur d’un arbre AVL reste contrĂŽlĂ©e grĂące Ă  son mĂ©canisme d’auto-Ă©quilibrage, ce qui Ă©vite la structure “en ligne droite”.
  • Dans l’exemple, le parcours en largeur donne [40, 20, 60, 10, 30, 50, 70], illustrant la visite par niveaux.

Astuce mémo

PrĂ©fixe = Racine d’abord, Infixe = Racine au milieu, Suffixe = Racine Ă  la fin.

4. Graphes et parcours

Notions clés & Définitions

  • Sommet : Un sommet est un point du graphe, aussi appelĂ© nƓud.
  • ArĂȘte orientĂ©e : Une arĂȘte orientĂ©e relie deux sommets avec une direction.
  • Graphe pondĂ©rĂ© : Un graphe pondĂ©rĂ© associe un coĂ»t ou un poids Ă  chaque arĂȘte.
  • ConnexitĂ© : Un graphe est connexe si chaque paire de sommets peut ĂȘtre reliĂ©e par une chaĂźne d’arĂȘtes.
  • Matrice d’adjacence : Une matrice d’adjacence stocke les liens entre sommets sous forme de tableau Ă  deux dimensions, avec le poids dans la case (i, j).

Points essentiels

  • En BFS et en DFS, les poids d’arĂȘtes ne sont pas utilisĂ©s, car l’exploration dĂ©pend uniquement des voisins visitĂ©s.
  • La recherche du plus court chemin entre deux nƓuds via BFS est garantie si on considĂšre un modĂšle oĂč chaque arĂȘte vaut 1 en coĂ»t.
  • Une matrice d’adjacence permet de construire une liste des successeurs en parcourant chaque case (i, j) et en ajoutant j si la valeur indique l’existence d’une arĂȘte.
  • La liste des successeurs respecte l’orientation si le graphe est orientĂ©, car l’accessibilitĂ© dĂ©pend du sens des arĂȘtes.
  • Dans l’exemple, l’ordre de visite DFS partant de A est ['A','B','E','F','C','G','H','D'] tandis que BFS donne ['A','B','C','D','E','F','G','H'].

Astuce mémo

DFS va “au fond”, BFS va “par couches”.

5. ModĂšle relationnel et SQL

Notions clés & Définitions

  • Relation : Une relation correspond Ă  une table dans une base de donnĂ©es.
  • Attribut : Un attribut est une colonne d’une table qui dĂ©crit une propriĂ©tĂ© des donnĂ©es.
  • Domaine : Un domaine est l’ensemble des valeurs admissibles pour un attribut.
  • ClĂ© primaire : Une clĂ© primaire identifie de maniĂšre unique une ligne dans une table.
  • ClĂ© Ă©trangĂšre : Une clĂ© Ă©trangĂšre est un attribut qui rĂ©fĂ©rence la clĂ© primaire d’une autre table.

Points essentiels

  • Les requĂȘtes de sĂ©lection utilisent SELECT, et SELECT * FROM renvoie tous les attributs d’une table.
  • WHERE filtre les lignes avant l’affichage, par exemple en gardant uniquement celles dont note > 9.
  • ORDER BY trie les rĂ©sultats et DESC inverse l’ordre, comme dans ORDER BY ann_publi DESC.
  • DISTINCT supprime les doublons pour un ensemble de valeurs, par exemple SELECT DISTINCT langue_ecriture FROM AUTEURS.
  • La jointure interne associe LIVRES et AUTEURS via LIVRES.id_auteur = AUTEURS.id puis peut ĂȘtre filtrĂ©e avec WHERE.
  • INSERT ajoute une ligne, UPDATE modifie des lignes ciblĂ©es par WHERE, et DELETE supprime des lignes ciblĂ©es par WHERE.

Astuce mémo

SELECT trie avec ORDER BY, filtre avec WHERE, dédoublonne avec DISTINCT.

6. Routage et protocoles

Notions clés & Définitions

  • Adresse IP : Une adresse IP identifie une machine sur un rĂ©seau.
  • Masque de sous-rĂ©seau : Le masque sĂ©pare la partie rĂ©seau de la partie hĂŽte dans une adresse IP.
  • Adresse rĂ©seau : L’adresse rĂ©seau correspond Ă  la partie rĂ©seau de l’IP, identifiant le rĂ©seau d’appartenance.
  • Adresse de broadcast : L’adresse de broadcast permet d’envoyer un message Ă  toutes les machines d’un sous-rĂ©seau.
  • Notation CIDR : La notation CIDR /n indique le nombre de bits rĂ©servĂ©s Ă  la partie rĂ©seau dans l’adresse.

Points essentiels

  • Pour 192.168.1.10/24, l’adresse rĂ©seau est 192.168.1.0, le masque est 255.255.255.0 et l’adresse de broadcast est 192.168.1.255.
  • Une table de routage fournit une Destination, une Interface de sortie et une Passerelle (prochain routeur) selon la destination.
  • RIP ajoute une route si elle est inconnue, et remplace une route si une distance plus courte est trouvĂ©e.
  • RIP ignore une route plus longue, et si un routeur est inactif pendant 3 minutes la distance devient infinie (16).
  • Dans RIP, la mĂ©trique est le nombre de sauts, tandis que dans OSPF le coĂ»t dĂ©pend du dĂ©bit des liaisons (coĂ»t proportionnel Ă  la bande passante).
  • Dans l’exemple OSPF, le coĂ»t total pour R1-R2-R4 vaut 18 et bat le chemin R1-R3 qui serait choisi par RIP avec une logique “sauts”.

Astuce mémo

RIP = “sauts”, OSPF = “coĂ»t des liaisons”.

7. Récursivité et tri fusion

Notions clés & Définitions

  • RĂ©cursivitĂ© : La rĂ©cursivitĂ© est un mĂ©canisme oĂč une fonction s’appelle elle-mĂȘme pour rĂ©soudre un problĂšme dĂ©composĂ©.
  • Cas de base : Le cas de base est la condition qui stoppe la rĂ©cursion en empĂȘchant les appels de continuer indĂ©finiment.
  • Diviser pour rĂ©gner : Diviser pour rĂ©gner consiste Ă  dĂ©couper un problĂšme, rĂ©soudre chaque morceau rĂ©cursivement, puis combiner les solutions.
  • Tri fusion : Le tri fusion (merge sort) divise la liste en deux moitiĂ©s, trie rĂ©cursivement, puis fusionne les deux listes triĂ©es.

Points essentiels

  • Une fonction rĂ©cursive doit avoir un cas de base qui termine la suite d’appels, sinon on risque une rĂ©cursion infinie.
  • À chaque appel rĂ©cursif, la taille du problĂšme doit diminuer de façon correcte pour atteindre le cas de base.
  • En Python, le nombre d’appels rĂ©cursifs autorisĂ© est d’environ 1000 (variable selon la plateforme).
  • Dans le tri fusion, si la longueur de la liste est ≀ 1, la fonction renvoie la liste directement comme cas de base.
  • La fusion compare les premiĂšres valeurs des deux listes et construit une sortie triĂ©e en rĂ©pĂ©tant le choix du plus petit Ă©lĂ©ment.
  • L’exemple de tri fusion renvoie [1, 2, 3, 4, 5, 7, 8] pour la liste de dĂ©part [4, 3, 8, 2, 7, 1, 5].

Astuce mémo

Diviser → RĂ©gner → Combiner : coupe, trie, puis fusionne.

8. Modularité et fonctions

Notions clés & Définitions

  • ModularitĂ© : La modularitĂ© consiste Ă  dĂ©couper un systĂšme en modules qui gĂšrent chacun une fonctionnalitĂ© prĂ©cise.
  • Module Python : Un module Python est un regroupement de fonctions et/ou variables utilisables via une importation.
  • Docstring : Une docstring est une documentation intĂ©grĂ©e Ă  une fonction ou Ă  un Ă©lĂ©ment Python accessible via doc.
  • Importation avec alias : Un alias permet de renommer un module ou une fonction lors de l’importation grĂące Ă  as.

Points essentiels

  • DĂ©composer en modules augmente la rĂ©utilisabilitĂ©, facilite la maintenance, et amĂ©liore l’extensibilitĂ© et la comprĂ©hension du code.
  • Pour lister les Ă©lĂ©ments d’un module, dir(nom_du_module) affiche ses noms dĂ©finis.
  • Pour afficher l’aide d’un Ă©lĂ©ment, help(nom_du_module.Ă©lĂ©ment) ou help(addition) renvoie sa description.
  • La documentation d’un objet est disponible via Ă©lĂ©ment.doc, par exemple math.sin.doc.
  • En Python, import module impose l’usage module.fonction(), tandis que from module import fonction permet d’appeler directement fonction().
  • from module import * importe tout, et c’est dĂ©conseillĂ© car cela peut crĂ©er des conflits de noms.

Astuce mémo

import module = module. ; from module import = direct ; alias = as.

9. Tri par insertion et sélection

Notions clés & Définitions

  • Tri par insertion : Le tri par insertion insĂšre Ă  chaque Ă©tape un Ă©lĂ©ment dans la partie dĂ©jĂ  triĂ©e en le dĂ©calant vers sa place.
  • Tri par sĂ©lection : Le tri par sĂ©lection choisit Ă  chaque position l’élĂ©ment minimal restant et l’échange avec l’élĂ©ment courant.
  • Insertion triĂ©e : La partie “dĂ©jĂ  triĂ©e” du tri par insertion correspond aux Ă©lĂ©ments examinĂ©s avant i.
  • Minimum restant : Dans le tri par sĂ©lection, le minimum restant est l’élĂ©ment le plus petit parmi la portion non triĂ©e.

Points essentiels

  • Le tri par insertion parcourt i de 1 Ă  n−1 et dĂ©cale vers la droite tant que valeur_insertion < tab[j−1] pour insĂ©rer au bon endroit.
  • Le tri par sĂ©lection parcourt i puis cherche min_i parmi j de i+1 Ă  fin, et Ă©change tab[i] avec tab[min_i].
  • Dans les deux algorithmes (insertion et sĂ©lection), le coĂ»t en pire cas est quadratique et s’exprime par 𝑂(𝑛ÂČ) sur un tableau de taille 𝑛.
  • Le double parcours du tri par sĂ©lection explique le grand nombre de comparaisons en pire cas.
  • Sur l’exemple [4, 3, 5, 1], le tri par insertion donne [1, 3, 4, 5], et sur [12, 11, 13, 5, 6] le tri par sĂ©lection donne [5, 6, 11, 12, 13].

Astuce mémo

Insertion = décale pour placer, Sélection = cherche le min puis échange.

10. Congruences et arithmétique

Notions clés & Définitions

  • Congruence modulaire : On dit que a est congru Ă  b modulo n si n divise la diffĂ©rence a − b.
  • ThĂ©orĂšme de BĂ©zout : Le thĂ©orĂšme de BĂ©zout garantit l’existence de coefficients x et y tels que ax + by Ă©gale le PGCD de a et b.
  • Algorithme d’Euclide : L’algorithme d’Euclide calcule le PGCD en remplaçant (a, b) par (b, r) oĂč r est le reste de a divisĂ© par b.
  • Euclide Ă©tendu : L’Euclide Ă©tendu calcule le PGCD et fournit aussi des coefficients x et y vĂ©rifiant l’égalitĂ© de BĂ©zout.
  • ThĂ©orĂšme de Gauss : Le thĂ©orĂšme de Gauss relie une divisibilitĂ© sur un produit Ă  une divisibilitĂ© sur un facteur quand deux entiers sont premiers entre eux.

Points essentiels

  • La congruence s’écrit a≡b (mod n), et revient Ă  dire que n divise a−b.
  • Dans l’algorithme d’Euclide, si b = 0 alors le PGCD vaut a, et sinon on calcule r = a mod b puis on recommence avec (b, r).
  • L’Euclide Ă©tendu renvoie une triple (pgcd, x, y) vĂ©rifiant ax + by = pgcd.
  • Le petit thĂ©orĂšme de Fermat affirme que pour p premier et p∀a, on a a^{p-1} ≡ 1 (mod p).
  • Le critĂšre de divisibilitĂ© par 9 est basĂ© sur 10 ≡ 1 (mod 9), ce qui rend N congru Ă  la somme des chiffres modulo 9.

Astuce mémo

Euclide rĂ©duit par restes, BĂ©zout reconstruit ax+by = PGCD, Fermat donne a^{p-1} ≡ 1 (mod p).

Tableaux de synthĂšse

DFS vs BFS

MéthodeExplorationPlus court chemin
DFSVoisin non visité puis descendreNon (ignore poids)
BFSTous les voisins du niveau puis suivantOui si chaque arĂȘte vaut 1

PiÚges & confusions fréquents

  1. Confondre LIFO et FIFO conduit à inverser l’ordre des retraits quand on utilise pop et pop(0) sur une liste.
  2. Croire que BFS/DFS utilisent les poids : dans le cours, ils ignorent les poids et BFS sert pour le plus court chemin seulement en supposant coût 1.
  3. Se tromper sur la hauteur : elle compte des arĂȘtes de la racine au nƓud le plus profond, et l’arbre vide donne −1 dans l’exemple.
  4. MĂ©langer les ordres de parcours : prĂ©fixe (Racine→Gauche→Droite), infixe (Gauche→Racine→Droite), suffixe (Gauche→Droite→Racine).
  5. Penser qu’un ABR permet n’importe quelle insertion : l’insertion doit respecter la rùgle gauche plus petit, droit plus grand.
  6. Oublier le cas de base en récursivité provoque une récursion qui ne se termine pas.
  7. En congruences, confondre a≡b (mod n) avec une Ă©galitĂ© stricte sans condition “n divise a−b”.

Checklist Examen

  1. Définir et distinguer interface et implémentation en POO.
  2. Expliquer l’encapsulation (privĂ©/public) et dire quel est le but en termes de protection des donnĂ©es.
  3. DĂ©finir hĂ©ritage et polymorphisme, et relier polymorphisme Ă  des mĂ©thodes redĂ©finies via une mĂȘme interface.
  4. Donner la différence entre pile LIFO et file FIFO, et identifier quel retrait correspond à pop et pop(0).
  5. DĂ©finir dictionnaire et prĂ©ciser la complexitĂ© moyenne annoncĂ©e pour recherche/insertion/suppression (𝑂(1)).
  6. Définir racine, feuille, arbre binaire et ABR, puis énoncer la rÚgle gauche plus petit et droit plus grand.
  7. DĂ©crire la recherche dans un ABR (comparaison puis descente gauche/droite) et dire ce que renvoie la recherche si le nƓud est None.
  8. Calculer ou expliquer taille et hauteur Ă  partir des dĂ©finitions (taille = nombre de nƓuds, hauteur = arĂȘtes jusqu’au plus profond).
  9. Produire l’ordre obtenu par un parcours : prĂ©fixe, infixe, suffixe, et en largeur (par niveaux).
  10. Rappeler que BFS ignore les poids et donne le plus court chemin quand chaque arĂȘte a un coĂ»t Ă©gal Ă  1.
  11. Construire une idĂ©e de matrice d’adjacence et rappeler ce que contiennent les cases (i, j) via le poids.
  12. En SQL, Ă©crire une requĂȘte avec SELECT * ou SELECT de colonnes, ajouter WHERE, et trier avec ORDER BY (avec ASC implicite et DESC).
  13. Utiliser DISTINCT pour supprimer les doublons et décrire le rÎle de INNER JOIN avec la condition ON.
  14. En SQL, dĂ©crire l’effet d’INSERT, UPDATE et DELETE, et rappeler le rĂŽle crucial de WHERE (sinon tout).

Test your knowledge

Test your knowledge on Introduction aux Structures et Algorithmes Essentiels with 20 multiple-choice questions with detailed corrections.

1. En programmation orientĂ©e objet, quel est le rĂŽle principal d’une interface ?

2. Dans une pile, quel Ă©lĂ©ment est retirĂ© en premier lors d’un retrait classique ?

Take the quiz →

Review with flashcards

Memorize the key concepts of Introduction aux Structures et Algorithmes Essentiels with 20 interactive flashcards.

Interface — dĂ©finition ?

Contrat décrivant fonctionnalités sans implémentation.

Encapsulation — rîle ?

ProtÚge les données internes via des attributs privés.

HĂ©ritage — principe ?

RĂ©utilisation et extension d’une classe par une autre.

See flashcards →

Similar courses

Create your own revision sheets

Import your course and AI generates sheets, quizzes and flashcards in 30 seconds.

Sheet generator