đ Plan du Cours
- Interface, implémentation et encapsulation
- Héritage et polymorphisme en POO
- Pile et opérations LIFO en Python
- File et opérations FIFO en Python
- Dictionnaires et parcours clé valeur
- Arbres binaires et ABR
- Taille, hauteur et profondeur des arbres
- Parcours d arbres préfixe infixe suffixe
- Recherche et insertion dans un ABR
- Arbres AVL et complexité logarithmique
- Graphes : sommets, arĂȘtes et connexitĂ©
- DFS et BFS pour parcourir un graphe
đ 1. Interface, implĂ©mentation et encapsulation
đ Notions clĂ©s & DĂ©finitions
- Interface : Une interface dĂ©crit les fonctionnalitĂ©s attendues dâun composant sans prĂ©ciser comment elles sont rĂ©alisĂ©es.
- Implémentation : Une implémentation correspond au code concret qui réalise les fonctionnalités annoncées par une interface.
- Encapsulation : Lâencapsulation protĂšge les donnĂ©es internes dâune classe en les rendant privĂ©es et en nâautorisant lâaccĂšs que 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, chacun pouvant redĂ©finir ses mĂ©thodes.
đ Points essentiels
- Une interface sert de contrat : elle impose des mĂ©thodes/behaviors Ă fournir, sans dĂ©tails dâexĂ©cution.
- Une implémentation est la version concrÚte du contrat, donc elle peut varier selon le type ou le module.
- En encapsulation, les attributs internes sont typiquement privĂ©s, et lâaccĂšs passe par des mĂ©thodes publiques.
- Les mĂ©thodes publiques peuvent modifier lâĂ©tat interne (ex. mise Ă jour dâun attribut) tout en contrĂŽlant lâaccĂšs.
- LâhĂ©ritage favorise la rĂ©utilisation : une classe enfant ajoute ou spĂ©cialise le comportement de la classe parent.
- Le polymorphisme sâexprime quand un mĂȘme appel fonctionne sur des objets de classes diffĂ©rentes grĂące Ă une interface commune.
đĄ Astuce mĂ©mo
Interface = contrat (quoi), ImplĂ©mentation = code (comment), Encapsulation = coffre (donnĂ©es privĂ©es), HĂ©ritage = rĂ©utiliser, Polymorphisme = mĂȘme appel, comportements diffĂ©rents.
đ 2. HĂ©ritage et polymorphisme en POO
đ Notions clĂ©s & DĂ©finitions
- HĂ©ritage : LâhĂ©ritage est un mĂ©canisme de POO oĂč une classe enfant rĂ©utilise et Ă©tend le comportement dâune classe parent.
- Polymorphisme : Le polymorphisme est la capacitĂ© dâutiliser une mĂȘme interface pour exĂ©cuter des comportements diffĂ©rents selon le type rĂ©el de lâobjet.
- Classe mĂšre : Une classe mĂšre est la classe de base dont les attributs et mĂ©thodes peuvent ĂȘtre hĂ©ritĂ©s par dâautres classes.
- Classe fille : Une classe fille est une classe qui hĂ©rite dâune classe mĂšre et peut ajouter ou redĂ©finir des comportements.
đ Points essentiels
- Le polymorphisme sâexprime quand une mĂ©thode appelĂ©e sur une rĂ©fĂ©rence de type parent sâexĂ©cute avec la version adaptĂ©e au type rĂ©el de lâobjet.
- LâhĂ©ritage permet de factoriser du code commun dans la classe mĂšre pour Ă©viter la duplication dans les classes filles.
- Une classe fille peut étendre un comportement en ajoutant des méthodes ou en modifiant le comportement existant.
- Pour obtenir le bon comportement polymorphe, la mĂ©thode concernĂ©e doit ĂȘtre redĂ©finie dans la classe fille.
- Le polymorphisme repose sur la relation parentâenfant : un objet de classe fille est utilisable lĂ oĂč un objet de classe mĂšre est attendu.
- Le couple hĂ©ritage + polymorphisme rend le code plus extensible : on ajoute de nouvelles classes filles sans changer lâinterface utilisĂ©e cĂŽtĂ© appelant.
đĄ Astuce mĂ©mo
HĂ©ritage = rĂ©utiliser (parentâenfant) ; polymorphisme = choisir le bon comportement (mĂȘme appel, exĂ©cution diffĂ©rente).
đ 3. Pile et opĂ©rations LIFO en Python
đ Notions clĂ©s & DĂ©finitions
- Pile : Structure de donnĂ©es oĂč le dernier Ă©lĂ©ment ajoutĂ© est le premier Ă ĂȘtre retirĂ©, selon le principe LIFO.
- LIFO : Principe dâaccĂšs oĂč lâĂ©lĂ©ment traitĂ© en premier est celui qui a Ă©tĂ© insĂ©rĂ© le plus rĂ©cemment.
- OpĂ©ration push : Ajout dâun Ă©lĂ©ment au sommet de la pile, sans modifier lâordre relatif des Ă©lĂ©ments dĂ©jĂ prĂ©sents.
- OpĂ©ration pop : Retrait de lâĂ©lĂ©ment situĂ© au sommet de la pile, câest-Ă -dire le plus rĂ©cent parmi ceux encore prĂ©sents.
đ Points essentiels
- LIFO signifie Last In, First Out : le dernier empilé est le premier dépilé.
- Une pile se modĂ©lise naturellement avec une structure de type liste, en manipulant lâextrĂ©mitĂ© correspondant au sommet.
- push ajoute au sommet, tandis que pop retire depuis le sommet.
- Si la pile est vide, une opĂ©ration pop nâa pas dâĂ©lĂ©ment Ă retirer et doit ĂȘtre gĂ©rĂ©e (selon lâimplĂ©mentation).
- Le sommet de la pile est lâunique zone dâaccĂšs : on ne retire pas un Ă©lĂ©ment âau milieuâ sans le dĂ©piler dâabord.
- Comparaison : LIFO (pile) traite le plus récent en premier, alors que FIFO (file) traite le plus ancien en premier.
đĄ Astuce mĂ©mo
LIFO = âdernier entrĂ©, premier sortiâ : sommet = dernier arrivĂ©.
đ 4. File et opĂ©rations FIFO en Python
đ Notions clĂ©s & DĂ©finitions
- File (queue) : Une file est une structure de donnĂ©es oĂč le premier Ă©lĂ©ment ajoutĂ© est le premier Ă ĂȘtre retirĂ© (principe FIFO).
- OpĂ©ration pop(0) : LâopĂ©ration pop(0) retire et renvoie lâĂ©lĂ©ment situĂ© au dĂ©but de la liste, ce qui simule une file FIFO.
- Parcours en largeur : Le parcours en largeur explore un arbre ou un graphe niveau par niveau en utilisant une file FIFO.
- FIFO : FIFO signifie First In, First Out : lâordre de sortie suit lâordre dâentrĂ©e.
đ Points essentiels
- Dans une file FIFO, lâĂ©lĂ©ment le plus ancien est toujours celui qui sort en premier.
- En Python, une file peut ĂȘtre simulĂ©e avec une liste, en retirant le premier Ă©lĂ©ment via file.pop(0).
- Le parcours en largeur initialise la file avec la racine puis rĂ©pĂšte : retirer le premier nĆud, ajouter ses enfants Ă la fin de la file.
- Lâordre produit par le parcours en largeur correspond Ă lâexploration par niveaux (du haut vers le bas).
- Dans lâexemple, le parcours prĂ©fixe donne [40, 20, 10, 30, 60, 50, 70] tandis que le parcours largeur donne [40, 20, 60, 10, 30, 50, 70].
- Le parcours en largeur renvoie une liste rĂ©sultat construite en ajoutant la valeur de chaque nĆud extrait de la file.
đĄ Astuce mĂ©mo
FIFO = « premier entrĂ©, premier sorti » ; parcours largeur = « niveaux dâabord » (file = queue).
đ 5. Dictionnaires et parcours clĂ© valeur
đ Notions clĂ©s & DĂ©finitions
- Sommet : Un sommet est un nĆud du graphe, câest-Ă -dire une entitĂ© reprĂ©sentĂ©e comme un point.
- ArĂȘte : Une arĂȘte relie deux sommets et modĂ©lise une relation entre eux dans le graphe.
- Graphe pondĂ©rĂ© : Un graphe pondĂ©rĂ© associe Ă chaque arĂȘte un poids, interprĂ©tĂ© comme coĂ»t ou distance.
- Matrice dâadjacence : Une matrice dâadjacence est un tableau nĂn oĂč lâentrĂ©e (i,j) dĂ©crit lâarĂȘte de i vers j.
- Liste de successeurs : Une liste de successeurs regroupe, pour un sommet donné, tous les sommets accessibles depuis lui.
đ Points essentiels
- Sommet = nĆud du graphe, tandis quâune arĂȘte est la connexion entre deux sommets.
- ArĂȘte orientĂ©e : elle a une direction, donc lâaccĂšs de i vers j peut diffĂ©rer de j vers i.
- ArĂȘte non-orientĂ©e : elle nâa pas de direction, donc la connexion est symĂ©trique entre les deux sommets.
- ConnexitĂ© : un graphe est connexe si toute paire de sommets peut ĂȘtre reliĂ©e par une chaĂźne dâarĂȘtes.
- Matrice dâadjacence : on inscrit le poids en ligne i et colonne j pour lâarĂȘte de rang i vers j.
- Liste de successeurs : elle correspond aux sommets j tels que lâentrĂ©e (i,j) indique une arĂȘte depuis i.
đĄ Astuce mĂ©mo
Sommet=point, ArĂȘte=liaison, Matrice=table (i,j), Successeurs=sorties depuis i.
đ 6. Arbres binaires et ABR
đ Notions clĂ©s & DĂ©finitions
- Parcours en largeur BFS : Parcours en largeur qui explore dâabord tous les voisins dâun nĆud avant de passer au niveau suivant.
- Parcours en profondeur DFS : Parcours en profondeur qui explore un chemin aussi loin que possible avant de revenir en arriĂšre.
- Plus court chemin en BFS : PropriĂ©tĂ© de BFS sur un graphe non pondĂ©rĂ© oĂč le plus court chemin en nombre dâarĂȘtes est trouvĂ© en supposant un poids 1 pour chaque arĂȘte.
đ Points essentiels
- BFS utilise une file (FIFO) : on retire le premier nĆud ajoutĂ© avec pop(0) puis on ajoute ses successeurs en fin de liste.
- BFS ignore les poids des arĂȘtes et traite chaque arĂȘte comme ayant le mĂȘme coĂ»t, ce qui permet de minimiser le nombre dâarĂȘtes.
- DFS utilise une structure de type pile/traitement en profondeur via pop(0) dans le code fourni, ce qui produit un ordre de visite différent de BFS.
- DFS explore dâabord un voisin puis continue sur ce chemin avant dâexplorer les autres voisins, ce qui peut retarder la dĂ©couverte de nĆuds proches.
- Sur le graphe donnĂ© en exemple, BFS depuis A visite dans lâordre A, B, C, D, E, F, G, H.
- Sur le graphe donnĂ© en exemple, DFS depuis A visite dans lâordre A, B, E, F, C, G, H, D.
đĄ Astuce mĂ©mo
BFS = « mĂȘme niveau dâabord » (file) ; DFS = « chemin dâabord » (profondeur).
đ 7. Taille, hauteur et profondeur des arbres
đ Notions clĂ©s & DĂ©finitions
- Adresse IP : Une adresse IP est un identifiant unique dâune machine dans un rĂ©seau, permettant de la repĂ©rer pour lâenvoi de donnĂ©es.
- Masque de sous-rĂ©seau : Un masque de sous-rĂ©seau dĂ©coupe une adresse IP en partie rĂ©seau et partie hĂŽte pour dĂ©terminer lâappartenance au rĂ©seau.
- Adresse rĂ©seau : Lâadresse rĂ©seau est la valeur qui identifie le rĂ©seau auquel appartient une machine, obtenue Ă partir de son IP et du masque.
- Adresse de broadcast : Lâadresse de broadcast est lâadresse qui permet dâenvoyer un message Ă toutes les machines dâun mĂȘme sous-rĂ©seau.
- Notation CIDR : La notation CIDR, notée /n, indique le nombre de bits réservés à la partie réseau dans le masque de sous-réseau.
đ Points essentiels
- Une IP du type 192.168.1.10/24 correspond à un réseau 192.168.1.0, avec un masque 255.255.255.0.
- Pour 192.168.1.10/24, lâadresse de broadcast est 192.168.1.255 et les hĂŽtes utilisables vont de 192.168.1.1 Ă 192.168.1.254.
- Une table de routage sert Ă choisir le chemin dâun paquet Ă partir dâune destination et de la sortie rĂ©seau Ă utiliser.
- Les champs typiques dâune table de routage sont Destination, Interface et Passerelle pour indiquer oĂč envoyer ensuite.
- Si aucune route spĂ©cifique ne correspond, une route par dĂ©faut peut ĂȘtre utilisĂ©e pour acheminer le paquet.
- RIP Ă©change pĂ©riodiquement des informations entre routeurs pour mettre Ă jour ses routes connues, en sâappuyant sur une mĂ©trique.
đĄ Astuce mĂ©mo
CIDR = « /n » â n bits pour le rĂ©seau ; broadcast = « tout Ă 1 » dans la partie hĂŽte.
đ 8. Parcours d arbres prĂ©fixe infixe suffixe
đ Notions clĂ©s & DĂ©finitions
- Parcours prĂ©fixe : Parcours prĂ©fixe : on visite dâabord la racine, puis on parcourt rĂ©cursivement les sous-arbres gauche et droit.
- Parcours infixe : Parcours infixe : on visite dâabord le sous-arbre gauche, puis la racine, puis le sous-arbre droit.
- Parcours suffixe : Parcours suffixe : on parcourt dâabord les sous-arbres gauche et droit, puis on visite la racine en dernier.
- Arbre binaire : Arbre binaire : structure oĂč chaque nĆud a au plus deux enfants, souvent notĂ©s gauche et droit.
đ Points essentiels
- PrĂ©fixe donne lâordre racineâgaucheâdroite, ce qui met la racine en premier dans la liste produite.
- Infixe donne lâordre gaucheâracineâdroite, ce qui place la racine entre les deux sous-listes.
- Suffixe donne lâordre gaucheâdroiteâracine, ce qui met la racine en dernier dans la liste produite.
- Pour un arbre vide, aucun nĆud nâest visitĂ© ; pour un nĆud seul, les trois parcours renvoient la mĂȘme valeur.
- Les trois parcours sâobtiennent naturellement avec une logique rĂ©cursive : traiter la racine Ă un moment diffĂ©rent puis parcourir gauche et droite.
đĄ Astuce mĂ©mo
PrĂ©fixe = Racine dâabord ; Infixe = Racine au milieu ; Suffixe = Racine Ă la fin.
đ 9. Recherche et insertion dans un ABR
đ Notions clĂ©s & DĂ©finitions
- ABR : Un ABR est un arbre binaire de recherche oĂč, pour chaque nĆud, les valeurs Ă gauche sont plus petites et celles Ă droite plus grandes.
- Recherche dans un ABR : La recherche dans un ABR consiste Ă parcourir lâarbre en comparant la clĂ© cherchĂ©e Ă chaque nĆud pour choisir la branche gauche ou droite.
- Insertion dans un ABR : Lâinsertion dans un ABR place une nouvelle clĂ© Ă la position feuille qui respecte lâordre des valeurs du nĆud courant.
- Tri fusion : Le tri fusion est un algorithme diviser-pour-régner qui trie en séparant la liste, en triant récursivement, puis en fusionnant deux sous-listes triées.
đ Points essentiels
- Dans un ABR, la comparaison clĂ© < nĆud mĂšne Ă la branche gauche et la comparaison clĂ© > nĆud mĂšne Ă la branche droite.
- La recherche dans un ABR sâarrĂȘte quand la clĂ© est trouvĂ©e ou quand on atteint un pointeur vide (absence de la clĂ©).
- Lâinsertion dans un ABR se fait en descendant lâarbre jusquâĂ une position vide, puis en crĂ©ant un nouveau nĆud Ă cet endroit.
- Le schéma diviser-pour-régner du tri fusion suit : diviser, résoudre récursivement, puis combiner par fusion.
- Le cas de base du tri fusion est une liste de taille †1, qui est déjà triée.
đĄ Astuce mĂ©mo
ABR = « Gauche plus petit, Droite plus grand » ; tri fusion = « Diviser â RĂ©gner â Fusionner ».
đ 10. Arbres AVL et complexitĂ© logarithmique
đ Notions clĂ©s & DĂ©finitions
- Arbre AVL : Arbre binaire de recherche auto-équilibré qui maintient une contrainte de hauteur pour limiter la dégradation des performances.
- Hauteur dâun nĆud : Mesure de la profondeur maximale dâun nĆud dans lâarbre, utilisĂ©e pour calculer les dĂ©sĂ©quilibres dans un AVL.
- Facteur dâĂ©quilibre : Valeur dĂ©rivĂ©e des hauteurs des sous-arbres gauche et droit, qui indique si un nĆud est trop dĂ©sĂ©quilibrĂ©.
- Rotation AVL : OpĂ©ration locale qui rĂ©organise quelques nĆuds pour rĂ©tablir la propriĂ©tĂ© dâĂ©quilibre sans casser lâordre de recherche.
đ Points essentiels
- Un arbre AVL garantit une hauteur h en O(logn), ce qui rend les opĂ©rations de recherche/insertion/suppression logarithmiques en nombre de nĆuds n.
- Le facteur dâĂ©quilibre dâun nĆud est calculĂ© Ă partir des hauteurs des deux sous-arbres, et un dĂ©sĂ©quilibre trop grand dĂ©clenche une rotation.
- Les rotations corrigent localement le dĂ©sĂ©quilibre tout en conservant la propriĂ©tĂ© dâarbre binaire de recherche (ordre des clĂ©s).
- Quand lâinsertion ou la suppression modifie une hauteur, lâĂ©quilibre doit ĂȘtre vĂ©rifiĂ© en remontant vers la racine jusquâĂ ce que lâĂ©quilibre soit rĂ©tabli.
- Comparaison : un arbre binaire de recherche non Ă©quilibrĂ© peut atteindre une hauteur O(n) (cas dĂ©gĂ©nĂ©rĂ©), alors quâun AVL reste Ă O(logn) grĂące aux rotations.
đĄ Astuce mĂ©mo
AVL = Anti-Verticale : il empĂȘche lâarbre de devenir trop âhautâ, donc logn.
đ 11. Graphes : sommets, arĂȘtes et connexitĂ©
đ 12. DFS et BFS pour parcourir un graphe
đ Notions clĂ©s & DĂ©finitions
- Parcours en profondeur DFS : Un parcours de graphe qui explore dâabord aussi loin que possible un chemin avant de revenir en arriĂšre.
- Parcours en largeur BFS : Un parcours de graphe qui explore dâabord tous les sommets Ă distance 1, puis 2, puis 3, etc.
- Graphe : Un ensemble de sommets reliĂ©s par des arĂȘtes, utilisĂ© pour modĂ©liser des relations entre objets.
- Pile : Structure de données de type LIFO utilisée naturellement pour implémenter un parcours DFS.
- File : Structure de données de type FIFO utilisée naturellement pour implémenter un parcours BFS.
đ Points essentiels
- DFS utilise une exploration « en profondeur » et revient quand un sommet nâa plus de voisins Ă visiter.
- BFS explore par couches : la distance en nombre dâarĂȘtes depuis la source augmente progressivement.
- Avec une file, BFS garantit que le premier moment oĂč lâon atteint un sommet correspond Ă un chemin de longueur minimale (en arĂȘtes).
- Avec une pile, DFS ne garantit pas la distance minimale : il dĂ©pend de lâordre dâexploration des voisins.
- Pour éviter les boucles, on maintient un ensemble de sommets déjà visités pendant le parcours.
- Le choix pile vs file correspond directement Ă la logique profondeur vs couches de BFS/DFS.
đĄ Astuce mĂ©mo
DFS = Deep First (pile/LIFO) ; BFS = Breadth First (couches/file/FIFO).
đ Tableaux de synthĂšse
Pile vs file (LIFO vs FIFO)
| Structure | Principe | Opération |
|---|
| Pile | Dernier entré, premier sorti (LIFO) | push ajoute au sommet ; pop retire le sommet |
| File | Premier entré, premier sorti (FIFO) | pop(0) retire le premier élément ; ajout à la fin |
Parcours BFS vs DFS
| Parcours | Structure | Ordre / propriété |
|---|
| BFS (largeur) | File FIFO | explore par couches ; premier moment dâatteinte = chemin minimal en nombre dâarĂȘtes (poids=1) |
| DFS (profondeur) | Pile/LIFO (implémentation avec pile) | explore un chemin au maximum avant de revenir ; ne garantit pas la distance minimale |
â ïž PiĂšges & confusions frĂ©quents
- Confondre interface (contrat sans dĂ©tails) et implĂ©mentation (code concret) : on dĂ©crit alors des dĂ©tails dâexĂ©cution dans le contrat.
- Croire que lâencapsulation autorise lâaccĂšs direct aux attributs : en rĂ©alitĂ©, lâaccĂšs passe par des mĂ©thodes publiques (attributs privĂ©s).
- Penser que le polymorphisme dĂ©pend uniquement de lâhĂ©ritage : en pratique, il faut redĂ©finir la mĂ©thode pour obtenir le bon comportement.
- MĂ©langer LIFO et FIFO : utiliser pop(0) comme pour une pile, ou pop() comme pour une file, inverse lâordre des Ă©lĂ©ments.
- Oublier que BFS ignore les poids et minimise le nombre dâarĂȘtes : on peut alors croire quâil trouve le plus âcoĂ»tâ minimal sur un graphe pondĂ©rĂ©.
- Confondre préfixe/infixe/suffixe : placer la racine au mauvais moment (début, milieu, fin) donne un ordre de parcours faux.
- Se tromper sur la hauteur : la hauteur est le nombre dâarĂȘtes de la racine au nĆud le plus profond (et non le nombre de nĆuds).
â
Checklist Examen
- DĂ©finir interface, implĂ©mentation et encapsulation, puis expliquer comment lâaccĂšs aux donnĂ©es internes est contrĂŽlĂ© via mĂ©thodes publiques.
- Expliquer héritage et polymorphisme, et préciser le rÎle de la redéfinition de méthode pour obtenir le bon comportement.
- ReconnaĂźtre une pile (LIFO) et dĂ©crire push/pop ; donner lâordre de sortie attendu aprĂšs empilements.
- ReconnaĂźtre une file (FIFO) et dĂ©crire lâeffet de pop(0) et lâajout en fin de liste.
- Décrire un dictionnaire comme structure clé-valeur non ordonnée et rappeler la complexité moyenne O(1) des opérations via clé.
- Pour un arbre binaire, donner les dĂ©finitions : racine, nĆud, feuille, arĂȘte, sous-arbre, puis distinguer taille et hauteur (en arĂȘtes).
- Donner les ordres exacts des parcours prĂ©fixe, infixe, suffixe et vĂ©rifier les listes obtenues sur lâexemple du cours.
- DĂ©crire le parcours en largeur (BFS) : file, retrait du premier, ajout des enfants, et lâordre produit sur lâexemple.
- Pour un ABR, expliquer la rĂšgle de comparaison (gauche < nĆud < droite) et dĂ©crire recherche puis insertion jusquâĂ une position feuille.
- Comparer ABR et AVL : rappeler lâobjectif dâĂ©quilibre dâun AVL et la consĂ©quence sur la complexitĂ© (hauteur en O(log n)).
- Pour les graphes, dĂ©finir sommet, arĂȘte (orientĂ©e/non-orientĂ©e), graphe pondĂ©rĂ©, connexitĂ©, matrice dâadjacence et liste de successeurs.
- Expliquer DFS vs BFS sur un graphe : structure utilisĂ©e, ordre de visite, et la propriĂ©tĂ© de plus court chemin en nombre dâarĂȘtes pour BFS.
- Pour les congruences, donner la dĂ©finition aâĄb (mod n) et Ă©noncer au moins les propriĂ©tĂ©s de rĂ©flexivitĂ©, symĂ©trie, transitivitĂ© et compatibilitĂ©s (addition/soustraction/multiplication).
- Expliquer le thĂ©orĂšme de BĂ©zout et lâalgorithme dâEuclide (PGCD), puis lâEuclide Ă©tendu (coefficients de BĂ©zout).
Create your own revision sheets
Import your course and AI generates sheets, quizzes and flashcards in 30 seconds.
Sheet generator