[{"data":1,"prerenderedAt":5195},["ShallowReactive",2],{"navigation":3,"\u002Fnsi-tale\u002Fta-structures-donnees\u002Fimplementer-une-structure":585,"\u002Fnsi-tale\u002Fta-structures-donnees\u002Fimplementer-une-structure__counterpart":2548,"\u002Fnsi-tale\u002Fta-structures-donnees\u002Fimplementer-une-structure__slides":3251,"annexes-memo:\u002Fnsi-tale\u002Fta-structures-donnees\u002Fimplementer-une-structure":3940,"annexes-slides:\u002Fnsi-tale\u002Fta-structures-donnees\u002Fimplementer-une-structure":4575},[4,224,440],{"title":5,"path":6,"stem":7,"children":8},"SNT — Seconde","\u002Fsnt-2nde","0.snt-2nde\u002F0.index",[9,10,14,36,66,92,118,144,162,184,206],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13},"REVIEW pédagogique — SNT 2nde","\u002Fsnt-2nde\u002Freview","0.snt-2nde\u002FREVIEW",{"title":15,"path":16,"stem":17,"children":18},"Internet","\u002Fsnt-2nde\u002Fsa-internet","0.snt-2nde\u002Fsa-internet\u002F0.index",[19,20,24,28,32],{"title":15,"path":16,"stem":17},{"title":21,"path":22,"stem":23},"Adresses symboliques et DNS","\u002Fsnt-2nde\u002Fsa-internet\u002Fadresses-dns","0.snt-2nde\u002Fsa-internet\u002F1.adresses-dns",{"title":25,"path":26,"stem":27},"Internet et les réseaux physiques","\u002Fsnt-2nde\u002Fsa-internet\u002Freseaux-physiques","0.snt-2nde\u002Fsa-internet\u002F2.reseaux-physiques",{"title":29,"path":30,"stem":31},"Protocoles TCP\u002FIP et routage des paquets","\u002Fsnt-2nde\u002Fsa-internet\u002Ftcp-ip-routage","0.snt-2nde\u002Fsa-internet\u002F3.tcp-ip-routage",{"title":33,"path":34,"stem":35},"Réseaux pair-à-pair","\u002Fsnt-2nde\u002Fsa-internet\u002Fpair-a-pair","0.snt-2nde\u002Fsa-internet\u002F4.pair-a-pair",{"title":37,"path":38,"stem":39,"children":40},"Le Web","\u002Fsnt-2nde\u002Fsb-web","0.snt-2nde\u002Fsb-web\u002F0.index",[41,42,46,50,54,58,62],{"title":37,"path":38,"stem":39},{"title":43,"path":44,"stem":45},"Histoire du Web","\u002Fsnt-2nde\u002Fsb-web\u002Fhistoire-web","0.snt-2nde\u002Fsb-web\u002F1.histoire-web",{"title":47,"path":48,"stem":49},"URL et hypertexte","\u002Fsnt-2nde\u002Fsb-web\u002Furl-hypertexte","0.snt-2nde\u002Fsb-web\u002F2.url-hypertexte",{"title":51,"path":52,"stem":53},"HTML et CSS — le contenu et la présentation","\u002Fsnt-2nde\u002Fsb-web\u002Fhtml-css","0.snt-2nde\u002Fsb-web\u002F3.html-css",{"title":55,"path":56,"stem":57},"Client-serveur et requêtes HTTP","\u002Fsnt-2nde\u002Fsb-web\u002Fclient-serveur-http","0.snt-2nde\u002Fsb-web\u002F4.client-serveur-http",{"title":59,"path":60,"stem":61},"Moteurs de recherche","\u002Fsnt-2nde\u002Fsb-web\u002Fmoteurs-recherche","0.snt-2nde\u002Fsb-web\u002F5.moteurs-recherche",{"title":63,"path":64,"stem":65},"Sécurité du navigateur et notions juridiques","\u002Fsnt-2nde\u002Fsb-web\u002Fsecurite-droits","0.snt-2nde\u002Fsb-web\u002F6.securite-droits",{"title":67,"path":68,"stem":69,"children":70},"Les réseaux sociaux","\u002Fsnt-2nde\u002Fsc-reseaux-sociaux","0.snt-2nde\u002Fsc-reseaux-sociaux\u002F0.index",[71,72,76,80,84,88],{"title":67,"path":68,"stem":69},{"title":73,"path":74,"stem":75},"Panorama des réseaux sociaux","\u002Fsnt-2nde\u002Fsc-reseaux-sociaux\u002Fpanorama-rs","0.snt-2nde\u002Fsc-reseaux-sociaux\u002F1.panorama-rs",{"title":77,"path":78,"stem":79},"Identité numérique et authentification","\u002Fsnt-2nde\u002Fsc-reseaux-sociaux\u002Fidentite-numerique","0.snt-2nde\u002Fsc-reseaux-sociaux\u002F2.identite-numerique",{"title":81,"path":82,"stem":83},"Le modèle économique des réseaux sociaux","\u002Fsnt-2nde\u002Fsc-reseaux-sociaux\u002Fmodele-economique","0.snt-2nde\u002Fsc-reseaux-sociaux\u002F3.modele-economique",{"title":85,"path":86,"stem":87},"Petit monde et graphes","\u002Fsnt-2nde\u002Fsc-reseaux-sociaux\u002Fpetit-monde-graphes","0.snt-2nde\u002Fsc-reseaux-sociaux\u002F4.petit-monde-graphes",{"title":89,"path":90,"stem":91},"La cyberviolence","\u002Fsnt-2nde\u002Fsc-reseaux-sociaux\u002Fcyberviolence","0.snt-2nde\u002Fsc-reseaux-sociaux\u002F5.cyberviolence",{"title":93,"path":94,"stem":95,"children":96},"Les données structurées et leur traitement","\u002Fsnt-2nde\u002Fsd-donnees-structurees","0.snt-2nde\u002Fsd-donnees-structurees\u002F0.index",[97,98,102,106,110,114],{"title":93,"path":94,"stem":95},{"title":99,"path":100,"stem":101},"Données et formats","\u002Fsnt-2nde\u002Fsd-donnees-structurees\u002Fdonnees-formats","0.snt-2nde\u002Fsd-donnees-structurees\u002F1.donnees-formats",{"title":103,"path":104,"stem":105},"Données structurées","\u002Fsnt-2nde\u002Fsd-donnees-structurees\u002Fdonnees-structurees","0.snt-2nde\u002Fsd-donnees-structurees\u002F2.donnees-structurees",{"title":107,"path":108,"stem":109},"Métadonnées","\u002Fsnt-2nde\u002Fsd-donnees-structurees\u002Fmetadonnees","0.snt-2nde\u002Fsd-donnees-structurees\u002F3.metadonnees",{"title":111,"path":112,"stem":113},"Traitement de tables","\u002Fsnt-2nde\u002Fsd-donnees-structurees\u002Ftraitement-tables","0.snt-2nde\u002Fsd-donnees-structurees\u002F4.traitement-tables",{"title":115,"path":116,"stem":117},"Le cloud","\u002Fsnt-2nde\u002Fsd-donnees-structurees\u002Fcloud","0.snt-2nde\u002Fsd-donnees-structurees\u002F5.cloud",{"title":119,"path":120,"stem":121,"children":122},"Localisation, cartographie et mobilité","\u002Fsnt-2nde\u002Fse-localisation-cartographie","0.snt-2nde\u002Fse-localisation-cartographie\u002F0.index",[123,124,128,132,136,140],{"title":119,"path":120,"stem":121},{"title":125,"path":126,"stem":127},"GPS et Galileo — se situer grâce aux satellites","\u002Fsnt-2nde\u002Fse-localisation-cartographie\u002Fgps-galileo","0.snt-2nde\u002Fse-localisation-cartographie\u002F1.gps-galileo",{"title":129,"path":130,"stem":131},"Décoder une trame NMEA","\u002Fsnt-2nde\u002Fse-localisation-cartographie\u002Ftrame-nmea","0.snt-2nde\u002Fse-localisation-cartographie\u002F2.trame-nmea",{"title":133,"path":134,"stem":135},"Cartes numériques — GeoPortail et OpenStreetMap","\u002Fsnt-2nde\u002Fse-localisation-cartographie\u002Fcartes-numeriques","0.snt-2nde\u002Fse-localisation-cartographie\u002F3.cartes-numeriques",{"title":137,"path":138,"stem":139},"Itinéraires et graphes","\u002Fsnt-2nde\u002Fse-localisation-cartographie\u002Fitineraires-graphes","0.snt-2nde\u002Fse-localisation-cartographie\u002F4.itineraires-graphes",{"title":141,"path":142,"stem":143},"Confidentialité de la position","\u002Fsnt-2nde\u002Fse-localisation-cartographie\u002Fconfidentialite-position","0.snt-2nde\u002Fse-localisation-cartographie\u002F5.confidentialite-position",{"title":145,"path":146,"stem":147,"children":148},"Informatique embarquée et objets connectés","\u002Fsnt-2nde\u002Fsf-info-embarquee","0.snt-2nde\u002Fsf-info-embarquee\u002F0.index",[149,150,154,158],{"title":145,"path":146,"stem":147},{"title":151,"path":152,"stem":153},"Systèmes informatiques embarqués","\u002Fsnt-2nde\u002Fsf-info-embarquee\u002Fsystemes-embarques","0.snt-2nde\u002Fsf-info-embarquee\u002F1.systemes-embarques",{"title":155,"path":156,"stem":157},"Capteurs et actionneurs","\u002Fsnt-2nde\u002Fsf-info-embarquee\u002Fcapteurs-actionneurs","0.snt-2nde\u002Fsf-info-embarquee\u002F2.capteurs-actionneurs",{"title":159,"path":160,"stem":161},"IHM et objets connectés","\u002Fsnt-2nde\u002Fsf-info-embarquee\u002Fihm-objet-connecte","0.snt-2nde\u002Fsf-info-embarquee\u002F3.ihm-objet-connecte",{"title":163,"path":164,"stem":165,"children":166},"Photographie numérique","\u002Fsnt-2nde\u002Fsg-photo-numerique","0.snt-2nde\u002Fsg-photo-numerique\u002F0.index",[167,168,172,176,180],{"title":163,"path":164,"stem":165},{"title":169,"path":170,"stem":171},"Photosites, pixels et résolution","\u002Fsnt-2nde\u002Fsg-photo-numerique\u002Fpixels-resolution","0.snt-2nde\u002Fsg-photo-numerique\u002F1.pixels-resolution",{"title":173,"path":174,"stem":175},"Les algorithmes de l'appareil photo","\u002Fsnt-2nde\u002Fsg-photo-numerique\u002Falgorithmes-photo","0.snt-2nde\u002Fsg-photo-numerique\u002F2.algorithmes-photo",{"title":177,"path":178,"stem":179},"Les métadonnées EXIF","\u002Fsnt-2nde\u002Fsg-photo-numerique\u002Fmetadonnees-exif","0.snt-2nde\u002Fsg-photo-numerique\u002F3.metadonnees-exif",{"title":181,"path":182,"stem":183},"Traiter une image en Python","\u002Fsnt-2nde\u002Fsg-photo-numerique\u002Ftraitement-rgb","0.snt-2nde\u002Fsg-photo-numerique\u002F4.traitement-rgb",{"title":185,"path":186,"stem":187,"children":188},"Notions transversales de programmation","\u002Fsnt-2nde\u002Fsh-prog-notions","0.snt-2nde\u002Fsh-prog-notions\u002F0.index",[189,190,194,198,202],{"title":185,"path":186,"stem":187},{"title":191,"path":192,"stem":193},"Séquences d'instructions et variables","\u002Fsnt-2nde\u002Fsh-prog-notions\u002Fsequences-affectations","0.snt-2nde\u002Fsh-prog-notions\u002F1.sequences-affectations",{"title":195,"path":196,"stem":197},"Instructions conditionnelles","\u002Fsnt-2nde\u002Fsh-prog-notions\u002Fconditionnelles","0.snt-2nde\u002Fsh-prog-notions\u002F2.conditionnelles",{"title":199,"path":200,"stem":201},"Boucles bornées et non bornées","\u002Fsnt-2nde\u002Fsh-prog-notions\u002Fboucles","0.snt-2nde\u002Fsh-prog-notions\u002F3.boucles",{"title":203,"path":204,"stem":205},"Définitions et appels de fonctions","\u002Fsnt-2nde\u002Fsh-prog-notions\u002Ffonctions","0.snt-2nde\u002Fsh-prog-notions\u002F4.fonctions",{"title":207,"path":208,"stem":209,"children":210},"Démo des widgets MDC","\u002Fsnt-2nde\u002Fzz-demo-widgets","0.snt-2nde\u002Fzz-demo-widgets\u002F0.index",[211,212,216,220],{"title":207,"path":208,"stem":209},{"title":213,"path":214,"stem":215},"Démo statique — callouts, code, BO, illustration","\u002Fsnt-2nde\u002Fzz-demo-widgets\u002Fstatique","0.snt-2nde\u002Fzz-demo-widgets\u002F1.statique",{"title":217,"path":218,"stem":219},"Démo interactive — self-eval et python-snippet","\u002Fsnt-2nde\u002Fzz-demo-widgets\u002Finteractif","0.snt-2nde\u002Fzz-demo-widgets\u002F2.interactif",{"title":221,"path":222,"stem":223},"Démo · 14 widgets de manipulation NSI","\u002Fsnt-2nde\u002Fzz-demo-widgets\u002Fwidgets-manipulation","0.snt-2nde\u002Fzz-demo-widgets\u002F3.widgets-manipulation",{"title":225,"path":226,"stem":227,"children":228},"NSI — Première","\u002Fnsi-1ere","1.nsi-1ere\u002F0.index",[229,230,234,256,282,304,328,354,380,410],{"title":225,"path":226,"stem":227},{"title":231,"path":232,"stem":233},"Relecture pédagogique — 8 chapitres NSI 1ère (PA → PH)","\u002Fnsi-1ere\u002Freview","1.nsi-1ere\u002FREVIEW",{"title":235,"path":236,"stem":237,"children":238},"Histoire de l'informatique","\u002Fnsi-1ere\u002Fpa-histoire-info","1.nsi-1ere\u002Fpa-histoire-info\u002F0.index",[239,240,244,248,252],{"title":235,"path":236,"stem":237},{"title":241,"path":242,"stem":243},"De la préantiquité aux machines à calculer","\u002Fnsi-1ere\u002Fpa-histoire-info\u002Fpreantiquite-aux-machines","1.nsi-1ere\u002Fpa-histoire-info\u002F1.preantiquite-aux-machines",{"title":245,"path":246,"stem":247},"La machine universelle (1930-1950)","\u002Fnsi-1ere\u002Fpa-histoire-info\u002Fmachine-universelle","1.nsi-1ere\u002Fpa-histoire-info\u002F2.machine-universelle",{"title":249,"path":250,"stem":251},"Les ordinateurs modernes (1947-1990)","\u002Fnsi-1ere\u002Fpa-histoire-info\u002Fordinateurs-modernes","1.nsi-1ere\u002Fpa-histoire-info\u002F3.ordinateurs-modernes",{"title":253,"path":254,"stem":255},"Réseaux, Web et IA (1969 à aujourd'hui)","\u002Fnsi-1ere\u002Fpa-histoire-info\u002Freseaux-et-web","1.nsi-1ere\u002Fpa-histoire-info\u002F4.reseaux-et-web",{"title":257,"path":258,"stem":259,"children":260},"Représentation des données — types et valeurs","\u002Fnsi-1ere\u002Fpb-types-valeurs","1.nsi-1ere\u002Fpb-types-valeurs\u002F0.index",[261,262,266,270,274,278],{"title":257,"path":258,"stem":259},{"title":263,"path":264,"stem":265},"Bases de numération et entiers positifs","\u002Fnsi-1ere\u002Fpb-types-valeurs\u002Fbases-entiers-positifs","1.nsi-1ere\u002Fpb-types-valeurs\u002F1.bases-entiers-positifs",{"title":267,"path":268,"stem":269},"Entiers relatifs et complément à deux","\u002Fnsi-1ere\u002Fpb-types-valeurs\u002Fentiers-relatifs","1.nsi-1ere\u002Fpb-types-valeurs\u002F2.entiers-relatifs",{"title":271,"path":272,"stem":273},"Nombres flottants et virgule flottante","\u002Fnsi-1ere\u002Fpb-types-valeurs\u002Fflottants","1.nsi-1ere\u002Fpb-types-valeurs\u002F3.flottants",{"title":275,"path":276,"stem":277},"Textes et encodages — ASCII, ISO-8859-1, Unicode","\u002Fnsi-1ere\u002Fpb-types-valeurs\u002Ftextes-encodages","1.nsi-1ere\u002Fpb-types-valeurs\u002F4.textes-encodages",{"title":279,"path":280,"stem":281},"Valeurs booléennes et opérateurs logiques","\u002Fnsi-1ere\u002Fpb-types-valeurs\u002Fbooleens","1.nsi-1ere\u002Fpb-types-valeurs\u002F5.booleens",{"title":283,"path":284,"stem":285,"children":286},"Représentation des données : types construits","\u002Fnsi-1ere\u002Fpc-types-construits","1.nsi-1ere\u002Fpc-types-construits\u002F0.index",[287,288,292,296,300],{"title":283,"path":284,"stem":285},{"title":289,"path":290,"stem":291},"Tableaux et listes","\u002Fnsi-1ere\u002Fpc-types-construits\u002Ftableaux-listes","1.nsi-1ere\u002Fpc-types-construits\u002F1.tableaux-listes",{"title":293,"path":294,"stem":295},"Listes en compréhension","\u002Fnsi-1ere\u002Fpc-types-construits\u002Fcomprehension","1.nsi-1ere\u002Fpc-types-construits\u002F2.comprehension",{"title":297,"path":298,"stem":299},"Tuples et p-uplets nommés","\u002Fnsi-1ere\u002Fpc-types-construits\u002Ftuples","1.nsi-1ere\u002Fpc-types-construits\u002F3.tuples",{"title":301,"path":302,"stem":303},"Dictionnaires","\u002Fnsi-1ere\u002Fpc-types-construits\u002Fdictionnaires","1.nsi-1ere\u002Fpc-types-construits\u002F4.dictionnaires",{"title":305,"path":306,"stem":307,"children":308},"Traitement de données en tables","\u002Fnsi-1ere\u002Fpd-tables-donnees","1.nsi-1ere\u002Fpd-tables-donnees\u002F0.index",[309,310,314,318,322],{"title":305,"path":306,"stem":307},{"title":311,"path":312,"stem":313},"Tables et CSV","\u002Fnsi-1ere\u002Fpd-tables-donnees\u002Ftables-csv","1.nsi-1ere\u002Fpd-tables-donnees\u002F1.tables-csv",{"title":315,"path":316,"stem":317},"Recherche et filtrage","\u002Fnsi-1ere\u002Fpd-tables-donnees\u002Frecherche","1.nsi-1ere\u002Fpd-tables-donnees\u002F2.recherche",{"title":319,"path":320,"stem":321},"Trier une table","\u002Fnsi-1ere\u002Fpd-tables-donnees\u002Ftri","1.nsi-1ere\u002Fpd-tables-donnees\u002F3.tri",{"title":323,"path":324,"stem":325,"children":326},"Fusion et indexation","\u002Fnsi-1ere\u002Fpd-tables-donnees\u002Ffusion-indexation","1.nsi-1ere\u002Fpd-tables-donnees\u002F4.fusion-indexation",[327],{"title":323,"path":324,"stem":325},{"title":329,"path":330,"stem":331,"children":332},"IHM sur le Web","\u002Fnsi-1ere\u002Fpe-ihm-web","1.nsi-1ere\u002Fpe-ihm-web\u002F0.index",[333,334,338,342,346,350],{"title":329,"path":330,"stem":331},{"title":335,"path":336,"stem":337},"HTML et CSS — rappel de structure","\u002Fnsi-1ere\u002Fpe-ihm-web\u002Fhtml-css-bases","1.nsi-1ere\u002Fpe-ihm-web\u002F1.html-css-bases",{"title":339,"path":340,"stem":341},"Formulaires HTML","\u002Fnsi-1ere\u002Fpe-ihm-web\u002Fformulaires","1.nsi-1ere\u002Fpe-ihm-web\u002F2.formulaires",{"title":343,"path":344,"stem":345},"Événements JavaScript","\u002Fnsi-1ere\u002Fpe-ihm-web\u002Fevenements-js","1.nsi-1ere\u002Fpe-ihm-web\u002F3.evenements-js",{"title":347,"path":348,"stem":349},"Manipulation du DOM","\u002Fnsi-1ere\u002Fpe-ihm-web\u002Fdom-interaction","1.nsi-1ere\u002Fpe-ihm-web\u002F4.dom-interaction",{"title":351,"path":352,"stem":353},"Client, serveur et HTTP","\u002Fnsi-1ere\u002Fpe-ihm-web\u002Fclient-serveur-http","1.nsi-1ere\u002Fpe-ihm-web\u002F5.client-serveur-http",{"title":355,"path":356,"stem":357,"children":358},"Architectures matérielles et systèmes d'exploitation","\u002Fnsi-1ere\u002Fpf-archi-os","1.nsi-1ere\u002Fpf-archi-os\u002F0.index",[359,360,364,368,372,376],{"title":355,"path":356,"stem":357},{"title":361,"path":362,"stem":363},"Le modèle de von Neumann","\u002Fnsi-1ere\u002Fpf-archi-os\u002Fvon-neumann","1.nsi-1ere\u002Fpf-archi-os\u002F1.von-neumann",{"title":365,"path":366,"stem":367},"Périphériques et interface homme-machine","\u002Fnsi-1ere\u002Fpf-archi-os\u002Fperipheriques-ihm","1.nsi-1ere\u002Fpf-archi-os\u002F2.peripheriques-ihm",{"title":369,"path":370,"stem":371},"Les systèmes d'exploitation","\u002Fnsi-1ere\u002Fpf-archi-os\u002Fsystemes-exploitation","1.nsi-1ere\u002Fpf-archi-os\u002F3.systemes-exploitation",{"title":373,"path":374,"stem":375},"Linux et le shell","\u002Fnsi-1ere\u002Fpf-archi-os\u002Flinux-shell","1.nsi-1ere\u002Fpf-archi-os\u002F4.linux-shell",{"title":377,"path":378,"stem":379},"Réseaux et protocoles","\u002Fnsi-1ere\u002Fpf-archi-os\u002Freseaux","1.nsi-1ere\u002Fpf-archi-os\u002F5.reseaux",{"title":381,"path":382,"stem":383,"children":384},"Langages et programmation","\u002Fnsi-1ere\u002Fpg-langages-prog","1.nsi-1ere\u002Fpg-langages-prog\u002F0.index",[385,386,390,394,398,402,406],{"title":381,"path":382,"stem":383},{"title":387,"path":388,"stem":389},"Diversité et unité des langages de programmation","\u002Fnsi-1ere\u002Fpg-langages-prog\u002Fdiversite-langages","1.nsi-1ere\u002Fpg-langages-prog\u002F1.diversite-langages",{"title":391,"path":392,"stem":393},"Constructions élémentaires","\u002Fnsi-1ere\u002Fpg-langages-prog\u002Fconstructions-elementaires","1.nsi-1ere\u002Fpg-langages-prog\u002F2.constructions-elementaires",{"title":395,"path":396,"stem":397},"Fonctions","\u002Fnsi-1ere\u002Fpg-langages-prog\u002Ffonctions","1.nsi-1ere\u002Fpg-langages-prog\u002F3.fonctions",{"title":399,"path":400,"stem":401},"Spécification d'une fonction","\u002Fnsi-1ere\u002Fpg-langages-prog\u002Fspecification","1.nsi-1ere\u002Fpg-langages-prog\u002F4.specification",{"title":403,"path":404,"stem":405},"Mise au point des programmes","\u002Fnsi-1ere\u002Fpg-langages-prog\u002Fmise-au-point","1.nsi-1ere\u002Fpg-langages-prog\u002F5.mise-au-point",{"title":407,"path":408,"stem":409},"Utilisation de bibliothèques","\u002Fnsi-1ere\u002Fpg-langages-prog\u002Fbibliotheques","1.nsi-1ere\u002Fpg-langages-prog\u002F6.bibliotheques",{"title":411,"path":412,"stem":413,"children":414},"Algorithmique","\u002Fnsi-1ere\u002Fph-algorithmique","1.nsi-1ere\u002Fph-algorithmique\u002F0.index",[415,416,420,424,428,432,436],{"title":411,"path":412,"stem":413},{"title":417,"path":418,"stem":419},"Parcours séquentiel d'un tableau","\u002Fnsi-1ere\u002Fph-algorithmique\u002Fparcours-sequentiel","1.nsi-1ere\u002Fph-algorithmique\u002F1.parcours-sequentiel",{"title":421,"path":422,"stem":423},"Bases de la complexité","\u002Fnsi-1ere\u002Fph-algorithmique\u002Fcomplexite-bases","1.nsi-1ere\u002Fph-algorithmique\u002F2.complexite-bases",{"title":425,"path":426,"stem":427},"Tris par sélection et par insertion","\u002Fnsi-1ere\u002Fph-algorithmique\u002Ftris","1.nsi-1ere\u002Fph-algorithmique\u002F3.tris",{"title":429,"path":430,"stem":431},"Recherche dichotomique","\u002Fnsi-1ere\u002Fph-algorithmique\u002Fdichotomie","1.nsi-1ere\u002Fph-algorithmique\u002F4.dichotomie",{"title":433,"path":434,"stem":435},"Algorithmes gloutons","\u002Fnsi-1ere\u002Fph-algorithmique\u002Fgloutons","1.nsi-1ere\u002Fph-algorithmique\u002F5.gloutons",{"title":437,"path":438,"stem":439},"Les k plus proches voisins (k-NN)","\u002Fnsi-1ere\u002Fph-algorithmique\u002Fknn","1.nsi-1ere\u002Fph-algorithmique\u002F6.knn",{"title":441,"path":442,"stem":443,"children":444},"NSI — Terminale","\u002Fnsi-tale","2.nsi-tale\u002F0.index",[445,446,450,476,498,536,560],{"title":441,"path":442,"stem":443},{"title":447,"path":448,"stem":449},"Review pédagogique — chapitres NSI Terminale (TA, TB, TC, TD, TE)","\u002Fnsi-tale\u002Freview","2.nsi-tale\u002FREVIEW",{"title":451,"path":452,"stem":453,"children":454},"Structures de données","\u002Fnsi-tale\u002Fta-structures-donnees","2.nsi-tale\u002Fta-structures-donnees\u002F0.index",[455,456,460,464,468,472],{"title":451,"path":452,"stem":453},{"title":457,"path":458,"stem":459},"Objet, classe, interface","\u002Fnsi-tale\u002Fta-structures-donnees\u002Finterface-implementation","2.nsi-tale\u002Fta-structures-donnees\u002F1.interface-implementation",{"title":461,"path":462,"stem":463},"Implémenter une structure — l'exemple de la file FIFO","\u002Fnsi-tale\u002Fta-structures-donnees\u002Fimplementer-une-structure","2.nsi-tale\u002Fta-structures-donnees\u002F2.implementer-une-structure",{"title":465,"path":466,"stem":467},"Listes, piles, files, dictionnaires","\u002Fnsi-tale\u002Fta-structures-donnees\u002Flistes-piles-files-dict","2.nsi-tale\u002Fta-structures-donnees\u002F3.listes-piles-files-dict",{"title":469,"path":470,"stem":471},"Arbres binaires","\u002Fnsi-tale\u002Fta-structures-donnees\u002Farbres-binaires","2.nsi-tale\u002Fta-structures-donnees\u002F4.arbres-binaires",{"title":473,"path":474,"stem":475},"Graphes","\u002Fnsi-tale\u002Fta-structures-donnees\u002Fgraphes","2.nsi-tale\u002Fta-structures-donnees\u002F5.graphes",{"title":477,"path":478,"stem":479,"children":480},"Bases de données","\u002Fnsi-tale\u002Ftb-bases-de-donnees","2.nsi-tale\u002Ftb-bases-de-donnees\u002F0.index",[481,482,486,490,494],{"title":477,"path":478,"stem":479},{"title":483,"path":484,"stem":485},"Le modèle relationnel","\u002Fnsi-tale\u002Ftb-bases-de-donnees\u002Fmodele-relationnel","2.nsi-tale\u002Ftb-bases-de-donnees\u002F1.modele-relationnel",{"title":487,"path":488,"stem":489},"Bases de données relationnelles et anomalies de schéma","\u002Fnsi-tale\u002Ftb-bases-de-donnees\u002Fbase-relationnelle","2.nsi-tale\u002Ftb-bases-de-donnees\u002F2.base-relationnelle",{"title":491,"path":492,"stem":493},"Le langage SQL","\u002Fnsi-tale\u002Ftb-bases-de-donnees\u002Fsql","2.nsi-tale\u002Ftb-bases-de-donnees\u002F3.sql",{"title":495,"path":496,"stem":497},"Les systèmes de gestion de bases de données","\u002Fnsi-tale\u002Ftb-bases-de-donnees\u002Fsgbd","2.nsi-tale\u002Ftb-bases-de-donnees\u002F4.sgbd",{"title":499,"path":500,"stem":501,"children":502},"Architectures matérielles, systèmes d'exploitation et réseaux","\u002Fnsi-tale\u002Ftc-archi-os-reseaux","2.nsi-tale\u002Ftc-archi-os-reseaux\u002F0.index",[503,504,508,512,516,520,524,528,532],{"title":499,"path":500,"stem":501},{"title":505,"path":506,"stem":507},"Le système sur puce (SoC)","\u002Fnsi-tale\u002Ftc-archi-os-reseaux\u002Fsysteme-sur-puce","2.nsi-tale\u002Ftc-archi-os-reseaux\u002F1.systeme-sur-puce",{"title":509,"path":510,"stem":511},"Processus et ordonnancement par l'OS","\u002Fnsi-tale\u002Ftc-archi-os-reseaux\u002Fprocessus-os","2.nsi-tale\u002Ftc-archi-os-reseaux\u002F2.processus-os",{"title":513,"path":514,"stem":515},"L'interblocage (deadlock)","\u002Fnsi-tale\u002Ftc-archi-os-reseaux\u002Finterblocage","2.nsi-tale\u002Ftc-archi-os-reseaux\u002F3.interblocage",{"title":517,"path":518,"stem":519},"Principes du routage","\u002Fnsi-tale\u002Ftc-archi-os-reseaux\u002Froutage-principes","2.nsi-tale\u002Ftc-archi-os-reseaux\u002F4.routage-principes",{"title":521,"path":522,"stem":523},"Protocoles de routage RIP et OSPF","\u002Fnsi-tale\u002Ftc-archi-os-reseaux\u002Fprotocoles-rip-ospf","2.nsi-tale\u002Ftc-archi-os-reseaux\u002F5.protocoles-rip-ospf",{"title":525,"path":526,"stem":527},"Chiffrement symétrique","\u002Fnsi-tale\u002Ftc-archi-os-reseaux\u002Fchiffrement-symetrique","2.nsi-tale\u002Ftc-archi-os-reseaux\u002F6.chiffrement-symetrique",{"title":529,"path":530,"stem":531},"Chiffrement asymétrique","\u002Fnsi-tale\u002Ftc-archi-os-reseaux\u002Fchiffrement-asymetrique","2.nsi-tale\u002Ftc-archi-os-reseaux\u002F7.chiffrement-asymetrique",{"title":533,"path":534,"stem":535},"HTTPS — l'échange de clé symétrique","\u002Fnsi-tale\u002Ftc-archi-os-reseaux\u002Fhttps-tls","2.nsi-tale\u002Ftc-archi-os-reseaux\u002F8.https-tls",{"title":381,"path":537,"stem":538,"children":539},"\u002Fnsi-tale\u002Ftd-langages-prog","2.nsi-tale\u002Ftd-langages-prog\u002F0.index",[540,541,544,548,552,556],{"title":381,"path":537,"stem":538},{"title":403,"path":542,"stem":543},"\u002Fnsi-tale\u002Ftd-langages-prog\u002Fmise-au-point","2.nsi-tale\u002Ftd-langages-prog\u002F1.mise-au-point",{"title":545,"path":546,"stem":547},"Modularité","\u002Fnsi-tale\u002Ftd-langages-prog\u002Fmodularite","2.nsi-tale\u002Ftd-langages-prog\u002F2.modularite",{"title":549,"path":550,"stem":551},"Récursivité","\u002Fnsi-tale\u002Ftd-langages-prog\u002Frecursivite","2.nsi-tale\u002Ftd-langages-prog\u002F3.recursivite",{"title":553,"path":554,"stem":555},"Paradigmes de programmation","\u002Fnsi-tale\u002Ftd-langages-prog\u002Fparadigmes","2.nsi-tale\u002Ftd-langages-prog\u002F4.paradigmes",{"title":557,"path":558,"stem":559},"Programme comme donnée — calculabilité et indécidabilité","\u002Fnsi-tale\u002Ftd-langages-prog\u002Fprogramme-comme-donnee","2.nsi-tale\u002Ftd-langages-prog\u002F5.programme-comme-donnee",{"title":411,"path":561,"stem":562,"children":563},"\u002Fnsi-tale\u002Fte-algorithmique","2.nsi-tale\u002Fte-algorithmique\u002F0.index",[564,565,569,573,577,581],{"title":411,"path":561,"stem":562},{"title":566,"path":567,"stem":568},"Algorithmes sur les arbres binaires","\u002Fnsi-tale\u002Fte-algorithmique\u002Farbres-binaires-algos","2.nsi-tale\u002Fte-algorithmique\u002F1.arbres-binaires-algos",{"title":570,"path":571,"stem":572},"Parcours de graphes — DFS, BFS, cycles, chemins","\u002Fnsi-tale\u002Fte-algorithmique\u002Fgraphes-parcours","2.nsi-tale\u002Fte-algorithmique\u002F2.graphes-parcours",{"title":574,"path":575,"stem":576},"Diviser pour régner","\u002Fnsi-tale\u002Fte-algorithmique\u002Fdiviser-pour-regner","2.nsi-tale\u002Fte-algorithmique\u002F3.diviser-pour-regner",{"title":578,"path":579,"stem":580},"Programmation dynamique","\u002Fnsi-tale\u002Fte-algorithmique\u002Fprogrammation-dynamique","2.nsi-tale\u002Fte-algorithmique\u002F4.programmation-dynamique",{"title":582,"path":583,"stem":584},"Recherche textuelle — l'algorithme de Boyer-Moore","\u002Fnsi-tale\u002Fte-algorithmique\u002Frecherche-textuelle","2.nsi-tale\u002Fte-algorithmique\u002F5.recherche-textuelle",{"id":586,"title":461,"bo":587,"body":589,"description":2535,"eval":2536,"extension":2537,"labo":2536,"meta":2538,"navigation":853,"path":462,"quizzes":2539,"readingTime":829,"seo":2546,"stem":463,"tp":2536,"__hash__":2547},"cours\u002F2.nsi-tale\u002Fta-structures-donnees\u002F2.implementer-une-structure.md",[588],"TA04",{"type":590,"value":591,"toc":2525},"minimark",[592,597,614,634,652,656,676,679,774,783,810,814,817,1044,1047,1119,1125,1297,1311,1315,1340,1571,1574,1636,1643,1664,1668,1735,1912,1923,1927,1951,1997,2013,2017,2382,2399,2403,2453,2512,2519,2521],[593,594,596],"h2",{"id":595},"introduction","Introduction",[598,599,600,601,605,606,609,610,613],"p",{},"Le cours précédent a posé un principe : une ",[602,603,604],"strong",{},"interface"," est un contrat, une\n",[602,607,608],{},"implémentation"," est un code qui le réalise — et un même contrat admet\nplusieurs implémentations. Le moment est venu d'en faire l'expérience sur un\nexemple canonique de Terminale : la ",[602,611,612],{},"file FIFO",".",[598,615,616,617,621,622,625,626,629,630,633],{},"Vous allez voir deux classes, ",[618,619,620],"code",{},"FileTableau"," et ",[618,623,624],{},"FileDeuxPiles",", qui exposent la\nmême interface — quatre méthodes au comportement strictement identique du point\nde vue de l'utilisateur — mais dont les performances ",[602,627,628],{},"diffèrent radicalement",".\nC'est l'illustration parfaite de l'item ",[631,632],"bo-ref",{"code":588}," : « écrire plusieurs\nimplémentations d'une même structure de données ».",[635,636,637],"note",{},[598,638,639,640,643,644,647,648,651],{},"Ce cours suppose acquis le vocabulaire du cours précédent (",[618,641,642],{},"class",", ",[618,645,646],{},"__init__",",\n",[618,649,650],{},"self",", méthode, encapsulation). Si l'un de ces termes vous échappe, retournez\nau cours 1.",[593,653,655],{"id":654},"linterface-dune-file-fifo","L'interface d'une file FIFO",[598,657,658,659,662,663,667,668,671,672,675],{},"Une ",[602,660,661],{},"file"," (en anglais ",[664,665,666],"em",{},"queue",") est une structure linéaire au comportement\n",[602,669,670],{},"FIFO"," — ",[664,673,674],{},"First In, First Out",". L'analogie est immédiate : la file d'attente\nà la boulangerie. On entre par la queue, on sort par la tête, on ne double pas.",[598,677,678],{},"Son interface comporte typiquement quatre opérations :",[680,681,682,698],"table",{},[683,684,685],"thead",{},[686,687,688,692,695],"tr",{},[689,690,691],"th",{},"Méthode",[689,693,694],{},"Signature",[689,696,697],{},"Effet attendu",[699,700,701,721,736,759],"tbody",{},[686,702,703,709,714],{},[704,705,706],"td",{},[618,707,708],{},"enfiler(x)",[704,710,711],{},[618,712,713],{},"File × Élément → File",[704,715,716,717,720],{},"Ajoute ",[618,718,719],{},"x"," à la queue de la file.",[686,722,723,728,733],{},[704,724,725],{},[618,726,727],{},"defiler()",[704,729,730],{},[618,731,732],{},"File → Élément",[704,734,735],{},"Retire et renvoie l'élément de tête ; lève une exception si la file est vide.",[686,737,738,743,748],{},[704,739,740],{},[618,741,742],{},"est_vide()",[704,744,745],{},[618,746,747],{},"File → Booléen",[704,749,750,751,754,755,758],{},"Renvoie ",[618,752,753],{},"True"," si la file est vide, ",[618,756,757],{},"False"," sinon.",[686,760,761,766,771],{},[704,762,763],{},[618,764,765],{},"taille()",[704,767,768],{},[618,769,770],{},"File → Entier",[704,772,773],{},"Renvoie le nombre d'éléments.",[635,775,776],{},[598,777,778,779,782],{},"Cette interface ne dit rien sur la mémoire utilisée ni sur la complexité. Elle\ndécrit ",[602,780,781],{},"un contrat",". Une implémentation qui le respecte est valable, même si\nelle est lente.",[784,785,788,795],"self-eval-qcm",{"correct":786,"slug":787},"1","implementer-une-structure-c1",[789,790,792],"template",{"v-slot:question":791},"",[598,793,794],{},"Dans une file FIFO, le prochain élément à sortir est…",[789,796,797],{"v-slot:choices":791},[798,799,800,804,807],"ul",{},[801,802,803],"li",{},"le dernier entré",[801,805,806],{},"le premier entré",[801,808,809],{},"celui de plus grande valeur",[593,811,813],{"id":812},"implémentation-1-avec-un-tableau-liste-python","Implémentation 1 — avec un tableau (liste Python)",[598,815,816],{},"La représentation la plus naturelle utilise une liste Python comme stockage\ninterne. Les éléments sont rangés dans l'ordre d'arrivée ; on enfile à la fin,\non défile au début.",[818,819,823],"pre",{"className":820,"code":821,"language":822,"meta":791,"style":791},"language-python shiki shiki-themes github-light github-light github-dark","class FileTableau:\n    \"\"\"File FIFO implémentée par une liste Python.\"\"\"\n\n    def __init__(self):\n        self._data = []\n\n    def enfiler(self, x):\n        self._data.append(x)            # O(1) amorti\n\n    def defiler(self):\n        if not self._data:\n            raise IndexError(\"file vide\")\n        return self._data.pop(0)        # O(n) — décalage de tous les éléments\n\n    def est_vide(self):\n        return len(self._data) == 0\n\n    def taille(self):\n        return len(self._data)\n","python",[618,824,825,841,848,855,868,883,888,899,911,916,926,941,959,979,984,994,1015,1020,1030],{"__ignoreMap":791},[826,827,830,833,837],"span",{"class":828,"line":829},"line",1,[826,831,642],{"class":832},"s8jYJ",[826,834,836],{"class":835},"snPdu"," FileTableau",[826,838,840],{"class":839},"sxrX7",":\n",[826,842,844],{"class":828,"line":843},2,[826,845,847],{"class":846},"sIIMD","    \"\"\"File FIFO implémentée par une liste Python.\"\"\"\n",[826,849,851],{"class":828,"line":850},3,[826,852,854],{"emptyLinePlaceholder":853},true,"\n",[826,856,858,861,865],{"class":828,"line":857},4,[826,859,860],{"class":832},"    def",[826,862,864],{"class":863},"sBjJW"," __init__",[826,866,867],{"class":839},"(self):\n",[826,869,871,874,877,880],{"class":828,"line":870},5,[826,872,873],{"class":863},"        self",[826,875,876],{"class":839},"._data ",[826,878,879],{"class":832},"=",[826,881,882],{"class":839}," []\n",[826,884,886],{"class":828,"line":885},6,[826,887,854],{"emptyLinePlaceholder":853},[826,889,891,893,896],{"class":828,"line":890},7,[826,892,860],{"class":832},[826,894,895],{"class":835}," enfiler",[826,897,898],{"class":839},"(self, x):\n",[826,900,902,904,907],{"class":828,"line":901},8,[826,903,873],{"class":863},[826,905,906],{"class":839},"._data.append(x)            ",[826,908,910],{"class":909},"sCsY4","# O(1) amorti\n",[826,912,914],{"class":828,"line":913},9,[826,915,854],{"emptyLinePlaceholder":853},[826,917,919,921,924],{"class":828,"line":918},10,[826,920,860],{"class":832},[826,922,923],{"class":835}," defiler",[826,925,867],{"class":839},[826,927,929,932,935,938],{"class":828,"line":928},11,[826,930,931],{"class":832},"        if",[826,933,934],{"class":832}," not",[826,936,937],{"class":863}," self",[826,939,940],{"class":839},"._data:\n",[826,942,944,947,950,953,956],{"class":828,"line":943},12,[826,945,946],{"class":832},"            raise",[826,948,949],{"class":863}," IndexError",[826,951,952],{"class":839},"(",[826,954,955],{"class":846},"\"file vide\"",[826,957,958],{"class":839},")\n",[826,960,962,965,967,970,973,976],{"class":828,"line":961},13,[826,963,964],{"class":832},"        return",[826,966,937],{"class":863},[826,968,969],{"class":839},"._data.pop(",[826,971,972],{"class":863},"0",[826,974,975],{"class":839},")        ",[826,977,978],{"class":909},"# O(n) — décalage de tous les éléments\n",[826,980,982],{"class":828,"line":981},14,[826,983,854],{"emptyLinePlaceholder":853},[826,985,987,989,992],{"class":828,"line":986},15,[826,988,860],{"class":832},[826,990,991],{"class":835}," est_vide",[826,993,867],{"class":839},[826,995,997,999,1002,1004,1006,1009,1012],{"class":828,"line":996},16,[826,998,964],{"class":832},[826,1000,1001],{"class":863}," len",[826,1003,952],{"class":839},[826,1005,650],{"class":863},[826,1007,1008],{"class":839},"._data) ",[826,1010,1011],{"class":832},"==",[826,1013,1014],{"class":863}," 0\n",[826,1016,1018],{"class":828,"line":1017},17,[826,1019,854],{"emptyLinePlaceholder":853},[826,1021,1023,1025,1028],{"class":828,"line":1022},18,[826,1024,860],{"class":832},[826,1026,1027],{"class":835}," taille",[826,1029,867],{"class":839},[826,1031,1033,1035,1037,1039,1041],{"class":828,"line":1032},19,[826,1034,964],{"class":832},[826,1036,1001],{"class":863},[826,1038,952],{"class":839},[826,1040,650],{"class":863},[826,1042,1043],{"class":839},"._data)\n",[598,1045,1046],{},"Traçons un scénario complet pour vérifier la sémantique FIFO :",[818,1048,1050],{"className":820,"code":1049,"language":822,"meta":791,"style":791},"f = FileTableau()\nf.enfiler(1)\nf.enfiler(2)\nf.enfiler(3)\nprint(f.defiler())   # 1 — le premier entré\nprint(f.defiler())   # 2\nprint(f.taille())    # 1\n",[618,1051,1052,1062,1071,1080,1089,1100,1109],{"__ignoreMap":791},[826,1053,1054,1057,1059],{"class":828,"line":829},[826,1055,1056],{"class":839},"f ",[826,1058,879],{"class":832},[826,1060,1061],{"class":839}," FileTableau()\n",[826,1063,1064,1067,1069],{"class":828,"line":843},[826,1065,1066],{"class":839},"f.enfiler(",[826,1068,786],{"class":863},[826,1070,958],{"class":839},[826,1072,1073,1075,1078],{"class":828,"line":850},[826,1074,1066],{"class":839},[826,1076,1077],{"class":863},"2",[826,1079,958],{"class":839},[826,1081,1082,1084,1087],{"class":828,"line":857},[826,1083,1066],{"class":839},[826,1085,1086],{"class":863},"3",[826,1088,958],{"class":839},[826,1090,1091,1094,1097],{"class":828,"line":870},[826,1092,1093],{"class":863},"print",[826,1095,1096],{"class":839},"(f.defiler())   ",[826,1098,1099],{"class":909},"# 1 — le premier entré\n",[826,1101,1102,1104,1106],{"class":828,"line":885},[826,1103,1093],{"class":863},[826,1105,1096],{"class":839},[826,1107,1108],{"class":909},"# 2\n",[826,1110,1111,1113,1116],{"class":828,"line":890},[826,1112,1093],{"class":863},[826,1114,1115],{"class":839},"(f.taille())    ",[826,1117,1118],{"class":909},"# 1\n",[598,1120,1121,1124],{},[602,1122,1123],{},"Analyse de complexité"," :",[798,1126,1127,1207],{},[801,1128,1129,1132,1133,1136,1137,1206],{},[618,1130,1131],{},"enfiler"," repose sur ",[618,1134,1135],{},"list.append",", qui s'exécute en ",[826,1138,1141,1175],{"className":1139},[1140],"katex",[826,1142,1145],{"className":1143},[1144],"katex-mathml",[1146,1147,1149],"math",{"xmlns":1148},"http:\u002F\u002Fwww.w3.org\u002F1998\u002FMath\u002FMathML",[1150,1151,1152,1170],"semantics",{},[1153,1154,1155,1160,1164,1167],"mrow",{},[1156,1157,1159],"mi",{"mathvariant":1158},"script","O",[1161,1162,952],"mo",{"stretchy":1163},"false",[1165,1166,786],"mn",{},[1161,1168,1169],{"stretchy":1163},")",[1171,1172,1174],"annotation",{"encoding":1173},"application\u002Fx-tex","\\mathcal{O}(1)",[826,1176,1180],{"className":1177,"ariaHidden":1179},[1178],"katex-html","true",[826,1181,1184,1189,1195,1199,1202],{"className":1182},[1183],"base",[826,1185],{"className":1186,"style":1188},[1187],"strut","height:1em;vertical-align:-0.25em;",[826,1190,1159],{"className":1191,"style":1194},[1192,1193],"mord","mathcal","margin-right:0.0278em;",[826,1196,952],{"className":1197},[1198],"mopen",[826,1200,786],{"className":1201},[1192],[826,1203,1169],{"className":1204},[1205],"mclose"," amorti.",[801,1208,1209,1132,1212,1215,1216,1219,1220,1266,1267,1296],{},[618,1210,1211],{},"defiler",[618,1213,1214],{},"list.pop(0)",", qui ",[602,1217,1218],{},"décale tous les éléments restants\nvers la gauche"," — coût en ",[826,1221,1223,1244],{"className":1222},[1140],[826,1224,1226],{"className":1225},[1144],[1146,1227,1228],{"xmlns":1148},[1150,1229,1230,1241],{},[1153,1231,1232,1234,1236,1239],{},[1156,1233,1159],{"mathvariant":1158},[1161,1235,952],{"stretchy":1163},[1156,1237,1238],{},"n",[1161,1240,1169],{"stretchy":1163},[1171,1242,1243],{"encoding":1173},"\\mathcal{O}(n)",[826,1245,1247],{"className":1246,"ariaHidden":1179},[1178],[826,1248,1250,1253,1256,1259,1263],{"className":1249},[1183],[826,1251],{"className":1252,"style":1188},[1187],[826,1254,1159],{"className":1255,"style":1194},[1192,1193],[826,1257,952],{"className":1258},[1198],[826,1260,1238],{"className":1261},[1192,1262],"mathnormal",[826,1264,1169],{"className":1265},[1205]," où ",[826,1268,1270,1283],{"className":1269},[1140],[826,1271,1273],{"className":1272},[1144],[1146,1274,1275],{"xmlns":1148},[1150,1276,1277,1281],{},[1153,1278,1279],{},[1156,1280,1238],{},[1171,1282,1238],{"encoding":1173},[826,1284,1286],{"className":1285,"ariaHidden":1179},[1178],[826,1287,1289,1293],{"className":1288},[1183],[826,1290],{"className":1291,"style":1292},[1187],"height:0.4306em;",[826,1294,1238],{"className":1295},[1192,1262]," est la taille courante.",[598,1298,1299,1300,1303,1304,1307,1308,1310],{},"Cette implémentation est ",[602,1301,1302],{},"simple à lire"," mais ",[602,1305,1306],{},"non optimale",". Sur une file\nde un million d'éléments, chaque ",[618,1309,1211],{}," réalise un million d'écritures\nmémoire — inacceptable en production.",[593,1312,1314],{"id":1313},"implémentation-2-avec-deux-piles","Implémentation 2 — avec deux piles",[598,1316,1317,1318,1321,1322,1325,1326,1328,1329,1332,1333,1335,1336,1339],{},"Une astuce classique : utiliser ",[602,1319,1320],{},"deux piles"," pour simuler une file. La pile\n",[602,1323,1324],{},"d'entrée"," reçoit les ",[618,1327,1131],{}," ; la pile ",[602,1330,1331],{},"de sortie"," sert aux ",[618,1334,1211],{},".\nQuand la sortie est vide, on transvase tout le contenu de l'entrée dedans, ce\nqui ",[602,1337,1338],{},"inverse l'ordre"," — et le premier entré redevient le premier sorti.",[818,1341,1343],{"className":820,"code":1342,"language":822,"meta":791,"style":791},"class FileDeuxPiles:\n    \"\"\"File FIFO implémentée par deux piles (listes utilisées en LIFO).\"\"\"\n\n    def __init__(self):\n        self._entree = []        # pile : on append\u002Fpop en bout\n        self._sortie = []\n\n    def enfiler(self, x):\n        self._entree.append(x)                       # O(1)\n\n    def defiler(self):\n        if not self._sortie:\n            while self._entree:\n                self._sortie.append(self._entree.pop())\n        if not self._sortie:\n            raise IndexError(\"file vide\")\n        return self._sortie.pop()                    # O(1) amorti\n\n    def est_vide(self):\n        return not self._entree and not self._sortie\n\n    def taille(self):\n        return len(self._entree) + len(self._sortie)\n",[618,1344,1345,1354,1359,1363,1371,1386,1397,1401,1409,1419,1423,1431,1442,1452,1465,1475,1487,1498,1502,1510,1531,1536,1545],{"__ignoreMap":791},[826,1346,1347,1349,1352],{"class":828,"line":829},[826,1348,642],{"class":832},[826,1350,1351],{"class":835}," FileDeuxPiles",[826,1353,840],{"class":839},[826,1355,1356],{"class":828,"line":843},[826,1357,1358],{"class":846},"    \"\"\"File FIFO implémentée par deux piles (listes utilisées en LIFO).\"\"\"\n",[826,1360,1361],{"class":828,"line":850},[826,1362,854],{"emptyLinePlaceholder":853},[826,1364,1365,1367,1369],{"class":828,"line":857},[826,1366,860],{"class":832},[826,1368,864],{"class":863},[826,1370,867],{"class":839},[826,1372,1373,1375,1378,1380,1383],{"class":828,"line":870},[826,1374,873],{"class":863},[826,1376,1377],{"class":839},"._entree ",[826,1379,879],{"class":832},[826,1381,1382],{"class":839}," []        ",[826,1384,1385],{"class":909},"# pile : on append\u002Fpop en bout\n",[826,1387,1388,1390,1393,1395],{"class":828,"line":885},[826,1389,873],{"class":863},[826,1391,1392],{"class":839},"._sortie ",[826,1394,879],{"class":832},[826,1396,882],{"class":839},[826,1398,1399],{"class":828,"line":890},[826,1400,854],{"emptyLinePlaceholder":853},[826,1402,1403,1405,1407],{"class":828,"line":901},[826,1404,860],{"class":832},[826,1406,895],{"class":835},[826,1408,898],{"class":839},[826,1410,1411,1413,1416],{"class":828,"line":913},[826,1412,873],{"class":863},[826,1414,1415],{"class":839},"._entree.append(x)                       ",[826,1417,1418],{"class":909},"# O(1)\n",[826,1420,1421],{"class":828,"line":918},[826,1422,854],{"emptyLinePlaceholder":853},[826,1424,1425,1427,1429],{"class":828,"line":928},[826,1426,860],{"class":832},[826,1428,923],{"class":835},[826,1430,867],{"class":839},[826,1432,1433,1435,1437,1439],{"class":828,"line":943},[826,1434,931],{"class":832},[826,1436,934],{"class":832},[826,1438,937],{"class":863},[826,1440,1441],{"class":839},"._sortie:\n",[826,1443,1444,1447,1449],{"class":828,"line":961},[826,1445,1446],{"class":832},"            while",[826,1448,937],{"class":863},[826,1450,1451],{"class":839},"._entree:\n",[826,1453,1454,1457,1460,1462],{"class":828,"line":981},[826,1455,1456],{"class":863},"                self",[826,1458,1459],{"class":839},"._sortie.append(",[826,1461,650],{"class":863},[826,1463,1464],{"class":839},"._entree.pop())\n",[826,1466,1467,1469,1471,1473],{"class":828,"line":986},[826,1468,931],{"class":832},[826,1470,934],{"class":832},[826,1472,937],{"class":863},[826,1474,1441],{"class":839},[826,1476,1477,1479,1481,1483,1485],{"class":828,"line":996},[826,1478,946],{"class":832},[826,1480,949],{"class":863},[826,1482,952],{"class":839},[826,1484,955],{"class":846},[826,1486,958],{"class":839},[826,1488,1489,1491,1493,1496],{"class":828,"line":1017},[826,1490,964],{"class":832},[826,1492,937],{"class":863},[826,1494,1495],{"class":839},"._sortie.pop()                    ",[826,1497,910],{"class":909},[826,1499,1500],{"class":828,"line":1022},[826,1501,854],{"emptyLinePlaceholder":853},[826,1503,1504,1506,1508],{"class":828,"line":1032},[826,1505,860],{"class":832},[826,1507,991],{"class":835},[826,1509,867],{"class":839},[826,1511,1513,1515,1517,1519,1521,1524,1526,1528],{"class":828,"line":1512},20,[826,1514,964],{"class":832},[826,1516,934],{"class":832},[826,1518,937],{"class":863},[826,1520,1377],{"class":839},[826,1522,1523],{"class":832},"and",[826,1525,934],{"class":832},[826,1527,937],{"class":863},[826,1529,1530],{"class":839},"._sortie\n",[826,1532,1534],{"class":828,"line":1533},21,[826,1535,854],{"emptyLinePlaceholder":853},[826,1537,1539,1541,1543],{"class":828,"line":1538},22,[826,1540,860],{"class":832},[826,1542,1027],{"class":835},[826,1544,867],{"class":839},[826,1546,1548,1550,1552,1554,1556,1559,1562,1564,1566,1568],{"class":828,"line":1547},23,[826,1549,964],{"class":832},[826,1551,1001],{"class":863},[826,1553,952],{"class":839},[826,1555,650],{"class":863},[826,1557,1558],{"class":839},"._entree) ",[826,1560,1561],{"class":832},"+",[826,1563,1001],{"class":863},[826,1565,952],{"class":839},[826,1567,650],{"class":863},[826,1569,1570],{"class":839},"._sortie)\n",[598,1572,1573],{},"Traçons le même scénario qu'avant — l'observation extérieure est identique :",[818,1575,1577],{"className":820,"code":1576,"language":822,"meta":791,"style":791},"f = FileDeuxPiles()\nf.enfiler(1)\nf.enfiler(2)\nf.enfiler(3)\nprint(f.defiler())   # 1\nprint(f.defiler())   # 2\nprint(f.taille())    # 1\n",[618,1578,1579,1588,1596,1604,1612,1620,1628],{"__ignoreMap":791},[826,1580,1581,1583,1585],{"class":828,"line":829},[826,1582,1056],{"class":839},[826,1584,879],{"class":832},[826,1586,1587],{"class":839}," FileDeuxPiles()\n",[826,1589,1590,1592,1594],{"class":828,"line":843},[826,1591,1066],{"class":839},[826,1593,786],{"class":863},[826,1595,958],{"class":839},[826,1597,1598,1600,1602],{"class":828,"line":850},[826,1599,1066],{"class":839},[826,1601,1077],{"class":863},[826,1603,958],{"class":839},[826,1605,1606,1608,1610],{"class":828,"line":857},[826,1607,1066],{"class":839},[826,1609,1086],{"class":863},[826,1611,958],{"class":839},[826,1613,1614,1616,1618],{"class":828,"line":870},[826,1615,1093],{"class":863},[826,1617,1096],{"class":839},[826,1619,1118],{"class":909},[826,1621,1622,1624,1626],{"class":828,"line":885},[826,1623,1093],{"class":863},[826,1625,1096],{"class":839},[826,1627,1108],{"class":909},[826,1629,1630,1632,1634],{"class":828,"line":890},[826,1631,1093],{"class":863},[826,1633,1115],{"class":839},[826,1635,1118],{"class":909},[1637,1638],"illustration",{"alt":1639,"kind":1640,"src":1641,"svg":1642},"Deux piles côte à côte : pile entrée à gauche avec [1, 2, 3] du bas vers le haut, pile sortie vide à droite. Le transvasement depuis le sommet de l'entrée produit [3, 2, 1] dans la sortie — le 1 se retrouve au sommet, prêt à sortir.","schema","\u002Fillustrations\u002F2.nsi-tale\u002Fta-structures-donnees\u002Fdeux-piles.svg","\u003Csvg class=\"illustration-svg\" xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\" viewBox=\"0 0 480 250\" role=\"img\" aria-label=\"File à deux piles : à gauche la pile d'entrée empilant 1, 2, 3 du bas vers le haut (sommet = 3) ; une flèche transvase depuis le sommet de l'entrée vers la pile de sortie, vide à droite ; après transvasement le 1 se retrouve au sommet de la sortie, prêt à sortir\">\n  \u003Ctitle>File à deux piles : transvasement entrée vers sortie\u003C\u002Ftitle>\n  \u003Cstyle>\n    .dp-svg { font-family: Geist, Inter, system-ui, sans-serif; }\n    .dp-title  { fill: var(--diagram-text); font-size: 13px; font-weight: 600; }\n    .dp-cell   { fill: var(--diagram-node-bg); stroke: var(--diagram-node-border); stroke-width: 1.5; }\n    .dp-val    { fill: var(--diagram-text); font-family: 'JetBrains Mono', monospace; font-size: 14px; font-weight: 600; }\n    .dp-base   { stroke: var(--diagram-line); stroke-width: 2; stroke-linecap: round; }\n    .dp-eyebrow{ fill: var(--diagram-line); font-family: 'JetBrains Mono', monospace; font-size: 10px; letter-spacing: 1px; }\n    .dp-empty  { fill: var(--diagram-line); font-size: 12px; font-style: italic; }\n    .dp-arrow  { stroke: var(--diagram-node-border); stroke-width: 2; fill: none; }\n    .dp-arrowh { fill: var(--diagram-node-border); }\n  \u003C\u002Fstyle>\n\n  \u003Cg class=\"dp-svg\">\n    \u003C!-- pile d'entrée (gauche) : 1 en bas, 3 au sommet -->\n    \u003Ctext x=\"92\" y=\"30\" text-anchor=\"middle\" class=\"dp-title\">_entrée\u003C\u002Ftext>\n    \u003Ctext x=\"146\" y=\"62\" class=\"dp-eyebrow\">← sommet\u003C\u002Ftext>\n    \u003Crect x=\"52\" y=\"58\"  width=\"80\" height=\"34\" rx=\"3\" class=\"dp-cell\"\u002F>\u003Ctext x=\"92\" y=\"81\"  text-anchor=\"middle\" class=\"dp-val\">3\u003C\u002Ftext>\n    \u003Crect x=\"52\" y=\"96\"  width=\"80\" height=\"34\" rx=\"3\" class=\"dp-cell\"\u002F>\u003Ctext x=\"92\" y=\"119\" text-anchor=\"middle\" class=\"dp-val\">2\u003C\u002Ftext>\n    \u003Crect x=\"52\" y=\"134\" width=\"80\" height=\"34\" rx=\"3\" class=\"dp-cell\"\u002F>\u003Ctext x=\"92\" y=\"157\" text-anchor=\"middle\" class=\"dp-val\">1\u003C\u002Ftext>\n    \u003Cline x1=\"46\" y1=\"172\" x2=\"138\" y2=\"172\" class=\"dp-base\"\u002F>\n\n    \u003C!-- flèche de transvasement (sommet entrée → sortie) -->\n    \u003Cpath class=\"dp-arrow\" d=\"M 150 90 C 220 76, 268 76, 332 132\"\u002F>\n    \u003Cpolygon class=\"dp-arrowh\" points=\"332,132 322,124 330,118\"\u002F>\n    \u003Ctext x=\"240\" y=\"64\" text-anchor=\"middle\" class=\"dp-eyebrow\">TRANSVASE\u003C\u002Ftext>\n\n    \u003C!-- pile de sortie (droite) : vide -->\n    \u003Ctext x=\"388\" y=\"30\" text-anchor=\"middle\" class=\"dp-title\">_sortie\u003C\u002Ftext>\n    \u003Crect x=\"348\" y=\"58\"  width=\"80\" height=\"110\" rx=\"3\" class=\"dp-cell\" fill=\"none\" stroke-dasharray=\"5 4\"\u002F>\n    \u003Ctext x=\"388\" y=\"118\" text-anchor=\"middle\" class=\"dp-empty\">vide\u003C\u002Ftext>\n    \u003Cline x1=\"342\" y1=\"172\" x2=\"434\" y2=\"172\" class=\"dp-base\"\u002F>\n\n    \u003C!-- résultat attendu après transvasement -->\n    \u003Ctext x=\"388\" y=\"200\" text-anchor=\"middle\" class=\"dp-eyebrow\">PUIS → [3, 2, 1]\u003C\u002Ftext>\n    \u003Ctext x=\"388\" y=\"218\" text-anchor=\"middle\" class=\"dp-empty\">1 au sommet, sort en 1er\u003C\u002Ftext>\n  \u003C\u002Fg>\n\u003C\u002Fsvg>\n",[784,1644,1646,1651],{"correct":786,"slug":1645},"implementer-une-structure-c2",[789,1647,1648],{"v-slot:question":791},[598,1649,1650],{},"Pour défiler avec deux piles, on transvase l'entrée vers la sortie uniquement quand…",[789,1652,1653],{"v-slot:choices":791},[798,1654,1655,1658,1661],{},[801,1656,1657],{},"l'entrée est vide",[801,1659,1660],{},"la sortie est vide",[801,1662,1663],{},"à chaque appel à defiler()",[593,1665,1667],{"id":1666},"pourquoi-est-ce-plus-rapide","Pourquoi est-ce plus rapide ?",[598,1669,1670,1671,1702,1703,1731,1732,613],{},"À première vue, le transvasement coûte cher : il faut bien ",[826,1672,1674,1688],{"className":1673},[1140],[826,1675,1677],{"className":1676},[1144],[1146,1678,1679],{"xmlns":1148},[1150,1680,1681,1686],{},[1153,1682,1683],{},[1156,1684,1685],{},"k",[1171,1687,1685],{"encoding":1173},[826,1689,1691],{"className":1690,"ariaHidden":1179},[1178],[826,1692,1694,1698],{"className":1693},[1183],[826,1695],{"className":1696,"style":1697},[1187],"height:0.6944em;",[826,1699,1685],{"className":1700,"style":1701},[1192,1262],"margin-right:0.0315em;"," opérations pour\nbasculer ",[826,1704,1706,1719],{"className":1705},[1140],[826,1707,1709],{"className":1708},[1144],[1146,1710,1711],{"xmlns":1148},[1150,1712,1713,1717],{},[1153,1714,1715],{},[1156,1716,1685],{},[1171,1718,1685],{"encoding":1173},[826,1720,1722],{"className":1721,"ariaHidden":1179},[1178],[826,1723,1725,1728],{"className":1724},[1183],[826,1726],{"className":1727,"style":1697},[1187],[826,1729,1685],{"className":1730,"style":1701},[1192,1262]," éléments. Mais regardez ce qui se passe sur ",[602,1733,1734],{},"une longue suite\nd'opérations",[1736,1737,1740,1747,1788],"card",{"icon":1738,"title":1739},"i-lucide-target","Analyse amortie",[598,1741,1742,1743,1746],{},"Chaque élément, sur toute sa durée de vie, subit ",[602,1744,1745],{},"exactement quatre manipulations","\nde pile :",[1748,1749,1750,1764,1773,1780],"ol",{},[801,1751,1752,1753,1756,1757,1760,1761,1763],{},"un ",[618,1754,1755],{},"append"," dans ",[618,1758,1759],{},"_entree"," à son ",[618,1762,1131],{}," ;",[801,1765,1752,1766,1769,1770,1772],{},[618,1767,1768],{},"pop"," de ",[618,1771,1759],{}," lors du transvasement ;",[801,1774,1752,1775,1756,1777,1772],{},[618,1776,1755],{},[618,1778,1779],{},"_sortie",[801,1781,1752,1782,1769,1784,1760,1786,613],{},[618,1783,1768],{},[618,1785,1779],{},[618,1787,1211],{},[598,1789,1790,1791,1819,1820,1863,1864,1907,1908,1911],{},"Sur une suite de ",[826,1792,1794,1807],{"className":1793},[1140],[826,1795,1797],{"className":1796},[1144],[1146,1798,1799],{"xmlns":1148},[1150,1800,1801,1805],{},[1153,1802,1803],{},[1156,1804,1238],{},[1171,1806,1238],{"encoding":1173},[826,1808,1810],{"className":1809,"ariaHidden":1179},[1178],[826,1811,1813,1816],{"className":1812},[1183],[826,1814],{"className":1815,"style":1292},[1187],[826,1817,1238],{"className":1818},[1192,1262]," opérations, le coût total est en ",[826,1821,1823,1842],{"className":1822},[1140],[826,1824,1826],{"className":1825},[1144],[1146,1827,1828],{"xmlns":1148},[1150,1829,1830,1840],{},[1153,1831,1832,1834,1836,1838],{},[1156,1833,1159],{"mathvariant":1158},[1161,1835,952],{"stretchy":1163},[1156,1837,1238],{},[1161,1839,1169],{"stretchy":1163},[1171,1841,1243],{"encoding":1173},[826,1843,1845],{"className":1844,"ariaHidden":1179},[1178],[826,1846,1848,1851,1854,1857,1860],{"className":1847},[1183],[826,1849],{"className":1850,"style":1188},[1187],[826,1852,1159],{"className":1853,"style":1194},[1192,1193],[826,1855,952],{"className":1856},[1198],[826,1858,1238],{"className":1859},[1192,1262],[826,1861,1169],{"className":1862},[1205]," — soit\n",[826,1865,1867,1886],{"className":1866},[1140],[826,1868,1870],{"className":1869},[1144],[1146,1871,1872],{"xmlns":1148},[1150,1873,1874,1884],{},[1153,1875,1876,1878,1880,1882],{},[1156,1877,1159],{"mathvariant":1158},[1161,1879,952],{"stretchy":1163},[1165,1881,786],{},[1161,1883,1169],{"stretchy":1163},[1171,1885,1174],{"encoding":1173},[826,1887,1889],{"className":1888,"ariaHidden":1179},[1178],[826,1890,1892,1895,1898,1901,1904],{"className":1891},[1183],[826,1893],{"className":1894,"style":1188},[1187],[826,1896,1159],{"className":1897,"style":1194},[1192,1193],[826,1899,952],{"className":1900},[1198],[826,1902,786],{"className":1903},[1192],[826,1905,1169],{"className":1906},[1205]," ",[602,1909,1910],{},"amorti"," par opération.",[598,1913,1914,1915,1918,1919,1922],{},"C'est la beauté de la ",[602,1916,1917],{},"complexité amortie"," : on ne raisonne pas sur le pire\ncas d'une opération isolée (qui peut être un gros transvasement), mais sur le\n",[602,1920,1921],{},"coût moyen"," observé sur une longue séquence d'opérations.",[593,1924,1926],{"id":1925},"la-promesse-de-labstraction","La promesse de l'abstraction",[598,1928,1929,1930,621,1932,1934,1935,1938,1939,1942,1943,1946,1947,1950],{},"Les deux classes ",[618,1931,620],{},[618,1933,624],{}," exposent ",[602,1936,1937],{},"exactement la même\ninterface",". Un code qui utilise ",[618,1940,1941],{},"f.enfiler(x)"," puis ",[618,1944,1945],{},"f.defiler()"," fonctionne\nsans modification, quelle que soit la classe choisie. C'est la promesse de\nl'",[602,1948,1949],{},"abstraction"," : on peut changer le moteur sans changer la carrosserie.",[818,1952,1954],{"className":820,"code":1953,"language":822,"meta":791,"style":791},"# Ce code fonctionne identiquement avec FileTableau OU FileDeuxPiles\ndef traiter_taches(file_de_taches):\n    while not file_de_taches.est_vide():\n        tache = file_de_taches.defiler()\n        # ... traiter la tâche ...\n",[618,1955,1956,1961,1972,1982,1992],{"__ignoreMap":791},[826,1957,1958],{"class":828,"line":829},[826,1959,1960],{"class":909},"# Ce code fonctionne identiquement avec FileTableau OU FileDeuxPiles\n",[826,1962,1963,1966,1969],{"class":828,"line":843},[826,1964,1965],{"class":832},"def",[826,1967,1968],{"class":835}," traiter_taches",[826,1970,1971],{"class":839},"(file_de_taches):\n",[826,1973,1974,1977,1979],{"class":828,"line":850},[826,1975,1976],{"class":832},"    while",[826,1978,934],{"class":832},[826,1980,1981],{"class":839}," file_de_taches.est_vide():\n",[826,1983,1984,1987,1989],{"class":828,"line":857},[826,1985,1986],{"class":839},"        tache ",[826,1988,879],{"class":832},[826,1990,1991],{"class":839}," file_de_taches.defiler()\n",[826,1993,1994],{"class":828,"line":870},[826,1995,1996],{"class":909},"        # ... traiter la tâche ...\n",[1998,1999,2000],"tip",{},[598,2001,2002,2005,2006,2009,2010,2012],{},[602,2003,2004],{},"Règle de l'abstraction"," : un programme client doit dépendre de l'interface,\njamais de l'implémentation. Si vous écrivez ",[618,2007,2008],{},"f._data[0]"," au lieu de ",[618,2011,1945],{},",\nvous brisez ce contrat — et vous perdez la liberté de changer d'implémentation\nsans casser le programme.",[593,2014,2016],{"id":2015},"récapitulatif-comparatif","Récapitulatif comparatif",[680,2018,2019,2034],{},[683,2020,2021],{},[686,2022,2023,2026,2030],{},[689,2024,2025],{},"Critère",[689,2027,2028],{},[618,2029,620],{},[689,2031,2032],{},[618,2033,624],{},[699,2035,2036,2047,2144,2242,2371],{},[686,2037,2038,2041,2044],{},[704,2039,2040],{},"Stockage interne",[704,2042,2043],{},"une liste",[704,2045,2046],{},"deux listes (piles)",[686,2048,2049,2053,2099],{},[704,2050,2051],{},[618,2052,1131],{},[704,2054,2055,2098],{},[826,2056,2058,2077],{"className":2057},[1140],[826,2059,2061],{"className":2060},[1144],[1146,2062,2063],{"xmlns":1148},[1150,2064,2065,2075],{},[1153,2066,2067,2069,2071,2073],{},[1156,2068,1159],{"mathvariant":1158},[1161,2070,952],{"stretchy":1163},[1165,2072,786],{},[1161,2074,1169],{"stretchy":1163},[1171,2076,1174],{"encoding":1173},[826,2078,2080],{"className":2079,"ariaHidden":1179},[1178],[826,2081,2083,2086,2089,2092,2095],{"className":2082},[1183],[826,2084],{"className":2085,"style":1188},[1187],[826,2087,1159],{"className":2088,"style":1194},[1192,1193],[826,2090,952],{"className":2091},[1198],[826,2093,786],{"className":2094},[1192],[826,2096,1169],{"className":2097},[1205]," amorti",[704,2100,2101],{},[826,2102,2104,2123],{"className":2103},[1140],[826,2105,2107],{"className":2106},[1144],[1146,2108,2109],{"xmlns":1148},[1150,2110,2111,2121],{},[1153,2112,2113,2115,2117,2119],{},[1156,2114,1159],{"mathvariant":1158},[1161,2116,952],{"stretchy":1163},[1165,2118,786],{},[1161,2120,1169],{"stretchy":1163},[1171,2122,1174],{"encoding":1173},[826,2124,2126],{"className":2125,"ariaHidden":1179},[1178],[826,2127,2129,2132,2135,2138,2141],{"className":2128},[1183],[826,2130],{"className":2131,"style":1188},[1187],[826,2133,1159],{"className":2134,"style":1194},[1192,1193],[826,2136,952],{"className":2137},[1198],[826,2139,786],{"className":2140},[1192],[826,2142,1169],{"className":2143},[1205],[686,2145,2146,2150,2195],{},[704,2147,2148],{},[618,2149,1211],{},[704,2151,2152],{},[826,2153,2155,2174],{"className":2154},[1140],[826,2156,2158],{"className":2157},[1144],[1146,2159,2160],{"xmlns":1148},[1150,2161,2162,2172],{},[1153,2163,2164,2166,2168,2170],{},[1156,2165,1159],{"mathvariant":1158},[1161,2167,952],{"stretchy":1163},[1156,2169,1238],{},[1161,2171,1169],{"stretchy":1163},[1171,2173,1243],{"encoding":1173},[826,2175,2177],{"className":2176,"ariaHidden":1179},[1178],[826,2178,2180,2183,2186,2189,2192],{"className":2179},[1183],[826,2181],{"className":2182,"style":1188},[1187],[826,2184,1159],{"className":2185,"style":1194},[1192,1193],[826,2187,952],{"className":2188},[1198],[826,2190,1238],{"className":2191},[1192,1262],[826,2193,1169],{"className":2194},[1205],[704,2196,2197,1907,2240],{},[826,2198,2200,2219],{"className":2199},[1140],[826,2201,2203],{"className":2202},[1144],[1146,2204,2205],{"xmlns":1148},[1150,2206,2207,2217],{},[1153,2208,2209,2211,2213,2215],{},[1156,2210,1159],{"mathvariant":1158},[1161,2212,952],{"stretchy":1163},[1165,2214,786],{},[1161,2216,1169],{"stretchy":1163},[1171,2218,1174],{"encoding":1173},[826,2220,2222],{"className":2221,"ariaHidden":1179},[1178],[826,2223,2225,2228,2231,2234,2237],{"className":2224},[1183],[826,2226],{"className":2227,"style":1188},[1187],[826,2229,1159],{"className":2230,"style":1194},[1192,1193],[826,2232,952],{"className":2233},[1198],[826,2235,786],{"className":2236},[1192],[826,2238,1169],{"className":2239},[1205],[602,2241,1910],{},[686,2243,2244,2250,2295],{},[704,2245,2246,2247,2249],{},"Pire cas d'un ",[618,2248,1211],{}," isolé",[704,2251,2252],{},[826,2253,2255,2274],{"className":2254},[1140],[826,2256,2258],{"className":2257},[1144],[1146,2259,2260],{"xmlns":1148},[1150,2261,2262,2272],{},[1153,2263,2264,2266,2268,2270],{},[1156,2265,1159],{"mathvariant":1158},[1161,2267,952],{"stretchy":1163},[1156,2269,1238],{},[1161,2271,1169],{"stretchy":1163},[1171,2273,1243],{"encoding":1173},[826,2275,2277],{"className":2276,"ariaHidden":1179},[1178],[826,2278,2280,2283,2286,2289,2292],{"className":2279},[1183],[826,2281],{"className":2282,"style":1188},[1187],[826,2284,1159],{"className":2285,"style":1194},[1192,1193],[826,2287,952],{"className":2288},[1198],[826,2290,1238],{"className":2291},[1192,1262],[826,2293,1169],{"className":2294},[1205],[704,2296,2297,2341,2342,2370],{},[826,2298,2300,2320],{"className":2299},[1140],[826,2301,2303],{"className":2302},[1144],[1146,2304,2305],{"xmlns":1148},[1150,2306,2307,2317],{},[1153,2308,2309,2311,2313,2315],{},[1156,2310,1159],{"mathvariant":1158},[1161,2312,952],{"stretchy":1163},[1156,2314,1685],{},[1161,2316,1169],{"stretchy":1163},[1171,2318,2319],{"encoding":1173},"\\mathcal{O}(k)",[826,2321,2323],{"className":2322,"ariaHidden":1179},[1178],[826,2324,2326,2329,2332,2335,2338],{"className":2325},[1183],[826,2327],{"className":2328,"style":1188},[1187],[826,2330,1159],{"className":2331,"style":1194},[1192,1193],[826,2333,952],{"className":2334},[1198],[826,2336,1685],{"className":2337,"style":1701},[1192,1262],[826,2339,1169],{"className":2340},[1205]," avec ",[826,2343,2345,2358],{"className":2344},[1140],[826,2346,2348],{"className":2347},[1144],[1146,2349,2350],{"xmlns":1148},[1150,2351,2352,2356],{},[1153,2353,2354],{},[1156,2355,1685],{},[1171,2357,1685],{"encoding":1173},[826,2359,2361],{"className":2360,"ariaHidden":1179},[1178],[826,2362,2364,2367],{"className":2363},[1183],[826,2365],{"className":2366,"style":1697},[1187],[826,2368,1685],{"className":2369,"style":1701},[1192,1262]," = taille de l'entrée au moment du transvasement",[686,2372,2373,2376,2379],{},[704,2374,2375],{},"Lisibilité du code",[704,2377,2378],{},"très simple",[704,2380,2381],{},"demande l'astuce du transvasement",[598,2383,2384,2385,2388,2389,2391,2392,2394,2395,2398],{},"Les deux respectent le contrat ; la deuxième est asymptotiquement meilleure. Le\n",[602,2386,2387],{},"choix d'implémentation"," dépend du contexte : si la file reste petite et que\nla simplicité prime, ",[618,2390,620],{}," suffit ; si la performance compte,\n",[618,2393,624],{}," (ou mieux, ",[618,2396,2397],{},"collections.deque"," — voir ci-dessous).",[593,2400,2402],{"id":2401},"pour-aller-plus-loin","Pour aller plus loin",[598,2404,2405,2406,2408,2409,2452],{},"Le module standard ",[618,2407,2397],{}," fournit une file double — ",[826,2410,2412,2431],{"className":2411},[1140],[826,2413,2415],{"className":2414},[1144],[1146,2416,2417],{"xmlns":1148},[1150,2418,2419,2429],{},[1153,2420,2421,2423,2425,2427],{},[1156,2422,1159],{"mathvariant":1158},[1161,2424,952],{"stretchy":1163},[1165,2426,786],{},[1161,2428,1169],{"stretchy":1163},[1171,2430,1174],{"encoding":1173},[826,2432,2434],{"className":2433,"ariaHidden":1179},[1178],[826,2435,2437,2440,2443,2446,2449],{"className":2436},[1183],[826,2438],{"className":2439,"style":1188},[1187],[826,2441,1159],{"className":2442,"style":1194},[1192,1193],[826,2444,952],{"className":2445},[1198],[826,2447,786],{"className":2448},[1192],[826,2450,1169],{"className":2451},[1205],"\nà chaque bout — implémentée en C. C'est ce que vous utiliserez en pratique :",[818,2454,2456],{"className":820,"code":2455,"language":822,"meta":791,"style":791},"from collections import deque\nf = deque()\nf.append(1)         # enfiler\nf.append(2)\nprint(f.popleft())  # defiler → 1\n",[618,2457,2458,2472,2481,2494,2502],{"__ignoreMap":791},[826,2459,2460,2463,2466,2469],{"class":828,"line":829},[826,2461,2462],{"class":832},"from",[826,2464,2465],{"class":839}," collections ",[826,2467,2468],{"class":832},"import",[826,2470,2471],{"class":839}," deque\n",[826,2473,2474,2476,2478],{"class":828,"line":843},[826,2475,1056],{"class":839},[826,2477,879],{"class":832},[826,2479,2480],{"class":839}," deque()\n",[826,2482,2483,2486,2488,2491],{"class":828,"line":850},[826,2484,2485],{"class":839},"f.append(",[826,2487,786],{"class":863},[826,2489,2490],{"class":839},")         ",[826,2492,2493],{"class":909},"# enfiler\n",[826,2495,2496,2498,2500],{"class":828,"line":857},[826,2497,2485],{"class":839},[826,2499,1077],{"class":863},[826,2501,958],{"class":839},[826,2503,2504,2506,2509],{"class":828,"line":870},[826,2505,1093],{"class":863},[826,2507,2508],{"class":839},"(f.popleft())  ",[826,2510,2511],{"class":909},"# defiler → 1\n",[598,2513,2514,2515,2518],{},"Mais savoir ",[602,2516,2517],{},"réimplémenter"," une file à partir de structures plus primitives\nest exigible au baccalauréat — c'est précisément ce que vous venez de faire,\ndeux fois.",[631,2520],{"code":588},[2522,2523,2524],"style",{},"html pre.shiki code .s8jYJ, html code.shiki .s8jYJ{--shiki-light:#D73A49;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .snPdu, html code.shiki .snPdu{--shiki-light:#6F42C1;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sxrX7, html code.shiki .sxrX7{--shiki-light:#24292E;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sIIMD, html code.shiki .sIIMD{--shiki-light:#032F62;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sBjJW, html code.shiki .sBjJW{--shiki-light:#005CC5;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sCsY4, html code.shiki .sCsY4{--shiki-light:#6A737D;--shiki-default:#6A737D;--shiki-dark:#6A737D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":791,"searchDepth":843,"depth":843,"links":2526},[2527,2528,2529,2530,2531,2532,2533,2534],{"id":595,"depth":843,"text":596},{"id":654,"depth":843,"text":655},{"id":812,"depth":843,"text":813},{"id":1313,"depth":843,"text":1314},{"id":1666,"depth":843,"text":1667},{"id":1925,"depth":843,"text":1926},{"id":2015,"depth":843,"text":2016},{"id":2401,"depth":843,"text":2402},"Mettre en pratique l'objet et l'interface — la même file FIFO codée de deux manières, puis comparée du point de vue de la complexité.",null,"md",{},[2540,2544],{"slug":787,"kind":2541,"question":794,"choices":2542,"correct":786,"multi":2543,"explanation":791},"qcm",[803,806,809],false,{"slug":1645,"kind":2541,"question":1650,"choices":2545,"correct":786,"multi":2543,"explanation":791},[1657,1660,1663],{"title":461,"description":2535},"0ismviDkDRMPMEbHcNC8qSzxglmtQ5FoZjmbTGQKMFM",{"id":2549,"title":2550,"bo":2551,"body":2552,"description":3244,"eval":2536,"extension":2537,"labo":2536,"meta":3245,"navigation":2543,"path":3246,"quizzes":3247,"readingTime":829,"seo":3248,"stem":3249,"tp":2536,"__hash__":3250},"coursMemo\u002F2.nsi-tale\u002Fta-structures-donnees\u002F2.implementer-une-structure.memo.md","Implémenter une file FIFO — l'essentiel",[588],{"type":590,"value":2553,"toc":3237},[2554,2558,2662,2666,2863,2867,3015,3019,3039,3043,3234],[593,2555,2557],{"id":2556},"en-une-phrase","En une phrase",[598,2559,2560],{},[602,2561,2562,2563,643,2565,643,2567,643,2570,2573,2574,2617,2618,2661],{},"Une même interface (file FIFO : ",[618,2564,1131],{},[618,2566,1211],{},[618,2568,2569],{},"est_vide",[618,2571,2572],{},"taille",") admet plusieurs implémentations — par liste Python (",[826,2575,2577,2596],{"className":2576},[1140],[826,2578,2580],{"className":2579},[1144],[1146,2581,2582],{"xmlns":1148},[1150,2583,2584,2594],{},[1153,2585,2586,2588,2590,2592],{},[1156,2587,1159],{"mathvariant":1158},[1161,2589,952],{"stretchy":1163},[1156,2591,1238],{},[1161,2593,1169],{"stretchy":1163},[1171,2595,1243],{"encoding":1173},[826,2597,2599],{"className":2598,"ariaHidden":1179},[1178],[826,2600,2602,2605,2608,2611,2614],{"className":2601},[1183],[826,2603],{"className":2604,"style":1188},[1187],[826,2606,1159],{"className":2607,"style":1194},[1192,1193],[826,2609,952],{"className":2610},[1198],[826,2612,1238],{"className":2613},[1192,1262],[826,2615,1169],{"className":2616},[1205]," à defiler) ou par deux piles (",[826,2619,2621,2640],{"className":2620},[1140],[826,2622,2624],{"className":2623},[1144],[1146,2625,2626],{"xmlns":1148},[1150,2627,2628,2638],{},[1153,2629,2630,2632,2634,2636],{},[1156,2631,1159],{"mathvariant":1158},[1161,2633,952],{"stretchy":1163},[1165,2635,786],{},[1161,2637,1169],{"stretchy":1163},[1171,2639,1174],{"encoding":1173},[826,2641,2643],{"className":2642,"ariaHidden":1179},[1178],[826,2644,2646,2649,2652,2655,2658],{"className":2645},[1183],[826,2647],{"className":2648,"style":1188},[1187],[826,2650,1159],{"className":2651,"style":1194},[1192,1193],[826,2653,952],{"className":2654},[1198],[826,2656,786],{"className":2657},[1192],[826,2659,1169],{"className":2660},[1205]," amorti).",[593,2663,2665],{"id":2664},"à-mémoriser","À mémoriser",[798,2667,2668,2676,2690,2745,2757,2806],{},[801,2669,2670,2672,2673,2675],{},[602,2671,670],{}," = ",[664,2674,674],{}," — analogie de la file d'attente.",[801,2677,2678,2681,2682,643,2684,643,2686,643,2688,613],{},[602,2679,2680],{},"Interface"," d'une file : ",[618,2683,708],{},[618,2685,727],{},[618,2687,742],{},[618,2689,765],{},[801,2691,2692,2693,2696,2697,2700,2701,2744],{},"Implémentation ",[602,2694,2695],{},"par liste"," : ",[618,2698,2699],{},"pop(0)"," est en ",[826,2702,2704,2723],{"className":2703},[1140],[826,2705,2707],{"className":2706},[1144],[1146,2708,2709],{"xmlns":1148},[1150,2710,2711,2721],{},[1153,2712,2713,2715,2717,2719],{},[1156,2714,1159],{"mathvariant":1158},[1161,2716,952],{"stretchy":1163},[1156,2718,1238],{},[1161,2720,1169],{"stretchy":1163},[1171,2722,1243],{"encoding":1173},[826,2724,2726],{"className":2725,"ariaHidden":1179},[1178],[826,2727,2729,2732,2735,2738,2741],{"className":2728},[1183],[826,2730],{"className":2731,"style":1188},[1187],[826,2733,1159],{"className":2734,"style":1194},[1192,1193],[826,2736,952],{"className":2737},[1198],[826,2739,1238],{"className":2740},[1192,1262],[826,2742,1169],{"className":2743},[1205]," — décalage de tous les éléments.",[801,2746,2692,2747,2750,2751,2753,2754,2756],{},[602,2748,2749],{},"par deux piles"," : pile entrée pour les ",[618,2752,1131],{},", pile sortie pour les ",[618,2755,1211],{}," ; transvasement quand la sortie est vide.",[801,2758,2759,2805],{},[602,2760,2761,2762],{},"Coût amorti ",[826,2763,2765,2784],{"className":2764},[1140],[826,2766,2768],{"className":2767},[1144],[1146,2769,2770],{"xmlns":1148},[1150,2771,2772,2782],{},[1153,2773,2774,2776,2778,2780],{},[1156,2775,1159],{"mathvariant":1158},[1161,2777,952],{"stretchy":1163},[1165,2779,786],{},[1161,2781,1169],{"stretchy":1163},[1171,2783,1174],{"encoding":1173},[826,2785,2787],{"className":2786,"ariaHidden":1179},[1178],[826,2788,2790,2793,2796,2799,2802],{"className":2789},[1183],[826,2791],{"className":2792,"style":1188},[1187],[826,2794,1159],{"className":2795,"style":1194},[1192,1193],[826,2797,952],{"className":2798},[1198],[826,2800,786],{"className":2801},[1192],[826,2803,1169],{"className":2804},[1205]," : chaque élément subit au plus 4 manipulations de pile sur toute sa vie.",[801,2807,2808,2809,2811,2812,2814,2815,2818,2819,2862],{},"En pratique : ",[618,2810,2397],{}," (",[618,2813,1755],{}," \u002F ",[618,2816,2817],{},"popleft",") — implémenté en C, ",[826,2820,2822,2841],{"className":2821},[1140],[826,2823,2825],{"className":2824},[1144],[1146,2826,2827],{"xmlns":1148},[1150,2828,2829,2839],{},[1153,2830,2831,2833,2835,2837],{},[1156,2832,1159],{"mathvariant":1158},[1161,2834,952],{"stretchy":1163},[1165,2836,786],{},[1161,2838,1169],{"stretchy":1163},[1171,2840,1174],{"encoding":1173},[826,2842,2844],{"className":2843,"ariaHidden":1179},[1178],[826,2845,2847,2850,2853,2856,2859],{"className":2846},[1183],[826,2848],{"className":2849,"style":1188},[1187],[826,2851,1159],{"className":2852,"style":1194},[1192,1193],[826,2854,952],{"className":2855},[1198],[826,2857,786],{"className":2858},[1192],[826,2860,1169],{"className":2861},[1205]," aux deux bouts.",[593,2864,2866],{"id":2865},"à-savoir-reconnaître","À savoir reconnaître",[680,2868,2869,2879],{},[683,2870,2871],{},[686,2872,2873,2876],{},[689,2874,2875],{},"Situation",[689,2877,2878],{},"Action",[699,2880,2881,2893,2949,3004],{},[686,2882,2883,2888],{},[704,2884,2885,2886],{},"Code qui accède à ",[618,2887,2008],{},[704,2889,2890,2891],{},"viole l'abstraction — utiliser ",[618,2892,1945],{},[686,2894,2895,2944],{},[704,2896,2897,2899,2900,2943],{},[618,2898,1211],{}," coûte ",[826,2901,2903,2922],{"className":2902},[1140],[826,2904,2906],{"className":2905},[1144],[1146,2907,2908],{"xmlns":1148},[1150,2909,2910,2920],{},[1153,2911,2912,2914,2916,2918],{},[1156,2913,1159],{"mathvariant":1158},[1161,2915,952],{"stretchy":1163},[1156,2917,1238],{},[1161,2919,1169],{"stretchy":1163},[1171,2921,1243],{"encoding":1173},[826,2923,2925],{"className":2924,"ariaHidden":1179},[1178],[826,2926,2928,2931,2934,2937,2940],{"className":2927},[1183],[826,2929],{"className":2930,"style":1188},[1187],[826,2932,1159],{"className":2933,"style":1194},[1192,1193],[826,2935,952],{"className":2936},[1198],[826,2938,1238],{"className":2939},[1192,1262],[826,2941,1169],{"className":2942},[1205]," par appel",[704,2945,2946,2947],{},"implémentation par liste avec ",[618,2948,2699],{},[686,2950,2951,2998],{},[704,2952,2953,2899,2955,2098],{},[618,2954,1211],{},[826,2956,2958,2977],{"className":2957},[1140],[826,2959,2961],{"className":2960},[1144],[1146,2962,2963],{"xmlns":1148},[1150,2964,2965,2975],{},[1153,2966,2967,2969,2971,2973],{},[1156,2968,1159],{"mathvariant":1158},[1161,2970,952],{"stretchy":1163},[1165,2972,786],{},[1161,2974,1169],{"stretchy":1163},[1171,2976,1174],{"encoding":1173},[826,2978,2980],{"className":2979,"ariaHidden":1179},[1178],[826,2981,2983,2986,2989,2992,2995],{"className":2982},[1183],[826,2984],{"className":2985,"style":1188},[1187],[826,2987,1159],{"className":2988,"style":1194},[1192,1193],[826,2990,952],{"className":2991},[1198],[826,2993,786],{"className":2994},[1192],[826,2996,1169],{"className":2997},[1205],[704,2999,3000,3001],{},"implémentation par deux piles ou ",[618,3002,3003],{},"deque",[686,3005,3006,3009],{},[704,3007,3008],{},"Transvasement entrée → sortie",[704,3010,3011,3012,3014],{},"uniquement quand ",[618,3013,1779],{}," est vide",[593,3016,3018],{"id":3017},"pièges-courants","Pièges courants",[798,3020,3021,3024,3027,3033],{},[801,3022,3023],{},"Confondre interface (quoi) et implémentation (comment).",[801,3025,3026],{},"Croire qu'une seule implémentation est « la bonne ».",[801,3028,3029,3030,3032],{},"Oublier que ",[618,3031,2699],{}," d'une liste Python est linéaire.",[801,3034,3035,3036,3038],{},"Transvaser à chaque ",[618,3037,1211],{}," au lieu d'attendre que la sortie soit vide.",[593,3040,3042],{"id":3041},"syntaxe-python","Syntaxe Python",[818,3044,3046],{"className":820,"code":3045,"language":822,"meta":791,"style":791},"class FileDeuxPiles:\n    def __init__(self):\n        self._entree, self._sortie = [], []\n\n    def enfiler(self, x):\n        self._entree.append(x)\n\n    def defiler(self):\n        if not self._sortie:\n            while self._entree:\n                self._sortie.append(self._entree.pop())\n        if not self._sortie:\n            raise IndexError(\"file vide\")\n        return self._sortie.pop()\n\n    def est_vide(self):\n        return not self._entree and not self._sortie\n\n    def taille(self):\n        return len(self._entree) + len(self._sortie)\n",[618,3047,3048,3056,3064,3080,3084,3092,3099,3103,3111,3121,3129,3139,3149,3161,3170,3174,3182,3200,3204,3212],{"__ignoreMap":791},[826,3049,3050,3052,3054],{"class":828,"line":829},[826,3051,642],{"class":832},[826,3053,1351],{"class":835},[826,3055,840],{"class":839},[826,3057,3058,3060,3062],{"class":828,"line":843},[826,3059,860],{"class":832},[826,3061,864],{"class":863},[826,3063,867],{"class":839},[826,3065,3066,3068,3071,3073,3075,3077],{"class":828,"line":850},[826,3067,873],{"class":863},[826,3069,3070],{"class":839},"._entree, ",[826,3072,650],{"class":863},[826,3074,1392],{"class":839},[826,3076,879],{"class":832},[826,3078,3079],{"class":839}," [], []\n",[826,3081,3082],{"class":828,"line":857},[826,3083,854],{"emptyLinePlaceholder":853},[826,3085,3086,3088,3090],{"class":828,"line":870},[826,3087,860],{"class":832},[826,3089,895],{"class":835},[826,3091,898],{"class":839},[826,3093,3094,3096],{"class":828,"line":885},[826,3095,873],{"class":863},[826,3097,3098],{"class":839},"._entree.append(x)\n",[826,3100,3101],{"class":828,"line":890},[826,3102,854],{"emptyLinePlaceholder":853},[826,3104,3105,3107,3109],{"class":828,"line":901},[826,3106,860],{"class":832},[826,3108,923],{"class":835},[826,3110,867],{"class":839},[826,3112,3113,3115,3117,3119],{"class":828,"line":913},[826,3114,931],{"class":832},[826,3116,934],{"class":832},[826,3118,937],{"class":863},[826,3120,1441],{"class":839},[826,3122,3123,3125,3127],{"class":828,"line":918},[826,3124,1446],{"class":832},[826,3126,937],{"class":863},[826,3128,1451],{"class":839},[826,3130,3131,3133,3135,3137],{"class":828,"line":928},[826,3132,1456],{"class":863},[826,3134,1459],{"class":839},[826,3136,650],{"class":863},[826,3138,1464],{"class":839},[826,3140,3141,3143,3145,3147],{"class":828,"line":943},[826,3142,931],{"class":832},[826,3144,934],{"class":832},[826,3146,937],{"class":863},[826,3148,1441],{"class":839},[826,3150,3151,3153,3155,3157,3159],{"class":828,"line":961},[826,3152,946],{"class":832},[826,3154,949],{"class":863},[826,3156,952],{"class":839},[826,3158,955],{"class":846},[826,3160,958],{"class":839},[826,3162,3163,3165,3167],{"class":828,"line":981},[826,3164,964],{"class":832},[826,3166,937],{"class":863},[826,3168,3169],{"class":839},"._sortie.pop()\n",[826,3171,3172],{"class":828,"line":986},[826,3173,854],{"emptyLinePlaceholder":853},[826,3175,3176,3178,3180],{"class":828,"line":996},[826,3177,860],{"class":832},[826,3179,991],{"class":835},[826,3181,867],{"class":839},[826,3183,3184,3186,3188,3190,3192,3194,3196,3198],{"class":828,"line":1017},[826,3185,964],{"class":832},[826,3187,934],{"class":832},[826,3189,937],{"class":863},[826,3191,1377],{"class":839},[826,3193,1523],{"class":832},[826,3195,934],{"class":832},[826,3197,937],{"class":863},[826,3199,1530],{"class":839},[826,3201,3202],{"class":828,"line":1022},[826,3203,854],{"emptyLinePlaceholder":853},[826,3205,3206,3208,3210],{"class":828,"line":1032},[826,3207,860],{"class":832},[826,3209,1027],{"class":835},[826,3211,867],{"class":839},[826,3213,3214,3216,3218,3220,3222,3224,3226,3228,3230,3232],{"class":828,"line":1512},[826,3215,964],{"class":832},[826,3217,1001],{"class":863},[826,3219,952],{"class":839},[826,3221,650],{"class":863},[826,3223,1558],{"class":839},[826,3225,1561],{"class":832},[826,3227,1001],{"class":863},[826,3229,952],{"class":839},[826,3231,650],{"class":863},[826,3233,1570],{"class":839},[2522,3235,3236],{},"html pre.shiki code .s8jYJ, html code.shiki .s8jYJ{--shiki-light:#D73A49;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .snPdu, html code.shiki .snPdu{--shiki-light:#6F42C1;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sxrX7, html code.shiki .sxrX7{--shiki-light:#24292E;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sBjJW, html code.shiki .sBjJW{--shiki-light:#005CC5;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sIIMD, html code.shiki .sIIMD{--shiki-light:#032F62;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":791,"searchDepth":843,"depth":843,"links":3238},[3239,3240,3241,3242,3243],{"id":2556,"depth":843,"text":2557},{"id":2664,"depth":843,"text":2665},{"id":2865,"depth":843,"text":2866},{"id":3017,"depth":843,"text":3018},{"id":3041,"depth":843,"text":3042},"Mémo de révision sur les deux implémentations canoniques d'une file et leur complexité.",{},"\u002Fnsi-tale\u002Fta-structures-donnees\u002Fimplementer-une-structure.memo",[],{"title":2550,"description":3244},"2.nsi-tale\u002Fta-structures-donnees\u002F2.implementer-une-structure.memo","_vDPXTFt6FUoLovq2gj5VZHIjXrPBomGiXV57SdLnb0",{"id":3252,"title":3253,"body":3254,"description":3934,"extension":2537,"meta":3935,"navigation":2543,"path":3936,"seo":3937,"stem":3938,"__hash__":3939},"coursSlides\u002F2.nsi-tale\u002Fta-structures-donnees\u002F2.implementer-une-structure.slides.md","Implémenter une file FIFO — diapositives",{"type":590,"value":3255,"toc":3932},[3256,3261,3267,3270,3274,3294,3296,3300,3349,3354,3356,3360,3412,3418,3420,3424,3427,3451,3453,3457,3583,3585,3589,3592,3594,3598,3818,3821,3823,3828,3871,3917,3919,3923,3929],[3257,3258,3260],"h1",{"id":3259},"implémenter-une-file-fifo","Implémenter une file FIFO",[598,3262,3263,3264,3266],{},"Item ",[631,3265],{"code":588}," — Une interface, plusieurs implémentations.",[3268,3269],"hr",{},[3257,3271,3273],{"id":3272},"deux-niveaux-de-discours","Deux niveaux de discours",[798,3275,3276,3281,3287],{},[801,3277,3278,3280],{},[602,3279,2680],{}," : ce que la structure sait faire (le contrat).",[801,3282,3283,3286],{},[602,3284,3285],{},"Implémentation"," : comment elle le fait (le code).",[801,3288,3289,3290,3293],{},"Une interface, ",[602,3291,3292],{},"plusieurs"," implémentations possibles.",[3268,3295],{},[3257,3297,3299],{"id":3298},"une-file-fifo-le-contrat","Une file FIFO — le contrat",[680,3301,3302,3311],{},[683,3303,3304],{},[686,3305,3306,3308],{},[689,3307,691],{},[689,3309,3310],{},"Effet",[699,3312,3313,3322,3331,3340],{},[686,3314,3315,3319],{},[704,3316,3317],{},[618,3318,708],{},[704,3320,3321],{},"ajoute en queue",[686,3323,3324,3328],{},[704,3325,3326],{},[618,3327,727],{},[704,3329,3330],{},"retire en tête",[686,3332,3333,3337],{},[704,3334,3335],{},[618,3336,742],{},[704,3338,3339],{},"vide ?",[686,3341,3342,3346],{},[704,3343,3344],{},[618,3345,765],{},[704,3347,3348],{},"combien d'éléments",[598,3350,3351,3352,613],{},"Comportement : ",[664,3353,674],{},[3268,3355],{},[3257,3357,3359],{"id":3358},"implémentation-1-liste-python","Implémentation 1 — liste Python",[818,3361,3363],{"className":820,"code":3362,"language":822,"meta":791,"style":791},"def enfiler(self, x):\n    self._data.append(x)        # O(1) amorti\n\ndef defiler(self):\n    return self._data.pop(0)    # O(n)\n",[618,3364,3365,3373,3383,3387,3395],{"__ignoreMap":791},[826,3366,3367,3369,3371],{"class":828,"line":829},[826,3368,1965],{"class":832},[826,3370,895],{"class":835},[826,3372,898],{"class":839},[826,3374,3375,3378,3381],{"class":828,"line":843},[826,3376,3377],{"class":863},"    self",[826,3379,3380],{"class":839},"._data.append(x)        ",[826,3382,910],{"class":909},[826,3384,3385],{"class":828,"line":850},[826,3386,854],{"emptyLinePlaceholder":853},[826,3388,3389,3391,3393],{"class":828,"line":857},[826,3390,1965],{"class":832},[826,3392,923],{"class":835},[826,3394,867],{"class":839},[826,3396,3397,3400,3402,3404,3406,3409],{"class":828,"line":870},[826,3398,3399],{"class":832},"    return",[826,3401,937],{"class":863},[826,3403,969],{"class":839},[826,3405,972],{"class":863},[826,3407,3408],{"class":839},")    ",[826,3410,3411],{"class":909},"# O(n)\n",[598,3413,3414,3415,3417],{},"Simple, mais ",[618,3416,2699],{}," décale toute la liste.",[3268,3419],{},[3257,3421,3423],{"id":3422},"implémentation-2-deux-piles","Implémentation 2 — deux piles",[598,3425,3426],{},"Pile d'entrée + pile de sortie.\nBascule entrée → sortie quand la sortie est vide.",[818,3428,3430],{"className":820,"code":3429,"language":822,"meta":791,"style":791},"while self._entree:\n    self._sortie.append(self._entree.pop())\n",[618,3431,3432,3441],{"__ignoreMap":791},[826,3433,3434,3437,3439],{"class":828,"line":829},[826,3435,3436],{"class":832},"while",[826,3438,937],{"class":863},[826,3440,1451],{"class":839},[826,3442,3443,3445,3447,3449],{"class":828,"line":843},[826,3444,3377],{"class":863},[826,3446,1459],{"class":839},[826,3448,650],{"class":863},[826,3450,1464],{"class":839},[3268,3452],{},[3257,3454,3456],{"id":3455},"pourquoi-deux-piles-cest-rapide","Pourquoi deux piles, c'est rapide",[598,3458,3459,3460,3463,3464,3492,3493,3536,3537,3539,3540,613],{},"Chaque élément traverse au plus ",[602,3461,3462],{},"quatre"," opérations de pile.\nCoût total sur ",[826,3465,3467,3480],{"className":3466},[1140],[826,3468,3470],{"className":3469},[1144],[1146,3471,3472],{"xmlns":1148},[1150,3473,3474,3478],{},[1153,3475,3476],{},[1156,3477,1238],{},[1171,3479,1238],{"encoding":1173},[826,3481,3483],{"className":3482,"ariaHidden":1179},[1178],[826,3484,3486,3489],{"className":3485},[1183],[826,3487],{"className":3488,"style":1292},[1187],[826,3490,1238],{"className":3491},[1192,1262]," opérations : ",[826,3494,3496,3515],{"className":3495},[1140],[826,3497,3499],{"className":3498},[1144],[1146,3500,3501],{"xmlns":1148},[1150,3502,3503,3513],{},[1153,3504,3505,3507,3509,3511],{},[1156,3506,1159],{"mathvariant":1158},[1161,3508,952],{"stretchy":1163},[1156,3510,1238],{},[1161,3512,1169],{"stretchy":1163},[1171,3514,1243],{"encoding":1173},[826,3516,3518],{"className":3517,"ariaHidden":1179},[1178],[826,3519,3521,3524,3527,3530,3533],{"className":3520},[1183],[826,3522],{"className":3523,"style":1188},[1187],[826,3525,1159],{"className":3526,"style":1194},[1192,1193],[826,3528,952],{"className":3529},[1198],[826,3531,1238],{"className":3532},[1192,1262],[826,3534,1169],{"className":3535},[1205],".\nCoût ",[602,3538,1910],{}," par opération : ",[826,3541,3543,3562],{"className":3542},[1140],[826,3544,3546],{"className":3545},[1144],[1146,3547,3548],{"xmlns":1148},[1150,3549,3550,3560],{},[1153,3551,3552,3554,3556,3558],{},[1156,3553,1159],{"mathvariant":1158},[1161,3555,952],{"stretchy":1163},[1165,3557,786],{},[1161,3559,1169],{"stretchy":1163},[1171,3561,1174],{"encoding":1173},[826,3563,3565],{"className":3564,"ariaHidden":1179},[1178],[826,3566,3568,3571,3574,3577,3580],{"className":3567},[1183],[826,3569],{"className":3570,"style":1188},[1187],[826,3572,1159],{"className":3573,"style":1194},[1192,1193],[826,3575,952],{"className":3576},[1198],[826,3578,786],{"className":3579},[1192],[826,3581,1169],{"className":3582},[1205],[3268,3584],{},[3257,3586,3588],{"id":3587},"schéma-à-dessiner-au-tableau","Schéma à dessiner au tableau",[1637,3590],{"alt":3591,"kind":1640,"src":1641,"svg":1642},"Deux piles côte à côte : pile entrée à gauche, pile sortie à droite. Flèche du sommet de l'entrée vers la sortie au moment du transvasement.",[3268,3593],{},[3257,3595,3597],{"id":3596},"comparatif-final","Comparatif final",[680,3599,3600,3614],{},[683,3601,3602],{},[686,3603,3604,3606,3610],{},[689,3605,2025],{},[689,3607,3608],{},[618,3609,620],{},[689,3611,3612],{},[618,3613,624],{},[699,3615,3616,3712,3808],{},[686,3617,3618,3622,3667],{},[704,3619,3620],{},[618,3621,1131],{},[704,3623,3624,2098],{},[826,3625,3627,3646],{"className":3626},[1140],[826,3628,3630],{"className":3629},[1144],[1146,3631,3632],{"xmlns":1148},[1150,3633,3634,3644],{},[1153,3635,3636,3638,3640,3642],{},[1156,3637,1159],{"mathvariant":1158},[1161,3639,952],{"stretchy":1163},[1165,3641,786],{},[1161,3643,1169],{"stretchy":1163},[1171,3645,1174],{"encoding":1173},[826,3647,3649],{"className":3648,"ariaHidden":1179},[1178],[826,3650,3652,3655,3658,3661,3664],{"className":3651},[1183],[826,3653],{"className":3654,"style":1188},[1187],[826,3656,1159],{"className":3657,"style":1194},[1192,1193],[826,3659,952],{"className":3660},[1198],[826,3662,786],{"className":3663},[1192],[826,3665,1169],{"className":3666},[1205],[704,3668,3669],{},[826,3670,3672,3691],{"className":3671},[1140],[826,3673,3675],{"className":3674},[1144],[1146,3676,3677],{"xmlns":1148},[1150,3678,3679,3689],{},[1153,3680,3681,3683,3685,3687],{},[1156,3682,1159],{"mathvariant":1158},[1161,3684,952],{"stretchy":1163},[1165,3686,786],{},[1161,3688,1169],{"stretchy":1163},[1171,3690,1174],{"encoding":1173},[826,3692,3694],{"className":3693,"ariaHidden":1179},[1178],[826,3695,3697,3700,3703,3706,3709],{"className":3696},[1183],[826,3698],{"className":3699,"style":1188},[1187],[826,3701,1159],{"className":3702,"style":1194},[1192,1193],[826,3704,952],{"className":3705},[1198],[826,3707,786],{"className":3708},[1192],[826,3710,1169],{"className":3711},[1205],[686,3713,3714,3718,3763],{},[704,3715,3716],{},[618,3717,1211],{},[704,3719,3720],{},[826,3721,3723,3742],{"className":3722},[1140],[826,3724,3726],{"className":3725},[1144],[1146,3727,3728],{"xmlns":1148},[1150,3729,3730,3740],{},[1153,3731,3732,3734,3736,3738],{},[1156,3733,1159],{"mathvariant":1158},[1161,3735,952],{"stretchy":1163},[1156,3737,1238],{},[1161,3739,1169],{"stretchy":1163},[1171,3741,1243],{"encoding":1173},[826,3743,3745],{"className":3744,"ariaHidden":1179},[1178],[826,3746,3748,3751,3754,3757,3760],{"className":3747},[1183],[826,3749],{"className":3750,"style":1188},[1187],[826,3752,1159],{"className":3753,"style":1194},[1192,1193],[826,3755,952],{"className":3756},[1198],[826,3758,1238],{"className":3759},[1192,1262],[826,3761,1169],{"className":3762},[1205],[704,3764,3765,2098],{},[826,3766,3768,3787],{"className":3767},[1140],[826,3769,3771],{"className":3770},[1144],[1146,3772,3773],{"xmlns":1148},[1150,3774,3775,3785],{},[1153,3776,3777,3779,3781,3783],{},[1156,3778,1159],{"mathvariant":1158},[1161,3780,952],{"stretchy":1163},[1165,3782,786],{},[1161,3784,1169],{"stretchy":1163},[1171,3786,1174],{"encoding":1173},[826,3788,3790],{"className":3789,"ariaHidden":1179},[1178],[826,3791,3793,3796,3799,3802,3805],{"className":3792},[1183],[826,3794],{"className":3795,"style":1188},[1187],[826,3797,1159],{"className":3798,"style":1194},[1192,1193],[826,3800,952],{"className":3801},[1198],[826,3803,786],{"className":3804},[1192],[826,3806,1169],{"className":3807},[1205],[686,3809,3810,3813,3815],{},[704,3811,3812],{},"Lisibilité",[704,3814,2378],{},[704,3816,3817],{},"demande l'astuce",[598,3819,3820],{},"Même contrat — performances différentes.",[3268,3822],{},[3257,3824,2808,3826],{"id":3825},"en-pratique-collectionsdeque",[618,3827,2397],{},[818,3829,3831],{"className":820,"code":3830,"language":822,"meta":791,"style":791},"from collections import deque\nf = deque()\nf.append(1)         # enfiler\nprint(f.popleft()) # defiler\n",[618,3832,3833,3843,3851,3861],{"__ignoreMap":791},[826,3834,3835,3837,3839,3841],{"class":828,"line":829},[826,3836,2462],{"class":832},[826,3838,2465],{"class":839},[826,3840,2468],{"class":832},[826,3842,2471],{"class":839},[826,3844,3845,3847,3849],{"class":828,"line":843},[826,3846,1056],{"class":839},[826,3848,879],{"class":832},[826,3850,2480],{"class":839},[826,3852,3853,3855,3857,3859],{"class":828,"line":850},[826,3854,2485],{"class":839},[826,3856,786],{"class":863},[826,3858,2490],{"class":839},[826,3860,2493],{"class":909},[826,3862,3863,3865,3868],{"class":828,"line":857},[826,3864,1093],{"class":863},[826,3866,3867],{"class":839},"(f.popleft()) ",[826,3869,3870],{"class":909},"# defiler\n",[598,3872,3873,3916],{},[826,3874,3876,3895],{"className":3875},[1140],[826,3877,3879],{"className":3878},[1144],[1146,3880,3881],{"xmlns":1148},[1150,3882,3883,3893],{},[1153,3884,3885,3887,3889,3891],{},[1156,3886,1159],{"mathvariant":1158},[1161,3888,952],{"stretchy":1163},[1165,3890,786],{},[1161,3892,1169],{"stretchy":1163},[1171,3894,1174],{"encoding":1173},[826,3896,3898],{"className":3897,"ariaHidden":1179},[1178],[826,3899,3901,3904,3907,3910,3913],{"className":3900},[1183],[826,3902],{"className":3903,"style":1188},[1187],[826,3905,1159],{"className":3906,"style":1194},[1192,1193],[826,3908,952],{"className":3909},[1198],[826,3911,786],{"className":3912},[1192],[826,3914,1169],{"className":3915},[1205]," aux deux bouts, codé en C.",[3268,3918],{},[3257,3920,3922],{"id":3921},"à-retenir","À retenir",[598,3924,3925,3928],{},[602,3926,3927],{},"Un programme client dépend de l'interface, pas de l'implémentation.","\nChanger le moteur ne doit jamais casser la carrosserie.",[2522,3930,3931],{},"html pre.shiki code .s8jYJ, html code.shiki .s8jYJ{--shiki-light:#D73A49;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .snPdu, html code.shiki .snPdu{--shiki-light:#6F42C1;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sxrX7, html code.shiki .sxrX7{--shiki-light:#24292E;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sBjJW, html code.shiki .sBjJW{--shiki-light:#005CC5;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sCsY4, html code.shiki .sCsY4{--shiki-light:#6A737D;--shiki-default:#6A737D;--shiki-dark:#6A737D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":791,"searchDepth":843,"depth":843,"links":3933},[],"Deck pour la séance qui illustre l'interface vs implémentation sur la file canonique.",{},"\u002Fnsi-tale\u002Fta-structures-donnees\u002Fimplementer-une-structure.slides",{"title":3253,"description":3934},"2.nsi-tale\u002Fta-structures-donnees\u002F2.implementer-une-structure.slides","pbm6XrhksYiAXQ25nc7MfC46sN-kYHaMjbbaTzUKVuE",{"id":2549,"title":2550,"bo":3941,"body":3942,"description":3244,"eval":2536,"extension":2537,"labo":2536,"meta":4572,"navigation":2543,"path":3246,"quizzes":4573,"readingTime":829,"seo":4574,"stem":3249,"tp":2536,"__hash__":3250},[588],{"type":590,"value":3943,"toc":4565},[3944,3946,4044,4046,4221,4223,4359,4361,4375,4377,4563],[593,3945,2557],{"id":2556},[598,3947,3948],{},[602,3949,2562,3950,643,3952,643,3954,643,3956,2573,3958,2617,4001,2661],{},[618,3951,1131],{},[618,3953,1211],{},[618,3955,2569],{},[618,3957,2572],{},[826,3959,3961,3980],{"className":3960},[1140],[826,3962,3964],{"className":3963},[1144],[1146,3965,3966],{"xmlns":1148},[1150,3967,3968,3978],{},[1153,3969,3970,3972,3974,3976],{},[1156,3971,1159],{"mathvariant":1158},[1161,3973,952],{"stretchy":1163},[1156,3975,1238],{},[1161,3977,1169],{"stretchy":1163},[1171,3979,1243],{"encoding":1173},[826,3981,3983],{"className":3982,"ariaHidden":1179},[1178],[826,3984,3986,3989,3992,3995,3998],{"className":3985},[1183],[826,3987],{"className":3988,"style":1188},[1187],[826,3990,1159],{"className":3991,"style":1194},[1192,1193],[826,3993,952],{"className":3994},[1198],[826,3996,1238],{"className":3997},[1192,1262],[826,3999,1169],{"className":4000},[1205],[826,4002,4004,4023],{"className":4003},[1140],[826,4005,4007],{"className":4006},[1144],[1146,4008,4009],{"xmlns":1148},[1150,4010,4011,4021],{},[1153,4012,4013,4015,4017,4019],{},[1156,4014,1159],{"mathvariant":1158},[1161,4016,952],{"stretchy":1163},[1165,4018,786],{},[1161,4020,1169],{"stretchy":1163},[1171,4022,1174],{"encoding":1173},[826,4024,4026],{"className":4025,"ariaHidden":1179},[1178],[826,4027,4029,4032,4035,4038,4041],{"className":4028},[1183],[826,4030],{"className":4031,"style":1188},[1187],[826,4033,1159],{"className":4034,"style":1194},[1192,1193],[826,4036,952],{"className":4037},[1198],[826,4039,786],{"className":4040},[1192],[826,4042,1169],{"className":4043},[1205],[593,4045,2665],{"id":2664},[798,4047,4048,4054,4066,4115,4123,4170],{},[801,4049,4050,2672,4052,2675],{},[602,4051,670],{},[664,4053,674],{},[801,4055,4056,2681,4058,643,4060,643,4062,643,4064,613],{},[602,4057,2680],{},[618,4059,708],{},[618,4061,727],{},[618,4063,742],{},[618,4065,765],{},[801,4067,2692,4068,2696,4070,2700,4072,2744],{},[602,4069,2695],{},[618,4071,2699],{},[826,4073,4075,4094],{"className":4074},[1140],[826,4076,4078],{"className":4077},[1144],[1146,4079,4080],{"xmlns":1148},[1150,4081,4082,4092],{},[1153,4083,4084,4086,4088,4090],{},[1156,4085,1159],{"mathvariant":1158},[1161,4087,952],{"stretchy":1163},[1156,4089,1238],{},[1161,4091,1169],{"stretchy":1163},[1171,4093,1243],{"encoding":1173},[826,4095,4097],{"className":4096,"ariaHidden":1179},[1178],[826,4098,4100,4103,4106,4109,4112],{"className":4099},[1183],[826,4101],{"className":4102,"style":1188},[1187],[826,4104,1159],{"className":4105,"style":1194},[1192,1193],[826,4107,952],{"className":4108},[1198],[826,4110,1238],{"className":4111},[1192,1262],[826,4113,1169],{"className":4114},[1205],[801,4116,2692,4117,2750,4119,2753,4121,2756],{},[602,4118,2749],{},[618,4120,1131],{},[618,4122,1211],{},[801,4124,4125,2805],{},[602,4126,2761,4127],{},[826,4128,4130,4149],{"className":4129},[1140],[826,4131,4133],{"className":4132},[1144],[1146,4134,4135],{"xmlns":1148},[1150,4136,4137,4147],{},[1153,4138,4139,4141,4143,4145],{},[1156,4140,1159],{"mathvariant":1158},[1161,4142,952],{"stretchy":1163},[1165,4144,786],{},[1161,4146,1169],{"stretchy":1163},[1171,4148,1174],{"encoding":1173},[826,4150,4152],{"className":4151,"ariaHidden":1179},[1178],[826,4153,4155,4158,4161,4164,4167],{"className":4154},[1183],[826,4156],{"className":4157,"style":1188},[1187],[826,4159,1159],{"className":4160,"style":1194},[1192,1193],[826,4162,952],{"className":4163},[1198],[826,4165,786],{"className":4166},[1192],[826,4168,1169],{"className":4169},[1205],[801,4171,2808,4172,2811,4174,2814,4176,2818,4178,2862],{},[618,4173,2397],{},[618,4175,1755],{},[618,4177,2817],{},[826,4179,4181,4200],{"className":4180},[1140],[826,4182,4184],{"className":4183},[1144],[1146,4185,4186],{"xmlns":1148},[1150,4187,4188,4198],{},[1153,4189,4190,4192,4194,4196],{},[1156,4191,1159],{"mathvariant":1158},[1161,4193,952],{"stretchy":1163},[1165,4195,786],{},[1161,4197,1169],{"stretchy":1163},[1171,4199,1174],{"encoding":1173},[826,4201,4203],{"className":4202,"ariaHidden":1179},[1178],[826,4204,4206,4209,4212,4215,4218],{"className":4205},[1183],[826,4207],{"className":4208,"style":1188},[1187],[826,4210,1159],{"className":4211,"style":1194},[1192,1193],[826,4213,952],{"className":4214},[1198],[826,4216,786],{"className":4217},[1192],[826,4219,1169],{"className":4220},[1205],[593,4222,2866],{"id":2865},[680,4224,4225,4233],{},[683,4226,4227],{},[686,4228,4229,4231],{},[689,4230,2875],{},[689,4232,2878],{},[699,4234,4235,4245,4298,4351],{},[686,4236,4237,4241],{},[704,4238,2885,4239],{},[618,4240,2008],{},[704,4242,2890,4243],{},[618,4244,1945],{},[686,4246,4247,4294],{},[704,4248,4249,2899,4251,2943],{},[618,4250,1211],{},[826,4252,4254,4273],{"className":4253},[1140],[826,4255,4257],{"className":4256},[1144],[1146,4258,4259],{"xmlns":1148},[1150,4260,4261,4271],{},[1153,4262,4263,4265,4267,4269],{},[1156,4264,1159],{"mathvariant":1158},[1161,4266,952],{"stretchy":1163},[1156,4268,1238],{},[1161,4270,1169],{"stretchy":1163},[1171,4272,1243],{"encoding":1173},[826,4274,4276],{"className":4275,"ariaHidden":1179},[1178],[826,4277,4279,4282,4285,4288,4291],{"className":4278},[1183],[826,4280],{"className":4281,"style":1188},[1187],[826,4283,1159],{"className":4284,"style":1194},[1192,1193],[826,4286,952],{"className":4287},[1198],[826,4289,1238],{"className":4290},[1192,1262],[826,4292,1169],{"className":4293},[1205],[704,4295,2946,4296],{},[618,4297,2699],{},[686,4299,4300,4347],{},[704,4301,4302,2899,4304,2098],{},[618,4303,1211],{},[826,4305,4307,4326],{"className":4306},[1140],[826,4308,4310],{"className":4309},[1144],[1146,4311,4312],{"xmlns":1148},[1150,4313,4314,4324],{},[1153,4315,4316,4318,4320,4322],{},[1156,4317,1159],{"mathvariant":1158},[1161,4319,952],{"stretchy":1163},[1165,4321,786],{},[1161,4323,1169],{"stretchy":1163},[1171,4325,1174],{"encoding":1173},[826,4327,4329],{"className":4328,"ariaHidden":1179},[1178],[826,4330,4332,4335,4338,4341,4344],{"className":4331},[1183],[826,4333],{"className":4334,"style":1188},[1187],[826,4336,1159],{"className":4337,"style":1194},[1192,1193],[826,4339,952],{"className":4340},[1198],[826,4342,786],{"className":4343},[1192],[826,4345,1169],{"className":4346},[1205],[704,4348,3000,4349],{},[618,4350,3003],{},[686,4352,4353,4355],{},[704,4354,3008],{},[704,4356,3011,4357,3014],{},[618,4358,1779],{},[593,4360,3018],{"id":3017},[798,4362,4363,4365,4367,4371],{},[801,4364,3023],{},[801,4366,3026],{},[801,4368,3029,4369,3032],{},[618,4370,2699],{},[801,4372,3035,4373,3038],{},[618,4374,1211],{},[593,4376,3042],{"id":3041},[818,4378,4379],{"className":820,"code":3045,"language":822,"meta":791,"style":791},[618,4380,4381,4389,4397,4411,4415,4423,4429,4433,4441,4451,4459,4469,4479,4491,4499,4503,4511,4529,4533,4541],{"__ignoreMap":791},[826,4382,4383,4385,4387],{"class":828,"line":829},[826,4384,642],{"class":832},[826,4386,1351],{"class":835},[826,4388,840],{"class":839},[826,4390,4391,4393,4395],{"class":828,"line":843},[826,4392,860],{"class":832},[826,4394,864],{"class":863},[826,4396,867],{"class":839},[826,4398,4399,4401,4403,4405,4407,4409],{"class":828,"line":850},[826,4400,873],{"class":863},[826,4402,3070],{"class":839},[826,4404,650],{"class":863},[826,4406,1392],{"class":839},[826,4408,879],{"class":832},[826,4410,3079],{"class":839},[826,4412,4413],{"class":828,"line":857},[826,4414,854],{"emptyLinePlaceholder":853},[826,4416,4417,4419,4421],{"class":828,"line":870},[826,4418,860],{"class":832},[826,4420,895],{"class":835},[826,4422,898],{"class":839},[826,4424,4425,4427],{"class":828,"line":885},[826,4426,873],{"class":863},[826,4428,3098],{"class":839},[826,4430,4431],{"class":828,"line":890},[826,4432,854],{"emptyLinePlaceholder":853},[826,4434,4435,4437,4439],{"class":828,"line":901},[826,4436,860],{"class":832},[826,4438,923],{"class":835},[826,4440,867],{"class":839},[826,4442,4443,4445,4447,4449],{"class":828,"line":913},[826,4444,931],{"class":832},[826,4446,934],{"class":832},[826,4448,937],{"class":863},[826,4450,1441],{"class":839},[826,4452,4453,4455,4457],{"class":828,"line":918},[826,4454,1446],{"class":832},[826,4456,937],{"class":863},[826,4458,1451],{"class":839},[826,4460,4461,4463,4465,4467],{"class":828,"line":928},[826,4462,1456],{"class":863},[826,4464,1459],{"class":839},[826,4466,650],{"class":863},[826,4468,1464],{"class":839},[826,4470,4471,4473,4475,4477],{"class":828,"line":943},[826,4472,931],{"class":832},[826,4474,934],{"class":832},[826,4476,937],{"class":863},[826,4478,1441],{"class":839},[826,4480,4481,4483,4485,4487,4489],{"class":828,"line":961},[826,4482,946],{"class":832},[826,4484,949],{"class":863},[826,4486,952],{"class":839},[826,4488,955],{"class":846},[826,4490,958],{"class":839},[826,4492,4493,4495,4497],{"class":828,"line":981},[826,4494,964],{"class":832},[826,4496,937],{"class":863},[826,4498,3169],{"class":839},[826,4500,4501],{"class":828,"line":986},[826,4502,854],{"emptyLinePlaceholder":853},[826,4504,4505,4507,4509],{"class":828,"line":996},[826,4506,860],{"class":832},[826,4508,991],{"class":835},[826,4510,867],{"class":839},[826,4512,4513,4515,4517,4519,4521,4523,4525,4527],{"class":828,"line":1017},[826,4514,964],{"class":832},[826,4516,934],{"class":832},[826,4518,937],{"class":863},[826,4520,1377],{"class":839},[826,4522,1523],{"class":832},[826,4524,934],{"class":832},[826,4526,937],{"class":863},[826,4528,1530],{"class":839},[826,4530,4531],{"class":828,"line":1022},[826,4532,854],{"emptyLinePlaceholder":853},[826,4534,4535,4537,4539],{"class":828,"line":1032},[826,4536,860],{"class":832},[826,4538,1027],{"class":835},[826,4540,867],{"class":839},[826,4542,4543,4545,4547,4549,4551,4553,4555,4557,4559,4561],{"class":828,"line":1512},[826,4544,964],{"class":832},[826,4546,1001],{"class":863},[826,4548,952],{"class":839},[826,4550,650],{"class":863},[826,4552,1558],{"class":839},[826,4554,1561],{"class":832},[826,4556,1001],{"class":863},[826,4558,952],{"class":839},[826,4560,650],{"class":863},[826,4562,1570],{"class":839},[2522,4564,3236],{},{"title":791,"searchDepth":843,"depth":843,"links":4566},[4567,4568,4569,4570,4571],{"id":2556,"depth":843,"text":2557},{"id":2664,"depth":843,"text":2665},{"id":2865,"depth":843,"text":2866},{"id":3017,"depth":843,"text":3018},{"id":3041,"depth":843,"text":3042},{},[],{"title":2550,"description":3244},{"id":3252,"title":3253,"body":4576,"description":3934,"extension":2537,"meta":5193,"navigation":2543,"path":3936,"seo":5194,"stem":3938,"__hash__":3939},{"type":590,"value":4577,"toc":5191},[4578,4580,4584,4586,4588,4602,4604,4606,4650,4654,4656,4658,4704,4708,4710,4712,4714,4736,4738,4740,4860,4862,4864,4866,4868,4870,5088,5090,5092,5096,5136,5181,5183,5185,5189],[3257,4579,3260],{"id":3259},[598,4581,3263,4582,3266],{},[631,4583],{"code":588},[3268,4585],{},[3257,4587,3273],{"id":3272},[798,4589,4590,4594,4598],{},[801,4591,4592,3280],{},[602,4593,2680],{},[801,4595,4596,3286],{},[602,4597,3285],{},[801,4599,3289,4600,3293],{},[602,4601,3292],{},[3268,4603],{},[3257,4605,3299],{"id":3298},[680,4607,4608,4616],{},[683,4609,4610],{},[686,4611,4612,4614],{},[689,4613,691],{},[689,4615,3310],{},[699,4617,4618,4626,4634,4642],{},[686,4619,4620,4624],{},[704,4621,4622],{},[618,4623,708],{},[704,4625,3321],{},[686,4627,4628,4632],{},[704,4629,4630],{},[618,4631,727],{},[704,4633,3330],{},[686,4635,4636,4640],{},[704,4637,4638],{},[618,4639,742],{},[704,4641,3339],{},[686,4643,4644,4648],{},[704,4645,4646],{},[618,4647,765],{},[704,4649,3348],{},[598,4651,3351,4652,613],{},[664,4653,674],{},[3268,4655],{},[3257,4657,3359],{"id":3358},[818,4659,4660],{"className":820,"code":3362,"language":822,"meta":791,"style":791},[618,4661,4662,4670,4678,4682,4690],{"__ignoreMap":791},[826,4663,4664,4666,4668],{"class":828,"line":829},[826,4665,1965],{"class":832},[826,4667,895],{"class":835},[826,4669,898],{"class":839},[826,4671,4672,4674,4676],{"class":828,"line":843},[826,4673,3377],{"class":863},[826,4675,3380],{"class":839},[826,4677,910],{"class":909},[826,4679,4680],{"class":828,"line":850},[826,4681,854],{"emptyLinePlaceholder":853},[826,4683,4684,4686,4688],{"class":828,"line":857},[826,4685,1965],{"class":832},[826,4687,923],{"class":835},[826,4689,867],{"class":839},[826,4691,4692,4694,4696,4698,4700,4702],{"class":828,"line":870},[826,4693,3399],{"class":832},[826,4695,937],{"class":863},[826,4697,969],{"class":839},[826,4699,972],{"class":863},[826,4701,3408],{"class":839},[826,4703,3411],{"class":909},[598,4705,3414,4706,3417],{},[618,4707,2699],{},[3268,4709],{},[3257,4711,3423],{"id":3422},[598,4713,3426],{},[818,4715,4716],{"className":820,"code":3429,"language":822,"meta":791,"style":791},[618,4717,4718,4726],{"__ignoreMap":791},[826,4719,4720,4722,4724],{"class":828,"line":829},[826,4721,3436],{"class":832},[826,4723,937],{"class":863},[826,4725,1451],{"class":839},[826,4727,4728,4730,4732,4734],{"class":828,"line":843},[826,4729,3377],{"class":863},[826,4731,1459],{"class":839},[826,4733,650],{"class":863},[826,4735,1464],{"class":839},[3268,4737],{},[3257,4739,3456],{"id":3455},[598,4741,3459,4742,3463,4744,3492,4772,3536,4815,3539,4817,613],{},[602,4743,3462],{},[826,4745,4747,4760],{"className":4746},[1140],[826,4748,4750],{"className":4749},[1144],[1146,4751,4752],{"xmlns":1148},[1150,4753,4754,4758],{},[1153,4755,4756],{},[1156,4757,1238],{},[1171,4759,1238],{"encoding":1173},[826,4761,4763],{"className":4762,"ariaHidden":1179},[1178],[826,4764,4766,4769],{"className":4765},[1183],[826,4767],{"className":4768,"style":1292},[1187],[826,4770,1238],{"className":4771},[1192,1262],[826,4773,4775,4794],{"className":4774},[1140],[826,4776,4778],{"className":4777},[1144],[1146,4779,4780],{"xmlns":1148},[1150,4781,4782,4792],{},[1153,4783,4784,4786,4788,4790],{},[1156,4785,1159],{"mathvariant":1158},[1161,4787,952],{"stretchy":1163},[1156,4789,1238],{},[1161,4791,1169],{"stretchy":1163},[1171,4793,1243],{"encoding":1173},[826,4795,4797],{"className":4796,"ariaHidden":1179},[1178],[826,4798,4800,4803,4806,4809,4812],{"className":4799},[1183],[826,4801],{"className":4802,"style":1188},[1187],[826,4804,1159],{"className":4805,"style":1194},[1192,1193],[826,4807,952],{"className":4808},[1198],[826,4810,1238],{"className":4811},[1192,1262],[826,4813,1169],{"className":4814},[1205],[602,4816,1910],{},[826,4818,4820,4839],{"className":4819},[1140],[826,4821,4823],{"className":4822},[1144],[1146,4824,4825],{"xmlns":1148},[1150,4826,4827,4837],{},[1153,4828,4829,4831,4833,4835],{},[1156,4830,1159],{"mathvariant":1158},[1161,4832,952],{"stretchy":1163},[1165,4834,786],{},[1161,4836,1169],{"stretchy":1163},[1171,4838,1174],{"encoding":1173},[826,4840,4842],{"className":4841,"ariaHidden":1179},[1178],[826,4843,4845,4848,4851,4854,4857],{"className":4844},[1183],[826,4846],{"className":4847,"style":1188},[1187],[826,4849,1159],{"className":4850,"style":1194},[1192,1193],[826,4852,952],{"className":4853},[1198],[826,4855,786],{"className":4856},[1192],[826,4858,1169],{"className":4859},[1205],[3268,4861],{},[3257,4863,3588],{"id":3587},[1637,4865],{"alt":3591,"kind":1640,"src":1641,"svg":1642},[3268,4867],{},[3257,4869,3597],{"id":3596},[680,4871,4872,4886],{},[683,4873,4874],{},[686,4875,4876,4878,4882],{},[689,4877,2025],{},[689,4879,4880],{},[618,4881,620],{},[689,4883,4884],{},[618,4885,624],{},[699,4887,4888,4984,5080],{},[686,4889,4890,4894,4939],{},[704,4891,4892],{},[618,4893,1131],{},[704,4895,4896,2098],{},[826,4897,4899,4918],{"className":4898},[1140],[826,4900,4902],{"className":4901},[1144],[1146,4903,4904],{"xmlns":1148},[1150,4905,4906,4916],{},[1153,4907,4908,4910,4912,4914],{},[1156,4909,1159],{"mathvariant":1158},[1161,4911,952],{"stretchy":1163},[1165,4913,786],{},[1161,4915,1169],{"stretchy":1163},[1171,4917,1174],{"encoding":1173},[826,4919,4921],{"className":4920,"ariaHidden":1179},[1178],[826,4922,4924,4927,4930,4933,4936],{"className":4923},[1183],[826,4925],{"className":4926,"style":1188},[1187],[826,4928,1159],{"className":4929,"style":1194},[1192,1193],[826,4931,952],{"className":4932},[1198],[826,4934,786],{"className":4935},[1192],[826,4937,1169],{"className":4938},[1205],[704,4940,4941],{},[826,4942,4944,4963],{"className":4943},[1140],[826,4945,4947],{"className":4946},[1144],[1146,4948,4949],{"xmlns":1148},[1150,4950,4951,4961],{},[1153,4952,4953,4955,4957,4959],{},[1156,4954,1159],{"mathvariant":1158},[1161,4956,952],{"stretchy":1163},[1165,4958,786],{},[1161,4960,1169],{"stretchy":1163},[1171,4962,1174],{"encoding":1173},[826,4964,4966],{"className":4965,"ariaHidden":1179},[1178],[826,4967,4969,4972,4975,4978,4981],{"className":4968},[1183],[826,4970],{"className":4971,"style":1188},[1187],[826,4973,1159],{"className":4974,"style":1194},[1192,1193],[826,4976,952],{"className":4977},[1198],[826,4979,786],{"className":4980},[1192],[826,4982,1169],{"className":4983},[1205],[686,4985,4986,4990,5035],{},[704,4987,4988],{},[618,4989,1211],{},[704,4991,4992],{},[826,4993,4995,5014],{"className":4994},[1140],[826,4996,4998],{"className":4997},[1144],[1146,4999,5000],{"xmlns":1148},[1150,5001,5002,5012],{},[1153,5003,5004,5006,5008,5010],{},[1156,5005,1159],{"mathvariant":1158},[1161,5007,952],{"stretchy":1163},[1156,5009,1238],{},[1161,5011,1169],{"stretchy":1163},[1171,5013,1243],{"encoding":1173},[826,5015,5017],{"className":5016,"ariaHidden":1179},[1178],[826,5018,5020,5023,5026,5029,5032],{"className":5019},[1183],[826,5021],{"className":5022,"style":1188},[1187],[826,5024,1159],{"className":5025,"style":1194},[1192,1193],[826,5027,952],{"className":5028},[1198],[826,5030,1238],{"className":5031},[1192,1262],[826,5033,1169],{"className":5034},[1205],[704,5036,5037,2098],{},[826,5038,5040,5059],{"className":5039},[1140],[826,5041,5043],{"className":5042},[1144],[1146,5044,5045],{"xmlns":1148},[1150,5046,5047,5057],{},[1153,5048,5049,5051,5053,5055],{},[1156,5050,1159],{"mathvariant":1158},[1161,5052,952],{"stretchy":1163},[1165,5054,786],{},[1161,5056,1169],{"stretchy":1163},[1171,5058,1174],{"encoding":1173},[826,5060,5062],{"className":5061,"ariaHidden":1179},[1178],[826,5063,5065,5068,5071,5074,5077],{"className":5064},[1183],[826,5066],{"className":5067,"style":1188},[1187],[826,5069,1159],{"className":5070,"style":1194},[1192,1193],[826,5072,952],{"className":5073},[1198],[826,5075,786],{"className":5076},[1192],[826,5078,1169],{"className":5079},[1205],[686,5081,5082,5084,5086],{},[704,5083,3812],{},[704,5085,2378],{},[704,5087,3817],{},[598,5089,3820],{},[3268,5091],{},[3257,5093,2808,5094],{"id":3825},[618,5095,2397],{},[818,5097,5098],{"className":820,"code":3830,"language":822,"meta":791,"style":791},[618,5099,5100,5110,5118,5128],{"__ignoreMap":791},[826,5101,5102,5104,5106,5108],{"class":828,"line":829},[826,5103,2462],{"class":832},[826,5105,2465],{"class":839},[826,5107,2468],{"class":832},[826,5109,2471],{"class":839},[826,5111,5112,5114,5116],{"class":828,"line":843},[826,5113,1056],{"class":839},[826,5115,879],{"class":832},[826,5117,2480],{"class":839},[826,5119,5120,5122,5124,5126],{"class":828,"line":850},[826,5121,2485],{"class":839},[826,5123,786],{"class":863},[826,5125,2490],{"class":839},[826,5127,2493],{"class":909},[826,5129,5130,5132,5134],{"class":828,"line":857},[826,5131,1093],{"class":863},[826,5133,3867],{"class":839},[826,5135,3870],{"class":909},[598,5137,5138,3916],{},[826,5139,5141,5160],{"className":5140},[1140],[826,5142,5144],{"className":5143},[1144],[1146,5145,5146],{"xmlns":1148},[1150,5147,5148,5158],{},[1153,5149,5150,5152,5154,5156],{},[1156,5151,1159],{"mathvariant":1158},[1161,5153,952],{"stretchy":1163},[1165,5155,786],{},[1161,5157,1169],{"stretchy":1163},[1171,5159,1174],{"encoding":1173},[826,5161,5163],{"className":5162,"ariaHidden":1179},[1178],[826,5164,5166,5169,5172,5175,5178],{"className":5165},[1183],[826,5167],{"className":5168,"style":1188},[1187],[826,5170,1159],{"className":5171,"style":1194},[1192,1193],[826,5173,952],{"className":5174},[1198],[826,5176,786],{"className":5177},[1192],[826,5179,1169],{"className":5180},[1205],[3268,5182],{},[3257,5184,3922],{"id":3921},[598,5186,5187,3928],{},[602,5188,3927],{},[2522,5190,3931],{},{"title":791,"searchDepth":843,"depth":843,"links":5192},[],{},{"title":3253,"description":3934},1788035584269]