Les bases de l'informatique : maîtrisez la théorie de la programmation | Kurt Anderson | Skillshare

Vitesse de lecture


1.0x


  • 0.5x
  • 0.75x
  • 1 x (normale)
  • 1.25x
  • 1.5x
  • 1.75x
  • 2x

Les bases de l'informatique : maîtrisez la théorie de la programmation

teacher avatar Kurt Anderson, Computer Scientist, Multi-Media Designer

Regardez ce cours et des milliers d'autres

Bénéficiez d'un accès illimité à tous les cours
Suivez des cours enseignés par des leaders de l'industrie et des professionnels
Explorez divers sujets comme l'illustration, le graphisme, la photographie et bien d'autres

Regardez ce cours et des milliers d'autres

Bénéficiez d'un accès illimité à tous les cours
Suivez des cours enseignés par des leaders de l'industrie et des professionnels
Explorez divers sujets comme l'illustration, le graphisme, la photographie et bien d'autres

Leçons de ce cours

    • 1.

      Introduction

      4:48

    • 2.

      Introduction à la complexité du temps 1-1

      2:12

    • 3.

      1-2 Rafraîchissement en mathématiques : fonctions logarithmiques

      11:07

    • 4.

      1-3 Rafraîchissement en mathématiques : fonctions factorielles

      3:19

    • 5.

      Rafraîchissement en mathématiques 1-4 : expressions algébriques

      2:47

    • 6.

      Notation N-1-5

      18:55

    • 7.

      Notation Big O

      12:58

    • 8.

      Exemple de Big-O du monde réel

      9:51

    • 9.

      2-1 Comment les données sont-elles stockées

      8:38

    • 10.

      2-2 Introduction au tableau fixe

      5:09

    • 11.

      2-3 Temps d'exécution fixes du tableau

      12:23

    • 12.

      Algorithme de recherche binaire 2-4 (recherche triée dans un tableau fixe)

      9:59

    • 13.

      2-5 tableaux cerclés

      8:00

    • 14.

      2-6 tableaux dynamiques

      15:51

    • 15.

      Examen du tableau 2-7

      7:57

    • 16.

      2-8 exemples du monde réel de tableaux

      5:42

    • 17.

      Nœuds 3-1

      4:19

    • 18.

      Liste liée 3-2

      13:36

    • 19.

      3-3 Temps d'exécution de listes liées

      14:59

    • 20.

      3-4 listes doublement liées

      8:07

    • 21.

      3-5 Pointeur de queue

      5:14

    • 22.

      Examen de liste liée

      3:31

    • 23.

      3-7 Exemples du monde réel de listes liées

      3:00

    • 24.

      Piles 4-1

      9:41

    • 25.

      Exemple de pile 4-2

      11:05

    • 26.

      4-3 files d'attente

      8:48

    • 27.

      Exemples de file d'attente 4-4

      9:42

    • 28.

      4-5 Temps de file d'attente et d'exécution de la pile

      6:03

    • 29.

      4-6 Exemples de pile et de files d'attente

      7:01

    • 30.

      Introdcution d'algorithme de tri 5-1

      1:40

    • 31.

      Tri par bulles

      10:12

    • 32.

      Trier la sélection 5-3

      9:49

    • 33.

      Tri par insertion

      9:03

    • 34.

      5-5 Tri rapide

      14:38

    • 35.

      5-6 Temps d'exécution de tri rapide

      10:31

    • 36.

      5-7 Trier par fusion

      11:57

    • 37.

      5-8 Fusionner les temps d'exécution du tri

      7:39

    • 38.

      5-9 Stable vs Nonstable

      6:34

    • 39.

      5-10 exemples du monde réel d'algorithme de tri

      4:01

    • 40.

      6-1 Les bases des arbres

      7:37

    • 41.

      Arbre de recherche binaire 6-2

      8:34

    • 42.

      Temps d'exécution BST 6-3

      7:36

    • 43.

      6-4 parcours d'arbres

      13:04

    • 44.

      6-5 exemples du monde réel d'arbres

      4:29

    • 45.

      Timing - Préparation au projet

      6:47

  • --
  • Niveau débutant
  • Niveau intermédiaire
  • Niveau avancé
  • Tous niveaux

Généré par la communauté

Le niveau est déterminé par l'opinion majoritaire des apprenants qui ont évalué ce cours. La recommandation de l'enseignant est affichée jusqu'à ce qu'au moins 5 réponses d'apprenants soient collectées.

8 480

apprenants

6

projets

À propos de ce cours

Maîtriser la théorie pour devenir un bon programmeur ! 

Si vous cherchez à apprendre la théorie qui fait les grands programmeurs, vous êtes venus au bon endroit !  Ceci est parfait pour toute personne intéressée à apprendre les bases de la théorie de l'informatique. 

Aucune expérience préalable nécessaire ! 

L'informatique et la technologie sont souvent pensées comme des choses seulement pour les « esprits analytiques ». Je crois cependant que la technologie et sa théorie sont pour tout le monde. J'ai donc créé ce cours pour enseigner chaque sujet de diverses manières faciles à digérer. Grâce à ces multiples étapes de renforcement, je crois que n'importe qui peut suivre et réussir ! 

Pourquoi la théorie de la programmation est-elle importante ? 

Comprendre la théorie de l'informatique est ce qui distingue les grands programmeurs de ceux de la moyenne. La théorie de la programmation est quelque chose qui transcende un seul langage de programmation. Il vous donne des compétences et des techniques que vous pouvez appliquer à n'importe quel langage de programmation que vous touchez. Apprendre la théorie derrière la programmation est tout aussi important, sinon plus important que d'apprendre un langage de programmation singulier comme Java ou C++.

La programmation est tout au sujet de la résolution de problèmes. Analyser un problème et être en mesure de comprendre un moyen qu'un ordinateur peut aider avec ce problème. L'informatique est la pratique de ce processus d'analyse. Il va au-delà des techniques et du savoir nécessaires pour concevoir un code efficace et durable. 

Dans cette leçon, nous couvrirons : 

  • Système de nombres binaires

  • Notation N

  • Notation en O

  • Comment analyser un programme

  • Tableaux et leurs avantages

  • Les nœuds et leur importance

  • Listes et leurs avantages et implémentations

  • Piles implémentées avec les tableaux et les listes liées

  • Files d'attente implémentées avec les tableaux et les listes liées

  • Divers algorithmes de tri et leurs comparaisons

  • Arbres et arbres de recherche binaire

  • Et bien plus encore ! 

Rencontrez votre enseignant·e

Teacher Profile Image

Kurt Anderson

Computer Scientist, Multi-Media Designer

Enseignant·e

Hello, I'm Kurt.

I am a self-taught multi-media designer and computer scientist who has helped bring the creative vision of clients all around the world to life. Having 8+ years of experience in the Adobe Production Suite has given me a strong tool-set to create anything from videos to websites. Along with this, having a degree in Computer Science has given me a strong analytical mind for dealing with complex problems. Through these two disciplines I create a unique blend of efficiency and creativity. I believe anyone can become a designer or programmer. All it takes is practice.

I am also a world traveler and have lived in and learned from many different countries. During a 6 month stay in Japan, I became fascinated with their people's drive and craftsmanship. I try to i... Voir le profil complet

Compétences associées

Développement Langages de programmation
Level: Beginner

Notes attribuées au cours

Les attentes sont-elles satisfaites ?
    Dépassées !
  • 0%
  • Oui
  • 0%
  • En partie
  • 0%
  • Pas vraiment
  • 0%

Pourquoi s'inscrire à Skillshare ?

Suivez des cours Skillshare Original primés

Chaque cours comprend de courtes leçons et des travaux pratiques

Votre abonnement soutient les enseignants Skillshare

Apprenez, où que vous soyez

Suivez des cours où que vous soyez avec l'application Skillshare. Suivez-les en streaming ou téléchargez-les pour les regarder dans l'avion, dans le métro ou tout autre endroit où vous aimez apprendre.

Transcription

1. Introduction: Bonjour, tout le monde. Et bienvenue dans cette classe de compétences Computer Science 101. Ceci est une vidéo d'introduction. Je m'appelle Kurt Andersen. Je vais être l'instructeur de votre classe qui passe sur les bases de l'informatique. Une sorte de bon aperçu de tous les sujets que l'informatique touche et certains des principaux domaines, comme la domaines, notation, le timing et des choses comme ça. Dans ce cours, nous allons apprendre ces sept choses, et je vais les revoir dans une seconde. Mais je veux vous donner une idée de pourquoi nous voulons apprendre ces choses. informatique est la façon dont nous considérons la programmation et les algorithmes afin les rendre plus efficaces. Et ce terme, appelé scalable, signifie que nos algorithmes fonctionneront efficacement si nous mettons 10 données ou si nous mettons , par exemple, un million de données. Nous voulons que nos programmes fonctionnent de manière efficace ou essentiellement avec autant de données que possible. Pensez, par exemple, si nous construisons le prochain Facebook, imaginez s'ils ne l'ont conçu que pour 10 personnes. Ce serait un problème, parce que quand ils ont atteint un million de personnes. Soudain, il y a un gros problème. Il y a du timing, des problèmes. Les gens ne peuvent pas charger des choses parce que nos serveurs et nos algorithmes sont tous inefficaces. Et si c'est trop inefficace, nous pouvons créer un algorithme qui fait exactement la même chose de deux façons différentes. Une des façons dont cela pourrait prendre 10 ans pour finir. Et dans l'autre sens, ça pourrait prendre 10 secondes. Nous ne voulons donc pas créer les algorithmes qui prennent 10 ans. Nous voulons créer les algorithmes qui prennent 10 secondes. Nous allons passer en revue des choses comme ça tout au long du cours, briser quelques problèmes et obtenir le timing pour que je puisse montrer la différence entre les temps dans ce cours, le cours en utilisant ces différents algorithmes. Et à la fin du cours, on va passer en revue un projet. Alors passons en revue et je parlerai du projet. La première chose que nous faisons est un peu de recyclage des mathématiques. Je sais que ça fait peut-être un peu de temps que tu n'es pas allé à un cours de maths, alors on va juste couvrir quelques rudiments. Certaines des choses qui vous aideront tout au long du cours. Ce n'est pas un cours intensif en mathématiques. Nous apprenons de nouveaux domaines, mais cela vous aidera si vous avez une base solide. Donc on va faire une remise à niveau rapide pour que vous puissiez vous en souvenir. Et si vous avez un peu d' arrière-plan fragile sur quelque chose, vous pouvez le regarder un peu et en apprendre plus avant de commencer. arrière-plan fragile sur quelque chose, Ensuite, nous avons en notation qui est une sorte de principes de base derrière l'informatique. C' est notre outil dans la boîte à outils qui nous permet de regarder deux algorithmes et de dire lequel est le plus rapide. Donc, si je regarde Al Gore que je dis qu'il est connecté par rapport à un autre algorithme, qui est au carré comme un ordinateur, les scientifiques, scientifiques, nous savons ce que ça veut dire. Nous pouvons maintenant étiqueter les choses différemment et communiquer les vitesses aux autres informaticiens . C' est ce que la notation en travaille sur le stockage de données et une augmentation. C' est une façon de stocker des données, euh, euh, disponibles dans tous les langages de programmation modernes comme Java JavaScript, choses comme le développement IOS, qui est généralement Objective C ou Swift ou Andrew Development, qui c'est le travail. Sont l'Ecosse tous une augmentation des listes liées, piles et files d'attente, ils existent dans tous ceux. Ensuite, on va passer sur les nœuds et les listes liées. Ces deux là presque une sorte d'opposés les uns aux autres. Donc, ils font des choses différentes, et ils vous permettent de résoudre différents problèmes de différentes manières. piles et les files d'attente qui sont penser à un Qué presque comme Quand vous attendez en ligne, il y a des choses en file d'attente. Donc cette personne va, et puis cette personne va, et puis cette personne va, et si les gens entrent, ils commencent tous à faire la queue pour que nous puissions réellement créer cela dans un algorithme, ce qui nous aide dans beaucoup de différentes situations. Ils vont commencer des albums. C' est en quelque sorte la base de notre contenu informatique. C' est toujours là que les gens commencent. Il y en a beaucoup, et cela vous permet de voir une progression. devions opter pour des algorithmes d'hologramme vraiment mauvais qui prennent beaucoup trop de temps, et nous allons travailler notre chemin vers des algorithmes de tri vraiment, vraiment bons qui sont efficaces mais un peu complexes. Ils devaient aller sur les arbres et l'arbre de recherche binaire ou le BST. Ces deux sujets importants dans le domaine de l'informatique. Et enfin, on va faire le projet. C' était la fin du cours ? Et le projet de produit est essentiellement que nous allons prendre tout cela et le ramener en un seul problème. Il y a un problème. A la fin du cours, nous avons 10 millions de données. J' essaie de trier ces données, et je veux que vous traversiez le problème et que vous me disiez combien de temps cela prendra pour courir. Tu pourras me le dire à la fin de tout ça et comment peux-tu le rendre plus efficace ? Il y aura quelques changements rapides et faciles, quelques structures de données. Vous pouvez changer des choses comme ça qui le rendront plus efficace, et vous verrez que le temps va vraiment différent, en fonction de la façon dont vous implémentez ces changements. Voilà donc nos cours, c'est ce que nous allons apprendre. Ça va être un super voyage. Il y a beaucoup à apprendre, et vous comprendrez lentement plus sur le monde informatique au fur et à mesure que nous le traversons. Merci à tout le monde, et commençons avec ce cours 2. Introduction à la complexité de temps: Donc nous allons commencer ce cours où beaucoup de cours de CS commencent, et c'est dans le temps et la complexité. La raison pour laquelle nous commençons la complexité est parce qu'elle nous donne une norme, quelque chose que nous pouvons comparer nos programmes et quelque chose dont nous pouvons parler à d'autres informaticiens. C' est un moyen qu'ils peuvent, surtout les professeurs et ceux qui nous enseignent peuvent communiquer avec nous. Pourquoi un certain algorithme de programme, notre façon de faire quelque chose est inefficace par rapport à une autre façon. Donc, c'est une façon standard de comparer différentes pièces hors pièce. C' est à ça que tout se résume. Et ce que je veux dire d'une manière standard, c'est le fait qu'un informaticien des Pays-Bas, de l'Amérique et de l'Inde pourrait tous communiquer exactement de la même manière parce que nous utilisons certaines notations comme la notation « big O ». Donc, par exemple, cela ressemblerait à ceci. C' est une grosse notation O, et donc tous les informaticiens comprennent ce que cela signifie, et plus tard, nous allons en discuter aussi et apprendre habituellement. Vous utilisez certains petits aspects, comme dans au carré ou d'autres facteurs évolutifs. Donc nous n'utilisons pas comme ça vous savez qu'il fonctionne dans 25 unités de temps parce que nous ne savons pas ce que signifie 25 unités. Est-ce que cela prend 25 cycles d'horloge qui prennent 25 secondes de la prise ? Serait-il exécuté en 25 cycles sur mon ordinateur vers votre ordinateur ? C' est très difficile de comparer quand on y va. Donc ce que nous faisons Ils allaient regarder la norme pour cela, une façon que nous pouvons comparer à des algorithmes complètement indépendants de l'ordinateur, qu'il est exécuté sur la zone, ce monde, quelle vitesse le La connexion Internet est juste capable de regarder deux d'entre eux et de pouvoir les comparer et nous permet de trouver des moyens d'améliorer nous-mêmes. Donc, si nous pouvons regarder un certain que vous savez, une certaine notation, alors nous pouvons comprendre comment être meilleur que cette notation et quelles choses sont pires que cette notation, et cela nous donne beaucoup de marge de manœuvre. Il nous donne la capacité d'améliorer nous-mêmes un objectif fixé et de faire des recherches dans différents domaines comme n'importe quel autre aspect. Toute autre science, nous allons examiner les bases de cette science et comment nous pouvons l'analyser et essayer de trouver comment la rendre meilleure. 3. Recomposeur de math : Fonctions logarithmic: l' informatique est basée sur une base de mathématiques. C' est essentiellement des mathématiques appliquées que vous jetez dans un processeur et ensuite il fait tout pour vous. Et vous savez, vous pouvez continuer à construire sur ça pour faire vos programmes. Mais en substance, ce sont les mathématiques, et c'est pourquoi je veux juste passer en revue quelques termes mathématiques qui vont être utilisés tout au long du cours. Ne vous inquiétez pas. Ce n'est pas un cours de théorie des mathématiques lourdes ou quelque chose comme ça. Il n'y aura même pas de calculs. Cependant. Nous allons faire référence à une terminologie mathématique, une nomenclature mathématique, que je voulais m'assurer que nous sommes tous sur la même page avant d'entrer dans ce genre de nomenclature. Et ce ne sont que des choses qu' on a apprises au lycée. Ou nous avons appris une ou deux fois, et nous n'utilisons pas vraiment dans le monde réel. Mais quand vous entrez dans l'informatique, ils deviennent juste un peu plus répandus. Et comme je l'ai dit, tu n'as pas besoin de savoir comment faire tout ça à la main, mais juste de les comprendre. C' est ce que je veux arriver au point de savoir que vous êtes capable de comprendre ces différentes choses et où vous pouvez le voir comme disons que nous avons un runtime d'un algorithme. Nous pouvons comprendre ce que signifie ce terme mathématique par rapport à l'exécution. Et c'est ce que je vais faire. Cette conférence passe juste en revue du matériel de mise à jour afin que lorsque nous le frapperons plus tard dans le cours, vous comprendrez cela à un niveau de base, et vous pouvez en quelque sorte élargir vos connaissances un peu plus facilement. La première chose dont on veut parler est quelque chose qui est utilisé en informatique, mais pas beaucoup dans d'autres endroits. Et c'est l'idée du journal. Donc ici, c'est référencé, ou la nomenclature pour est comme ça. C' est basé sur le journal, quelque chose comme disons qu'il est basé sur la variable ici ou un nombre est égal à un autre nombre. Donc, par exemple, mettons huit juste là, et donc c'est une fonction de journal. Maintenant, qu'est-ce qu'une fonction de journal ? Eh bien, ce qu'il est court, c'est quelque chose connu sous le nom de fonction rythmique log et une fonction rythmique log est la rencontre inverse, l'inverse d'une fonction exponentielle. Donc, un journal est l'inverse d'un exponentiel. Maintenant, qu'est-ce qu'une fonction exponentielle ? Disons que nous l'avons suivi au fil du temps. Nous avons suivi la croissance de ces deux fonctions au fil du temps. Une fonction exponentielle va un peu quelque chose comme ça, où vous allez droit dans l'air signifie parce qu'après chaque itération, le changement se développe. Ainsi, par exemple, peut-être de 0 à 1, il a changé de 1 à 2. Peut-être que ça a changé par deux de 2 à 3. Peut-être que ça a changé par quatre, puis huit, puis 16 puis 32 64. Et il continue d'aller de plus en plus haut et de plus en plus jusqu'à ce que vous faites changer vos milliards ou des billions de numéros mobiles par le suivant. C' est donc une fonction exponentielle. C' est assez mauvais en informatique. Si vous parlez de temps d'exécution parce que cela signifie que plus vous y mettez de choses, cela monte juste à l'infini de combien de temps va prendre Now Une fonction de journal est l' inverse de cela. C' est le contraire, et quel serait le contraire ? Eh bien, c'est simple. C' est si tu prends ça et que tu sais exactement le contraire, alors on va comme ça à la place. Donc ce que c' est, c'est que ça va avoir un gros changement au début. Mais avec le temps, le changement entre les chiffres va devenir de moins en moins avec le temps. Donc, là où celui-ci monte presque en ligne verticale droite, celui-ci va presque dans une ligne horizontale droite. C' est bien parce que cela signifie que plus nous mettons de choses dans notre programme, c'est presque comme si l'exécution ne changeait pas du tout. Il devient de moins en moins jusqu'à ce que nous aimions cette ligne horizontale. Et c'est pourquoi les fonctions de journal sont importantes car elles sont l'inverse de l'exponentiel. Et il y a quelques algorithmes sont exécutés dans ce genre de temps, donc c'est le côté théorique de celui-ci. Jetons un coup d'oeil à quelques exemples, alors regardons d'abord. L' équation de ce log de X est égale à notre log basé X de pourquoi est égal à Let's Go b et qui, son tour, va dans la fonction exponentielle. Donc, c'est un journal avec ma fonction. C' est la fonction exponentielle et la fonction exponentielle est x de B égal. Pourquoi ? Ok, donc nous allons faire quelques chiffres ici pour qu'on sorte de variables abstraites et bizarres et qu'on comprenne vraiment un peu mieux ça. Donc, si on prend deux au B et qu'il est égal à huit, alors qu'est-ce que ça veut dire ? Eh bien, cela signifie que si nous prenons deux pour le quelque chose et si, par exemple, ce que nous disons ici est, par exemple, à celui qui est égal à 22 pour les deux égal à quatre. Et c'est parce qu'il est juste trop fois pour vous prendre 22 fois deux à trois est égal à huit. Et ce n'est que deux fois. Deux fois deux que vous prenez pour multiplié par lui-même trois fois cela équivaut à huit, et ainsi de suite et ainsi de suite. Nous disons donc qu'il y a un nombre qui existe de telle sorte qu'il est égal à huit. Eh bien, ici, on a juste compris ça. C' est deux contre trois, c'est huit. Donc, si nous avons branché trois pour B, nous devons aux trois égaux huit. Ce côté est égal à huit. Ça cycles a. C'est une expression correcte. Donc ici, B est trois. Eh bien, quoi ça nous aide ? Qu' est-ce que ça nous dit ? Eh bien, si nous transformons cela en une fonction de journal, nous pouvons en obtenir un peu d'informations. Donc, si on obtient un journal, va brancher notre valeur X, notre X ici. Donc, c'est une longue base pour. Et maintenant, allons brancher nos, euh, nos écrivains B ou R Y si longtemps, basés deux sur huit. Qu' est-ce que c'est égal ? Eh bien, nous savons que ça équivaut à trois. Donc, ce que nous pouvons faire avec la fonction rythmique log est que nous pouvons réellement trouver ce nombre plus facile. Nous avons confiné ce soit plus facile. Et c'est important parce qu'avec une fonction rythmique log, nous pouvons brancher les nombres ici et nous pouvons obtenir des nombres sur le côté droit où avec une fonction exponentielle, nous branchons les nombres et à gauche, et nous obtenons des nombres par ici. Donc, cela nous aide parce que maintenant ce que nous pouvons faire est que nous pouvons en quelque sorte regarder la relation de pourquoi une fonction de journal est importante. Disons que nous avons ceci ou parlons d'abord de la base. Alors, genre, pourquoi ? Qu' est-ce qui est longue base à avec longue base 10. La base est juste ce que nous prenons le numéro deux. Donc, par exemple, si nous avons eu tendance à celui qui a tendance à la et a tendance à la trois ou nous aurions est 10 alors 100 puis 1000 et c'est à cause de cela ici tendance à la juive est 10 fois 10. Ainsi est 110 des trois est juste 10 fois 10 fois 10. C' est 10 fois trois, donc c'est juste 1000. Donc, dans cette situation, il serait enregistré en fonction 10 parce que le nombre ici est un 10 et c'est qu'il n'y a aucune signification que vous pouvez faire. Log basé 27 Log Place 98 Log basé 1000 Cela n'a pas vraiment d'importance. Informatique. Nous nous en tenons avec Log, aussi, et nous l'expliquerons un peu plus tard. Mais il se résume à la façon dont les ordinateurs n'ont vraiment qu'un zéro et un avec qui travailler. Donc, ils sont citent deux états séparés ici, et c'est pourquoi nous avons laissé utiliser la base Log à qui a passé sur votre tête. C' est parfaitement bien. Il suffit de comprendre que nous utilisons aussi. Donc, disons que nous avions basé à long terme Disons que nous avons un algorithme qui fonctionne dans le temps du journal. Disons que nous avons une base de longue date, aussi, et c'est la quantité d'informations qui entrent. Disons que c'est une longue base. Deux d'entre nous en ont 64. Alors peut-être que nous avons un compte Facebook et nous exécutons un algorithme sur Facebook qui passe par nos amis. Donc nous avons combien d'amis dans cette situation ? On a 64 amis et combien de temps ça va prendre ? Eh bien, notre équation fonctionne dans le journal, donc on termine les 60 étrangers, et ça va prendre une certaine valeur ici. Et dans cette situation, on peut juste y aller. Qu' est-ce qui va ? Ce qui est à la fin qui est égal à 64 qui sort à peu près deux à la sixième, ce qui est que vous pouvez voir ici. Ça ira 8 16 Donc si on va à la quatrième, ça va être 16 à la 5ème 32 à la 6ème 64, non ? Comme ça. Alors, qu'est-ce que 2 à 6 ? Alors maintenant, nous devons aux six. Et maintenant, nous avons six ici. Donc, dans ce côté droit, ce que nous avons est le runtime. Disons que c'est quelques secondes. Donc maintenant, nous avons un algorithme juste ici. Nous avons une base de bûches. Deux des 64 données équivaut à un temps d'exécution de six secondes. Eh bien, faisons en sorte que ça se passe. Ah, un peu plus dans le côté extrême. Pourquoi longtemps est-il un si bon algorithme ? Pourquoi est-ce si important dans l'informatique ? Eh bien, si nous pouvions obtenir un algorithme qui est comme ça, nous pouvons commencer à voir des choses vraiment, vraiment soignées. Alors allons-y et dégageons un peu d'espace ici et regardons cela un peu plus. Et si on avait un long de deux maintenant ? Je ne sais pas. Un. Doublons ça. Alors 28 Eh bien, ça va égaler sept secondes. Donc nous avons doublé la quantité d'informations qui arrivent, et nous n'avons augmenté qu'une seconde. Nous n'avons changé qu'un peu. Allons encore plus haut. Disons que nous voulons au lieu de doubler ça ou ouais, continuons à doubler. Passons à 56 ici et maintenant nous avons huit secondes donc vous pouvez voir que le changement entre ceux-ci devient de plus en plus grand, mais les secondes ne montent que linéairement. Ils vont voir Lee monter d'une seconde à chaque fois. Extrapolons ça. Disons qu'on en a pris deux pour le je ne sais pas, disons 32e. Et pourquoi est-ce important ? Eh bien, à la 32e. Qu' est-ce qu'à la 32e égale ? Il s'agissait d'un chiffre très, très élevé, et il se trouve que ce chiffre est de 8,000,589,000 ou 589 millions, 934,000 592. Qu' est-ce qui est significatif à ce sujet ? C' est le premier nombre de cette séquence qui est plus grand que la population de la planète . Et si nous avons affaire à Facebook ici, cela signifie que notre algorithme chez Max fonctionnera 33 secondes. Ça n'ira pas loin car on ne peut pas avoir plus d'amis qu'il y a de gens sur la planète. Donc on a eu ça en quelque sorte. Nous avons cet algorithme incroyable ici où peu importe la quantité de données qu'il est. Il va toujours courir 33 secondes ou moins, que ces millisecondes d'air ou ces microsecondes d'air ou d'autres types d'unités de temps. C' est un très grand taux de croissance. Cela signifie que la prochaine version de ce projet serait si nous doublons à nouveau, ce qui équivaudrait à 16 milliards. Nous avons donc un changement d'une seconde passant de huit à 16 milliards, puis une seconde de plus pour passer à 32 milliards. C' est pourquoi les journaux sont importants, c'est à cause de cette relation dont nous avons parlé ici, comment ils ne grandissent pas beaucoup au fil du temps. Et si vous continuez à sortir dans l'infini, ils deviennent presque une ligne horizontale où vous pouvez mettre autant de données que vous le souhaitez et votre algorithme va toujours fonctionner à la même vitesse. C' est donc la fonction rythmique log. C' est très, très sorte de fonction simple une fois que vous le comprenez. Mais c'est encore assez bizarre dans le trou, toute la discussion sur les mathématiques et c'est quelque chose que nous ne voyons pas vraiment trop souvent. C' est la première chose que je voulais couvrir juste avant qu'on y saute. La prochaine chose que je veux couvrir est une autre que beaucoup de gens ont vu, mais ils ne comprennent pas vraiment au niveau de base, et c'est quelque chose connu sous le nom de factoriel 4. Rassembler 1-3 Math : Fonctions Factoriels: Alors, qu'est-ce qu'un factoriel ? Eh bien, un peu ressemblait à quelque chose de basique comme ça. Faux trois et puis un point d'explication ou peut-être 27 un point d'explication. Euh, qu'est-ce qu'il y a exactement ? Est-ce qu'un factoriel signifie ce qu'un factoriel est ? Est juste Si vous le décomposer, c'est quel que soit le nombre est dans la place gauche multiplié par tous les nombres qui suivent. Donc, dans ce cas, le fait que trois factoriel va égaler six. Ça va égaler six, ce qui est une fois 22 fois trois. Donc une fois deux égal 22 fois trois égal à six. Donc trois factoriels équivaut à six. Vous remarquerez quelque chose de très important à ce sujet, c'est que ce taux de croissance est fou. Donc si on a fait un factoriel, ça va juste manger deux factoriels légaux une fois 22 Donc c'est, vous savez, assez similaire au reste des taux de croissance. Trois. Usine beaucoup égale six quatre factoriel. Donc, nous prenons ce six et nous le multiplions par un quatre, qui va être 24. Donc au lieu de seulement une fois deux fois trois, nous avons une fois deux fois trois fois quatre, donc vous pouvez voir que c'est 24 maintenant, cinq factoriels. On va prendre ce numéro, qui est ce nombre multiplié par cinq. Donc on peut juste faire des calculs rapides. Pourquoi tu peux voir qu'on a déjà le point où on va devoir faire comme , euh, en gros, euh, en gros, les maths à la main pour faire avancer ces choses. Et nous sommes seulement au numéro cinq étaient, comme avec les journaux. On pouvait juste continuer à monter et monter et monter sur ce n'était pas trop dur. Six. Eh bien, passons par six. temps en temps, on en a 120 donc ça va être 600. Ça me donne 720 juste là, n' est-ce pas ? Oui. 720 et vous pouvez voir ou 820. Loi n° 7 20 Vous pouvez voir que ce nombre augmente considérablement. Chaque changement devient de plus en plus là où nous avons eu un changement d'un seul ici. Maintenant, nous avons un changement de quatre. Et puis un changement de, hum, ici, nous avons eu un changement de Disons, voyons 18 ici. On a eu un changement de 96 ici. Nous avons eu un changement de 600, vous pouvez voir que cela devient tout juste hors de contrôle. Donc factoriel il quelque chose que nous ne voulons jamais rencontrer là toujours représenté par like et in, ce qui signifie juste n'importe quel nombre. Pouvez-vous brancher là que juste, genre, genre, une sorte de si nous voulons devenir générique, nous pouvons mettre une variable dans le point d'explication, ou nous pouvons mettre un nombre pour obtenir une réponse réelle. Cependant, c'est ce qu'est un factoriel. C' est juste une multiplication de chaque nombre qui le fait donc, comme je l'ai dit, un factoriel d'un sept est juste ou un est sept. Factoriel est juste une fois deux fois trois fois quatre fois cinq fois six fois sept. Rien de trop compliqué à ce sujet. Mais comme je l'ai dit, beaucoup de gens ne voient pas ça, surtout ils peuvent être vus une ou deux fois en cours de mathématiques, mais pas encore. Parfois, nous allons parler factoriel est ce sont de très mauvais algorithmes. Si votre programme finit chez Factorial, ils peuvent prendre comme je l'ai dit, vous pourriez mettre dans un programme qui est peut-être quatre factoriel et ça fonctionnera très vite. Et puis si vous mettez dans un programme qui est, vous savez, 20 usines. Juste, vous savez, 16 autres données qu'il pourrait ne jamais compléter. Tu sais, le temps qu'il faudra pour terminer le soleil pourrait brûler plus vite que ça. Donc c'est une sorte de l'importance d'un factoriel. 5. Recomposeur de math : Expressions Algebraic: Et enfin, je voulais juste revoir une algèbre de base ou des choses que vous pourriez voir dans le cours. Donc, par exemple, nous pourrions voir quelque chose comme ça, qui est N connexion. Alors, qu'est-ce que ça veut dire ? Eh bien, c'est juste une sorte de fonction générique. Il est juste de vous montrer quel taux de croissance ou ce qu'une fonction utilisait dans cette situation. Donc, disons A est égal à la quantité de données, la quantité de données. Donc, si nous avions une fonction qui est comme ça, tout ce que nous disons c'est que nous allons dire que notre entrée est de 700. On ne sait pas si ça va être parce que, tu sais, les programmes sont dynamiques. Ils courent dans des espaces différents. Parfois, une personne peut avoir 20 amis Facebook. Parfois, ils peuvent en avoir 1000. On ne sait pas combien d'amis Facebook vont finir par avoir. C' est pour ça que nous écrivons quelque chose comme ça. C' est presque comme un espace réservé. Ça nous dit ce qu'on va utiliser quand on aura ce numéro. Mais avant qu'on ne sache pas vraiment ce que c'est. C' est un principe de base de l'algèbre, et donc ce que nous pouvons faire quand nous avons une formule comme celle-ci quand nous comprenons l'algorithme, album informatique ou l'utilisation, c'est qu'une fois que nous obtenons un exemple concret, c'est comme l'abstrait. C' est quelque chose que nous ne savons pas encore. On peut brancher cet exemple concret ici, et on peut obtenir un numéro. Donc, dans cette situation, il serait 700 fois log de 700. Et disons que ces bases aériennes à Allons avec quelque chose que nous pouvons réellement calculer dans nos têtes. Disons qu'il est égal à, um, Allons-y avec 16 va aller un 16. Donc ça veut dire que ça va être 16 fois long, basé deux sur 16. Et nous avons appris dans le dernier, c'est juste qu'il sort pour se connecter de quoi ? Ou à la base juste ici de ce qui est égal à 16. Eh bien, deux fois quatre va égaler 16. C' est deux fois deux fois deux fois 22 fois, deux fois deux fois huit fois. Donc, c'est 48 16. Alors maintenant, nous savons que quatre est la réponse à cela, donc nous avons 16 fois pour lesquelles nous sortirons. Teoh quatre fois. Donc ça va être 40, ça va être 64, hein ? Comme ça. Et c'est ce qu'on en aura deux. Je veux dire, ils peuvent être, vous savez, plus compliqués qu'ils pourraient être en carré de bûches au troisième ou en plus pour se déconnecter plus de trois ou quoi que ce soit du genre. Mais comprenez juste que chaque fois que vous avez une fonction comme celle-ci, tout ce que cela signifie est que nous prenons ces deux vont être le même nombre qu'ils sont tous les deux la fin de la variable. Donc ils seront tous les deux exactement le même numéro et où chaque fois qu'on aura un numéro concret , on va le brancher. Je pense que c'est bien. 6. 1-5 notation n-notation: Donc nous avons une bonne compréhension de l'endroit où nous nous dirigeons dans cette unité. Commençons à construire ce processus. Commencez à comprendre cela un peu plus et passez sur quelque chose appelé en notation en notation est juste une façon de regarder comment notre programme fonctionne représenté comme une fonction de dans. Donc c'est important ici. Il est représenté comme une fonction de dans une fonction de fin. Ce que ça veut dire, c'est qu'on va avoir un numéro arbitraire appelé. Donc, par exemple, nous avons ici et ce qui est exactement dans ? Habituellement, il est jugé par le nombre de données traitées par un programme. Donc, fondamentalement, ce qu'est un programme, c'est que vous avez un tas d'entrées ici, donc nous allons appeler ces entrées. Vous êtes un tas de points. Ils viennent à notre programme comme une boîte noire, si vous voulez. Et puis ils ont un tas de sorties juste ici. Et c'est essentiellement comme ça que les programmes fonctionnent. Vous avez un tas d'entrées, elles sont traitées d'une manière ou d'une autre, puis elles sont stockées ou sortantes. Mettez-le d'une autre façon. Donc, ce qui est dans est le nombre d'entrées que nous obtenons combien de fois nous devons l'exécuter et sur chaque processus. Donc, c'est fondamentalement comment, par exemple, dans cette situation, c'est comment les entrées de Maney pourraient être dans le nombre de types de calculs dont nous avons besoin. Et puis combien de sorties sortent pourrait également être dans. Donc, c'est quelque chose qui est assez arbitraire pour qu'il puisse être utilisé sur n'importe quel processus d'exécution du programme, mais cela nous permet quand même de comprendre comment les programmes ont été réagis. Donc, prenons juste un pas en arrière et regardons cela d'une manière un peu plus explicite . Disons que dans cette situation dans égale 100 alors maintenant nous avons effectivement un nombre ici. Et donc si nous avons branché le mental, vous connaissez toutes ces différentes versions ici, disons que ce n'est pas dans l'algorithme et le comparer à un algorithme au carré. Vous pouvez voir que peu importe ce chiffre, ce nombre sera toujours beaucoup, beaucoup plus grand, et dans cette situation, il est beaucoup plus grand, et il est en fait 1000 contre 100. Et la raison pour laquelle nous ne branchons pas explicitement les numéros est que la quantité de données qui sont traitées n'est généralement jamais garantie comme un certain nombre. Par exemple, disons que notre programme entre le nombre d'amis Facebook que vous avez. Donc, notre programme introduit le nombre d'amis Facebook que nous avons. C' est en mettant ces données dans notre boîte. Mais combien d'amis Facebook avez-vous ? Parce que je peux vous dire que je suis mon numéro va être différent de votre numéro. Ton numéro va être différent de beaucoup de gens qui prennent ce cours. Donc, si nous construisons un algorithme pour 250amis spécifiquement, cela ne fonctionnera pas pour la majorité des cas. Donc, ce que nous faisons est de construire des algorithmes qui peuvent prendre une quantité arbitraire de données. Et dans cette situation, c'est exactement ce que nous appelons réellement. Et donc il peut prendre en quantité de données. Et puis une fois qu'il le traite et les sorties, il va sortir en quantité de données. Et donc, avec ceux-ci, ce genre de classification a pu comparer Al Berlin sans jamais comprendre combien de chiffres vont entrer. Et c'est juste parce qu'on regarde des ordres de grandeur ici. On ne regarde pas la différence entre 10 et 9 unités de temps ou quoi que ce soit. Cependant, il ressort que nous regardons en vers au carré. Donc, par exemple, dans cette situation, disons que si nous mettons en quantité d'amis Facebook, cela va prendre du temps au carré . Et maintenant nous comprenons que peut-être si j'avais 10 amis, ça fonctionnerait bien et ne serait que, tu sais, ça sortirait, genre, quoi, 100 ? Mais que se passe-t-il si j'avais un million d'amis, alors quel serait ce chiffre ? Ce serait un nombre absolument énorme, et la différence de calcul serait énorme par rapport à si c'était juste une entrée. Jetons donc une sorte de regard un peu plus en profondeur, et vous pouvez voir qu'il y a un tas de façons différentes que nous pouvons représenter ici, et ceci est un graphique de sa mise à l'échelle dans ici, le temps. Et donc ce que nous essayons de comprendre est comment va à l'échelle dans l'infini ? Donc, la raison pour laquelle nous sommes sur une question importante est parce que, comme il évolue à l'infini, c'est la possibilité de ce que notre programme pourrait entrer. Donc, nous ne regardons pas comment cela va jusqu'à 100 ou 1000 que nous regardons ? Si nous y mettons 1 000 000 de données ou 1 000 000 000 de données, comment va-t-il réagir ? Et ces graphiques racontent l'histoire. Donc ici, nous avons quelque chose qui s'appelle le temps constant, qui est cette parenthèse ou cette colonne Ah, juste ici. Et si le temps constant signifie que si on met en 1110 1 quoi qu'il arrive, ça va toujours courir en même temps, il n'y a pas de fin en jeu. Parce que quoi qu' il arrive, ça va sortir exactement au même moment, alors celui ci-dessus qui est en fait la base de log de in. Tu te souviens quand on a parlé du système binaire ? Nous n'utilisons pas le journal basé sur 10 comme la plupart des mathématiques parce que nous ne traitons pas du système de numéros de dizaines . Ce que nous avons à faire ici, c'est le système à deux numéros. Donc, nous avons utilisé longue base pour et puis ici nous avons la racine carrée de in in in log event dans carré deux D et dans factoriel et vous pouvez voir qu'il y a une grande, grande différence entre ces deux ici et ces deux ici. Et vous pouvez voir que l'angle devient de plus en plus grand et plus grand que cela monte directement à l'infini. Et si vous avez vraiment fait ressortir ça, les deux à l'infini, ça aurait l'air presque tout droit dans les airs. Cette maison aurait l'air d'être, vous savez, toujours à l'angle de 45 degrés. Cette maison aurait l'air d'être, vous savez, Et c'est sur cela que nous essayons de nous concentrer. Voici, quand on les compare, quel point vont-ils être différents au fil du temps ? Par exemple, cela peut ressembler à un très petit changement, mais si nous mettons ces nombres à l'infini, vous commencerez à voir que la différence commence à apparaître. Alors regardons quelques exemples. Ici, nous avons le nombre est zéro, um, um, 10 101,000 en égal 10 1 Donc, dans cette situation, ce que nous avons ici, c'est que nous avons le numéro de la gauche et puis un algorithme qui exécute le temps de fin et je vais les jeter qui exécute en temps carré dans un algorithme qui s'exécute dans le temps de connexion , puis ici est le temps constant. Donc, si nous mettons un seul élément de données, vous remarquerez que ce que nous avons est fondamentalement qu'ils sont tous exactement les mêmes et zéro n' a pas toujours de sens. Donc, le journal est un peu délicat. En ce sens, il sortira un zéro ou indéfini parfois. Mais cela signifie juste qu'il fonctionne en une seule fois, donc tous ces sont exactement les mêmes. Maintenant, nous commençons à passer à l'échelle. Voyez-vous, ils commencent tous exactement au même endroit. Nous commençons à passer un à notre 10. Donc, vous voyez, ils commencent tous ici et maintenant on passe à 10, ce qui est juste là. Vous commencerez à voir que les différences apparaissent, va à seulement 10 au carré, arrive au sommet de ce graphique à 100. Donc il y a déjà une grande différence ici. Et puis fin Log de fin atteint environ 33. Vous pouvez voir que c'est juste là maintenant, si nous montons une unité Decca de plus à droite, disons que notre numéro est 100. Il va jusqu'à 100 en carré va jusqu'à 10.000 ce qui est, si vous mettez 100 de ceux-ci et les empiler les uns sur les autres. C' est comme ça que le nombre est grand. C' est là que c'est là-haut. Donc c'est l'un d'entre eux et vous devez en mettre 100 de plus. Donc ça passerait par mon plafond et ensuite dans le ciel, comme deux ou trois histoires comparées aux 100 par ici, ce qui est, vous savez, juste ici. Vous pourriez même grossir dans ça en 1000. Et ce que nous avons, c'est au lieu du 1000 ici, qui nous donne donc si nous nous contentons d'augmenter cette échelle au fil du temps, serait probablement quelque part en posant tous les grands ici. Celui-ci est un million, qui est si vous en preniez 1000 et les empilez l'un sur l'autre et continuez à monter dans le ciel. Donc, c'est comme un bâtiment de 25 étages. Par rapport à un taux de 25 étages, comme ici , peut-être un peu plus , loin dans cette direction, par rapport à un bâtiment de 25 étages. C' est la différence. Et ce nombre va de plus en plus et de plus en plus, surtout si vous obtenez un très grand nombre, comme un 1.000.000 car alors celui-ci sera un 1.000.000 alors celui-ci sera quelque part , comme un couple d'un trillion ou peut-être 100 billions quelque part autour de cette zone. Et puis ce que vous avez ici, c'est que vous avez un chiffre différent, et vous remarquez que ces deux-là ont l'air très, très semblables. Mais quand vous commencez à vous lever en très grand nombre, la différence commence là vraiment sortir. Donc vous verrez ici que 10 000 contre 664 et puis un million contre 9909 165. Il y a très, très grande différence. Et donc c'est tout ce que nous essayons de faire avec N, c' est que nous regardons les équations essayaient de savoir comme et va à l'infini . Quelle équation est la meilleure ? Et si nous avons une équation qui est en vers carré, une équation qui est dans, nous comprenons que celle-ci va être nettement meilleure, plus efficace que celle-ci, et donc je voulais juste y aller si vous ne comprenait pas ce que le journal était vraiment rapide. Quel est le journal Et c'est, par exemple, nous avons un graphique exponentiel. C' est comme au carré juste ici. Donc ça commence zéro. Et puis au fil du temps, son taux de changement augmente mawr et mawr et plus encore jusqu'à ce qu'il soit presque une ligne droite. Donc, ici, c'est au carré. Ce qu'est un graphique de droit, c'est exactement le contraire de ça. Donc, il arrive très vite, puis il passe et il devient presque une ligne droite au fil du temps. Et, vous savez, nous avons nos haches juste ici. La même chose pour ici. Nous avons quelques axes, mais fondamentalement la raison en est que log est l'inverse d'un exponentiel. Donc, au fil du temps, où ce le taux de changement. Donc, ces pente d'un k combien il va d'ici à ici contre ici pour entendre cela va devenir de plus en plus grand et plus grand jusqu'à ce qu'il va presque directement dans l'air tandis que celui-ci ici devient de plus en plus petit et de plus en plus petit le temps. Donc ça veut dire que si on met celui-ci à, vous savez, 1 000 000 000 à chaque fois qu'il augmente, ce nombre pourrait augmenter de 1 000 000 ou un trillion. Eh bien, dans ce cas, une fois que nous aurons vraiment, vraiment grand nombre, nous pourrions passer de 8.1 à 8.0 05 Vous savez, quelque chose comme ça, où le changement va être extrêmement minuscule, et c'est comme ça que le journal fonctionne. Pensez-y juste comme l'inverse d'une fonction exponentielle et vous remarquerez qu'il y a en fait une petite sorte de chose soignée qui sort de. Cette compréhension est que si nous revenons au graphique ici, vous pouvez remarquer que nous avons un journal de fin et en temps constant et parce que celui-ci au fil du temps devient presque une ligne droite où nous ne bougeons que, vous savez, peut-être 10,1 décimal. Tout le monde sur connexion et minuteur constant en fait généralement un dans la même parce que, comme je l'ai dit là-bas, leur taux de changement ralentit là où ces angles ne changent pas vraiment tout. Où dans le contraire se produit avec en carré lorsque nous allons de plus en plus loin et de plus en plus, l'angle commence à changer en un point où c'est presque un changement de 90 degrés parce qu'il va tout droit dans l'air. Donc je voulais juste expliquer que si vous ne compreniez pas ce que signifiait un journal, c'est l'inverse d'un exponentiel. Et donc, quand nous allons à l'infini, nous devons penser à un autre, une idée différente. Et c'est le fait que si vous remarquez et que nous ne parlions pas, quelle est la différence entre deux en vers ? Et c'est parce que la constante le nombre à l'avant n'a pas d'importance. Pourquoi ça n'a pas d'importance ? Jetons un coup d'oeil ici. Donc, ce que nous avons c'est que nous avons au carré et nous devons au carré. Et à mesure que vous devenez de plus en plus grand, la différence entre ces deux commence à diminuer, où le nombre de changements n'est pas aussi important qu'avant. Et tout ça tombe sur les fractions de Teoh et, vous savez, une sorte de chiffres comme ça. Mais ce que nous essayons de regarder ici, c'est que nous comparons à des choses qui n' essayaient pas de comparer est un carré de fin adverse et au carré. Mieux parce que nous savons que ces deux sont intrinsèquement probablement assez mauvais. Ce que nous essayons de comparer, c'est que c'est au carré Mieux contre une fin. Donc, dans cette situation, vous remarquerez que peu importe le nombre que nous avons mis en face d'ici, il va toujours être beaucoup plus grand que ce chiffre ici. Et donc peu importe quelle constante nous avons devant Quand elle va à l'infini, la constante n'a pas d'importance, et nous ne regardons que la variable elle-même, même si je sais que c'est un peu déroutant. Même si nous avons 1 000 000 en vers au carré, au carré, ce sera toujours le pire scénario. Et comme je l'ai dit, c'est un peu déroutant au début juste pour vraiment vous envelopper la tête. Mais tout se résume à l'infini, et l'infini est un nombre que vous ne pouvez jamais atteindre à cause de la taille qu'il est une fois que nous atteignons en allant à l'infini. Une fois que nous atteignons près de l'infini, la constante ne signifiera rien parce que ce nombre va encore dépasser un 1.000.000.000.000 un trillion de fois à un moment donné. Donc, vous devez vraiment penser théorique ici, mais tout se résume juste à cette règle simple. Si vous savez, si vous ne pouvez pas contourner la théorie, pensez à cette règle civile. S' il y a un numéro devant, ignorez-le. Cela n'a pas d'importance dans nos comparaisons. Alors maintenant, faisons un exemple ici. Allons nous amuser un peu. Et nous allons en quelque sorte créer un exemple où nous pouvons réellement voir cela dans un aspect du monde réel . Donc, si chaque cycle d'un programme prend 0,1 seconde Donc, dans cette situation, ce que nous regardons est notre chaque cycle d'un programme alors en est que vous savez, quand nous avons fait cette boîte sont dans cette situation est les cycles et le côté ou une sorte de chose à l'intérieur de cette boîte, c'est notre dedans. Donc, chaque cycle d'un programme prend 0,1 seconde. Combien de temps le programme en cours d'exécution dans la connexion sera-t-il exécuté qu'un programme en cours d'exécution au carré ? Si 1000 morceaux de données arrivent à travers et donc c'est vraiment là où il arrive où vous pouvez vraiment voir la différence. Alors passons à travers ça. Nous avons 1000 données qui arrivent. C' est N connexion, qui équivaut à remplacer nos extrémités par ce qui est dans a été donné taux ici. Donc, c'est 1000 pièces de données, qui est ce qui va prendre 1000 cycles de chaussettes. Donc, dans cette situation, notre in est égal à 1000. Alors maintenant, on peut faire les calculs derrière ça. Nous disons que ça va prendre 1000 fois log de 1000 et ça va nous donner 3000 fois 30000.1 ce qui à son tour nous donne 30 secondes. Maintenant, comparons ça à Squared, qui va être 1000 à la seconde, équivaut à un million de fois 0,1 seconde parce que chaque cycle d'horloge prend 0,1 2e Donc c'est ce que nous multiplions à la fin là. Et ce que nous obtenons, c'est deux heures et 46 minutes. Donc, parce que ce programme l'exécute au carré au lieu de se connecter, connectez-vous. Et revenons à notre graphique ici et jetons un coup d'oeil. Rappelez-vous, ces deux-là étaient assez proches l'un de l'autre, mais ils ne le sont pas. Revenons donc à notre graphique notre exemple ici parce qu'il a couru au carré. Ça va prendre deux heures et 46 minutes, ou deux heures, 45 minutes de plus que celui-ci ici. Et portons cela à un nombre encore plus grand. Disons qu'il a dans le journal de 25 000 US il est égal à 25 000 ici. Donc, dans est égal à 25 000. Maintenant, vous allez vraiment commencer à voir la différence. Donc, dans cette situation dans Logan est égal à 25 000 fois log de 25 000 qui va aigle quelque part autour de 109 948 fois 0,1 Donc ça va être égal à droite environ 18 minutes et 32 secondes. Mais jetons un oeil à la fin de carré. Donc cette liste, vous savez, elle a l'air longue et regarde loin plus de 30 secondes. Nous remarquons également que c'est bien moins que 24 000 données en moins 300,7 au carré. Si nous allons à la fin au carré, c'est 25 000 carrés, qui Eagles 625 millions de fois 0,1 qui aigles six millions, 250 000 secondes, ce qui est 72 jours. Donc, vous pouvez voir que ce nombre commence à vraiment décoller ici. Et nous ne sommes qu'à 25 000 données. Il ya combien de personnes sur Facebook en ce moment, Et leurs données il ya des algorithmes doivent probablement fonctionner avec combien de personnes sont sur Facebook. Imaginez donc que si vous vouliez dire que, à mon avis, un milliard de personnes y participent actuellement grâce à ce programme, il faudrait que cela atteigne les milliards d' années qu'il ne finisse jamais. Et c'est là que vous pouvez voir en quelque sorte la différence des extrémités. Et donc fondamentalement, tout cela est juste d'essayer de se résumer à quelques faits clés. La fin n'est que quatre comparaisons. Donc, c'est une sorte de notre premier fait est dans est juste de comparer deux programmes. C' est pour vérifier le temps d'exécution de deux programmes. Ce n'est pas pour une utilisation pratique, ce qui signifie que nous ne allons pas courir dans l'algorithme sur un, vous savez, un programme et voir s'il peut retourner des choses dans, vous savez, 20 secondes ou quelque chose comme ça. Nous ne pouvons pas le faire à l'intérieur. Et la raison en est juste une norme est une façon que nous pouvons regarder un programme indépendant si l'ordinateur est rapide ou lent, où la connexion Internet est plus rapide, lente Nous pouvons le comparer avec un autre programme, comme au carré ou dans Login, et nous pourrions commencer à comprendre quels algorithmes sont les meilleurs et ceux qui ne sont pas l'échelle correctement. Nous devons aussi comprendre que ce n'est pas mal d'avoir un plus grand nombre. Parfois, c'est inévitable. Alors ne pensez pas que vous savez, l'idée d'une informatique est de ne plus jamais retrouver au carré. Ce n'est pas censé l'utiliser à des fins pratiques que nous essayons de faire, c'est que nous essayons résoudre théoriquement différents problèmes. Et donc, par exemple, toutes les épées de comparaison ne peuvent pas faire mieux que dans la connexion. Donc nous revenons à ce tableau juste ici. Vous verrez que tous les types de comparaison tombent dans cette ligne, donc ils sont là quelque part de ce côté. Ils ne sont pas dans le reste de ce plus facile, graphes plus rapides et les sortes de comparaison sont comment vous, genre, trier un tas de nombres donc même comme une utilisation quotidienne, sorte d'algorithmes tombent toujours dans la connexion. outre, multiples tombent tout en comparant afin de comprendre dans cette leçon que les multiples n'ont pas d'importance et ensuite exponentielle est peut être vraiment, vraiment dangereux au fil du temps. Et nos cerveaux n'ont pas vraiment la capacité de comprendre les différences. Et ça te montre en quelque sorte là où nous ne penserions pas que ce serait 72 jours vers 18 minutes. Juste parce que nous sommes passés de ce graphique à ce graphique, mais les heures supplémentaires exponentielles sont vraiment, vraiment, vraiment, vraiment, très fortes. 7. Notation de 1-6 grandes notations: Donc maintenant, nous avons une bonne compréhension de in et comment cela fonctionne exactement, et cela est lié à notre analyse des algorithmes. On peut commencer à ajouter à ça. Donc, nous savons que dans est une façon de classer à quelle vitesse dans les courses extérieures, compte tenu d'un certain nombre dans Combien de temps cela prendra-t-il à l'égard de ce nombre ? Alors ça va prendre juste à temps ? Donc si c'était le cas, 1000 va égaler 1000 ou est-ce que ça va prendre quelque chose comme dans les temps carrés où quand il est 1000 ça va égaler ? UM, un million, et c'est une sorte de classification vraiment importante. Cependant, les programmes ne sont pas si faciles. Ils ne courent pas juste à une heure exacte tout le temps. Beaucoup de fois, ils ont abondent. Donc, par exemple, peut-être que vous ne seriez pas chargé. Il va fonctionner et au carré, mais il exécute une fin, et dans celui-ci, et dans celui-ci, vous savez qu'il exporte en log in et donc nous devons être en mesure de regarder cela, et nous devons regarder le programme et donner une classification sur le programme dans son ensemble. Donc, par exemple, ce programme, nous devrions toujours regarder le pire des cas est toujours aller pieds. Dans le pire des cas, prendre au carré, cependant, à certaines étapes va courir plus vite. Et à cause de cela, nous avons en fait ce genre de système ici, qui va classer les limites de notre notation. Alors passons en quelque sorte ça et jetons un coup d'oeil à ça. On les appelle « omicron ». Vous avez disparu au milieu, puis oméga, et ceci est en minuscule de méga ici et vous pouvez voir qu'ils sont alphabet grec. Mais nous avons juste beaucoup de fois dans le grec de Matthieu parce que l'alphabet devient confus. Donc, nous utilisons orteil grec, sorte de représenter symboliquement les choses, et dans ce cas, chacun de ces symboles grecs représente symboliquement abondent. Donc, ce que vous avez ici est de dessiner, par exemple, une liaison juste au milieu ici et là-haut est plus rapide, donc nous allons dire ici va être plus rapide et ci-dessous va être plus lent. Donc notre première notation est petite. Oh, et vous pouvez voir qu'on n'aime pas dire l'omicron comme une grosse notation d'omicron qui prend juste beaucoup. Donc on dit juste petit Oh, grand oh, et si petit Oh, juste là. Cela signifie juste que cela va être plus rapide, ce qui signifie que le programme sera toujours plus rapide que ce lié. Donc, par exemple, si notre Baron était au carré juste ici, si nous avions peu, oh, de carré juste ici, nous verrions que cela signifie que ça ne va jamais toucher et carré. En fait, ça va toujours être plus rapide qu'au carré, donc ça va toujours être juste au-dessus de cette ligne, mais plus rapide qu'au carré. Et donc ce qu'on peut faire, c'est qu'on peut utiliser ça pour comprendre le rebond. Donc la prochaine que nous avons c'est qu'on a grand Oh, et Big O veut dire que ça va être plus rapide, ton égal à. Donc ça veut dire que ça va toucher cette ligne ou être plus rapide, donc ça va être au pire, et c'est quelque chose qui est très important ici. Ça veut dire au pire, ça va être au carré. Nous avons ensuite des données, ce qui veut dire qu'elles ne toucheront pas l'un ou l'autre de ces deux. Ça ne va pas tomber bas. Ça ne va pas aller haut. Ce qui va se passer est juste sur cette ligne. Donc, peu importe ce que ça va être au carré, ça va être le long de cette ligne quelque part. Et puis le prochain que nous avons est plus lent ou égal à ce que nous avons fait. Celui-ci est Omega, et celui-ci est plus lent égal à donc il touche cette ligne et c'est toujours plus lent. Donc, tu sais, on est en troisième position dans la quatrième, ici, on a peut-être comme dans. Donc c'est toujours plus lent que ça, ou égal à n carré. Donc, au mieux, alors celui-ci est au mieux, il va courir à ceci si vous mettez ceci. Donc, par exemple, si nous avons droit de n carré, comme si couper un peu juste là mais de dans Squared comme alors nous comprenons que ce programme fonctionnera toujours, ou au mieux il fonctionnera est dans quadrillé, ce qui signifie qu'il peut courir pire que cela, et puis en dessous que nous avons plus lent que ce qui signifie qu'il sera toujours pire que dans les carrés. Peu jamais toucher et carré, mais ça va courir pire qu'au carré et pourquoi est-ce important ? Pourquoi voulons-nous nous concentrer sur celui-ci de tout ça ? Et c'est parce que Big O dicte le pire scénario et nous sommes préoccupés par le pire scénario parce que compte tenu de la probabilité et des statistiques, programme pourrait toucher le pire scénario à un moment donné et nous voulons savoir, sans aucun doute, quel est le pire scénario ? C' est pourquoi nous utilisons le grand Oh, c'est voir au pire. Qu' est-ce que ça va être ? Et vous pouvez voir que je vais remonter le tableau ici. Quand nous avons cette idée, quand nous aurons la possibilité de dire : Quel sera notre programme ? On peut commencer à remplir cette fin. Donc si nous avons, par exemple, euh, peut-être un grand nombre d'entre nous. Nous comprenons qu'au pire, il va être dedans pour qu'il puisse être dedans. Mais il pourrait aussi être quelque chose de plus grand que dans. Donc, nous pouvons préparer tous nos diagrammes de temps et croquis et tout ce genre de choses, partant de l'hypothèse que ça ne passera jamais de ce côté de la ligne. Il va toujours aller de ce côté, et c'est vraiment puissant parce que maintenant nous pouvons commencer à comparer les programmes, pires cas, et nous pouvons commencer à voir ce qui peut être quand un programme met à l'échelle l'par exemple, Si nous avions un connectez-vous au programme par rapport à un programme en nous pourrions voir que lorsque celui-ci évolue, cours, nous pourrions voir que lorsque celui-ci évolue,ce sera pire que celui-ci. Donc, prenons un peu, euh, disons ça un peu et on peut voir pourquoi certains d'entre eux sont dénués de sens . Donc nous avons un programme qui fonctionne ce petit oh en carré, ce qui signifie qu'il est plus rapide qu'en carré. Donc ça veut dire que ça pourrait être n'importe où, du carré jusqu'à fondamentalement comme nous juste plus vite que ça. Donc ça ne va pas être au carré, mais ça pourrait être plus rapide qu'au carré. Et celui-là, c'est un peu comme grand Oh, mais le truc c'est que nous n'aimons pas la chose qu'on nous donne, donc c'est un peu trop. On ne peut pas toucher à ça, donc ça le rend un peu confus. Ça nous donne un lien, mais ça ne le rend pas facile. pour que nous puissions voir. On ne peut pas immédiatement regarder ça et y aller, Oh, ça va courir à temps. On peut le regarder. Nous devons regarder ça et être comme, Oh, ça va courir plus vite que la fin. Mais nous ne savons pas vraiment où, et ça ne nous donne pas vraiment beaucoup de marge de manœuvre. Et puis nous avons notre grosse notation O et c'est ce que nous venons d'examiner c'est que nous pouvons regarder ça et nous serons comme, Oh, au pire, ça va courir longtemps à Fada serait génial si nous pouvions toujours utiliser des données. Qu' est-ce que le ? Ceci est égal à ou parfois est utilisé comme la moyenne, mais la plupart du temps cela signifie égal à la fin, Donc ce serait génial. Mais le problème est que les programmes ne fonctionnent pas toujours exactement le long de la ligne. Parfois, ils peuvent courir, vous savez, peut-être qu'à une partie, ça a une fin. Mais à un moment donné, il s'exécute, connectez-vous et il va n'importe où entre les deux. Ces données sont tout simplement trop spécifiques pour nous, toujours vraiment comme. Et puis ils sont à peu près dénués de sens parce qu'ils ne nous donnent pas beaucoup d'informations . Pensez-y, celui-là, qui est Oméga So Oméga en carré. Ça veut dire que ça va être plus lent ou égal à l'oméga carré, ce qui est comme si tu disais que notre programme va être exécuté au carré ou ça va être plus lent. Comment sommes-nous censés planifier avec ça à l'esprit ? Parce que plus lent pourrait aller dans l'infini. Cela pourrait être aussi lent que possible, et nous ne serions jamais en mesure de nous y préparer parce que nous n'aurions jamais abonder. Ce serait comme, Ok, donc ça va juste courir à la vitesse que ça pourrait prendre au carré. Ça pourrait prendre en factoriel. Ça pourrait mettre fin à l'infini. Cela ne nous aide pas à analyser le programme parce qu'il y a un côté infini. Et exactement la même idée avec le petit Omega ici aussi est que ça va dans l'infini du mauvais côté, ce qui ne nous aide pas. petit Omega ici aussi est que ça va dans l'infini du mauvais côté, Donc ça nous aide parce que le mauvais côté est de me laisser effacer une partie de cela ici et de faire un peu plus de place. Donc ça nous aide parce que le mauvais côté. Disons qu'ici, c'est à l'infini. Ça nous donne un lien, donc tout ce qui va être au pire ici. Mais ça pourrait être mieux et on ne se soucie pas que ça revienne et qu'il fonctionne aussi constant, c'est bon. C' est parfaitement bien. Ça veut dire que nos programmes sur une super chemise, mais nous pouvons planifier pour ça. Ça veut juste dire que nos programmes fonctionnent, vous savez, s'exécutent plus vite que prévu. Donc, ce qu'on pourrait faire, c'est juste planifier le pire scénario. Cependant, si vous allez de l'autre côté de cette ligne, vous ne pouvez pas planifier l'infini. C' est pourquoi Big Oh est si important est que c'est le plus utile de toutes ces notations . Cela nous donne un pire scénario, et donc il est en quelque sorte de prendre un exemple de la façon dont nous pourrions appliquer cela à un problème particulier. Donc, généralement, ce que vous faites toujours est que vous utilisez le pire scénario, ce qui signifie à quel moment dans le programme ne sera pas le plus inefficace. Donc, ici, par exemple, disons que nous avions un grand o de au carré. On a eu un gros, euh dans un gros O d'in, puis un grand O de Constant Time, et donc ça ici sont super. Mais le truc, est que quoi qu'il arrive, nous serons toujours bloqués par ce type ici. Et c'est parce que notre taux de temps de chargement ici est en carré, ce qui signifie que ce programme va l'exécuter en carré plus en log in plus en O 2, le premier, le premier, ce qui rend le garder en quelque sorte constant. On y va plus un. Et vous pourriez penser, pourquoi je fais ça ? Et c'est parce que vous pouvez réellement ajouter chaque partie des étapes ensemble. Donc, parce que tu fais cette partie, alors tu fais cette partie. Ensuite, vous faites cette partie, puis vous faites cette partie afin que vous puissiez réellement les ajouter tous ensemble. Rappelez-vous ce que nous faisons à l'avance lorsque nous parlons de la façon dont nous essayons de regarder un programme au fur et à mesure qu'il va à l'infini. Donc, si nous regardons ce nombre, lequel d'entre eux va devancer les autres quand nous irons à l'infini ? Eh bien, par exemple, mettons-le à 1 000 000. Quel est l'importance d'un million, qui est dans le droit un sera verset un million sera verset. Peut-être que quelque part autour de trois millions pour être le verset un quadrillion ou peut-être un trillion de 60 assis était un et 12 zéros. Celui-ci va être beaucoup plus grand. Ceux-ci vont être une portion plus petite et plus petite du nombre car il va à l'infini jusqu' au point où ils iront près de zéro en tant que signification. Donc vous commencerez à avoir, vous savez, un numéro Google, soit 100 zéros plus peut-être, comme huit millions par ici, quelque chose comme ça. Et cela signifie que cette partie ici est complètement insignifiante à ce stade. Donc, ce que nous faisons est d'éliminer les inférieurs, et le temps d'exécution de ce programme est au carré. Et donc nous allons juste une sorte de ciment qui avec un autre exemple ici, disons que nous avions Big O. Donc nous avons eu un grand O de dans carré grand O de In Squared Big O de Petroleos ici Vigo de In Squared à nouveau. Et voyons maintenant nous avons un grand O de la fin de la troisième. Et maintenant ce que nous avons ici est que nous avons n carré plus dans carré plus dans carré plus dans le troisième, et donc nous pouvons réellement les combiner à trois et carré plus dans le troisième. Et rappelez-vous maintenant ce dont nous avons parlé dans la dernière conférence sur l'in notation. Ça n'a pas d'importance. La constante ici n'a pas d'importance. Parce que lorsque nous entrons dans l'infini, cela devient de moins en moins significatif. Jusqu' à ce que nous atteignions un nombre suffisamment élevé, il devient fondamentalement zéro pour que nous puissions le franchir. Et maintenant, nous avons au carré plus dans le troisième. Et puis, bien sûr, celui-ci va décoller beaucoup plus haut que l'autre programme Un mal finit par être juste en troisième position. Et maintenant, comme ce sont toutes des notations que nous connaissons dans le pire des cas, notre programme va l'exécuter en troisième, ce que nous sommes maintenant. Nous avons cette limite en troisième et l'infini du temps de course va de cette façon, et maintenant nous pouvons planifier ça au pire des cas, nous allons avoir dans le troisième. Et nous pouvons tout planifier jusqu'au temps constant, parce que maintenant tout ce que nous avons est juste lié ici. Nous comprenons que, vous savez, si nous mettons 1 000 000 de données, ça pourrait ne pas marcher. Peut-être que nous pouvons chercher à apporter ça, mais ça nous donne quelque part pour commencer. Il nous donne quelque part pour le comparer aux autres. C' est donc une grosse notation O. Très important. Et au fil du temps, tu vas commencer. Fondamentalement, cela deviendra une seconde nature. Juste être capable de regarder ça. Tu ne verras jamais ces autres. Trop souvent. Tu verras celui-là. Parfois. S' il est dit qu'un certain point d'un programme est égal à cette durée d'exécution, alors vous verrez celui-ci. Mais à part cette thèse, vous ne verrez probablement jamais et vous ne verrez probablement jamais le petit Omar Khan à. Donc ces notations ici les ont en quelque sorte mémorisées, comprennent ce qu'elles signifient, et vous devriez être bon d'y aller. Vous commencerez à comprendre beaucoup plus de documents d'informatique. 8. Exemple de 1-7 Real World grand grand O: ce n'est pas le cas. Nous avons appris beaucoup de théorie. Allons de l'avant, prenons un revers et passons en revue une analyse du code du monde réel. Maintenant, je ne vais pas utiliser de code complexe ou n'importe quel type de code que vous devez connaître ici. C' est un pseudo code, et je vais l'expliquer. Chaque étape du chemin est si vous n'avez jamais touché au code avant parce que c'est comme ça que je veux expliquer. Tout ce genre, bien sûr, c'est qu'on regarde la théorie derrière tout. Pas le code, cependant, l'appliquer à quelque chose de Riel World peut aider, vous savez, sorte, à comprendre certains des concepts, et c'est pourquoi nous le faisons. Alors regardons notre premier morceau de code. Je vais aller de l'avant et traverser ça ici. Donc, ce que nous avons c'est que nous avons dit que je l'ai écrit en pseudo. Ce genre de lit juste de la langue, quelque chose que vous pouvez regarder et comprendre ce qui se passe. Donc, il est indiqué pour chaque donnée dans la liste de données, donc nous allons créer une liste de données ici dans une deuxième impression. Les données à l'écran OK sont suffisantes. Disons que nous entrons dans ce morceau de données une liste ici qui est peut-être de trois à dix et ensuite serait juste aller buffle. Donc, c'est trois entiers et une chaîne. C' est comme ça qu'il serait techniquement classé. Mais on ne va même pas regarder ça. Ce sont quatre éléments de données. Et donc ce que nous disons, c'est que pour chaque donnée, donc pour chaque donnée de notre liste, nous allons, hum, imprimer ces données à l'écran. Alors, dans notre situation ici, qu'est-ce qui se passe ? Eh bien, dans cette situation ici à égalité, le 1234 Parce que nous avons quatre données. Donc, dans cette situation dans égale à quatre Alors maintenant, voyons ce que l'exécution de cela serait. Donc, nous avons pour chaque morceau de données, puis nous avons imprimé à l'écran. Alors d'accord, allons dans la liste. Ici. Allons là-bas. Premier élément de données. Donc, notre premier élément de données est trois. Nous prenons trois de notre taux de documents ici, donc c'est le numéro zéro. Un tableau, ou, si vous voulez y penser, est 1234 Ordinateurs vont généralement avec 0123 juste comme ils fonctionnent. Donc on va récupérer notre premier morceau de données ici et ensuite on va imprimer à l' écran. Donc nous prenons nos trois imprimés à l'écran. Donc, c'est un moteur d'exécution. Donc sont le temps d'exécution en ce moment est un. Et maintenant, on va prendre la main parce qu'on va descendre la liste. Donc, pour chaque élément de données, nous avons touché celui-là. Alors maintenant, nous passons à celui-ci. Donc maintenant, nous en prenons deux et nous avons imprimé à l'écran. Donc maintenant notre écran ressemble à ceci. Et c'est donc un temps d'exécution supplémentaire juste là. C' est un temps de course. Et maintenant, nous imprimons notre prochain morceau de données, qui est 10. Donc maintenant, nous avons 32 10. C' est un temps d'exécution supplémentaire juste là. Et maintenant, nous imprimons le buffle, qui serait de 3 à 10 buffles. Comme ça Et c'est un temps d'exécution supplémentaire parce que tout ce que nous faisons c'est que nous saisissons le morceau de données et nous l'imprimons. n'y a pas de processus de pensée spécial en train de saisir, d'imprimer, saisir, d'imprimer, saisir, d'imprimer. Et maintenant, si nous ajoutons tout cela, nous verrons qu'il sort à un plus un plus un plus un plus un, qui équivaut à quatre et donc le temps d'exécution dans cette situation est quatre et vous verrez que notre runtime est égal à la quantité de fin ici. Et si nous pouvons penser à cela théoriquement pendant une seconde, si nous avions un million de données ici, il n'y aurait pas, à aucun moment le programme où nous aurions jamais à toucher plus de 1 000 000 de données . Donc, peu importe ce que nous faisons ici est le temps d'exécution va être quelle que soit notre fin, ce qui signifie que ce que nous avons ici est un temps d'exécution dans cette situation particulière, nous pourrions effectivement utiliser Fada comme dans parce qu'il est effectivement égal à la fin. Il n'y a pas de place à l'intérieur, mais nous allons aller de l'avant et dire que c'est pire, parce que c'est la notation que nous aimons utiliser. place à l'intérieur, mais nous allons aller de l'avant et dire que c'est pire, Donc, c'est un exemple d'une boucle dans laquelle cela est appelé une boucle for. Ainsi, quatre boucles sont typiquement, par exemple, four se termine dans une situation. Allons à un problème un peu plus complexe ici. Donc, permettez-moi de décomposer celui-ci aussi Ce que nous avons ici, c'est qu'il est dit pour chaque donnée dans une liste de données. Donc, au lieu de l'appeler papa et là-bas, chaque morceau de données d'une liste va être en vérification si les données sont dans la liste. Donc, nous allons ensuite aller pour chaque donnée W dans les listes de données. Si n est égal à w print. Vrai. Alors allons de l'avant et briser un peu celle-là aussi. Allons avec notre même exemple d'avant, qui était trois virgules, deux virgules, 10 virgules buffles comme ça. Et dans cette situation, notre in est toujours égal à quatre. Et maintenant ce qu'on va faire, c'est qu'on va examiner le premier problème ici, alors jetons un coup d'oeil maintenant. Disons que nous allons attraper chacun de ces éléments de données, donc nous allons saisir les trois et c'est maintenant là. Et puis maintenant, pour chaque élément de données dans cette liste de données et vous pouvez voir que ces noms sont exactement les mêmes. Donc, cela signifie que c'est la liste de données. Nous vérifions ces deux, donc nous avons notre trois façons d'attraper nos trois. Et maintenant nous essayons de vérifier si ces trois ici sont équivalents à quoi que ce soit ici, et la seule façon de le faire est de citer une force brute sans citation. Donc on va prendre ces trois. On va le vérifier avec le 1er 1 On va le vérifier avec le 2ème 1 On va le vérifier avec le 3ème 1 On va le vérifier avec le 4ème 1 Donc ça va être 1234 opérations . Donc d'abord, disons ça, ça, vraiment loin ici. Nous avons nos trois. Nous avons attrapé nos trois, et maintenant nous vérifions. Est-il égal ? Laisse-moi faire qu'un peu plus petit sera un peu plus gros d'un graphique. Donc nous disons, est-ce que trois équivaut à la première partie de nos données, qui sera encore les trois ? Parce que nous ne lui avons pas dit de commencer par un chiffre que ce n'est pas le cas ou des choses fantaisistes comme ça . On vérifie juste cette liste une seconde fois. Donc nous avons nos trois et nous vérifions. N' est pas égal au 1er 1 Alors est-ce qu'il est égal à trois. Oui, c'est le cas. Donc, c'est cela va imprimer un vrai message, et cela a pris une opération. Maintenant, c'est le cas. Sont trois égaux à ne pas. Donc on n'imprime rien. C' est une opération. Est-ce que nos trois égalent 10 ? Ce n'est pas le cas. Donc c'est une opération. Est-ce que nos trois bison sont égaux ? Ce n'est pas le cas. Donc c'est une opération, et maintenant on en a fini avec les trois. Donc nous avons passé à autre chose. Nous avons pris soin des trois, alors créons un 2e 1 ici. Voyons voir ça. Quoi ? Ce sera celui qu'on vérifiera avec leur exactement la même chose. Mais je veux juste rendre ça un peu plus visuel pour vous tous. Donc on en a fini avec trois. Alors passons aux deux maintenant. Il en est ainsi trop égal. Trois. Ce n'est pas le cas. C' est une opération fait à l'égal. C' est une opération qui équivaut à 10. Ce n'est pas le cas. C' est ce que l'opération fait pour égaler le buffle. Ce n'est pas le cas. C' est une opération, et puis allons dans la liste. Un de plus fait 10 égal trois N'est-ce pas une opération fait 10 égal à n'est pas ce que l'opération fait. 10. Égal 10. C' est le cas. C' est là que l'opération fait 10 égal Buffalo. Ce n'est pas le cas. C' est une opération qui fait Buffalo. Je vais juste l'abréger comme ici, donc je veux continuer à écrire. Buffle. Buffalo égale-t-il trois ? Ce n'est pas le cas. Donc, c'est une opération. Buffalo égal à ce n'est pas. Donc c'est une opération. Buffalo est égal ? 10 ? Ce n'est pas le cas. Donc c'est une opération. Buffalo égale-t-il Buffalo ? C' est le cas. Donc c'est une opération. Et maintenant, si nous ajoutons tout ça ici, ce que nous allons voir, c'est que ce sera 123456789 10 11 12 13 14 15 16. Donc, dans cette situation, notre dans était quatre, mais sont le temps d'exécution était d'environ 16. Et qu'est-ce que ça se passe ? Eh bien, ça sort pour être au carré. Donc, disons que si on en prenait quatre et qu'on l'ait quadrillé, ça équivaudrait à 16. Et nous pouvons théoriquement penser à cela aussi. Si nous élargissons ce chiffre à cinq, chaque personne aurait non seulement cinq personnes supplémentaires ici, mais nous devons le multiplier parce que maintenant nous devons vérifier un autre. Donc, chaque instance unique, aura cinq et aura un autre ensemble cinq, qui le place donc dans cette situation sont runtime est en carré. Et la raison en est même si nous avons 24 boucles, il y a ce qu'on appelle l'imbrication. Nous avons imbriqué 14 boucle à l'intérieur d'une autre boucle quatre. Donc, cette partie ici, dessinons ceci et lisons cette partie ici est dedans tandis que cette partie à l'intérieur est aussi dedans. Donc, ce que nous faisons c'est nous prenons la fin à l'extérieur, nous la multiplions par la fin, à l'intérieur, et nous entrons au carré. Et donc ce sera notre dernier temps de course pour cette situation. Donc, comme je l'ai dit, ce cours n'est pas fortement désigné sur l'écriture de code ou vers l'extérieur, et il est toujours défini la théorie. Mais j'ai pensé que ça pourrait t'aider à te montrer de quoi on a parlé tout ce temps. Comment le code pourrait être réellement analysé afin que nous puissions comprendre ces différentes pièces. Et vous pouvez voir que quoi qu'il arrive, nous venons d'apprendre quelque chose de très important. Quatre boucles vont toujours être dans, mais imbriquées pour les boucles vont toujours être autant d'imbriquées qu'il y a. Donc, si celui-ci ici imbriqué 1/3 1, ce serait une formule au carré, et vous commencez à vous lever en très grand nombre pour commencer à vérifier tous ces trucs. J' espère donc que cet exemple pratique vous a aidé à mieux comprendre ce concept . 9. 2-1 Enregistrez: Commençons donc à sauter dans l'un des prochains grands sujets de l'informatique, et c'est la capacité de comprendre et de manipuler les structures de données. Les structures de données sont le moyen de prendre des données, organiser et de pouvoir saisir l'accès, de les enregistrer de certaines manières qui correspondent à notre objectif. Certains sont donc plus rapides que d'autres à certains égards. Donc, par exemple, certains d'entre eux, nous allons prendre plus de place tout en étant vraiment, vraiment rapide d'accès. Certains d'entre eux ne prendront pas beaucoup de place du tout, mais pourraient prendre un peu de temps pour y accéder. Certains d'entre eux ont des inserts plus rapides. Certains d'entre eux ont plus rapidement enlever la SLA. Tout se résume à ce que vous voulez accomplir exactement dans votre programme, votre théorie ou n'importe quelle sorte de section de l'informatique dans laquelle vous allez entrer. Donc, la première chose que nous avant d'entrer dans ces structures de données, est que nous devons comprendre comment, exactement les données sont stockées, parce que cela nous aidera à commencer à comprendre ces structures de données et pourquoi on pourrait prendre plus longtemps que l'autre et pourquoi l'un pourrait prendre plus de place que l'autre. Donc la première chose que nous devons faire, c'est que nous devons d'abord. Comme je l'ai dit, comprenez les données. Donc ce que sont les données, c'est comme,par exemple, par exemple, c'est quelque chose d'une sorte de zéros et de ceux qui signifient quelque chose. Ainsi, par exemple, un trois pourrait être un morceau de données ou un texte entier, ou peut-être un document entier pourrait être un morceau de données. Et ce qui se passe dans un ordinateur, c'est que ces types de données sont stockées sur, par exemple, comme un disque dur, qui est en section en différentes petites parties et ces parties de section dans les parties encore plus Et puis à l'intérieur de l'un de ces groupes, vous avez comme des grappes, qui sortent pour ressembler à ça ici. Donc, par exemple, peut-être que cela représente toute cette chose ici et ce que chacun d'entre eux représente est un morceau de données. Et donc chacun d'entre eux aura en fait une adresse en mémoire, comme une adresse pour où se trouve votre maison. Si vous voulez envoyer un paquet, l'ordinateur utilise exactement la même chose. Par exemple, peut-être celui-là. Il utilise généralement Hexi décimal de sorte que je vais utiliser Peut-être que celui-ci est 00 et donc celui-ci serait alors 01 Et ce symbole zéro avec peu X à côté signifie généralement Hexi Decimal. C' est ce que j'utilise pour ça. Donc, ça continuerait continuellement ici. Ce serait 020304 etcetera. Et donc pourquoi c'est important, c'est parce qu'une fois que nous avons l'adresse, nous pouvons saisir la chose qui se trouve dans cette adresse. Donc, par exemple, si nous avons pris un morceau de données, disons que nous avions une chaîne ou un morceau de données qui était trois et quatre, comme ça Et disons que trois étaient stockées. Zéro x 00 et quatre était stocké dans zéro x 01 Donc maintenant, si nous voulons saisir ces données, ce que nous pouvons faire, c'est que nous pouvons créer une table avec ces types de données et leurs associations. Ainsi, par exemple, notre table peut dire trois. Il est stocké ici. Ceci est stocké ici, sauf que ce serait généralement l'inverse. Nous dirions ce qui est à 00 et ce serait une sorte de données. Qu' est-ce que c'est ? 01 ? Et ce serait une sorte de données. Et donc maintenant, quand nous voulons réellement récupérer ces données, nous pouvons soit rechercher l'adresse, soit vice versa. Si on veut voir ce qu'il y a, on peut y aller et le comprendre. Donc disons que nous voulions récupérer. Trois. Nous voulons récupérer les trois dans notre ensemble de données. Donc trois est situé juste ici et quatre est situé juste ici. Et donc nous voulons en récupérer trois. Donc fondamentalement ce que notre programme fait dans les coulisses. Beaucoup de fois, moins que votre programme à un niveau très bas, ce qui signifie très proche comme la machine, manipulant la machine complètement et totalement en vous-même, généralement des langages d'assemblage et des choses comme ça. Alors tout ce que nous avons à faire est de dire, vous savez, juste var X est égal à trois et avec la machine est en train de le faire en disant, Ok, nous associons maintenant X à l'adresse zéro x 00 Donc chaque fois que l'utilisateur utilise ou appelle X , nous allons saisir ce qui est jamais à zéro x 00 Maintenant, l'utilisateur vient ici et il, vous savez, crée une nouvelle variable. Pourquoi équivaut à quatre, Et maintenant pourquoi est associé ID avec zéro x zéro vin. C' est ce que fait le programme, c'est dire que nous l'avons fait. Qu' est-ce que X plus ? Pourquoi ? Qu' est-ce que c'est égal ? Eh bien, ce que ça fait, c'est que ça se passe bien, alors X est à 00 h Allons attraper quoi jamais ? A 00 et on y va, il scanne sur le disque dur. Ça va jusqu'au bout et ça trouve 00 et ça va, Hey, il y en a trois ici. Donc, les trois sont alors appelés, ramenés tout le chemin vers le haut dans le processeur, puis il est stocké dans Ram, qui est une mémoire plus proche de l'ordinateur réel. Mais c'est en quelque sorte que ça devient vraiment, vraiment délicate et comment fonctionnent les ordinateurs. Mais tout ce qu'il fait, c'est qu'il saisit ça et dit, C'est un trois. Et puis maintenant nous disons que nous voulions plus dans pourquoi et donc il fait exactement la même chose . Il descend dans sa liste. Il trouve le secteur, le cluster, tout ce qui tombe et dit, Oh, c'est l'adresse ou celle qu'il renvoie. Oh, quelle est l'adresse ou ce qu'un quatre va tout le chemin en arrière et revient avant Et bien sûr, il le fait en peu de temps, et alors il pourrait faire les calculs qu'il appelait. C' est deux données ici. Et maintenant, il fait le calcul de sept. Et c'est donc à la base de la façon dont les données sont stockées dans un ordinateur. C' est juste une sorte d'adresses Siri, et il y a différentes façons de stocker ce genre de données. Ainsi, par exemple, c'est un moyen plus direct de le stocker où nous pouvons appeler l'adresse spécifiquement. De quelle façon nous avons dit que nous voulons allouer, Supprimons quelques choses ici. En fait, ce qu'on peut faire, c'est que je dupliquerai cette diapositive ici et on descendra. Donc, vous les gars aurez ce dessus, sera dupliqué, puis en quelque sorte de supprimer et faire un deuxième exemple ici. C' était donc une façon très directe de dire ce que j'étais. Si nous disons que nous avons ces données, cette structure qui va être entre ici et ici et son adresse dans son ensemble va être zéro X 00 maintenant Si nous appelons zéro x 00 disons, Eh bien, mettons quelques données ici. Si on appelait zéro x 00, il n'y aurait pas de données spécifiques ici. On appelle toute cette entité, pour que ça ne nous aide pas du tout. Donc, ce que nous pourrions faire, c'est là que nous commençons à entrer en quelque sorte. La partie suivante est que nous pouvons en fait sorte de petits noms de mini à chacun de ces petits segments. Donc c'est juste 12345 et nous pouvons utiliser ces classifications vraiment basiques parce que nous avons notre adresse principale ici. Et maintenant, comme nous avons notre adresse principale, ce que nous allons faire c'est nous allons aller à l'adresse principale, et ensuite nous allons utiliser un de ses petits noms pour trouver les données que nous recherchons. Et c'est ce qu'on appelle un tableau. Et la prochaine conférence. Nous allons vraiment commencer à prendre cela au niveau suivant, mais cela s'appelle un tableau. Donc, ce que nous pouvons faire, c'est que nous pourrions créer, sauver nos égaux X et ensuite créer quelque chose comme ça. Et puis maintenant il stocke toute cette pièce de données dans cette mémoire et que maintenant si nous disons Return X de ce que c'est petit mini nom. Donc, disons X d'un. Maintenant, ça va arriver. Il va aller au zéro x 00 et ensuite il va aller au mini nom d'un, qui est un deux. Donc, il va revenir à et c'est une façon différente de regarder. Au lieu d'avoir un accès direct, vous pourriez l'avoir segmenté en morceaux comme celui-ci. Et ce qu'il s'avère être, c'est en fait généralement le plus commun. Parce que si nous avions une adresse directe pour chaque pièce en mémoire, nous gaspillerions beaucoup d'espace et deviendrions destables vraiment, vraiment grandes, tables vraiment, vraiment grandes parce que vous devez penser que la mémoire qu'il ne peut pas Ah, ordinateur ne peut pas créer la mémoire à la volée comme si vous ne pouviez pas simplement le stocker dans un pays imaginaire. S' il veut stocker chacune de ces relations, il doit avoir toute une section de mémoire qui est spécifiquement désignée pour stocker la mémoire. Donc, si vous essayez de stocker chaque morceau de données comme celle-ci, votre espace commence à devenir vraiment grand, et ce sont tous des concepts. On va commencer à tomber en panne à mesure qu'on va plus loin. Mais je voulais juste montrer cela dans un niveau supérieur afin que vous puissiez commencer à comprendre comment fonctionne la mémoire. Et puis quand nous entrons dans ces structures de données comme une augmentation, comme des arbres comme des listes liées, vous pouvez commencer à comprendre comment cela pourrait fonctionner sous le genre de hotte sur. Nous pouvons entrer dans un peu plus de, vous savez, vous savez, juste cette compréhension, et une fois que vous le comprenez, vous pouvez mieux l'utiliser. Vous pouvez mieux le manipuler. 10. Introduction à la chaîne fixe: Alors passons en revue notre première structure de données majeure, et ce sera le tableau et dans cette situation, le tableau fixe. Alors qu'est-ce qu'un tableau ? Eh bien, dans un raid, par définition est un Siris ordonné d'arrangement. Et donc tout ce que cela signifie, c'est qu'il s'agit d'un regroupement d'éléments similaires ensemble. Et dans cette situation, les éléments similaires signifie simplement qu'il y a morceau de données donc dans un rayon dans le monde de l'informatique est juste une collecte comme de données ou vraiment juste une collection de données qui est toutes à côté autre. Et ce que je veux dire par ça, c'est que nous allons examiner différentes structures de données plus tard où vous pourriez avoir un morceau d'information ici sur un disque dur, puis un autre morceau ici et là, juste lié avec quelque chose appelé Pointers. Donc c'est comme, disons, si nous voulions représenter le truc ci-dessous ici, nous aurions quelque chose comme ça. Mais il pourrait y avoir, vous savez, un tas de pièces différentes entre les deux, et un tas de pièces différentes entre les deux. Et ce n'est pas ce que dans une course qui s'appelle une liste liée. Donc, dans un rayon, c'est quand ils sont tous ensemble et que vous obtenez certains avantages de cela, vous obtenez certains inconvénients de cela. Mais un tableau ressemble à ceci chaque fois que vous le représentez. Visuellement, vous avez ce segment de mémoire, et lorsque vous créez un tableau, vous avez généralement toujours attribué combien de temps vous voulez. Vous demandez à l'ordinateur. Je veux une section de six données et l'ordinateur va chercher dans son disque dur, puis il va trouver une place de six, et ça va te donner cette fente. Donc, par exemple, sur notre disque dur, si nous demandons une place de trois, il regarderait à travers, regardait là et comme, Oh, ici, nous avons une section de trois. Donc, il vous donnerait ces trois morceaux de données, et ce serait dans le code. Il est généralement représenté par une déclaration de parenthèses comme ça. Donc, vous diriez quelque chose comme X est égal aux crochets, et cela signifie un tableau vide. Et puis, si vous voulez y mettre des informations, il pourrait être quelque chose comme X égal à 123 et cela va juste créer un tableau qui ressemble un peu à quelque chose comme ça, où vous avez le premier lot d'un, la deuxième fente de à et la troisième fente de trois comme ainsi. Donc, c'est une sorte de comment il serait représenté dans le code. Maintenant, comment un tableau compte-t-il ? Qu' est-ce que c'est ? Tu sais quoi ? C' est pour quoi est-il utilisé ? L' une des parties les plus importantes est que le tableau commence à zéro. Ça s'appelle l'indexation zéro. Cela signifie que chaque fois que nous voulons saisir le premier élément chaque fois que nous voulons saisir cet élément ou dans cette situation, cet élément voudrait jamais saisir l'un de ces développements. On doit commencer à zéro. Ce doit être ce zéro ici. C' est parce que ah, beaucoup de formules informatiques fonctionnent avec zéro. Il y a en fait des discussions en ligne complètes sur la raison pour laquelle nous utilisons toujours la base zéro. Il y avait, ah, tout un tas de raisons différentes pour ça et la raison qui a commencé à tomber. Mais quoi que ce soit en ce moment, nous utilisons toujours zéro base. Donc, dans le tableau commence toujours par zéro. Et cela signifie que la fin est quelque chose appelé en moins un ce qui est en moins un moyen se terminera dans cette situation est juste la longueur du tableau. Donc ça veut dire que le dernier sera en moins un. Ce ne sera que six. Donc ceci, comme vous pouvez le voir, contient sept informations. 1234567 Cependant, si nous voulons saisir la dernière information, nous n'en saisissons pas sept. On en prend six, un peu confus au début. Et beaucoup de fois, même des informaticiens vétérans, ils se trompent tout le temps. Ils mettront, ils mettront, vous savez, s'ils essaient de saisir le dernier élément, ils mettront X sur 7. Et ça va retourner quelque chose appelé une faille de segue, qui est juste l'ordinateur vous disant, Hey, vous accédez à la mémoire en dehors des limites. Vous accédez à la mémoire. Je ne vous ai pas donné le contrôle et un langage plus faible ou des langues qui n'ont pas de garanties. Eh bien, en fait, juste retourner n'importe quelle ordure est là, donc ça s'appelle en fait Ah, attaque de débordement de tampon est que si vous attaquez ce côté droit, vous pouvez pirater les choses par ça. Mais c'est ce qui ressemble aux langages vraiment basiques comme C, que ce soit dans beaucoup de sauvegardes. Mais chaque fois que nous essayons de le faire dans quelque chose comme, Java va nous dire que la deuxième erreur était d'accéder à la mémoire qui n'a pas été accordée sur le disque dur, quelque chose d'autre est là que nous ne devrions pas toucher. Et donc, comme je l'ai dit, est annulé par un seul air. Mettez la partie importante dont vous avez besoin pour sortir de cette conférence. Cette introduction pour corriger une augmentation est que l'un dans le tableau est juste une collection de données au même endroit sur le disque dur va au-delà de l'avantage que dans la prochaine élection, nous avons parlé des temps d'exécution. Mais c'est ce que c'est. C' est une collection de ces données ensemble. La prochaine chose que nous savons est quelle est la partie fixe de cela allait parler de différents tableaux. La partie fixe de celui-ci signifie simplement qu'il ne changera jamais. Donc, dans cette situation, si nous avons créé un tableau de taille quatre, il va toujours rester taille car il n'y a pas de code pour faire aller plus grand et faire aller plus petit. Une fois qu'on l'a rempli, c'est rempli. Nous devons soit écraser quelque chose ou supprimer quelque chose ou déplacer quelque chose ailleurs pour mettre plus d'informations appréciées. Mais de toute façon, c'est l'introduction aux tableaux fixes, vraiment, vraiment besoin de structures de données, et jetons un peu plus de la minutie de la façon dont vous utilisez réellement ces choses et ce que leur avantages sont. 11. 2-3 temps d'exécution d'array fixe: Jetons un peu plus en profondeur dans les tableaux fixes et regardons leur runtime, utilisant vraiment les choses que nous avons apprises dans la dernière unité, vous savez, l'analyse de temps jumbo jumbo que nous allons prendre que nous sommes va réellement l' implémenter et regarder les vitesses de différents types de fonctions dans le tableau. Et puis nous serons en mesure de prendre ce genre de vitesses et serons en mesure de regarder différentes structures de données seront en mesure de les comparer ensemble. C' est ce qu'on va faire. On va voir certains des avantages. Nous allons voir certains des inconvénients, et nous allons juste plonger en profondeur dans ce qu'est le tableau fixe et pourquoi vous pourriez l'utiliser. La première chose qu'on va passer est l'insertion aléatoire. Il y a donc quelque chose avec lequel nous devons nous réunir. Ce dont nous allons parler chaque fois que nous parlons d'une insertion, d' une suppression ou même de chercher ce que nous entendons par insertion, c'est si nous avons un ensemble de données que nous voulons garder dans le même ordre. Donc, par exemple, toutes les données sont importantes dans tous nos exemples. Donc, si on en a un deux ou trois, on n'en a pas. Quand nous disons insert, nous ne voulons pas dire toe écrase quelque chose qui s'appelle remplacer. Donc on ne parle pas de changer ça en deux. Donc c'est 2 à 3 ou changer ce 1 à 2 ou, vous savez, vous savez, faire quoi que ce soit. Il ne s'agit pas qu'une insertion soit insérée entre ici ou insérée dans un endroit autour elle. Donc, par exemple, dans l'insertion serait Ceci est un espace vide et nous voulons insérer un trois ici. Ou l'insertion pourrait être qu'après un, nous voulons insérer un trois. Alors comment allons-nous faire ça ? Le produit final ? Ce que nous voulons, c'est que nous voulons quelque chose qui sort comme 132 et c'est donc la recherche en cours, et c'est ce que nous entendons par insertion aléatoire. Alors, quel est le moment de cette insertion aléatoire ? Que faut-il si nous voulons insérer quelque chose au hasard ici ? Et allons de l'avant et supprimons ah, quelques éléments de retour. Donc nous avons quelque chose à travailler ici et donc nous y allons. Alors quel est le temps qu'il faudra pour insérer quelque chose dans un tableau fixe ? Eh bien, le temps finit par être O jusqu'à la fin o jusqu'à la fin. Alors, pourquoi est-ce jusqu'à la fin ? Eh bien, jetons un coup d'oeil à ça. Cet exemple ici en quelque sorte le montre. Chaque fois que nous insérons au hasard, nous devons supposer que nous ne savons pas où il va être inséré. Ça pourrait être inséré ici. Ça pourrait être inséré ici. Il pourrait être inséré à la fin ou au début. Mais ce que nous savons, c'est que, à moins que ce soit au tout, à la fin, nous allons devoir déplacer des données. On va devoir prendre ces données, et on veut les décaler pour s'adapter à cette autre donnée. Donc, par exemple, disons que dans cet exemple, ici nous avons une extension vers l'extérieur, et disons que nous voulons insérer un autre nombre que nous voulons ici. Nous voulons insérer un quatre. Qu' est-ce qu'on va devoir faire, quelle quantité de travail ou on va devoir faire pour que ces quatre là-dedans fassent ça, on va devoir prendre les trois. Ou en fait, on va commencer la fin ici. Donc on va prendre les deux. Nous allons le déplacer, nous allons prendre les trois, nous allons le déplacer, et ensuite nous allons prendre les quatre, et nous allons les insérer dans. Donc, cela va prendre combien d'opérations seront au maximum, cela va prendre tout le tableau. Nous allons devoir déplacer chaque élément, puis plus l'ajout du nouvel élément. Combien d'éléments de ça ? Eh bien, c'est notre confiance en nous en avons un. Rappelez-vous que dans est la longueur de notre taille de toutes les données que nous essayons d' insérer. Combien d'opérations allaient faire ? Eh bien, toutes les données actuelles vont nécessiter une opération un mouvement pour déplacer trois, déplacer pour déplacer. Donc ça va être dedans. Au mieux. Ce sera juste une constante d'insertion régulière, donc ça va être juste une. Mais c'est là que ça devient difficile. Nous devons regarder la moyenne. Quel est le temps moyen qu'il faudra pour continuer à insérer dans un graphique ou dans un tableau ici, et c'est là que nous obtenons notre écrit la fin ici. C' est le temps moyen que ça va prendre ? C' est quelque chose comme, Oh, dans plus de deux et tu peux penser à ça. Si nous avons une moyenne sur une distribution normale, vous savez, nous les mettons en place dans un autre endroit aléatoire. Statistiquement et selon la probabilité, ça va les insérer à la, euh, moins la même quantité pour chacune des cellules. Disons qu'on l'insère. Je ne sais pas, 12 fois avec probabilité, nous devrions arriver ici, ici, à ici, à vers vers le bas la liste d'un endroit différent à insérer. Et ça veut dire que là-haut, ça va prendre des temps à chaque fois. Et là, ça va prendre moins un en moins deux en moins trois et moins quatre et moins cinq en moins six. Donc ça va prendre du temps constant, et donc cela fait des moyennes pour tous combinés sur ce qui va ensuite nous donner notre dans plus de deux. Et rappelez-vous, nous parlons de temps de course. On doit écarter tout ce qu'on obtient. C' est juste un 1/2 à l'avant. Donc, on l'a juste écarté. Et cela signifie que notre temps moyen finit par être exactement comme ça. Donc, une insertion aléatoire est dans le temps. Alors qu'est-ce que c'est l'insertion à l'avant ? Mais nous parlons de ça, et c'est en fait la partie lente de nos insertions. Insertion à l'avant va être o au N aussi. Laisse-moi me débarrasser de ça ici. Donc, dans une certaine partie du front va être O jusqu'à la fin. Tu te souviens quand on parlait de l'exemple tout à l'heure ? On a dit que si on s' insérait dans le front, ce serait notre pire scénario. On va tout prendre et le déplacer par un. Donc ça va être le O jusqu'à la fin. Maintenant, que se passe-t-il si on insère à l'arrière ? Donc on va insérer à cet endroit juste ici ? Eh bien, c'est une insertion très facile. On peut juste en mettre trois ici. Si on te voulait et on l'a inséré. C' est un temps constant. Tout ce qu'il faut est une seule opération qui est de prendre le nombre. Mettez-le dedans. Peu importe combien de pièces nous avons. Ça pourrait être, tu sais, ça pourrait être zéro, puis 10 2030 40 50. Et sur ces nombres entre les deux, il n'y a pas d'importance. Nous allons juste dire, vous savez que X sur 50 équivaut à trois et maintenant à trois. C' est toujours un temps constant. C' est pourquoi, avec une insertion de tableau dans le dos est aussi le temps constant. Maintenant, alors, delish dans une suppression signifie que nous allons supprimer l'élément. Mais nous devons nous rappeler, maintenir l'intégrité. Élevons tous les zéros ici pour revenir. Cela signifie que nous devons maintenir l'intégrité. Et qu'est-ce que ça veut dire ? Cela signifie que si nous enlevons un sept, si nous supprimons les sept dès le début, ce que nous devons faire, c'est que nous devons faire en sorte que le reste de ces derniers retombe vers l'arrière . Alors allons de l'avant et faisons nous-mêmes un petit exemple ici. Disons que nous avons un tas de nombres, comme si nous avons eu un tableau 1234 qui est de la taille pour, mais l'indexation se souvenir commence à zéro. Disons donc que nous voulions en supprimer un de notre ensemble de données. Eh bien, quoi que nous retirions celui de l'ensemble de données, nous ne pouvons pas laisser ici un espace vide qui ne maintient pas la continuité de nos données . Si nous avons essayé de saisir le premier élément, nous supposons juste que, vous savez, peut-être que nous avons un algorithme et essayons toujours de saisir le premier élément comme celui-ci. Ça va s'aérer. Il n'y a rien là-bas. Donc, ce que nous devons faire chaque fois que nous supprimons du front, c'est que nous devons faire exactement la même chose. Nous devons reculer, reculer, reculer. Et comme vous pouvez voir ce dont nous avons parlé avant, tout ce qui va nous obliger à reculer un tas de temps va être O jusqu'à la fin. Delish au hasard est également aller à la fin aussi bien. Donc, si nous venons de prendre n'importe quelle sorte de suppression au hasard ici, il serait dû. La fin maintenant dans le tableau a aussi ce bel avantage de pouvoir supprimer de l'arrière en temps constant parce que nous n'avons pas à déplacer quoi que ce soit. Donc, si nous voulions juste supprimer les quatre à l'arrière, tout ce que nous avons à faire est de les effacer. Donc, dans le code, vous savez, il pourrait être quelque chose comme X sur trois égal non sont des guillemets vides ou quoi que ce soit pour le rendre vide. De toute façon, c'est comme ça que c'est simple. C' est l'opération Zingale. Rien d'autre n'a à entrer, donc c'est aussi dû à la femme temps constant. Donc ces air ces air, le court terme, que je vais utiliser parfois est le temps linéaire. Donc, ce sont tous des temps linéaires. C' est le temps constant, linéaire, constant. Et je veux juste vous apprendre ce vote maintenant parce que, comme je l'ai dit, je pourrais les échanger à l'avenir et dire, Oh, à la 10 à la N Chaque fois devient un peu fatigant. Donc beaucoup de gens juste qu'ils diront Constant, Ils diront, linéaires ceux si exponentiels. Quoi qu'il en soit, regardons notre dernière. Combien de temps faut-il pour chercher quelque chose ? La liste de recherche et non triée. Ceci ici n'est pas trié. On en a sept. Nous avons 89 10, puis un. Donc il n'y a pas d'ordre ici. On ne connaît pas vraiment l'ordre. Combien de temps ça va prendre ? Disons que nous voulons voir est un neuf présent. Il n' y a pas de Riel. Moyen rapide de le faire. Ce que nous devons faire, c'est faire la méthode de la quatrième force brute. Ça veut dire qu'on doit commencer ici. Ce mal est-il nié ? Non. Passez à la suivante. C' est la suite ce soir ? Non. Passez à la suivante. Le single est le neuf ? Oui, ça l'est. Mais si nous cherchons , par exemple, 90, par exemple,nous serions comme, non. Non, non. Et on descend la liste jusqu'à ce qu'on soit épuisé. Jusqu' à ce qu'on arrive à un endroit qui n'a aucune information. Et puis nous reviendrions. Non, ce n'est pas égal à 90. Donc cette opération finit par être comme le reste. Oh, la fin. Parce qu'au pire, on va avoir 2 h, on va devoir descendre chacun d'entre eux et faire tout le chemin jusqu'à la fin pour savoir s'il existe réellement dans le tableau, on pourrait avoir de la chance. Bien sûr, il peut parfois être au tout début. Parfois, il peut y avoir deux ou trois éléments, mais en moyenne, le pire des cas est qu'il va être dû jusqu'à la fin. Donc ça va aussi être le temps linéaire. Et puis la dernière, la dernière fois. Nous allons en fait dire pour la prochaine conférence parce que cela va fonctionner avant, un peu de sorte de plongée profonde dans la raison pour laquelle un tableau trié de recherche sort pour se connecter. Et donc vous pourriez regarder ça en ce moment en disant : Qu'est-ce que ça veut dire ? C' est pourquoi nous allons plonger profondément dans la raison pour laquelle cette recherche a trié le journal de fin égal. Mais je voulais juste revenir sur une ou deux choses de plus dans cette conférence, et ensuite nous allons aller de l'avant et sauter dans cette conférence. La dernière chose que je veux dire, c'est qu'est-ce que tout ça nous dit ? Qu' est-ce que cela nous dit sur les avantages et les inconvénients d'un tableau que nous pouvons voir immédiatement que pour stocker des données qui ont toutes une sorte d'intégrité pour eux, peut-être dans un taux n'est pas le meilleur pour comme si nous avons Ah, qui a besoin d'insérer et d'élite constamment parce que chaque fois que nous insérons delete, il sera dû à la fin, surtout si nous insérons à l'avant ou aléatoirement à l'intérieur. Et nous avons en fait d'autres structures de données qui peuvent rendre ces temps constants. Donc peut-être que quelque chose comme ça n'est pas très important. Et quelque chose de ce genre de n'est pas ici, mais nous avons pris pour acquis est la capacité de juste vérifier ce qui est à chacun de ces éléments. Je peux juste dire, tu sais, je peux appeler sauf trois. Je peux appeler cet élément, et il va me dire instantanément que 10 est là. C' est autre chose qui est un très grand avantage pour une course. Est-ce un temps d'accès constant ? C' est autre chose que nous ne comparons peut-être pas autant aux autres. Mais ça s'appelle le temps d'accès. Combien de temps faut-il pour arriver à un élément dans le tableau et dans cette situation, tous ces temps d'air constant ? C' est ce que le genre de tableau vous donne est la possibilité de commencer quelque part, puis d'aller à l'un de ces éléments et d'y accéder immédiatement. Donc, le temps d'accès est constant, et c'est très important. Si, par exemple, disons que nous n'avons pas un programme qui sort et insère beaucoup d'informations avec le programme que de temps en temps il le fait. Mais la plupart du temps, c'est juste vérifier différents endroits. On stocke des informations différentes ici, et ensuite on est comme les programmes comme, Ok, Ok j'ai besoin du numéro trois, qu'est-ce qu'il y a au numéro trois ? Et le numéro quatre ? Ce qui est au numéro 4 et ensuite il envoie constamment cette information d' avant en arrière . Mais la plupart du temps. Cela reste une citation sans citation statique, ce qui signifie qu'il ne change pas. C' est là qu'un tableau peut être utile. Nous avons ce temps d'accès très rapide, et tout va beaucoup plus vite. Cependant, comme je l'ai dit, si nous insérons en leader tout le temps, peut-être vouloir regarder une structure de données différente de toute façon, passons dans cet exemple vraiment besoin de la recherche triée, et regardons pourquoi cela sort pour se connecter 12. Algorithme de recherche binaire en 2 ou 4: Regardons ce dont nous avons parlé dans la dernière conférence. Et ça va être la recherche de tableau fixe triée. Alors pourquoi est-ce différent ? Pourquoi cela nous aide-t-il à arriver à cet intéressant runtime de log dans lequel est sensiblement plus rapide que le O à la fin. Version non triée. Ça va être beaucoup plus rapide que pourquoi quand on le triera, on a cet avantage ? Et c'est parce qu'on fait quelque chose qu'on appelle un tri binaire. Donc, ce sera un algorithme de tri binaire ou un algorithme de recherche binaire. Ma méchante. Un algorithme de recherche binaire. La raison pour laquelle cela nous permet de faire un algorithme de recherche binaire est à cause de la façon dont il a mis en place. Imaginez l'ancienne façon de le faire. Et c'est la méthode de la force brute. Disons que nous essayons de trouver est-ce que 19 existe ? Donc, nous essayons de comprendre que 19 existent comme Donc pour faire ça avec une méthode de force brute, nous allons juste depuis le début. C' est là ? Non. Non, non, non. Et on continue à descendre la liste. Et bien sûr, il pourrait ne pas être dans la liste et Par conséquent, nous devons passer par la liste entière pour comprendre cela. Ou il peut être à mi-chemin de la liste ou près de la fin, ou peut-être juste au début. Quoi qu'il en soit, au pire, ça va prendre toute cette liste va prendre O jusqu'à la fin des temps. Cependant, avec une recherche binaire, nous pouvons garantir que c'est sur Lee Going prendre le journal de l'heure de fin et log of in time est comme je l'ai dit, c'est beaucoup plus rapide. Rappelez-vous quand vous parlez de connexion et les tutoriels précédents, cela va comme ça, ce qui signifie que le au tout début, le nombre sur le nombre d'éléments que nous avons. Donc, disons que cela va à droite ici, cet accès va être le nombre d'éléments dans ce que nous avons. Et c'est combien de temps ça prend. La recherche ou l'exécution sont le temps d'exécution. Et donc ce que cela va nous dire, c'est qu'avec le Mawr en ce que nous obtenons cette course, temps ralentit de sorte qu'à un moment donné nous sortons comme 32 000 et ce sera essentiellement le même runtime à 64 000, ce qui est fondamentalement le même runtime que 128 000. Il va monter de plus en plus lentement et de plus en plus lentement à chaque fois. Et cela arrive à cause de la façon dont la recherche binaire fonctionne. Alors allons de l'avant et passons par cet exemple. Comment pourrions-nous passer ? Comment rechercherons-nous un tableau fixe ? Eh bien, ce que nous faisons, c'est que nous allons de l'avant et nous faisons cette petite formule. Ça s'appelle gauche plus droit sur. Donc, nous prenons à gauche plus à droite, puis nous allons de l'avant et nous divisons ça par deux. Donc c'est notre formule. Alors allons-y. Prenons ça et déplacons ça là-haut parce que nous allons faire beaucoup référence à ça pendant que nous faisons ça. Donc à gauche, plus, juste à. Donc ce qui reste va aller de l'avant et être la partie gauche. Ce sera le numéro qu'il nous reste à gauche, si ça a du sens. Donc, dans cette situation, c'est un tableau complet. Sont à gauche, est zéro et sont à droite est le plein droit sur la droite ici, qui est le 10. Nous allons prendre ces deux chiffres, nous allons les additionner ensemble, et ensuite nous diviserons par deux. Et c'est l'index que nous allons chercher au début. Donc ça veut dire notre premier pas ici. On va prendre la gauche. Gardiennons les mêmes chiffres ici. On va prendre la gauche, ce qui sera zéro, et ensuite on va aller de l'avant et ajouter à droite, qui est le 10. Et ils allaient diviser ça par deux. Ce qui, bien sûr, vient juste de sortir à 10 divisé par deux, ce qui est cinq. Donc notre premier pas, nous prenons l'indice 5 juste ici. Alors on va de l'avant et on attrape l'indice 5. Nous allons de l'avant, nous le prenons, nous le ramenons et nous jetons un coup d'oeil. Qu' est-ce que c'est ? Alors qu'est-ce que l'ex de cinq ? Eh bien, il en retourne 12. Alors maintenant, notre prochaine décision est 12. Moins ou est-il plus grand que le nombre que nous recherchons ? , 12,c'est moins que ce qu'on cherchait. Et rappelez-vous, c'est un tableau trié. Donc, si 12 est moins que le nombre que nous recherchons, pourquoi chercherions nous de ce côté ? Nous savons déjà que c'est réglé, donc je veux dire tout avant que ça ne soit inférieur à 12 et nous savons que notre nombre est en fait supérieur à 12. Nous savons que 19 est supérieur à 12. Donc 19 doit être de ce côté-ci. Donc, nous prenons tout ce côté ici et nous sortons. On ne le regarde même pas. On ne va pas y toucher. Nous ne allons pas vérifier ce qu'il y a dedans parce que nous croyons que ce tableau est trié. Par conséquent, on va aller de l'avant et aller à droite. On va jeter un oeil sur le bon côté, et ensuite on va faire notre petite formule une fois de plus. On va aller de l'avant et prendre à gauche et la gauche est à cinq. Typiquement, cependant, nous avons déjà cherché ceci. On n'a pas besoin de regarder ça. Donc nous allons vraiment le faire puisque c'est plus grand que nous en ajoutons un. Si c'était moins que nous en prendrions un. Mais on va aller de l'avant et commencer par six maintenant, donc on va aller de l'avant avec six, et ensuite on va ajouter un, euh, plus le bon côté, qui est encore 10. Divisez ça par deux. Et cette situation, nous allons en fait obtenir un 16 divisé par deux, ce qui va égaler huit. Et pour qu'on regarde la section 8 ou l'index 8 ici, on va dire, qu'est-ce que c'est ? Index huit. On jette un coup d'oeil. Et, bien sûr, X de huit. Eh bien, ça renvoie un 20. Eh bien, est 20 plus grand que ou est-ce moins que notre 1920 est supérieur à 19. Donc notre deuxième recherche était juste ici. 20. On jette un coup d'oeil. On se rend compte que c'est une leçon. Alors on va à gauche. Et ça veut dire que Hey, on n'a pas besoin de toute cette section ici. Alors maintenant, on va aller de l'avant et prendre les huit moins par un, et ensuite on va prendre tout ce qui reste. Donc la partie gauche de ceci est six. La partie droite est sept. Donc on va continuer à baisser la formule. Donc, nous allons de l'avant et nous prenons les six, puis nous l'ajoutons aux sept dans cette situation ajoutée à sept. Ensuite, nous divisons cela par deux, et nous obtenons 13 divisés par deux. Maintenant, c'est important. Nous avons 13 divisés par deux. Avec cela, nous faisons généralement quelque chose appelé troncature où cela n'est pas égal à 7,5 dans cette situation . Ou en fait, rien de tout cela ne serait 6,5. Ce n'est pas égal à 6,5 et nous ne l'arrondissons pas. On n'arrondit pas tout ça. On fait ce qu'on appelle ça troncature, c' est-à-dire qu'on tronque juste l'arrière. Quoi que ce soit, nous l'effacons et nous prenons tout l'entier. Nous prenons quel que soit le nombre au début est le nombre entier. Donc, par exemple, si nous avions un 7.9, il en serait encore sept. On avait 7.3. Il en serait encore sept. Si nous avions 7.98, il en serait encore sept. C' est ce qu'on tronque. Alors c'est ce qu'on fait. Quoi qu'on fasse cette formule. Donc on a tronqué et on en a vérifié six. Nous allons de l'avant et nous jetons un coup d'oeil à six. Nous jetons un coup d'oeil à six et nous obtenons le numéro 17. Nous recommençons notre petit processus. Eh bien, nous savons que c'est juste et nous pouvons faire la formule une fois de plus ici et généralement avoir comme un chèque. Si c'est le dernier élément, suffit de regarder l'élément de celui-ci. C' est là ? Est-ce qu'il ne passe pas à autre chose ? Cependant, nous pouvons tout recommencer. On peut le faire. Le sept est à gauche. Plus sept est le droit divisé par deux. Donc c'est 14 divisé par deux, ce qui équivaut à sept. Ensuite, nous faisons notre formule que nous vérifions est sept. Ici, c'est 19 égal à 19. Il l'est. Ça veut dire que nous allons de l'avant et que nous vérifions. C' est ainsi que cette formule fait. Il le prend et chaque fois qu'il le divise en deux. Et c'est une sorte de partie importante ici. Pour comprendre, c'est que chaque fois que nous divisons le problème et 1/2 donc cela signifie, par exemple, si nous avons commencé avec oh, je ne sais pas, comme 128 éléments différents après la première génération ne vérifiaient que 64 éléments. Ensuite, nous vérifions 32 articles et après ça, nous vérifions, vous savez, 16 et dans huit, puis quatre, puis deux et puis un. Et le fait est, parce que cela double à chaque fois, le nombre d'étapes ne fait qu'augmenter. Il augmente de plus en plus lentement. Ainsi, par exemple, chacun d'entre eux est une étape. Donc, nous avons 123456 et nous devions le parcourir plusieurs fois tout au long de ce cours parce que c'est si important dans tant de domaines différents. Mais ce que nous avons ici, c'est que 128 équivaut à Onley six étapes. Maintenant, si nous doublons cela, si nous allons encore un pas plus loin Donc au lieu de 128 articles, nous avons 256 articles Will 256 égal seulement sept. Nous ne faisons qu'un pas de plus pour y arriver. Et puis, bien sûr, on pourrait en descendre un autre, qui sera 512. Et ce n'est que huit et ainsi de suite et ainsi de suite et ainsi de suite. Donc nous obtenons que ce graphique dont nous parlons pas pas si laid. Avoir un graphique. Nous obtenons ce graphique dont nous parlons, où il monte et encore où le nombre de dans que nous obtenons le changement, le temps d'exécution, c'est le temps d'exécution de la gauche devient de moins en moins et de moins en moins au fil du temps. Et que ce modèle ici, c'est appelé Se connecter. Et si nous avons fait une demande, si nous avons réellement mis dans le journal de 512, il nous arrive réellement. Il produit huit. C' est ce que le modèle est. C' est juste la façon dont les mathématiciens représentent. Ce modèle est à travers cette chose appelée journal. Et c'est pourquoi le runtime sort pour se connecter. Parce que ce petit modèle complexe ici, ce n'est pas vraiment trop complexe. Une fois que vous branchez sur un ordinateur, c'est comme six lignes de code. Mais ce modèle ici fait vraiment tout le truc. Il le fait et il le coupe de moitié à chaque fois, de sorte que nous obtenons le journal dans le temps. Et donc, puisque nous pouvons le faire là-dedans, nous pouvons utiliser cette recherche binaire pour le faire. Notre pire cas, exécution, peut être ramené à juste log de n 13. 2-5 réseaux circulaires: dans la dernière leçon, nous avons discuté d'une augmentation et de la façon dont nous pourrions ajouter des soustractions. Et puis nous avons aussi discuté de l'heure de ces rayons, comme quoi ? Toutes sortes d'opérations, ce que ça coûte. Donc, si vous vouliez répondre au hasard, nous pourrions le faire instantanément. Mais si nous voulions l'insérer à l'avant par rapport à, comme le reste de la course, nous devons repousser le reste du rayon en arrière, en fait, il faudrait aller tout dedans. Et tout ce genre de, vous savez, ils supposent que nous ne sommes pas dominants. Les choses étaient supposées que nous gérons efficacement nos données lorsque nous ne supprimons pas remplacons pas ou ne sortons pas trop loin de nos limites de tableau. Donc, ce sont essentiellement les limites du tableau que nous avons créé, mais nous pouvons réellement améliorer l'un d'eux, et ce sera celui-ci ici, l'insert à l'avant en créant quelque chose qui est connu comme un tableau circulaire. Donc, en théorie, ce que nous faisons est le tableau et la mémoire va toujours ressembler à ceci. Ça va toujours être un bloc qui va aller du , début, à la fin comme ça va être alloué et ensuite il va être rempli, et c'est à ce sujet. Tu ne peux pas vraiment faire ça comme quoi que ce soit d'autre. Mais théoriquement, nous allons trouver un moyen de prendre cette arrivée et nous pourrions en faire un rayon circulaire, qui est comme ça. Donc, par exemple, évident maintenant et maintenant, nous allons réellement prendre ce tableau, et nous allons le faire dans ce cercle juste ici. Le bénéfice de cela est maintenant que si nous voulons insérer quelque chose, disons que nous avons 123 si nous voulons insérer quelque chose à l'avant. Disons que c'est le front. Tout ce que nous avons à faire, c'est juste regarder un en arrière et l'insérer juste là. Et à quelle vitesse avec ça. C' était le temps constant, ce qui signifie que nous pouvons réellement améliorer l'insertion sur le front en tant que temps constant en créant ce tableau circulaire. Et donc ce que nous allons dio, c'est que c'est un peu difficile à mettre en œuvre dans le code, mais la théorie derrière elle n'est pas si difficile. Donc on va avoir ce qu'on appelle « Pointers ». On va en avoir un qui pointe en haut juste là. Et ils allaient en avoir un qui pointe vers le bas juste ici. Et ils vont tous les deux pointer exactement au même endroit en ce moment parce que ce haut, ce haut, ce sera l'avant de notre droite. On va avoir quelque chose qui nous dit que c'est l'avant, et on va avoir quelque chose qui nous dit que c'est l'arrière. Et donc maintenant, chaque fois que nous insérons dans le tableau et nous disons que nous ne faisons pas d'insertions aléatoires ne faisaient qu'insérer à l'arrière ou à l'insertion de l'avant du tableau. Donc on insère à l'arrière en ce moment, ou à l'avant. Ils sont tous les deux pointés exactement au même endroit. On va aller de l'avant un insert, un numéro juste ici. Et maintenant que nous avons inséré un numéro dans notre tableau, nous pouvons ensuite reprendre le dos et en fonction de la façon dont vous l'implémentez. Ainsi, par exemple, nous pourrions toujours insérer un plus quel que soit le dos indiqué, ou nous pouvons pointer le dos vers le prochain espace disponible. Je vais pointer vers le prochain espace disponible Donc nous avons rempli celui-ci maintenant et sur le dos est en fait déplacée ici. Donc maintenant, il pointe ici comme si et maintenant nous avons ce sont de retour, est pointé ici, et donc nous allons de l'avant et insérer un autre numéro. Donc notre programme, nous pouvons juste en fait, si nous l'avons écrit dans un programme, nous pourrions vraiment faire quelque chose comme ça. On pourrait retourner X en arrière, et ça nous mènera à l'endroit exact qu'on veut remplir. Donc, on remonte X égal à six. Et maintenant on peut mettre un six ici. On va faire exactement ce qu'on vient de faire avant. On va choisir ça ici. Laissez-moi obtenir une sélection juste ici pour que je puisse sélectionner du tout. On va attraper cet élément, et ensuite on va le déplacer à la partie suivante, et une partie de ma flèche n'a pas réussi avec ça. Alors allons bien, une partie de ça, j'allais y rester. Donc, ce que nous avons maintenant, c'est que le dos est déplacé sur un. Donc maintenant sont de retour est pointé ici, et donc tout va bien. Mais ce que nous pouvons faire maintenant, c'est parce que nous avons ces pointeurs qui nous disent exactement où se dirige tout. Nous pouvons réellement insérer de l'avant sans faire um sans avoir à tout pousser vers l'avant. Et c'est parce qu'au lieu de tout pousser vers l'avant, nous allons juste déplacer le pointeur en arrière. Alors, nous allons insérer de l'avant maintenant, allons de l'avant et insérez l'avant. Donc, par exemple, nous pourrions aller, euh, nous allons x de front égal à un certain nombre, mais vous remarquerez que dans cette situation, le front est en fait pointé à l'avant. Donc, ce qu'on peut faire, c'est faire x de front moins un, et ça va nous emmener à l'endroit juste à côté. La tache moins un. Et nous aurions pu faire ce que nous avons fait avec l'arrière où enlevé et dit faire cela. Mais je voulais faire dans les deux sens ici, donc on fait X de Front moins un égal sept. Et donc ça va nous faire un ex de négatif un égal de sept. Mais ça ne marche pas. Nous ne pouvons pas ajouter un inju négatif. Notre rayon aura une deuxième chute. On va sortir de nos limites. Les nombres négatifs n'apparaissent pas dans une augmentation. Donc ce que nous pouvons faire et dire, c'est qu'il va réellement faire cet algorithme ici où nous allons prendre le nombre quel que soit. Donc nous avons inséré dans un négatif et nous allons ajouter autant, um, um, taches il y a ici et donc vous pouvez voir qu'il y a 123456789 10 11 12 Parce que rappelez-vous, c'est en moins un. Ici, c'est en moins un. Donc, cela signifie que notre dans est égal à 12. Donc nous allons faire, c'est nous allons prendre la liaison illégale et nous allons y ajouter . Et dans ce cas, donc c'est négatif un plus et donc nous ajoutons 12. Et ça va nous donner la position de 11. Donc maintenant, quand on ira à ce négatif, on va le relier, et on va l'insérer dans le dos, non ? Comme ça, insérez ce sept ici à l'arrière du rayon. Et maintenant ce qu'on va à Dio, c'est qu'on va prendre cet élément et on va le traîner ici comme ça. Et maintenant, l'avant de notre rayon est Laisse-moi aller de l'avant et courir là pour qu' on n'ait pas de flèches ici. Donc maintenant, l'arrière ou l'avant de notre taux est en fait à l'arrière de notre droite, et donc cela devient un peu déroutant. Tu es genre, c'est quoi l'avant ? C' est quoi le dos ? Donc, nous ne devons plus penser à ça comme ça, cette ligne droite plus. Nous devons y penser comme si nous l'avons enroulé en rond. Donc, nous faisons est de le faire pour émuler cette boucle est que nous prenons réellement l'avant et l'arrière nous gardons une trace d'eux, et cela nous permettra d'insérer à ces deux positions en appelant simplement un certain nombre et en insérant là. Et ça va continuer comme ça pendant que celui-ci va continuer par là. Et, bien sûr, vous pourriez arriver à un point où ils commencent à se surpasser. Et encore une fois, ce n'est pas quelque chose que nous essayons de traiter avec vous. C' est une erreur. Si jamais vous avez votre front et votre dos comme essayer d'attaquer exactement la même zone. C' est une erreur de votre part sur la mise en œuvre de votre programme et elle devra être abordée quelque part dans le manteau. Mais ce n'est pas à propos du code. C' est à propos de la théorie. Donc avec cela, ce que nous avons créé ici avec ce rayon circulaire en ajoutant les pointeurs avant et arrière et, vous savez, ils pourraient juste être des variables qui littéralement nos nombres. Donc nous pourrions maintenant dire que le front est égal à 11. Alors que nous pourrions dire retour égal à deux et puis si jamais nous voulions insérer, nous pourrions juste retourner x de retour comme nous l'avons fait là-haut équivaut à quelque chose. Ou on pourrait aller à l'avant moins un. Et j'ai fait le moins un et l'exact parce que, comme je l'ai dit, je voulais juste vous montrer les deux façons, mais vous voudrez peut-être les garder semblables. Hum, donc ça devrait être de retour moins un et avant moins un ou à l'arrière et à l'avant. Ce sera juste déroutant si l'un d'eux est différent de l'autre. Mais ce que j'essaie de dire ici, c'est maintenant que nous avons ces variables et qu'elles sont vraiment faciles à suivre. Après avoir créé quelque chose, nous disons juste avant plus un dos plus un ou autre. Notre front moins un retour plus un et ensuite on peut continuer à l'appeler. À partir de l'arrière, à l'avant de ce rayon, nous le rendons circulaire. Et à travers tout ce que nous créons, nous pouvons franchir l'o de l'entrée et avec un rayon circulaire sont le temps d'insertion devient en fait o d'un. 14. 2-6 tableaux dynamiques: jusqu' à maintenant, nous n'avons pas tenu compte d'un cas important. Et c'est le fait qu'une augmentation peut remplir et ce que nous faisons, gagner une augmentation, remplir. Nous avons discuté avant ce point essentiellement de ce que l'on appelle des tableaux fixes, qui sont soulevés qu'une fois qu'ils arrivent à la fin, une fois qu'ils sont pleins de capacité, rien d'autre ne se passe. Tu vas devoir écraser un doute, une subvention pour supprimer des données. D' une manière ou d'une autre, il faudra faire un compromis. Cependant, il existe une sorte de tableau qui peut grandir avec votre programme, et cela s'appelle un tableau dynamique. Et donc ce que nous allons discuter dans cette conférence, c'est une augmentation dynamique de la façon dont ils fonctionnent et certains des temps d'exécution qui pourraient être associés à une telle augmentation. Donc la première chose que nous devons comprendre, c'est qu'un côté et Ray devient plein. Donc, disons que nous avons dans un rayon juste ici et une fois qu'il devient plein de chiffres ou de données. Donc on a, genre, genre,trois ici, deux, peut-être un 1 1007, ça n'a pas d'importance une fois qu'il est plein. Une fois que notre Ray est plein, ce que nous faisons pour ajouter à cela. Bon, donc si nous, vous savez, étiquetons ici certains endroits ici. Donc, nous avons la colonne 01 234 La seule autre façon que nous pouvons ajouter à cela est que nous devons écraser quelque chose. Et si nous voulons ajouter à la fin, alors nous arrivons à un gros problème parce que nous ne pouvons pas ajouter à la et il n'y a pas de fin. Cela va dire, hum, par exemple, si vous avez un programme qui incrémente juste ID d'un à chaque fois, nous voulions ajouter à la fin. Une fois que nous arriverons à ce point et que nous essayerons d'ajouter à la fin une fois de plus, il va obtenir une deuxième chute. On va avoir quelque chose comme, tu sais, hum oh, on doit additionner jusqu'à un ex de cinq maintenant égal à sept. Cela ne va pas marcher. Cela va se terminer par une faute de segue parce qu'il n'y a pas cinq ici. Il n'y a pas cinq à droite ici, donc il va essayer de toucher des données qu'il n'a pas la capacité ou la connaissance toucher, ce qui va définir la faute du programme. Ça s'éteindra et ça ne s'exécutera jamais. Alors, que faisons-nous dans cette situation ? Ce que nous pouvons faire, c'est que nous pouvons réellement augmenter dynamiquement la taille du tableau. Maintenant, le problème est, est qu'une fois qu'un tableau est créé, la taille est créée. Si vous vous souvenez, retour pour avoir une mémoire a été créée, par exemple, nous avions un tas de segments et disons dans chacun de ces segments, il a créé ce tableau ici. Mais le problème est que ce segment a déjà été attribué et après cela a été des données supplémentaires . Vous ne pouvez donc pas simplement augmenter la taille du tableau. Cela ne fonctionne pas parce que vous remplaceriez d'autres données critiques du système ici . Et c'est un problème. On ne veut pas faire ça. Donc, ce que vous pouvez dio est au lieu de simplement ajouter à la toute fin, vous pouvez créer un nouveau tableau et copier toutes les informations là-bas un nouveau tableau plus grand. Et c'est donc la technique courante qui est habituellement utilisée. Et donc là. Vous savez qu'il y a deux façons différentes de le faire. Disons qu'au lieu d'un cinq, tableau voulait en ajouter un à la fin. Donc maintenant ce que nous avons à dio, c'est de nous créer dans un rare ici. Disons que c'est au lieu de cinq bigot, six gros. Donc c'est ici. Ici, ici, ici, voici que 123456 Ok, et puis on copie une donnée. Donc, nous en avons trois et cela bloque le problème ici est ce que nous avons pour créer un nouveau tableau ? Parce que ce dont nous venons de parler, nous ne pouvons pas simplement prolonger la durée. Nous devons donc créer un nouveau tableau, mais il n'y a pas d'augmentation vide. Maintenant, on va devoir aller chercher toutes les données et les copier . Et quand on fera ça, ce qui finira par être, c'est qu'on va devoir faire une transaction. Donc un coût ici est de trois, puis un coût pour obtenir le coût de 21 pour obtenir le coût de 11 pour obtenir le coût de 10 1 pour obtenir les sept , puis l'encart ici. Donc, par exemple, créons un insert. Maintenant, il crée ex de cinq. On a dit qu'il était égal à sept. Et donc nous obtenons ce sept inséré. Mais vous remarquerez qu'au lieu de l'insertion normale à la fin que nous avons affaire, rappelez-vous, rappelez-vous, de retour dans tout cela, à l'intérieur à l'arrière devrait être le temps constant. Donc, le Ray dynamique le problème est, c'est que lorsque nous avons essayé d'insérer à l'arrière d'un tableau qui était déjà rempli, nous avons ajouté un autre, mais cela a pris du temps. Pourquoi cela a-t-il pris du temps ? Parce qu'il y a en chiffres ici, il y a 12345 Donc dans cette situation sont dans notre égal à cinq . Mais on a dû prendre. Nous avons ajouté un à nos extrémités avec un R N est devenu six, et il a fallu six opérations pour tout copier. Et alors imaginez si c'était un tableau de, disons, 100 d'entre eux juste ici. Il faudrait 100 opérations pour tout copier. Cela signifie donc directement proportionnel au nombre de chiffres que nous avons ici. Comme nous avons maney ici. C' est exactement combien d' d' opérations vont prendre. Donc, au lieu de notre odeur rapide d'abord, ou sont temps constant n'est plus que cet insert devient effectivement o de temps de fin, et c'est un problème parce que l'insertion dans une course devrait être rapide. C' est l'un de ses avantages. Cependant, si nous arrivons à l'heure de fin que certaines de nos autres options commencent à devenir beaucoup plus appétissant, parce que nous n'avons plus d'inserts instantanés. Alors, qu'est-ce qu'on dio ? Il y a en fait un moyen de contourner cela. Il y a un moyen pour que vous n'ayez pas à faire cette implémentation afin que vous n'ayez pas à le changer à la fin. Vous pouvez garder relativement cela ici, et tout se résume à quelques moyennes. Donc, disons qu'au lieu de le faire de la manière naïve, ce qui serait d'insérer une nouvelle boîte à chaque fois. Donc, si nous en avons besoin, nous prendrions une boîte ici à la fin, ce que nous avons fait ici. Et si nous en avions besoin, nous créons un nouveau tableau ici, et ensuite il a vous savez, il B 7 grand, et nous pourrions continuer à le faire. Mais tout ce que nous faisons que cela devient dû à la fin, donc nous pouvons faire à la place affaiblir faire est que c'est le double de la taille du tableau maintenant. Donc, si vous avez un tableau qui a été créé, passons par le double type de graphique ici. Donc, vous avez un tableau. Il est maintenant rempli d'un. Maintenant, vous insérez à la fin. Maintenant, on le double. C' est trop que quatre que huit sur 16 que 32 sur 64 1 28 et ainsi de suite. Ça monte que nous faisons à Exponential est là pour faire le X juste ici. C' est ce que nous faisons ici est à chaque fois que les fusées sont remplies, nous allons doubler la taille du tableau et la façon dont cela aide est parce que si vous remarquerez qu'il y a une quantité de temps décroissant que nous devons utiliser sur le fin. Ainsi, par exemple, vous verrez que dans chacun de ces points, il doit être O jusqu'à la fin. Nous avons à vous. Nous devons copier l'ensemble des données de ce qui précède. Nous devons copier les données précédentes dans la nouvelle. Mais vous remarquez aussi quelque chose ici est qu'il y a une quantité croissante de distance entre chacun de ces nombres. De plus en plus, il devient plus en plus long, ce qui signifie que si nous n'avons pas à le redimensionner, nous n'avons pas à le redimensionner ici ou ici. Ce qui signifie entre, par exemple, 65 65 à 1 27 Nous n'avons pas besoin de le redimensionner, ce qui signifie que toutes ces opérations sont une route vers l'une parce que nous faisons juste des inserts réguliers à ce stade. Donc c'est un peu ce que cela représente ici le bas ici est ce que je représente ici, c'est que nous prenons cette taille et au lieu de l'avoir cinq, nous doublons à 10. Donc maintenant nous copions les données ici et nous allons à trois, 21 10 107 et au sept. Et maintenant, au lieu d'avoir à faire à la fin pour les quatre prochaines opérations, ces annonces seront toutes oh, à l'un parce que nous n'avons pas à redimensionner affaiblir. Il suffit de l'insérer comme un tableau normal. Et donc celui-ci était l'O jusqu'à la fin. Et puis si nous le ramenons, si nous regardons ici, nous pouvons penser à cela pour que celui-ci ait dû être jusqu' à la fin pour insérer, et ensuite il a dû doubler. Donc celui-là aurait été à la fin. Mais alors nous avons une place de 02 avec un oh à l'un et ensuite aurait un double. Celui-ci avait cinq ans. Ça devrait être quatre. Si nous le faisons de cette façon, nous verrons qu'il commence à obtenir de plus en plus de quantité de O à ceux. Et pourquoi est-ce si important ? Parce que cela signifie qu'au lieu de toute notre opération est O jusqu'à la fin, nous pouvons réellement créer dans une sorte de moyenne. Jetons donc un coup d'oeil à cette moyenne. Alors on va ici et on va passer par une simulation de création ici. Donc on a un insert 23456. Je vais juste descendre la liste ici. On va juste créer une petite table ici. tous les inserts possibles que nous pourrions faire jusqu'à un certain point et que vous commencerez à voir le modèle ici, vous commencerez à comprendre pourquoi c'est vraiment bon de le faire pour doubler le tableau dynamique , et nous allons aller jusqu'à 25 ici. Nous allons en fait aller jusqu'à 32 parce que c'est l'un de nos bits est l'un de nos points doubles . Ok, donc quand on insère 12 ici, ça va être une opération constante. Nous avons un tableau. On va créer notre droite et ça va être F taille 1. Donc ça va être constant, ça va être un juste ici. Maintenant, une fois que vous arrivez à ce point, va courir dans l'espace, donc nous avons dû le doubler. Alors maintenant, c'est trop grand. C' était donc une ode à l'opération en cours, qui, en fait, était un non à l'opération unique parce que nous n'avions qu'un seul élément de données à transférer. Mais techniquement, c'est une ode à la fin, donc on va s'asseoir sans toi là-dedans. Maintenant, nous avons un espace ouvert ici, donc si vous pensez à ça, je vais dessiner la photo ici un peu au début pour illustrer ce que nous faisons ici. Donc on avait une place. Le problème, c'est que nous voulions insérer un 2ème 1 Il n'y a plus de taches. Ce qu'on a fait, c'est qu'on a doublé, on a copié les données. Donc maintenant, il y a assez de taches. Maintenant, nous voulons passer à trois. Le problème, c'est que lorsque nous en arrivons à trois, nous devons le doubler à nouveau parce qu'il n'y a pas de places disponibles. Maintenant, on va doubler à nouveau, et on va remplir que l'insuline va être un autre O jusqu'à la fin. Mais maintenant le numéro 4 pour remplir la quatrième place, c'est ouvert, donc on peut juste aller à celui qu'on n'a pas à doubler cette place ici. Le taux spot ici est ouvert, et donc on continue, et on a remarqué que 5 va devoir être doublé parce qu'on a couru sur les spots pour qu'on puisse aller de l'avant et le doubler encore. Copiez toutes nos données sur le nouveau tableau. Et maintenant, allons de l'avant et supprimons l'ambiguïté juste là. Et maintenant, nous avons toutes nos données. Nos données sont en train de remplir celui-ci et celui-ci et celui-ci celui-ci celui-ci, un et cinq, et maintenant, et maintenant, une fois qu'on aura à se battre. Alors que les cinq opérations que l'on nous a conduites vont à la fin, et maintenant, une fois que nous serons à six ici, nous pouvons le remplir immédiatement. Alors allez à la 17 est exactement de la même façon sur l'un et sont lieu a huit endroits. Donc c'est jusqu'à la fin ici ou mon mauvais, mon mauvais. Il en est encore un avec un parce que nous avons un espace ouvert ici avec un autre O à l' autre. Donc maintenant, nous avons l'intégralité du tableau rempli une fois de plus, c'est 12 12345678 Il est rempli, et maintenant nous devons doubler une fois de plus, donc nous le doublons à nouveau. Et maintenant ce qu'on doit faire, c'est créer un non à l'opération en cours, et je vais continuer à le dessiner maintenant parce que maintenant vous pouvez voir un modèle. Voilà donc nous l'avons doublé. Et maintenant, c'est bon jusqu'à 16 places, pour qu'on puisse sortir avec une. Oh, celui avec un. On peut continuer jusqu'à ce qu'on arrive à la double partie suivante. Et maintenant, on est à 16 ans. Donc maintenant, ça va jusqu'à la fin, et ensuite on va continuer Temps constant, Temps constant, Temps constant, Temps constant, Temps constant, Temps constant, Temps constant. Je ne vais plus écrire Theo. Je vais juste corriger les temps constants constants, constants, constants, constants, constants. Et puis jusqu'à ce que si nous avons fait 32 constante 33 et ainsi de suite. Et pourquoi est-ce important ? Eh bien, vous remarquerez au tout début, nous avons eu un tas d'opérations O au N. Mais après cela, il était de plus en plus de moins en moins jusqu'à la fin. Et de plus en plus de cabane en rondins ou de plus en plus, mawr temps constant. Nous, par exemple, ici Nous avons trois constantes qu'un temps linéaire. C' est comme ça qu'on l'appelle. On va commencer à l'appeler linéaire un temps linéaire, puis un tas de temps constants, un temps plus maigre qu'une quantité extraordinaire de temps constants qu'une fois. Et ce qui se passe est au fil du temps ces temps constants ou non constants, ces temps linéaires vont être dépassés. Ils vont être dépassés. Et c'est parce que le fait que nous doublons à chaque fois, donc quand nous le doublons, nous créons en fait des occurrences rythmiques logarithmiques de O jusqu'à la fin. Donc, nous sommes en train de créer une occurrence comme celle-ci, vous pouvez voir cette lecture. Au début, nous avons un tas débarrassé du début. Nous avons un tas de différents. Ça va de zéro orteil. 1234 appels de connectés. Mais après ça, cinq appels sont là. Six appelle son chemin par ici. Sept appels sont complètement hors de l'écran. Et donc il devient de moins en moins au fil du temps. Et tout cela se résume à une sorte importante de, hum, une réalisation importante. Et c'est que je vais de l'avant et que je fasse quelque chose ici. Et c'est le fait que si nous le doublons à chaque fois que nous le doublons, ce que nous faisons en fait, c'est que nous créons un journal dans le temps, un journal de quatre en moyenne nos extrémités, ce qui signifie que ce genre de devient un peu difficile Matthieu. Donc je vais juste te le dire et je vais juste le comprendre en quelque sorte. Peut-être que nous allons joindre un document qu'il comprend un peu plus. Mais ce qui se passe ici est ce journal de fin, parce que dans est associé à cela, parce que nos appels, parce que nos appels à parce que nos appels à la fin commencent à aller dans un journal de in. Nous pouvons en fait ramener cela à des temps constants. La moyenne devient un temps constant, ce qui signifie que le pire scénario global devient, toutes fins intenses, temps constant. Maintenant, c'est une touche au-dessus dutemps réel et constant, temps réel et constant, mais pour des raisons relationnelles de le comparer à d'autres choses que nous pouvons comprendre et affaiblir. Et on croit très largement que cet insert devient un temps constant. Et donc, à travers tout cela, c'est juste que vous pouvez y penser. Il existe plusieurs façons différentes d'implémenter un tableau dynamique, mais il existe un moyen très efficace de le faire. Et vous remarquerez que beaucoup d'informatique a des choses comme celle-ci où il y a un moyen très efficace d'implémenter ces conceptions et ces modèles. Et il y a un moyen très inefficace. Et donc, dans cette situation, doublement à chaque fois est très suffisant dans le fait qu'il arrive à temps constant tout le chemin à la fin à cause de ce changement rythmique logarithmique. Et c'est pour ça que c'est compréhensif. Les mathématiques sont en quelque sorte importantes, parce que grâce à cela, Matthieu pourrait comprendre que lorsque vous créez cette longue moyenne de chaînes au fil du temps , votre opération est en quelque sorte en moyenne sur le temps constant, et que serait le moyen le plus efficace de le faire. Donc, ce sont des tableaux dynamiques et un peu de la théorie derrière eux. Un peu de mathématiques derrière eux et juste une sorte de bonne introduction à la façon dont le travail de levage dynamique et comment vous pourriez en quelque sorte créer un taux dynamique, ce qui est juste en créer un nouveau, puis en doublant la taille, puis en remplissant tous les l'information à chaque fois qu'il double. Donc, ceux-ci sont dynamiques augmenter leur vraiment, vraiment cool parce qu'ils suppriment une partie de cette limitation de la taille de l'espace devant être constante , et ils vous permettent d'avoir juste beaucoup de sorte de flexibilité ah dans votre programmation. 15. Examen de 2-7: Donc, nous avons beaucoup parlé d'une augmentation dans ces deux dernières conférences. Et donc je voulais juste prendre un peu de recul et remonter tout ça très rapidement et en quelque sorte lier tout ça ensemble dans 11 vidéos. Donc on va y aller vite. Ce que nous avons appris dans les leçons précédentes en quelque sorte re, vous savez, illustre ce que nous avons appris et ensuite juste lier tous ces aspects ensemble pour que nous puissions vraiment avoir une bonne compréhension d'une augmentation, comment ils fonctionnent ce que leurs temps d'exécution, etcetera. Donc, la première chose que nous devons faire est de se rappeler comment la course fonctionne. Donc augmenter sont juste un point de données à l'intérieur de notre disque dur ou de notre ram ou un autre point de notre ordinateur. Et ces données sont amenées dans un segment sur chaque fois que nous créons un tableau pointait vers le morceau de données dans son ensemble, et nous lui donnons un nom. Donc, par exemple, il a une adresse physique, une adresse d'ordinateur, mais nous pourrions simplement la déclarer comme une variable comme, disons, X est un tableau de ce qui est une longueur de rang cinq. Et donc, dans cette situation, nous pourrions déclarer notre tableau du nom de X pendant la conversation informatique. Il est de trouver une adresse de lieu et de mémoire spécifiques, et puis une fois que nous appelons cette adresse, elle va alors nous amener dans le tableau lui-même. Et le tableau a ces nombreux noms, que j'aime les appeler, qui sont juste le genre de partie du tableau que nous voulons contacter. Et puis on peut contacter tout ça et ils sont généralement comme s'ils pourraient même être mis à la fin juste ici. Donc ça pourrait être zéro, etcetera. Cependant, l'ordinateur fait ce genre d'en dehors de la portée de ce cours, Mais l'ordinateur fera son truc pour que nous puissions accéder à chacun de ces points instantanément juste en lui donnant son nom complet. Et puis il y a beaucoup de noms. Donc, dans cette situation, si nous voulions, si nous avons rempli le taux de données et sans péché ici, donc, par exemple, nous avons, vous savez, juste quelques chiffres ici, et nous voulions saisir un point précis ou un endroit précis ici. Tout ce que nous avons à faire est juste de lui donner le nom et ensuite le mini nom dans cette situation, aussi. Et puis nous reprendrons nos résultats. Donc, par exemple, cela serait de le fixer à 10 et ensuite, pour le récupérer, nous disions que nous l'appelerions simplement et qu'il le rappellerait et qu'il nous en donnerait 10 parce qu'il partirait. C' est son nom principal. Il saisit son nom de crinière. Il est utilisé dans son nom beaucoup, puis il obtient notre morceau de données comme ça et donc une augmentation peut également avoir des propriétés supplémentaires , le tableau dans cette situation. Ce que nous faisons c'est que nous allons en fait juste d'un à l'autre le suivant, et nous l'appelons arbitrairement en disant que devrait être 10 3 devrait être 44. Cependant, si vous voulez ajouter un peu plus d'un style une structure à cela, nous pouvons commencer à ajouter à l'arrière ou à ajouter à l'avant et juste par lui-même. Dans cette situation, nous commençons à entrer dans le problème où, si nous voulons ajouter à l'avant, nous allons devoir prendre toutes nos données et les déplacer vers le bas d'une parce qu'il n'y a aucun moyen que nous puissions simplement associer. Mais c'est le front. C' est la fin. On ne peut pas aller au négatif. Un négatif est une faute SEC qui n'existe pas dans notre programme. Donc on devrait tout changer. Et cela amène un problème pour qu'on puisse résoudre ça. Le problème est que nous pouvons commencer à créer une sorte d'aspect supplémentaire pour honore. Donc, si nous voulons le rendre circulaire, rappelez-vous, cela a été donné à Si vous voulez le rendre circulaire, nous ajoutons juste un pointeur avant et un pointeur arrière dessus et cela émulera un tableau circulaire . Il émulera ce genre de chose où le tableau est en fait circulaire en ce sens qu'il sera si vous voulez ajouter à l'avant tout ce que vous avez à faire est de déplacer un vers la gauche, sortant vers l'arrière. Tout ce que vous avez à faire est de déplacer un, ou dans cette situation, inverse des aiguilles d'une montre ou dans le sens horaire. Si vous voulez ajouter à l'arrière et que nous pouvons alors déplacer ces pointeurs ce qui est sur tout ce nous pouvons alors déplacer ces pointeurs d'une zone à l'autre. Si nous le choisissons une fois que nous ajoutons un élément ici. On pourrait associer le dos ici. On pourrait associer le dos à juste ici. Et puis nous pouvons ajouter à l'arrière en temps instantané et ajouter à l'avant et à l'heure instantanée aussi bien. Mais alors nous rencontrons dans le cas où, par exemple, sont tableau pourrait manquer d'espace. Donc, par exemple, nous pourrions avoir ce droit, et il pourrait devenir trop grand. Et donc si notre rayon finit par devenir trop grand, ce que nous pouvons réellement dio, c'est que nous pouvons aller de l'avant quand nous pouvons doubler sa taille. Donc, cela en fait un tableau dynamique, affaiblir faire vraiment, n'importe quel moyen de le rendre plus grand ? On pourrait y aller, par exemple, par exemple, il suffit d'en ajouter un à la toute fin. Mais nous avons appris que cela ne le rend pas efficace. Cela le rend vraiment inefficace. Donc, si nous avions un tableau de, comme si nous pourrions doubler la taille une fois que nous atteignons un point invalide et nous pourrions en faire un tableau de quatre comme ceci et nous continuerons à le doubler de haut en haut et de haut en haut, et nous verrons qu'il deviendra lentement plus grand et plus grand et plus grand pour s'adapter à nos données au fil temps, ce qui nous permettra de créer une table ou un tableau, qui au fil du temps ajoute un insert de la fin de O d'un en moyenne. Donc, nous allons avoir quelques exemples de ces instances ici où il va être dans lequel ce sera un temps linéaire dans chacune de ces instances, et cela arrive juste au fait que nous devons copier tout notre contenu à chaque fois que nous re la taille. Nous devons copier notre contenu de l'ancien A dans le nouveau rayon, puis ajouter notre numéro supplémentaire . Et donc chaque fois qu'on doit étendre ça, on finira par le copier partout, ce qui sera dans, hum, hum, la procédure. Donc, ce sera une procédure à chaque fois que nous devons le faire. Mais si nous doublons chaque fois que cela dans la procédure devient de moins en moins commun jusqu'à ce qu'il atteigne un point infini où il devient fondamentalement, nous allons devoir le redimensionner. On va devoir utiliser les temps presque nuls donc penser que si on va à l'infini à un moment donné , il y aura un moment où on utilise, vous savez, une opération constante de 1 000 000 000 000, puis une opération. Et si vous en prenez un et le divisez par 1 000 000 000, vous obtenez un nombre si petit qu' il pourrait aussi bien être nul. Et à cause de cela, il est en moyenne que les extrémités comme elles vont à l'infini, les extrémités ici comme elles vont à l'infini, finissent en fait par devenir zéro, et elles deviennent fondamentalement inutiles. On ne les regarde plus. Donc, nous regardons juste celui qui sorte d'un hors, et c'est l'utilisation constante du temps constant. Donc, si nous doublons notre augmentation A chaque fois qu'ils manquent de données, nous pouvons obtenir un insert de temps constant à l'arrière, ce qui rend notre programme beaucoup plus efficace. Donc c'est juste une sorte de liste de ce que nous avons couvert dans ces dernières conférences sur une augmentation, comment vous pourriez les rendre circulaires, comment vous pouvez les rendre dynamiques, et dans certains cas associer à chaque de ces rayons. Donc, ce sera tester sorte de ces données dans le prochain genre de leçon, où nous faisons en fait un petit quiz ici pour juste s'assurer que tous ces trucs sont cimentés dans vos esprits et que vous comprenez au moins les bases. Tu n'as pas à comprendre tout ça à 100%. Beaucoup d'informaticiens ne comprennent pas tout ça à 100%. Nous voulons juste avoir une bonne compréhension de cela pour que si nous oublions quelque chose, nous puissions aller chercher. Et nous avons une base suffisante pour comprendre ce que nous ne comprenons pas. Si cela a du sens, nous comprenons la partie que nous avons du mal à chercher. Et si nous comprenons un petit peu, si nous avons une base que nous pouvons continuer notre apprentissage. Je suis excité que nous ayons fait si loin que nous avons commencé à apprendre votre première structure de données dans une augmentation, et j'ai hâte de vous voir dans la prochaine unité où nous allons discuter des listesliées des listes 16. Exemples de monde réel: Maintenant que nous avons une bonne compréhension d'une augmentation et comment ils fonctionnent théoriquement, regardons quelques exemples du monde réel où nous aurions pu interagir avec un tableau sans même le savoir. L' exemple le plus courant, ou quelque chose qui est utilisé très couramment est sur nos smartphones. Ah, beaucoup de fois les listes ici et le genre de mise en page APP sont toutes basées sur un tableau. Donc ce qu'ils font, c'est une tempête dans une relance. Et chaque fois que vous cliquez dessus, il appelle la commande quel que soit le tableau que vous avez. Donc, par exemple, avons cette grille ici sur la droite. Vous pouvez voir que nous avons 12345678 tout le long. Et c'est le tableau. Les nombres dans chacun d'entre eux sont stockés dans l'un de ces tableaux. Alors qu'avons-nous cliqué sur un bouton ? Donc, par exemple, si nous avons cliqué sur Facebook taux ici, qui correspond au numéro 10, il va aller dans le tableau et chercher la commande à 10 . Une fois qu'il verra que la commande à 10 est ouverte Facebook, il ouvrira Facebook, et nous ferons de même avec si nous avions 15. Ça ira pour remonter. On en avait 19. Il ira à l'etcetera locale, etcetera. Donc, ce qu'il fait est quand il le construit, il crée un tableau avec un tas de références de ce qu'il devrait ouvrir. Et ces rayons ont aussi d'autres informations. Comme quoi ? L' icône doit être les couleurs. Vous savez, euh, et d'autres types d'informations qui fonctionneraient avec chacun d'entre eux, le nom de l'APP, trucs comme ça. Et puis chaque fois que nous cliquons dessus, il entre et il trouve le logiciel réel à ouvrir chaque fois que nous cliquons dessus. Et ici, nous avons aussi une liste. Beaucoup de fois, ceux-ci sont créés avec une augmentation, donc vous aurez le tableau de comptes, qui aura un tas de choses différentes ici. Et puis vous aurez le tableau général qui aura un tas de propriétés différentes ici aussi. La raison pour laquelle les tableaux fonctionnent. Le meilleur ici est à cause de la façon dont ils sont instantanés. Donc, quand nous cliquons sur 18, nous ne voulons pas de décalage entre cela. Et si on a cliqué sur un, on va en apprendre davantage sur une autre structure de données dans la leçon suivante, ce qui prend plus de temps plus loin que vous allez loin. Ainsi, par exemple, s'il y avait 45 APS, nous ne voulons pas que le numéro 45 prenne plus de temps que le numéro un. Nous les voulons tous pour l'instant. Comme ici quand nous cliquons sur quelque chose, nous voulions être exactement au même moment. Et, comme nous avons parlé d'une augmentation, ayez cette capacité. Vous pouvez appeler le tableau de deux ou quatre ou 10 et obtenir cet élément instantanément, et c'est pourquoi ils sont si importants. Et ils sont très clés à utiliser. Si vous voulez regarder ce que certains des appels à une augmentation pourraient être dans différentes langues, il y a en fait un article Wikipédia vraiment besoin à ce sujet. Mais il y a cette table génial ici et vous pouvez voir toutes ces langues, et chacun d'entre eux a un tableau d'une certaine façon, forme ou forme. Voici une sorte de grands joueurs dans la programmation ici vous avez compris, votre rubis, votre python, votre javascript, Java C plus tellement vraiment, les grands joueurs sur le marché et ils sont tous appelés avec le nom du tableau et dans le numéro d' index Donc, par exemple, cela pourrait être un tableau AP, puis ceci est Index 10. Donc, ce serait un appel de APP Array 10 et il appellerait tout à l'intérieur de cela, donc c'est juste une façon intéressante de le regarder. Vous pouvez voir que même si tous ces langages sont si différents les uns des autres, s'ils utilisent tous une augmentation sous une forme quelconque, ou une autre forme d'une autre utilisation commune d'une élévation avec des bases de données avec vraiment, vraiment grandes bases de données, Parfois, ils ne sont pas stockés dans une élévation, ils sont stockés de manières légèrement différentes, comme des arbres ou des trucs comme ça. Juste parce qu'une fois que vous avez un si grand tableau, vous aimez des milliards, il devient un peu fastidieux et beaucoup de bélier doit être stocké si vous voulez stocker tous ces instantanés. Donc, ce qu'ils font, c'est qu'ils créent des choses qui sont presque instantanées mais qui prendront un peu plus de temps. Mais c'est pour une sorte d'explications ultérieures. Ceci, cependant, est à quoi pourrait ressembler dans un rayon. Si vous avez une plus petite ou même juste des tables à l'intérieur d'une base de données, ils utiliseront une augmentation. Donc, par exemple, si nous voulions trier par batterie de cuisine, nous pourrions prendre tous ceux qui égalent les ustensiles de cuisine et ensuite simplement rappeler. Will pourrait faire peut-être une liste de tous ces nombres, et ensuite nous le passons à une fonction, et ensuite il appelle tout le monde de ces nombres. Donc, par exemple, pour être dans notre liste et puis 13 et 14 seront dans notre liste. Et quand nous avons appelé au 13 14, nous avons pu construire une autre liste avec seulement des ustensiles de cuisine afin filtrer cette liste. Les tableaux sont également couramment utilisés sur le Web. C' est en fait l'un de mes sites Web que j'ai, et cela utilise WordPress. Mais avec la partie soignée à ce sujet est que j'ai parcouru le code et chaque partie de ceux-ci utilise réellement un tableau sous une forme ou une forme fondamentalement ce qu'il fait qui appelle tous les articles comme un tableau. Et il les place ici comme notre exemple d'application plus tôt. Et chaque fois que vous cliquez sur l'un de ceux-ci, il appelle les fonctions, les noms que tout ce qui vient avec, et il passe en quelque sorte cela à travers. Donc, ce Web pages Facebook, Twitter ils utilisent tous une augmentation dans une forme ou une forme pour montrer les données. Et puis aussi, je voulais montrer un peu du code backend ici. Donc, c'est en fait du code du site web, et ce truc est très, très complexe. du site web, et ce truc est très, Je ne comprends même pas si bien. Il faut un peu de temps sur le terrain pour simplement sauter ici et commencer à comprendre les choses. Mais l'une des parties soignées est que vous pouviez juste voir ici. Ceci est un formulaire de commentaire sur WordPress. Il construit dans un tableau. Il crée un tableau de toutes les informations qu'il recueille à partir du commentaire. Et c'est utilisé ici. Vous pouvez le voir. Le tableau est déclaré ici. Et il y a en fait Honore ici et tableau ici. Il y a des rayons de dans une augmentation dans une course. Comme je l'ai dit, vraiment, vraiment complexe. Ce code est une sorte de charabia, moins que vous ne le regardiez vraiment et que vous passiez des heures, des heures et des heures à l'analyser . Mais je voulais juste vous montrer qu'un tableau est présent dans tout cela aussi bien. Donc, partout où vous regardez qui a à voir avec le codage d'une augmentation notre là présent et ils sont utilisés une augmentation sont presque les plus. Faites-le si ce n'est pas la structure de données la plus utilisée là-bas. Donc, les comprendre vraiment bien et comprendre certains de leurs avantages comme s'ils étaient rapides vous montreront en quelque sorte pourquoi ils sont utilisés dans le monde réel si souvent. 17. Noés 3 ou 1: Donc, avant d'entrer dans les listes liées, nous devons comprendre quelles sont les listes liées constituées de quoi sont-elles faites ? Et donc on va parler de ce qu'ils sont faits. Et il y a des nœuds appelés. Alors, qu'est-ce qu'une note ? Une note est vraiment juste un objet de localisation. C' est un objet qui fait référence à d'autres objets, ce qui peut être un peu déroutant définition. Alors allons de l'avant et écrivons ça. Allons illustrer ce qu'est une note. Donc ces boîtes ici, ces deux boîtes en bas cette gauche dans celle de droite serait compté sur nos noeuds. Et ici, nous avons de la mémoire. Donc ils pourraient être un tableau. Ça pourrait être Ram. Cela pourrait être vraiment n'importe quelle sorte de mémoire ici, mais ce que je sais, c'est qu'il faut qu'il a un tas de propriétés différentes à ce sujet. Donc, par exemple, il pourrait avoir, euh, allons-y, comme d' habitude il a une propriété de données. C' est donc la propriété importante. Par exemple, il pourrait avoir un morceau de données comme ça, et peut-être celui-ci a un morceau de données comme ça, mais ils ne sont généralement pas à l'intérieur de la note parce que c'est juste censé être comme un objet de localisation. Donc, ce que le nœud fait en fait, c'est qu'il a une place pour les données en haut, et ensuite il a d'autres caractéristiques du fond, que nous allons passer ici dans une seconde. Et cette partie supérieure des données, elle contient en fait l'adresse à un point de mémoire. Donc, par exemple, disons dans notre mémoire, ici nous avons, um nous avons ces zones et ce n'est pas un tableau ceux-ci ou est-ce qu'ils ont juste, vous savez, vous savez, il y a de la mémoire en plus ici et par ici et ces airs juste des points réels en mémoire. Donc, comme celui-ci est F zéro. Celui-ci est F 1. Celui-ci est F 2, et celui-ci est F 3. Et alors quoi ? Il est en fait stocké ici, est-ce qu'il stocke l'emplacement des données afin qu'il n'ait pas besoin d'être en ordre. Par exemple, celui-ci pourrait stocker zéro x f trois. Donc, il a un pointeur qui le pointe essentiellement vers ce morceau de données. Eh bien, celui-ci pourrait peut-être stocker zéro x f un et ça va avoir ça signifie que Pointer est juste là. Et donc maintenant chaque fois que nous voulons nos données chaque fois que l'un nos données de notre noeud. Donc, si nous voulons les données des noeuds, ce que nous pouvons faire est que nous pourrions simplement appeler le noeud, et puis quelle que soit sa partie de données est appelée et cela nous donnera, il ira faire le travail pour nous. Il va le trouver et ensuite le retourner pour nous. Et donc la partie importante sur les nœuds et la raison pour laquelle ils sont utilisés si souvent est parce qu'ils ont une autre caractéristique particulière. Et je vais utiliser cette galaxie de fonds Penda montrer cette caractéristique, et c'est le fait qu'ils ont la capacité de se connecter les uns aux autres. Donc, par exemple, nous pourrions dire que Eh bien, disons que nous avons un étroit qui arrive ici et que nous avons une flèche qui sort ici. Nous pourrions avoir ici quelque chose comme un suivant, donc nous pourrions avoir une partie suivante de chacun de ces nœuds. Nous pourrions avoir une partie précédente à l'un de ces nœuds et ceux-ci peuvent vraiment être n'importe quoi. Ça pourrait être l'avant. Nous sortons de l'avant sur l'un de ces côtés qui pointera toujours vers l'avant. On pourrait toujours le pointer vers l'arrière. Nous avons toujours pu pointer vers des endroits spécifiques, mais une technique commune est l'avoir précédent et avant. Et alors nous allons de l'avant et juste que juste un peu clair précédent, suivant. Et donc chacun d'entre eux a le précédent et le suivant. Et ce qui se passe, c'est que nous le disons. Où devrait aller le prochain quand nous pouvons pointer vers un autre nœud ? Et dans cette situation, nous pourrions pointer vers une note précédente, et ce nœud précédent pourrait pointer dans cette direction vers l'arrière comme alors laissez-moi. C' était un mauvais air. Laissez-moi lire votre toute cette flèche pour qu'elle puisse pointer en arrière comme ça et puis celle-ci pourrait pointer en avant, qui est juste là, et elle pourrait avoir une flèche qui pointe en arrière vers elle, comme ça. Et donc ce que cela fait, c'est qu'il crée une liste liée, et c'est ce que nous allons discuter est que nous utilisons ces gars ces nœuds ici pour créer des listes liées, et donc nous allons examiner exactement pourquoi les listes liées sont importantes comment ils nous aident, et comment ils, vous savez, vous savez, ils se comparent à d'autres choses, comme le tableau dont nous avons déjà parlé. Donc, dans ce genre de conférence du genre d'unité allaient discuter des listes liées. 18. Liste reliée 3-2: Alors maintenant que nous avons une bonne idée de la façon dont les nœuds fonctionnent, étudions un peu plus loin et revenons derrière l'intuition des listes liées. Alors quelle liste liée est ce que j'ai décrit dans la dernière conférence où vous avez un tas de ces petits nez. Donc, par exemple, nous pourrions en avoir un tas. Je veux dire, ces choses pourraient être infinies, donc on pourrait avoir un mot ici. Une note ici, une note ici, une note ici, note ici, et nouveau le fait et ainsi de suite. Et le raccourci pour le dessin qu'il y a à l'intérieur sera le point de données. Et si elle pointe vers un autre endroit, suffit de dessiner une flèche. Donc, ce que nous avons ici, c'est que nous avons un tas de différents endroits aléatoires en mémoire qui sont tous liés ensemble par ces pointeurs. Donc nous sommes dans un tableau. Nous avons tout eu dans l'espace linéaire. Honore, par exemple, nous avions dans un tableau. On avait tout ça dans, comme un espace linéaire où il était l'un après l'autre. Donc ce serait comme 34 10 12 et 11 ici, où nous en avons eu un après le prochain dans, dans un de ces types de liste liée, ce que vous allez avoir, c'est que les choses vont être partout dans la mémoire. Donc celui-ci pourrait être quelque part. Comme, par exemple, ces quatre pourraient être, vous savez, ici pendant que ce 10 est fini dans un autre morceau de mémoire et ce 12 n'est pas un autre morceau de mémoire et ainsi de suite. Donc, ce qu'une liste liée vit vous dio, c'est qu'elle vous permet de connecter des données partout ensemble. Et donc ce que cela vous donne la possibilité de dio, c'est qu'il vous donne la capacité. Allons-y et débarrassons-nous de ça. Il vous donne la possibilité d'ajouter continuellement à la liste de longueur sans avoir à faire des choses comme l'expansion ou le doubler. Et si vous y pensez quand nous parlons du tableau, comment il a dû doubler à chaque fois pour être efficace quand il devient plus grand, beaucoup de fois nous pourrions rencontrer dans un cas où seulement la moitié du tableau est rempli, ce qui signifie que nous avons tous ses autre pièce sur l'autre moitié. Ce n'est pas rempli, ce qui est inefficace. On gaspille de l'espace. Il y a juste être Il attend d'être alloué, mais il n'est pas alloué. Donc liste liée nous permet en fait d'avoir toujours et constamment, um la mémoire qui est nécessaire pour maintenir notre liste et pas plus ni moins. Donc, si nous avons besoin d'ajouter un numéro à cela, nous pouvons l'ajouter à la fin. Donc, par exemple, si nous voulions ajouter ah, quatre à cela, nous pourrions y aller. Et puis nous allons à la fin et nous ajoutons avant à la liste ici et ce dont je parle ici sont des listes de liens Singley. Et ce que cela signifie, c'est que vous avez un point de départ, non ? Comme ça Et donc cela est marqué comme commencer la note de départ. Alors, quand tu appelleras Start, tu iras ici. Et ce qui va dio, c'est que vous allez partir d'ici et que vous allez en gros seulement la seule façon de traverser est d'aller d'ici à ici, ici à ici, ici à ici et de suivre les flèches l'une après l'autre, jusqu' à ce que vous arriviez au dernier, puis à celui-ci, la façon dont vous savez que vous êtes à la fin est parce qu'au lieu de celui-ci pointant vers un autre nœud, Donc, dans cette situation, comme par exemple, il pourrait pointer vers, il pourrait pointer vers un autre nœud ici. Disons que celui-ci est comme un cinq, mais si on est à la fin d'une liste, ça va pointer vers quelque chose appelé Non. Et ce qui ne signifie pas, c'est que ce n'est rien. Ça ne pointe vers rien. n'y a pas de mémoire allouée. Il n'a pas d'emplacement en mémoire. Ça ne pointe vers rien. Et une fois qu'on a compris ça, on n'est à rien. Ensuite, quand nous insérons quelque chose, nous remplacons simplement ce rien par notre nouveau nœud. Donc nous avons créé cette petite note ici. C' est comme, par exemple, laissez-moi vous montrer comment nous pourrions faire ça. Nous avons créé un nouveau nœud, un nouveau savoir ici appelé 15 et nous voulons l'attacher à cette liste liée. Et donc, en ce moment, celui-ci pointe sur Non. Et donc ce que nous voulons faire, c'est gagner. Attachez-lui. Donc nous allons aller à ce début. Je devais aller au début. Je vais descendre, sont liste liée. Il a quelque chose. Il a quelque chose. Il a quelque chose. Il a quelque chose. Oh, c'est ce savoir. Donc on va faire, c'est qu'on va bouger ça. Non, on va choisir ça. Déplaçons ça d'ici pour en faire une sorte que nous allons attraper ça. Non, nous allons le déplacer hors d'ici, et nous allons en fait attraper le nouveau noeud juste ici, et nous allons le déposer et ce nouveau noeud par défaut. Lorsque nous avons créé le nœud, c'est l'endroit suivant a été défini pour savoir. Donc, par défaut, lorsque cet avis a créé le suivant, mais dit de savoir et vous verrez que cela aide parce que maintenant, quand nous sélectionnons réellement ceci et l'attrapons et le déplacer ici, vous remarquerez que la fin pointe à nouveau pour savoir. Et celui-ci a été réalloué pour pointer vers le nouveau nœud. Et le cycle continue. Si nous voulons en insérer un autre, nous pouvons aller de l'avant et 13 ici, et nous avons créé ceci. Il fait automatiquement savoir que ce n'est pas dans notre liste à, vous savez, juste pour l'instant. Il est encore juste en train d'être créé. Maintenant, nous voulons l'ajouter à la liste. Donc quand on va au début, on descend, on descend, on descend , maintenant celui-ci n'est pas un non. Donc comme OK, il y en a un autre. Ici, nous allons à 15. Comme, Oh, Oh, il n'y a pas ici. Ce qui signifie que nous allons maintenant faire 15 au lieu de pointer pour savoir que nous allons alors déplacer son pointeur. Donc, nous allons supprimer le non off ici, et nous allons déplacer son pointeur 2.2, notre nouveau noeud. Donc techniquement, cela ferait cela parce que le nœud ne se déplacerait pas ici. Étaient juste lui dire de pointer vers ce nouveau demandé que nous avons créé ce nouvel actif ici ce nouveau, ce nouveau morceau de données que nous avons créé et puis puisque nous avons déjà créé pour avoir déjà un null de la fin une fois qu'il va entendre, il se déplacera vers la butte. Et maintenant, si on veut répondre à autre chose, ça va aller jusqu'à ce point et on peut avoir, vous savez, vous savez,une bonne sorte de graphique. Maintenant. Alors que se passe-t-il si nous voulions, Par exemple, um, supprimer quelque chose de cela dans un tableau lorsque nous supprimons quelque chose de lui. Tout ce que nous avions à faire était par exemple, avons un tableau juste ici. Tout ce que nous avons à faire est d'appeler l'emplacement que nous voulons supprimer. Donc, à 321012, nous pourrions juste appeler X de deux égal pas ou une sorte d'algorithme de suppression entre en jeu. Et j'étais tout ce que ça fait, c'est que ça va, Oh, sortir n'est plus égal à rien fait. Rien à craindre si nous voulions mener le 1er 1 Facile fait. Rien à craindre avec la liste des liens. Cependant, vous remarquez qu'il y a des dépendances de non-devis si vous supprimez simplement si nous supprimons. Si nous avons dit que nous voulions supprimer 10 était un supprimer 10 ici. Que se passe-t-il ? Comment sur terre sommes-nous censés arriver au reste de notre liste pour ne plus pointer vers rien pour juste automatiquement obtenu par défaut à pointer pour savoir. Donc, il indique de savoir maintenant parce que 10 est là, qui signifie que ce n'est pas la fin, et nous perdons le reste de notre liste ici. Donc, nous devons vraiment faire un peu d'une sorte d'opération complexe pour supprimer laissez-moi juste ramener cela. Alors supprimez à la place ce que nous pouvons dio. Disons que nous avons un noeud juste ici. Une note ici et une note au milieu. Nous avons le Singley pointé les pointeurs simples. Donc c'est la liste de la ligue Singley ici. Et si nous voulions supprimer cela donnera toutes ces valeurs afin que nous puissions les appeler par quelque chose. Si on voulait supprimer 10 ici. Ce que nous devons faire, c'est , avant de supprimer ça, nous devons le dire Hey, trois va maintenant pointer vers aimer donc nous devons passer à trois. On va supprimer le suivant. Donc nous allons à trois et nous le disons, Hey, vous avez besoin de 2.22 Et puis une fois cette nouvelle allocation créée, celle-ci tombera naturellement. Maintenant, c'est une mauvaise pratique. Laissez ceci ici parce que c'est en fait toujours un son techniquement. Donc, par exemple, de ceci est un début, ce graphique ici est encore techniquement solide. Il va aller 3 à 2 et puis ici pointe à savoir. Et donc tout cela fonctionne encore, c'est toujours techniquement correct. Cependant, ce que nous avons, c'est que nous avons perdu de l'espace ici. Nous n'avons pas supprimé le non. Donc, nous pouvons en fait, avant de faire cela, nous pouvons réellement enregistrer ceci dans une sorte de variable comme avant. Comme on pourrait le dire, vous savez, euh, ont utilisé Excel. La course ira w équivaut à cette note de 10. Et puis une fois que nous aurons fait cette chose que nous pourrons dire, vous savez, nous pouvons appeler supprimer dessus et nous le retirons de la mémoire pour que nous n'ayons plus ce truc assis ici. Mais ce que je voulais montrer, c'est que tout ce que nous avons à faire pour le supprimer c'est au lieu de supprimer l' actif lui-même, tout ce que nous avons à faire est de redessiner la flèche au-dessus. Et en fait, techniquement, celui-ci serait toujours là. Donc, nous devons faire est de redessiner la note comme ça et ensuite celui-ci est techniquement hors de la liste. n'y a aucun moyen de revenir à 10 ans. n'y a aucun moyen d'aller accidentellement à 10. Il fait juste froid là, et il peut toujours être là, et notre liste serait toujours saine. Cependant, le moyen efficace serait de supprimer ensuite ceci afin que notre liste ne stocke pas données supplémentaires qu'elle n'a pas besoin de stocker. Et donc nous avons un autre cas pour couvrir le fonctionnement de la liste liée, et ce sera sur la façon dont exactement on pourrait insérer exactement au milieu d'un rayon. Donc, par exemple, ce que nous faisons ici, c'est, disons, que sommes au milieu d'une liste liée. Donc, si vous vouliez insérer dans un tableau, dites son taux comme ainsi dans un rayon ici, quoi ? Et nous en avons deux ici, nous en avons un sept ici. Nous avons un quatre ici, et vous savez, nous avons 0123 Et si nous voulions insérer juste dans cette partie ici, tout ce que nous avons à faire c'est ex de deux égal à sept et vous savez, ça va à sept vraiment facile à faire. Si vous voulez insérer ailleurs. Ce que vous devez vraiment faire est juste écraser quelque chose. Donc, si on veut juste que ça soit égal à zéro, on peut aller de l'avant. Il va juste écraser ceci et le rendre égal à zéro. Pas de riel, d'autres trucs supplémentaires nécessaires. Cependant, un rayon ou des listes liées ne sont pas aussi faciles avec une liste liée. Ce qu'on doit faire, c'est qu'on le doit. Nous devons en fait réaffecter ou re des points et des choses. Comme dans l'élite, on avait une boîte de trois. Il passe à 10. Et puis disons que celui-ci passe à 25 maintenant nous avons une boîte ici, nous avons une boîte que avons créé un nouveau noeud que nous avons créé que peut-être 18 et cela pointe à savoir. Alors comment on fait pour que ça se passe ici ? Comment on le met là ? Comment on fait pour que ça se passe là ? Eh bien, on ne peut pas juste insérer. On ne peut pas appeler la deuxième place. Dites, insérez, il n'y a pas les pointeurs vont tout gâcher. Ce qu'on doit faire, c'est prendre celui-ci ici. Nous devons le supprimer. Nous devons dire qu'il indique maintenant qu'il pointe maintenant à 18 et que nous devons ensuite aborder cette question . Nous devons créer un nouveau pointeur qui pointe jusqu'à 10 et il y a quelques petits défis avec cela. Parce que si vous remarquerez quelque chose si nous revenons à l'endroit où il a commencé Si nous supprimons ce premier, alors soudainement nous avons perdu le reste de notre liste. Il n'y a aucun moyen d'accéder au reste de notre liste ici. On ne peut plus toucher. Donc, ce que nous devons faire habituellement, c'est que nous devons sauvegarder cette prochaine, celle-ci ici, dans une variable. Donc, Donc, ce qu'on ne pouvait pas faire, il y a quelques façons de le faire. Le plus efficace serait probablement de juste définir celui-ci en premier. Donc, une fois que nous avons cet endroit en mémoire, une fois que nous avons traversé sont sont liste liée. Et nous sommes arrivés à cette note ici. Weaken n'a pas dit, Hey, on veut que 18 soient égaux à ça. Non, nous voulions pointer sur cette note. Nous voulions pointer sur cette note. Donc, nous pouvons dio est que nous pouvons dire que cela pointe maintenant à cette note aussi. Et maintenant, ce que nous pouvons faire, c'est que nous pouvons revenir au début ici. Nous pouvons effacer ça, et maintenant nous pouvons pointer ça vers le bas. Maintenant, nous pouvons pointer cela vers R 18 et maintenant nous avons une bonne insertion et nous n'avons pas perdu les données sur le back-end. Donc listes liées il y a un peu délicate là un peu difficile à comprendre. Mais ils ont certains avantages, et l'un des plus grands avantages est le fait que nous pouvons continuer à ajouter à la fin. Et ça va seulement créer des données. C' est comme, hum qui créent des données. C' est, tu sais, aussi grand que nous en avons besoin, nous n'avons pas à continuer de doubler les choses et cela nous permet une sorte de publicité à caprice. On pourrait juste l'ajouter à la fin. Nous n'avons pas à nous soucier du tri ou de l'organisation de celui-ci, et nous n'écrasons pas les choses si nous allons insérer tout ce qui est propre morceau de données que nous pouvons saisir et déplacer au lieu d'avoir un tableau où tout est en quelque sorte enfermé dans une boîte qui limite en quelque sorte certaines choses que nous pourrions faire avec, surtout plus tard. Et ce qui est aussi intéressant dans cette approche, c'est qu'une seule liste liée en soi n'est, vous savez, qu'un seul lien. Mais nous pourrions, par exemple, avoir des bouquets de nez pointant vers différents domaines. Et cela permet tant de choses. Et c'est en fait là que nous entrons dans les arbres plus tard, en ajoutant les notes. Mais c'est une sorte de base de celui-ci peut être lié liste par eux-mêmes. Juste seul. liste liée ne sont pas la chose la plus utile, mais elle va se construire dans des choses vraiment utiles plus tard. Donc, ce sont des listes de longueur Singley. La partie suivante. Nous allons passer à les relier doublement et ensuite une sorte de comprendre les temps d'exécution derrière tout cela et comment il se compare à quelque chose comme ça tableau. 19. 3-3 temps de fonctionnement de liste liée: Maintenant, nous avons une bonne compréhension intuitive du fonctionnement des listes liées. Allons là-bas. Temps d'exécution Probablement dit en informatique, les temps d' exécution sont importants parce qu'ils nous permettent d'analyser ces structures de données et comprendre leurs forces et faiblesses. Alors prenons un rafraîchissement rapide sur les temps de course de notre rayon ici. Donc, ce que nous avons ici, c'est que nous avons les temps d'exécution que nous sommes sortis pour le tableau et donc je vais juste le mettre ici. C' est pour le tableau. Et puis aussi, je veux désigner que c'est pour la suppression aléatoire. Si vous supprimez, par exemple, dans un tableau, um, au début, comme, par exemple, par exemple, il s'agit d'un tableau circulaire inconnu et vous avez supprimé le début ici. Donc, vous supprimez celui-ci et vous voulez que tout se décaler vers l'arrière qui sera également ove dans la sorte de l'avant. Donc, celui-ci pourrait être deux différents, selon la façon dont vous voulez le regarder. Mais supprimer aléatoire va toujours être au-dessus de celui tandis que supprimer. Fondamentalement, front de voleur sera dû à la fin. Donc je voulais juste mettre cette petite mise en garde là-dedans seule, ces complexités temporelles peuvent obtenir un peu de exactement ce que vous regardez, comme spécifiquement pour qu'ils deviennent un peu confus dans cet aspect. Mais si vous pensez vraiment juste à eux intuitivement peut comprendre. Donc, par exemple, dans le tableau, si nous supprimons du taux initial ici, tout doit revenir en arrière. Donc nous devons déménager dans le nombre de, hum, en nombre d'endroits au pire. Et nous allons juste une sorte d'intuition derrière ça. Mais on peut voir certains de ces trucs ici. On a eu l'insertion aléatoire. On est à la recherche devant. Supprimer la recherche, recherche non triée triée. Alors passons par ces opérations dans une liste liée. Donc, nous allons créer un peu d'un exemple de liste liée ici. Donc, ce que nous devons créer, c'est que nous devons créer nos nœuds. Donc, nous avons le début de la liste, que nous pouvons simplement créer comme, commencer ici pour que nous puissions créer, comme Start, puis il pointe vers le début de notre premier nœud. Disons que notre première note a un trois, puis c'est une liste de liens unique. On n'a pas encore parlé de double, donc on va aller avec une liste de longueur unique. Je double juste améliore de légers morceaux de choses, légers calculs, et ensuite on ira à, genre, disons, 19 ici ou quelque chose comme ça, et puis c'est la fin. Donc c'est un, puis points à savoir ici. Ok, donc nous avons des listes liées comme ça, et allons de l'avant et créer notre 1er 1 Donc ici, nous avons eu insérer aléatoirement. Donc, si vous voulez insérer quelque chose et c'est au hasard donc n'importe où dans la structure de données , faisons la même chose. La notation est aussi la dernière. Donc, nous voulons insérer aléatoirement dans un tableau qui nous prenait du temps instantané parce que nous remplacerions les choses si vous essayiez de calculer le remplacement. Alors peut-être que vous pourriez avoir quelques mises en garde là-dedans, mais si nous allions juste écraser quelque chose de parfaitement bien, vous pourriez juste dire ex de cinq équivaut à un certain nombre, et cela le remplacera dans une liste liée. Cependant, il devient un problème est que vous ne pouvez venir d'ici. Vous ne pouvez pas simplement sauter à l'une de ces positions. Donc, si je voulais arriver à 19 ici, je devrais aller du début sur 123 et ensuite y arriver, et je devrais le faire pour n'importe quel montant à l'intérieur de ce. Donc, ce que cela signifie, c'est que notre insert aléatoire se résume en fait à O de en notation. Et c'est parce que notre pire scénario est d'insérer au hasard à l'arrière. Ce qui signifie que vous allez insérer 1234 sont dans. Cette situation est de quatre. Il va falloir quatre pour revenir ici, et ça va avec n'importe quelle liste de n'importe quelle longueur. Il y en a 1000 et vous voulez insérer près de l'arrière. Ça pourrait prendre 950 à 1000. Donc, cela signifie que notre pire scénario pour insérer aléatoire devient réellement O de N. Et c'est juste parce qu'il n'y a pas d'accès instantané. Il n'y a aucun moyen que nous sachions comment sauter entre ces plus vite que d'aller depuis le début et ensuite descendre comme ça et donc notre prochain va être inséré dans l'avant, alors insérez avant et en avant, donc avec insert avant et sera Insérez aussi bien avec une base, um, une liste liée de base. Ça va aller jusqu'à la fin aussi. Ou en fait, la réponse au front va être un temps constant. Eh bien, en commençant, le dos sera O jusqu'à la fin. Et c'est parce que nous allons d'abord insérer l'avant. Si nous voulions insérer un nouveau nœud, disons que nous avons une note ici. Une nouvelle note ici de quatre. Si nous voulions insérer cela à l'avant, comment ferons-nous exactement cela ? , En fait, c'est assez facile. Quel que soit notre point de vue, quel que soit notre pointeur, quel que soit notre pointeur, tout ce que nous avons à dire c'est que nous devons juste dire OK, au lieu de pointer sur ce point, et ensuite nous avons dû mettre quatre sur notre ancien. J' ai dû mettre quatre sur notre ancien front. Et donc ce que cela fait, c'est qu'il suffit de l'ajouter en 123 étapes à chaque fois, peu importe ce que vous insérez là-dedans, donc ce sera toujours un temps constant et la façon dont vous voulez réellement le faire. Il y a en fait un moyen que vous devriez insérer ici parce que ce genre de va avec perdre la mémoire. Si je supprime cela et puis fais ce point à cela comme si je perds la capacité que je perds cette première note ici, je n'ai plus la possibilité de l'attraper plus parce que nous avons supprimé le seul point que nous avons à lui. Donc, si vous voulez insérer à l'avant, ce que nous devons faire est de prendre notre noeud. Nous avons le premier dit aux trois. Et donc cela pointe toujours le front. Donc on va dire, Hey, quatre, on va dire, Hey, quatre, vous pointez maintenant votre prochain au lieu de Non, ça pointe maintenant vers trois. Ça indique maintenant notre départ. On va dire que ça pointe pour commencer, et ça va l'allouer au début. Ensuite, une fois qu'il est pointé ici, nous allons supprimer hors d'ici, et nous allons faire le point de départ vers le bas à ici, et puis cela va créer nos inserts ou insert est toujours temps constant. Ce sera toujours ces trois opérations créer assigné au début un signe début deux nouveau non à la nouvelle note. Donc ça va toujours être un temps constant. Donc, c'est un temps constant. Et puis nous avons insert à l'arrière. Donc insérer à l'arrière, cependant, va nous prendre un peu de travail parce que, comme je l'ai dit, comme je l'ai dit, il n'y a aucun moyen de revenir ici à moins que nous plus tard, je vais passer comme si vous pouviez créer un petit pointeurs pour vous aider. Mais en ce moment, avec une simple liste de liens Singley, il n'y a aucun moyen d'arriver ici sans passer par la liste entière. Et donc ça va toujours être dedans. Il sera toujours dans, ce qui signifie que, par défaut, c'est le pire des cas est aussi dans. Donc c'est le pire des cas aussi parce que, comme je l'ai dit, il n'y a aucun moyen que nous puissions sauter ici. On ne peut pas partir du début et passer à la fin. n'y a rien qui nous montre à la fin. On ne sait pas ce qu'il y a là. Nous ne savons pas combien de noeuds air entre ça. Tout ce que nous savons, c'est par où commencer et comment arriver à la prochaine. Donc on va devoir faire, c'est courir le départ. Nous avons dû nous créer un nouveau nœud. Donc, si vous vouliez en ajouter une à la fin, disons que nous voulons ajouter ces quatre à la fin. La seule façon de le faire, c'est d'y aller. D' accord. Eh bien, qu'est-ce qu'il y a à la fin ? Descendre 4 à 3. Permettre un 2 à 10 c'est le Non, nous sommes à la fin. Super. Maintenant, une fois qu'on est à la fin, on a la note de fin. On peut alors le dire. Hé, tu vas bouger. Tu ne sais plus que tu vas être réglé à quatre. Comme ça Et puis, bien sûr, par défaut. Lorsque nous avons créé ceci, cela a été indiqué pour savoir que notre liste fonctionne à nouveau. Donc, une fois que vous êtes ici, l'opération est seulement comme un ou deux types de numéros de création. Mais pour arriver ici est dû jusqu'à la fin. Et c'est pourquoi notre course peut être Odéon aussi. Et donc le prochain que nous voulons attraper va être supprimer aléatoirement. Donc, nous voulons supprimer aléatoire. Et donc, avec un delish en quelque sorte dépend de la façon dont vous supprimez et où vous voulez supprimer. Donc, le problème est que si nous supprimons de l'avant, c'est vraiment facile. Si nous supprimons de l'avant, tout ce que nous avons à faire est juste de dire, commencer égal à l'avant suivant. Laisse-moi écrire ça parce que ce genre d'entre en jeu. Comme si vous commencez à écrire ces trucs, ce sera comme, euh, commencer est égal à cette note juste ici. Commencez le point suivant. Et cette flèche s'appellerait ensuite. Donc, ce que nous disons est que le début est maintenant égal pour commencer ensuite, puis celui-ci juste être retiré du cycle et la flèche obtient re ID associé d'ici, et puis il revient directement à ici. Donc si on supprime le front, c'est avec une seule fois. Donc si on supprime le front, il sera sorti avec une seule fois. Mais si on supprime au hasard, ce qui est n'importe où ici, si on veut dire qu'on veut supprimer le quatrième élément ou le neuvième élément pour le faire, ça va prendre odienne parce qu'on va devoir traverser tout ça. Et si vous remarquez qu'on ne peut pas reculer. Donc, si vous vouliez mener celui-ci, des rochers. Tu vas devoir attraper celui qui l'a précédé, et ensuite on va devoir le faire. Donc, par exemple, si nous voulions supprimer trois ici, nous devrons faire est d'aller à deux et ensuite nous devrons lui dire que c' est le prochain sera égal à son prochain sera égal au point suivant Ensuite, quel genre de devient un peu compliqué. Donc, ce serait comme si on était au numéro 2 ici. On est à ce noeud, non ? Voilà toutes les actions, non ? Quoi ? Les chiffres sont si justes. Nœud 4. Et que dire ? Nœud quatre points Suivant est égal à point suivant suivant suivant. Et donc ce que tu fais c'est que tu saisies la prochaine extrémité de la prochaine. Tu dis que c'est maintenant égal à ça. Donc vous contournez celui-ci ici en contournant ceci, vous l'enlevez. Mais pour arriver à ce point, pour arriver à ce point, vous devez savoir que ça va prendre le contrôle de la fin, ce qui veut dire que le leader va se trouver au hasard aussi. Donc ce sera o jusqu'à la fin et nous avons juste mais nous avons compris que la suppression de l'avant va être constante est constante et vous voyez déjà un peu d'amélioration là-bas. Donc nous avons eu beaucoup de choses qui pourraient prendre plus de temps. Mais entre le tableau, Si vous voyez que supprimer de l'avant sur un tableau prendra O à la fin tandis que supprimer du front sur une liste liée prendra ce que cela devrait être constant. Cela devrait être constant. Alors que l'illusion de cela prendra o sera un temps constant, qui signifie qu'il ne sera pas à l'échelle, ce qui est génial. Et mais vous voyez aussi d'autres différences ici est que l'insertion aléatoire était instantanée. Alors que l'insertion ici sera jusqu'à la fin, un front insurgé ici était odienne. Mais l'insertion avant dans une liste liée est terminée avec un. Donc on voit des compromis ici. Quelques différences entre ces deux-là. Et maintenant, allons de l'avant et supprimons ce dernier mouvement. Nous ne supprimerons plus celui-ci. Ça va revenir à une belle petite liste de liens juste ici, et ce dont nous avons besoin maintenant est recherché trié et non trié. Alors quoi ? Nous avons cette recherche pour triés et à la recherche de non triés. Et donc ces deux vont finir par être O jusqu'à la fin aussi. Et je vais vous expliquer ça dans une seconde. Et la raison en est que peu importe que cela soit trié ou non trié. Tu dois encore traverser tout le truc pour trouver ce que tu cherches. Si on savait que c'était 12345678 alors ça n'a pas d'importance parce qu'on n'a toujours aucun moyen sauter à deux ou de sauter au numéro huit ou n'importe où ici. On ne peut pas sauter. Nous devons commencer, puis passer du début vers le bas de la liste liée. qui signifie que peu importe ce que, si nous voulons entrer ici, si , par exemple, trouver les deux qu'il pourrait prendre pour aller jusqu'à la fin, cela pourrait être à la toute fin du pour trouver cette chose. Que ce soit trié ou non. Cela va être une inversion de liste liée entière, et donc ce sera le temps linéaire. Signification va devoir passer par chaque nœud au pire des cas. Donc, la recherche est un peu plus lente dans cette situation. Alors que si nous allons à un tableau, nous verrons que la recherche non triée a obtenu la même chose. Cependant, si nous trions le tableau que nous pouvons obtenir pour nous connecter, nous pouvons réellement l'améliorer un peu à cause de ce dont nous avons parlé plus tôt, où nous l'avons coupé en deux. Nous continuons à couper et 1/2 jusqu'à ce que nous finissions par trouver le numéro que nous recherchons. Et donc nous l'avons là. Ce sont les temps d'exécution d'une liste liée. Comme je le disais tout à l'heure, il y a quelques similitudes ici. Quelques petites mises en garde entre les deux et parfois comme,par exemple,l' insertion aléatoire et l'insertion à l'avant ici, vous verrez qu'elles sont différentes. garde entre les deux et parfois comme,par exemple, par exemple, insertion aléatoire et l'insertion à l'avant ici, En fait , l'insurgé est au hasard plus rapide que sur le tableau. Alors que l'insertion à l'avant est plus rapide sur la liste liée, l' insertion à l'arrière va être vraiment lente tandis que dans la recherche dans le dos dans un tableau va être vraiment rapide. Delish dans va être plus lent sur la liste des liens. Mais plus vite sur la ah, plus vite sur la recherche frontale va être fondamentalement la même si elle n'est pas triée. Cependant, s'il est trié, le tableau sort en avant. Donc, vous pouvez voir que même si ces deux-là sont très différents, ils sont complètement différents. Vous pourriez penser que peut-être, comme, peut-être que vous préférez l'un à l'autre était plus intuitif que l'autre, que ceux-ci ont tous une sorte de mise en garde très spécifique. Donc, par exemple, si nous mettons ici une augmentation et ici nous avons nos listes liées, il pourrait y avoir certaines situations où nous voulons utiliser l'une par rapport à l'autre. Si nous avions un programme qui inséré à l'avant beaucoup vers l'avant un moment, nous ne voudrions pas utiliser un tableau pour cela parce que si nous utilisions un tableau pour cela, nous devrions, euh, tout déplacer et continuez à créer une nouvelle augmentation A pour le faire fonctionner correctement, dans une liste liée, tout ce que nous avons à faire est juste de créer un nouveau nœud et de trier le front. Donc, si nous voulions insérer à l'avant, celui-ci aurait un avantage. Insérer les programmes lourds avant partie de mon écriture ici. Donc, insérez des programmes lourds avant, tous d'un tableau, si nous voulons le trier et ensuite rechercher Ce serait mieux. Alors, que pouvons-nous avoir un tableau trié ? Et nous le voulons. Donc, c'est comme des recherches de tableau triées ou assorties voudraient faire. C' est pitoyable dans une course triée recherches de données, et vous pouvez donc voir que chacun d'entre eux est bon dans un certain domaine et mauvais dans différents domaines. Et c'est ainsi que la compréhension de cela aide les autres informaticiens, parce que vous commencez à comprendre lequel vous devriez utiliser en fonction des avantages de l'un par rapport à l'autre. 20. 3-4 Listes doublement reliés: ce n'est pas le cas. Nous avons une bonne compréhension de la façon dont les listes de liens uniques fonctionnent et certains de leurs avantages certains de leurs inconvénients avec une augmentation et d'autres structures de données. Maintenant, nous pouvons commencer à améliorer l'idée de base d'une liste liée, et nous allons dans cette idée d'une liste doublement liée. Qu' est-ce qu'une liste doublement liée ? Revenons à notre idée d'un noeud. Rappelez-vous que j'ai dit que nous avions une note ici et que nous pouvons avoir n'importe quelle note et qu'elle peut avoir, genre, un morceau de données sur le dessus. Et il pourrait y avoir un tas de différents types de pointeurs ici. Et l'un des principaux points est que vous pouvez ajouter est que vous allez ajouter ensuite. Et cela crée un tas de liste de liens Singley Singley juste ici. Donc nous n'avons pas juste un tas de prochain ici. Permettez-moi d'en faire le même format ici et par exemple, c'est comme quatre. Nous avons un prochain ici, mais la chose est, avec juste le prochain, nous ne pouvons aller qu'une seule direction dans la liste pour la rendre doublement liée. Ce que nous pouvons faire est que nous pouvons réellement ajouter dans précédent est aussi bien. Et cela signifie qu'il va également pointer vers l'arrière, doublement lié. Cela signifie que pour chaque époque il y aura deux flèches, l'une entrant et l'autre sortant. Maintenant, comment ça nous aide ? Pourquoi cela nous aide-t-il ? Comment nous permet-il de passer de, par exemple, à commencer à reculer tout au long de la liste ? Comment cela nous aide-t-il ? Eh bien, si nous regardons les temps d'exécution, nous pouvons remarquer que cela ne va pas vraiment nous aider autant dans les temps d'exécution. Ce qui va faire, c'est faire un peu plus de travail dans les coulisses parce que peu importe si nous avançons ou reculons. Nous allons toujours parcourir la liste, au moins veut aller à la partie. Mais pensons à un scénario différent. Pensons, par exemple, notre objectif ici est, disons, disons trouver sept et de le supprimer et de le supprimer de la liste sont liés. Nous avons donc une liste liée ici. Disons qu'on en a un ici et qu'on en a deux qui bouge par ici. On en a un trois, puis on en a 75 25 puis on en a sept, et on en fera un de plus. Donc, cela continue de lier vers le bas à 17 et cela pointe vers un no. Alors pense à ça. Si on doit d'abord en trouver sept et ensuite le supprimer, ce qu'on va faire, c'est d'abord le chercher. Donc on va fouiller le truc. Donc on va aimer, écrire un petit journal de ce qu'on fait. Donc on va chercher, et donc on va devoir y aller. 1234 On a trouvé qu'il était ici à sept heures. Ok, super. Comment pouvons-nous le supprimer ? Parce que la seule façon de le supprimer est de toucher le précédent, et nous ne savons pas où se trouve le précédent. Une fois que nous sommes arrivés ici, il n'a aucun moyen de pointer en arrière. Donc, une fois que nous sommes arrivés ici, si vous voulez supprimer cela, nous devons réellement refaire la recherche. Nous devons revenir à partir de ce début et ensuite descendre et aller à la précédente et lui dire de pointer vers le point suivant. Et donc cela va vraiment causer quelque chose comme ça. Donc, nous avons la recherche pour trouver qu'il est oh of in. Et puis nous avons la suppression va également être terminée maintenant. Ce que cela vient d'être est en fait peut le faire. Ça va finir par être, si tu veux être vraiment technique à ce sujet va finir par être O au N moins un parce que tu vas trouver le précédent derrière lui. Donc, peu importe ce que ce genre de Hulk se résume, c'est qu'on va juste avoir ce genre de relation. On va entrer dans, oh, dans plus dans o de dans et donc pour nos comparaisons d'autres choses, rappelez-vous, ça va arriver à être juste un O de deux en gros. Et rappelez-vous ce que nous avons dit au début, c'est que nous venions de rayer tout ça, et ce serait juste fini. Cependant, dans le monde réel, deux fois dans pourrait en fait être une très grande différence, quelque chose que nous voulons réellement garder une trace, comprendre et améliorer. Et si nous pouvons réduire le temps qui va prendre de moitié, nous voulons le faire. Et donc, par exemple, vous verrez qu'il recherche. Et puis maintenant, nous devons faire la suppression. Et donc ça devient un peu fastidieux de cette façon. Donc, ce que nous pouvons faire, c'est que nous pouvons créer ceci et en faire une liste doublement longue. Donc maintenant, nous avons une liste doublement liée ici où ils pointent tous les uns vers les autres et laissez-moi en fait, en fait,faisons les nous allons faire ces flèches. Faisons une couleur différente ici pour rendre ce peu clair. Et donc ce que nous avons, c'est une flèche pointant en arrière. Ils reviennent, reviennent , pointent en arrière. Ensuite, il y a une flèche qui va revenir en arrière. Et maintenant, nous avons nos listes doublement liées, et dans cette situation, celle-ci pointe également à savoir. Donc l'avant celui-ci va pointer, euh, pour savoir ici et puis c'est le précédent va pointer là. Et maintenant, nous avons tout ça bien arrangé. Et maintenant, essayons de refaire cette opération qui est de trouver sept et de la supprimer. Eh bien, on va y aller. On va commencer par le front. On va descendre. On va aller plus, plus, plus, sur Oh, sur Oh, on en a trouvé sept. Donc maintenant pour le supprimer, ce que nous pouvons réellement dio c'est que nous pouvons aller et utiliser ce genre de pseudo code ici, sept points précédents. Alors maintenant, nous l'avons fait. Nous sommes maintenant sur ce noeud juste ici. Sept points point précédent Suivant est égal à sept points suivant, et donc cela pourrait être un petit complexe, comme, sorte d'entrer dans l'aspect de codage réel de celui-ci. Mais tout ce que nous disons ici, c'est que nous allons à sept étaient en train de dire son précédent suivant. Donc nous choisissons celui-ci et maintenant nous disons maintenant, puisque nous sommes ici disaient que c'est le suivant, la petite partie ici disait qu'une petite partie de 25 qui est la suivante va maintenant égaler ce qui est sept est, c'est le suivant. Donc ça va égaler quoi que ce soit. Sept. Ensuite, c'est ce qui se transforme en 17. Je sais. Une fois que nous avons fait cela, nous avons maintenant un lien. Ça crée une connexion où il court-circuite la défaite. Est-ce que cette connexion et puis maintenant il va juste se déplacer droit vers le bas et se connecter ici et dans cette ligne juste ici disparaîtra. Et c'est tout ce que nous avons à faire maintenant, c'est un pas de plus. Ce 17 pointe toujours vers le mauvais endroit afin que nous puissions faire quelque chose comme nous sommes maintenant de retour dans notre 25 nous venons juste de le réinitialiser. Donc nous allons dire que, comme, 25 point suivant précédent est égal à 25. Et donc c'est tout un pseudo code. Ce n'est pas comme si vous ne pouviez pas mettre cela dans un endroit où ces deux choses ici à gauche signifient juste comme leurs commentaires comme ils sont juste une sorte de pseudo code de ce que ça ferait dio ? Mais maintenant, ce que nous pourrions faire est que nous pouvons dire 20 cinq et prochain point précédent égal. Donc, nous sélectionnons la partie précédente de la partie de données ici de 17 juste ici disaient que son précédent est maintenant égal à 25. Et alors il remonte et il alloue comme ce sept est maintenant supprimé et nous avons notre produit final ici. Et ce qui a fait cela dans l'ensemble, dio nous allons tout ce qu'il a fait, c'est qu'il a permis à notre recherche et à supprimer ici de devenir un à la fin et laisser juste nous faire gagner un peu de temps. L' ensemble, au lieu d'être trop jusqu'à la fin, est juste aller à la fin. Et donc, comme je l'ai dit, ça n'améliore pas ce genre de vitesse de haut en bas ici. Mais ce qu'il fait, c'est qu'il nous fait gagner un peu de temps, et cela nous permet de créer un peu plus d'intuition derrière les choses parce que maintenant nous ne le sommes pas. Nous ne sommes pas coincés dans ce genre de direction. Et si nous devons revenir en arrière et recommencer dans une direction maintenant, nous pouvons réellement avancer et reculer intuitivement à travers cette liste. Ça va encore prendre en moyenne Oh, puis pour aller n'importe où. Mais nous pouvons améliorer des choses infimes comme l'amélioration de deux pour aller plus vite, et cela rend notre codage juste un peu plus facile parce que nous n'avons pas comme je l'ai dit, nous n'avons pas besoin de garder la comptabilité pour recommencer et ensuite recommencer. Ils sont donc doublement liés. Liste un joli ajout à ajouter à votre liste liée, et ils rendent généralement votre vie beaucoup plus facile 21. Pointer de 3-5 ailes: Maintenant, nous allons couvrir une autre petite chose à propos de la liste liée et quelque chose qui va réellement améliorer l'un de nos temps d'exécution. Et c'est l'idée d'un pointeur de conte. Donc ce que cela signifie, c'est qu'un Pointer conte va nous permettre de faire exactement ça. Ça va nous permettre de pointer vers la fin de notre genre de liste sont liés. Donc, par exemple, allons de l'avant et juste dessiner l'amour vraiment court. Ici, Allons trois points à deux points à 15 et dira que cela va savoir. Et ici, celui-ci va le savoir parce que nous sommes en fait en fait une liste doublement liée ici. Et, ouais, ça a air bien. Ok, alors ce que nous avons utilisé c'est qu'il y a ce genre de pointeur de départ. Il y en a toujours un qui nous dit où est le début de notre liste liée, et c'est donc juste une sorte de défaut. C' est une sorte de ce que nous pouvons utiliser dès le début, parce que si nous n'avions pas ce point ou bien, il serait difficile de comprendre comment travailler avec, parce que nous ne pourrions jamais comprendre où c'est. Donc nous avons un début, pointeur. Mais ce que nous pouvons faire en fait, c'est que nous pouvons aller de l'avant et nous pouvons nous créer un pointeur de conte aussi. Et ce que fait un pointeur de conte. Alors, euh, allons le dessiner ici. Mettons-le. Peut-être que le rouge dira le pointeur de queue. Donc nous allons dire le pointeur de queue juste ici. Ce qu'un pointeur de conte fait, c'est qu'il vous permet de toujours garder une trace de ce qui est le dernier nœud et comment cela nous aide est d'avoir cette histoire. Pointeur ne prend pratiquement aucune sorte d'énergie. Chaque fois qu'on en crée un nouveau, tout ce qu'on va faire, c'est déplacer le pointeur de queue vers le nouveau noeud suivant et ça va faire, c' est à un orteil d'opération supplémentaire en ajoutant un à la fin maintenant. Mais ce qu'il nous permet de faire, c'est qu'il nous permet maintenant d'insérer dans le dos dans oh, dentée, insérer dans le dos afin que nous puissions le barrer s'il a un pointeur de queue et il nous a permis d' insérer dans le dos en temps constant. Et pourquoi cela nous permet-il de le faire ? Eh bien, allons juste courir au genre d'exemple d'insertion maintenant. Maintenant, nous avons une nouvelle note ici. Nous avons un nouveau noeud de 20 ici, et nous voulons l'insérer dans le dos avant que ce que nous devons faire est que nous devions descendre le début, que nous devions descendre le début et ensuite passer par la liste sont liés jusqu'à ce que nous arrivions à l'arrière. Et c'était un problème, parce que c'est le cas jusqu'à la fin. Peu importe ce qui va toujours prendre, importe qu'il y en ait dans la liste pour se rendre à l'arrière, ce sera le temps linéaire. Donc nous allons faire ce temps constant, mais au lieu d'avoir à parcourir toute la liste, nous allons juste là où le pointeur de queue nous pointe, ce qui est une opération. Et puis maintenant nous définissons ce noeuds à côté de notre 20. Nous avons dit notre noeud de la vingtaine. On a dit que celui-là allait enlever le non, on a enlevé le nord. Nous le déplacons pour le mettre à ici. Nous créons ce taux fixe ici et dans celui-ci par défaut pointe à savoir. Et donc à cause de cela, ce qu'il nous permet de Dio est tout ce qu'il faut, c'est la seule opération pour arriver ici. 12345 peut-être des opérations à ajouter dans la pièce. Mais ça va être constant. Cela n'a plus d'importance parce que maintenant, une fois que nous avons fait cela, nous avons eu juste un petit ajout ici où nous allons juste de l'avant et nous allons de nouveau dessiner un petit pointeur vers notre nouveau dos. Et maintenant, si vous voulez insérer à nouveau dans le dos, ce sera exactement ça. Il va être environ cinq opérations pour le faire, ce qui signifie que si ça va toujours être 555 peu importe la taille est dans, peu importe combien sont dans va même si c'est l'infini que nous pouvons toujours insérer à l'arrière de l'infini et juste cinq opérations. Vous savez, c'est, bien sûr, théorique ici. Si nous pouvions simplement insérer cinq opérations, cela signifie que ce sera toujours un temps constant. Alors, quel point de conte ? Ou est-ce juste un petit morceau de données supplémentaire qui pointe vers la toute fin de notre liste ? Il nous permet d'arriver à la fin de la liste beaucoup plus rapidement en une seule opération et de mettre en place dans les opérations O à N. Et à cause de cela, il augmente notre insert à l'arrière pour aller à celui au lieu de, euh au lieu du temps linéaire. Et nous pouvons aussi penser à cela de la même manière. Je n'ai pas écrit ceci ici, mais si nous voulions supprimer de l'arrière aussi, alors ajoutons ceci ici. Supprimer à l'arrière aussi. Cela améliorerait également cela parce que sans ce pointeur de conte, si nous voulions supprimer de l'arrière, nous devrions descendre le chemin de démarrage, aller à l'arrière, supprimer et ensuite probablement le parcourir à nouveau afin que nous pouvons réaffecter tout ce qui était à côté de l'arrière. Et donc il va être dû à la fin sans pointeurs de queue sans un dire poner c'est o à la fin. Mais si nous avons un point de queue ou si nous pouvons le franchir et il deviendra en fait constant, donc ça ne vous fait pas savoir vraiment, vraiment constant. Il ne fait pas vraiment, vraiment gros changements, mais ce qu'il fait, c'est qu'il améliore seulement deux de ceux-ci qu'il nous permet d'insérer. Il nous permet d'effectuer de meilleures opérations sur le dos. Et à cause de cela, parce que maintenant que nous pouvons insérer et supprimer de l'arrière et avec un sont il rend plus rapide , sont au même rythme qu'un tableau à cet égard. C' est donc le point de queue. C' est vraiment, vraiment simple. Juste quelque chose qui pointe vers la fin vraiment assemblé sorte d'implémentation une fois que vous obtenez si vous entrez dans le code, mais cela peut vous faire économiser beaucoup de temps et dans l'ensemble, assurez-vous que le programme fonctionne beaucoup mieux. 22. Évaluation de 3-6 liées en liste: Alors prenons un peu de recul et attachons tout ce que nous venons d'apprendre ensemble pour que nous puissions obtenir, vous savez, obtenir, vous savez, un bon rafraîchissement sur tout et comment tout cela interagit les uns avec les autres. Donc, ce que nous avons, c'est que nous avons des choses appelées une liste liée, et une liste liée est une série de nœuds. C' est donc une série de morceaux qui pointent vers un certain morceau de données, puis pointent également d'autres nœuds. Et donc notre pizza qu'il pourrait être trois et ensuite nous n'avons pas ensuite et nous avons un taux précédent ici et ce que nous pouvons faire. C' est que nous pouvons alors prendre ces noeuds. Nous pouvons créer une liste à partir de ces nœuds, et cette liste nous permet de lier tout un tas de données les uns aux autres. Et la bonne partie à ce sujet est que nous pouvons insérer au hasard. Nous n'avons pas besoin, vous savez, d' allouer une certaine taille pour ça. Ça va s'étendre indéfiniment. On n'a pas à aimer, le doubler. n'y a rien de ce genre de choses qui se passe, ce qui signifie que nous pouvons continuer à lier les choses à mesure que nous les rencontrons, et cela continuera de devenir dynamiquement de plus en plus grand. Quelque chose d'inconvénient à cela est juste de la chauve-souris est que vous devez toujours venir dans cette zone de départ et pour passer à travers la liste, vous devez passer de l'un à l'autre le suivant. n'y a pas de route directe vers quoi que ce soit après le début dans cette situation, qui signifie qu'il peut prendre du temps pour faire beaucoup d'opérations. Nous pouvons améliorer cela en l'ajoutant comme un doublement lié moins. Cela nous permet de ne pas avoir à y aller. , Par exemple, si on voulait aller ici, je vais faire quelque chose à la précédente. Nous n'aurions pas besoin de revenir au début et de trouver le précédent. On pourrait juste aller et venir sur cette liste comme bon nous semble. Et puis ce que nous pouvons faire pour l'améliorer plus loin, c'est que nous pouvons ajouter un peu, un peu, um, un pointeur de conte à la fin sur ce que le pointeur de queue nous permet de faire est d'aller directement à la fin. Et cela nous permettra d'appliquer les opérations à la fin vraiment, vraiment, très rapidement. Et cela nous permettra d'améliorer un ou deux de nos temps de course. Maintenant, quand nous regardons nos temps de course ici, nous pouvons voir qu'il a beaucoup de temps d'exécution qui sont différents de l'augmentation, et certains temps d'exécution qui sont identiques. Et puis quelques temps de course qui sont meilleurs. Par exemple, insertion à l'avant sera hors de la chauve-souris juste à temps constant. Vous n'avez pas à le rendre circulaire en faisant ce genre de logique avancée. Tout ce que vous avez à faire est de créer tout ce que vous avez à faire est juste insérer à l'avant et déplacer le point de départ vers ce nouveau et le même. Si nous créons ce point de conte ou à l'arrière, nous pouvons obtenir des suppressions à l'arrière et des inserts à l'arrière dans le temps constant aussi. Certains compromis, c'est que ça n'a pas d'importance si c'est trié. On va toujours devoir aller chercher ce truc, ce qui veut dire que plus l'ensemble de données est grand, plus il nous faudra de temps pour le trier, ce qui vous permet de savoir si c'est une priorité pour notre programme, est de trouver des données, alors vous savez, vous pensez en quelque sorte que la liste de longueur est peut-être de la meilleure façon. Peut-être qu'un tableau ou certaines des autres choses dans le futur qui va se passer sera mieux que cela. Mais cela, en un mot, est ou tout cela est des listes liées. Nous avons une liste de liens unique. Nous avons des listes doublement liées. Nous avons des pointeurs de queue, et ils se réunissent tous pour former ce genre de structure de données liées qui nous permet ajouter et de supprimer dynamiquement notre structure de données à bon escient. Il y a quelques inconvénients. Il a quelques avantages, mais c'est l'une des structures de données clés, et c'est donc une sorte de fin de cette section de liste de liens. Je suis vraiment excité de sauter dans la prochaine unité où nous allons mettre en œuvre ceci dans nous allons construire à partir de ceux-ci et créer un nouvel ensemble de structures de données appelées Stacks and Queues. Donc je vais voir là-bas 23. Exemples de monde réel: Maintenant que nous avons une bonne compréhension de ce que sont les listes liées, allons de l'avant et regardons quelques exemples réels de listes de longueur. Maintenant, cette section sera un peu plus courte que la plupart des autres sections parce que nous allons parler en détail de deux des principales utilisations des listes liées. Et c'est l'arbre et le Q. La section suivante sera en fait sur, je crois, je crois, les piles et les files d'attente. Donc tu vas voir la file d'attente là-dedans et plus tard, on va couvrir les arbres. Ce sont deux grandes utilisations des listes liées, mais une autre utilisation d'une liste liée est avec le stockage de données. Quel que soit votre disque dur qui remplit les données, il recherche de la mémoire libre, et il relie en quelque sorte la mémoire libre ensemble. Maintenant, dans un monde parfait, vous auriez, vous savez, vous savez, peu de mémoire alloué à un endroit pour n'importe quel programme que vous stockez. Mais disons qu'au tout début du disque dur, vous n'avez qu'un gigaoctet. Nous allons chaque partie de ceux-ci est un gigaoctet, et tous ces sont remplis jusqu'ici. Disons que ces trois ici sont remplis. Eh bien, si vous n'avez qu'un gigaoctet, l'avant et peut-être un gigaoctet libre ici et ici. Et vous avez un 13 gigaoctet, vous savez, téléchargement à venir. Tu ne veux pas le programme que Hey, on peut installer ça. On n'en a pas beaucoup dans un Siri. Donc, ce qu'il fait, c'est qu'il relie ces domaines ensemble. Il va installer un gigaoctet des fichiers ici. Ensuite, il pointera un pointeur vers cette zone. Il va pointer est passé ici, mettre un ici et par ici, et ce n'est pas un peu plus efficace que ce que vous pourriez voir ici. Mais ce sont les bases de la façon dont il fonctionne. Il va relier le programme ensemble à travers plusieurs de ces types de boucles, et il va en fait juste vous montrer, ou il va afficher que presque en temps réel va scanner tout cela et le ramener vraiment Rapidement. Mais ce qu'il fait en fait est de créer une liste liée pour ces données. Et le genre de chose soignée est, quand vous défragmentez votre ordinateur, vous supprimez réellement une partie de cela. Vous essayez de le mettre juste à côté de l'autre et vous permettez le disque dur réel lui-même orteil avoir à chercher, qui est là où il se déplace pour aller. Cherche ça. D' autres parties de ceux-ci peuvent se trouver sur des côtés séparés du disque dur. Il les place les uns à côté des autres, donc il y a moins de temps avec cela ainsi réduit les temps de chargement. Un autre exemple du monde réel est en fait avec un navigateur Web. Si vous y pensez, il s'agit d'une liste liée. Le dos et la Ford Arrow. ce moment, nous sommes à la fin de la liste, donc ce n'est pas une liste circulaire. Je ne peux pas cliquer, aller de l'avant et revenir au tout début. Ce que je peux faire est de parcourir cette liste afin de pouvoir revenir en arrière et d'aller à la recherche Google pour ou la faute d'orthographe de la recherche Google. Probablement toutes les cinq fois. Je peux revenir à trois dos à dos de pied un, donc mon histoire est presque liée listes de sortes. Je peux aller de l'avant en arrière et je peux le traverser, mais seulement un à la fois. Sauf si, bien sûr, je suis allé à l'onglet historique, ce qui serait plus comme un tableau dans ce sens, mais c'est un peu la liste la plus proche ou la plus riel liée Exemple que je pourrais penser. Que tout le monde a probablement utilisé jusqu'à présent est l'histoire de nos navigateurs Web. Mais ce ne sont que quelques exemples de listes liées. En fait, nous allons sauter dans certains des plus dans le silex comme les implémentations de celui-ci sur une perspective informatique avec certaines de ces conférences futures. 24. 4-1: Maintenant que nous avons une bonne compréhension de certaines structures de données de base sont tableau et notre liste liée, nous pouvons commencer à construire sur ceux-ci pour créer des structures de données plus complexes mais plus utiles. Et la première chose dont on va parler, c'est une chose très importante en informatique . Et c'est la pile. Alors qu'est-ce qu'une pile exactement ? Qu' est-ce qu'on peut en penser ? Cela en quelque sorte comme une manière intuitive. Une pile est fondamentalement la façon dont les plateaux dans une salle à manger fonctionneraient. Donc, disons que vous avez une pile de plateaux dans une salle à manger ou comme une cafétéria ou quelque chose . Et donc vous avez une pile. Il y a un tas de plateaux différents, tous empilés les uns sur les autres. Si tu veux A tu sais, si tu veux un de ces plateaux, tu ne vas pas en bas pour l'attraper. Si tu veux A tu sais, si tu veux un de ces plateaux, Ce serait que tu dois tout enlever et ensuite, tu sais, tu prends tout, bouge, prends la bouteille et remets tout. Ce n'est pas ce que nous voulons faire ici. Ce qu'on fait, c'est qu'on prend le 1er 1 sur le dessus et on l'attrape, tu sais, donc on a ce plateau, et le suivant s'en va et celui qui l'attrape, il a un plateau. Et une fois que nous le faisons, ils sont partis. Donc nous aimons, enlever ces deux-là de notre pile. Si quelqu'un vient avec des plateaux propres, ils ne le mettent pas en bas, ils le remettent en haut. Si quelqu'un vient avec des plateaux propres, ils ne le mettent pas en bas, Donc nous avons de nouveaux plateaux propres bleus cette fois. Et donc ils sont ajoutés au sommet. Maintenant, si quelqu'un veut en prendre un, ils vont de l'avant et ils en attrapent un. Et puis maintenant ils en ont un comme ça et donc ils ont un plateau bleu et quelqu'un d'autre a un plateau bleu, et puis quelqu'un attrape le 3ème 1 Donc ils ont, Ah, commerce noir. Et à la fin de ça, vous savez, vous savez, nous continuons de monter et descendre, haut en bas à travers ce genre de taux de structure ici. Et à chaque fois qu'on manque de plateaux propres, ils sont mis sur le dessus et chaque fois qu'on le veut, quand on l'enlève du haut, donc on exécute Onley d'un côté de cette pile juste ici. Et c'est exactement comme ça que les piles fonctionnent en informatique. Donc fondamentalement, ce que ça va être une structure de données dans laquelle nous avons un tas d'informations qui sont en quelque sorte situées comme ça. Donc on a, genre, trois pour, euh, on pourrait avoir un mot ici. On pourrait avoir un chat ici. On peut avoir tout ce qu'on veut à l'intérieur de cette pile. Mais ce qui en résulte, c'est que si nous voulons prendre de la pile, nous ne pouvons accéder nulle part ici sauf pour le haut. Et si on veut attraper quelque chose, ça s'appelle un « pop ». Donc on ne met rien à l'intérieur de ces princes parce qu'on n'a pas le choix. Où est-ce qu'on est juste en train de surgir. On appelle la pile et on dit, Hey, enfonce un élément. Et quand nous poppin élément de lui, nous obtenons l'élément supérieur sur la pile juste ici. Donc ça veut dire que ces cinq finiront par aller juste ici. Et moi aussi. Nous obtenons un cinq et puis il est retiré de la pile. Et maintenant, si on recommence. Donc, si nous appelons une seconde pop comme si ce que nous allons finir par obtenir est le deuxième élément sortira et il sera poussé ou l'Italie attrapé et mis ici le taux de mise ici. Et alors nous faisons exactement la même chose que nous supprimons de celui-ci et ce sont maintenant Stack n' a plus que deux et trois. Mais si on veut y ajouter des informations, on fait quelque chose qu'on appelle une poussée. Et puis dans les princes, nous devons spécifier ce à quoi nous ajoutons. Notre pile spécifierait ce qui se passe ici qui va se passer ici. Et si affaibli que tu sais, quelque chose là-dedans ? Mettons 107. Donc on pousse 107 sur la pile. Cela signifie que 100 7 ira alors au sommet de la pile, puis nous le mettons sur la pile. Et c'est généralement comme ça qu'une pile fonctionne. Et ce qu'on appelle ça, c'est qu'on l'appelle dernier. Au premier sorti nous allons avoir affaire à un autre appelé F I F. Oh, c' est un repère. Ce sera une sorte de prochaine dans cette série, mais cela est appelé dernier dans le premier sorti. Maintenant, je vais admettre que c'est un peu ambigu. Je suis parfois confondu avec un Q parce que vous pensez que le dernier est peut-être celui qui a été là, le plus long, et vous pensez que l'un est le premier 1 sorti. Mais ce n'est pas comme ça que ça marche. Il s'agit de savoir lequel a été le dernier à entrer. C' est celui qui va être le premier sorti. Nous pouvons re penser à cela comme nous pouvons re penser à cela comme au lieu de dernier dans le premier sorti. C' est le plus récent des plus récents. C' est donc le plus récent en premier sorti. Et si ça, tu sais, te permet de penser à ça plus facile que d'y aller , souviens-toi, je vais être une sorte de norme qu'ils vont dire quand ils parlent d'une pile. Mais ce que cela signifie vraiment est juste le plus récent dans est le 1er 1 sorti. Et donc si on a fait un coup de pouce, on a poussé sur 107 on pop 107 on pousse sur 107. On pop 107. Nous continuons à le faire infiniment. Ces deux-là ne seront jamais touchés. Ils seront affamés. Ils ne seront jamais sortis de la pile. Et dans beaucoup de situations, c'est vraiment important pour nous en informatique parce que, par tracer comme un. exemple, cela pourrait être utilisé pour ce serait une excellente façon de le faire, parce que chaque fois que vous avez eu un tour, vous pourriez pousser cela sur une pile. Et puis si tu te fais prendre, comme une impasse, tu commences à sortir de la pile et ensuite, comme une impasse, tu commences à sortir de la pile et ensuite, disons qu'il y a eu une seconde. Il y avait une seconde direction ici. Donc, la deuxième direction ici. Donc tu es descendu ici. Tu es descendu ici. Tu es descendu ici. On a une petite pile de simulations ici, et chaque fois que tu fais un de ces virages, tu mets ça sur la pile. a une petite pile de simulations ici, et chaque fois que tu fais un de ces virages, Donc, vous savez, tourner un pour tourner trois tourner pour vous comme, oh, oh, nous avons couru dans une impasse. Donc, ce que vous pouvez faire est en fait juste sortir ça pour revenir en arrière dans le temps, puis commencer dans une direction différente et commencer à pousser sur votre nouvelle direction, qui est ce nouveau chemin bleu et une sorte d'une des petites applications qui pourraient être utilisé est idéal pour, comme, la théorie des graphes et certains des types les plus avancés de concepts en informatique. Mais pour l'instant, tout ce que nous avons à comprendre, c'est comment une pile fonctionne, et nous pouvons aussi comprendre comment elle est implémentée aussi, parce qu'il n'y a tout ce que nous avons à comprendre, c'est comment une pile fonctionne, et nous pouvons aussi comprendre comment elle est implémentée aussi, parce qu'il n'y apas de... ... pour le faire. Il y a deux façons différentes de créer une pile et de leurs manières dont nous avons déjà parlé. Nous pouvons créer un tableau qui est une pile, et nous pouvons créer une liste liée qui est une pile comme ça et vous devez penser à laquelle serait efficace Mawr. Donc nous avons notre tableau ici et disons-le. 01234 et donc nous aurions besoin de garder une trace de l'avant de la pile tout le temps parce que disons que l'avant est juste ici et que nous avons un curseur que vous savez est garder une trace de cela. Donc nous avons un à un 10 et un neuf à l'avant est juste ici. Et donc à chaque fois que nous appelons Pop, donc chaque fois qu'on appelle Pop dans cette situation, ce qui va réellement faire, ça va prendre n'importe quel numéro de curseurs. Ainsi, par exemple, en ce moment, ce curseur est réglé sur va appeler. Le curseur Voir est défini sur trois. Donc, quand nous pop, nous allons en fait juste attraper l'élément à Disons que tout ce tableau est réglé sur X. Nous allons attraper l'élément à X 3. Donc, nous comprenons que cet élément va être, il va nous livrer A. Il va nous livrer un neuf un neuf. Alors faisons ça. Il va nous en livrer un neuf, et ensuite ce qu'il fait, puis il prend ce numéro et il le réduit par un pour qu'on puisse y aller. Donc notre nouveau R C est maintenant égal à C moins un, ce qui signifie qu'il est maintenant égal à deux, et alors nous pouvons continuer à le faire. Alors faites sortir cette information. Nous l'avons attrapé, puis nous avons pris le curseur. On a pris le curseur ici et on l'a déplacé en arrière, on l'a retiré un ici. Et c'est ainsi que cela pourrait fonctionner sur un tableau. Maintenant, vous pensez peut-être que cela va avoir une limitation une fois que nous serons arrivés à la fin. Si nous essayons de pousser plus d'informations à cette fin, ça va se briser. On va avoir une faute de segue, et ça peut rendre ça un peu dangereux. Mais si vous savez que vous ne travaillez qu'avec environ 10 éléments, cela pourrait être un moyen plus rapide d'implémenter votre pile. Maintenant. L' autre façon de le faire est que nous pouvons utiliser une liste liée, et celle-ci est en fait assez intuitive aussi. Tout ce qu'on va faire, c'est qu'à chaque fois qu'on aura une nouvelle information, on va juste la mettre au premier plan. Donc, nous allons l'ajouter à l'avant comme nous l'avons fait avec lié Less Solicitous est , mettons quelques chiffres ici juste pour rendre ce n'est pas si déroutant. Et disons que nous voulions ajouter un quatre ici, donc tout ce que nous avons à faire maintenant c'est juste lier ça comme ça et puis, bien sûr, changer notre position de départ. Alors qu'il pointe vers de sorte qu'il pointe vers notre nouveau. Et puis chaque fois qu'on veut sortir du début, tout ce qu'on a à faire, c'est juste changer. Prenez les informations de ceci, puis changez notre démarreur, sauvegardez un. Et donc vous pouvez voir que cela pourrait être un peu plus rapide dans le sens où vous n'avez pas à tout mettre en place ici, mais, euh, euh, et tout spécial, parce que nous n'avons pas à saisir quoi que ce soit de l'arrière. On ne doit pas fouiller ça. Ces air toujours temps constant ici, et il pourrait être étendu à l'infini. Donc, vous savez, vous pouvez continuer à ajouter des notes. Ça aussi longtemps que tu veux. Tu n'as pas besoin de définir la taille. Donc, c'est généralement la façon typique que les piles sont implémentées. C' est une sorte de liste de liens. Cependant, ils peuvent être implantés dans une augmentation. Je voulais juste te montrer ça aussi. Et beaucoup de fois quelque chose qu'il n'est pas, vous savez, complètement rare qu'ils soient implémentés avec un tableau 25. Exemple de pile 4-2: que nous avons une partie de l'intuition derrière une pile. Je voulais cimenter l'idée d'une pile en passant par quelques exemples, une sorte de façons que nous pouvons regarder comment un programme va entrer les données, sortie, la sortie,les données et ensuite comment tout va fonctionner ensemble. Donc, ce que nous allons faire, c'est passer en revue quelques exemples ici. Donc, ici, nous avons juste un exemple de base. Il dit donner la sortie finale et les éléments restants de la pile. Donc, ce que nous allons faire, c'est que nous allons exécuter ces commandes et ensuite voir ce que notre sortie devient et ce qui reste sur la pile à la toute fin. Commençons donc par faire cette étape par étape. Donc nous allons avoir une pile vide juste ici. Il n'y a absolument rien dedans. Et puis notre sortie. Je vais mettre notre sortie ici, en fait, mettons-le, mettons-le sur la gauche ici parce qu'il pourrait être long que nous allons mettre notre sortie juste ici, comme ça et donc la sortie va juste ont ces nombres peuvent caféiner les uns sur les autres. Donc je vais vous expliquer ça dans une seconde, mais est-ce que les sorties vont être ici sous le bas et ensuite notre pile va continuer à traverser le haut ? Donc, cette étape est une étape un dit pousser pour Donc nous allons pousser pour ici, ce qui signifie que nous allons juste ajouter un quatre sous la pile. Et puis maintenant, nous allons à la suivante qui est poussée à Donc rien d'autre ne s'est passé. Rien n'a été sauté. Donc nous avons une pile de quatre, et nous allons pousser dessus. Donc poussé pour, je veux dire, pousser à écrire va juste là. Et maintenant, nous allons passer à l'étape suivante : «  Push 15 ». Donc nous avons un quatre, nous avons un deux, et maintenant nous avons un 15 comme ça et puis nous arrivons enfin à notre première sortie. Notre première sortie, dit Pop, Rappelez-vous, il n'y a rien à l'intérieur du pot parce qu'il va juste attraper n'importe quel élément est en haut. Il n'a pas un type d'élément spécifié, va attraper. Tu ne peux rien attraper sous le haut. Donc tout ce qu'on a à dire, c'est qu'on va faire, c'est qu'on va faire sortir cet élément. Et donc il ne nous reste qu'un quatre et un deux, et ensuite que 15 à 15 se déplace jusqu'à notre sortie ici. Et puis maintenant, nous avons 15 dans notre sortie. Et c'était donc cette étape. Et donc la prochaine étape que nous faisons est de pousser 27. Maintenant, on en a quatre, on doit le faire, et on a 27 du top. Et maintenant ce qu'on va à Dio, c'est qu'on va faire à Pops. Donc on va sortir le 1er 1 qui est notre 27. Donc, dans cette pop, les 27 vont descendre et être mis dans notre sortie. Donc maintenant, nous en avons 27 ici, et vous pouvez le séparer par des virgules ou quoi que ce soit. Je les mets tous ensemble. Donc 15. 27 on va juste mettre tout ça ensemble comme ça et ensuite on doit recommencer. Donc c'était ce papa juste ici. Où cette pop. Maintenant, on doit sortir une fois de plus. Donc maintenant, nous avons juste les quatre restants sur la pile et sont trop bien, un peu comme ils vont les deux comme ça. Donc la mastication, qui est juste ici, descend et il est mis sur la sortie, non ? Comme ça. Alors, nous avons juste les deux ajoutés sur. Et c'était notre deuxième pop, non ? Comme ça. Et maintenant, vous pouvez voir que nous allons dans cette pile une sorte de pas à la fois. Le pousse les pops et cette pile est comme, Dynamique grandit, il se rétrécit, et il n'accède qu'à partir du haut tout le temps. Alors faisons nos derniers pas ici. On va pousser un trois, alors dessinez-le ici parce que tout ça ici est repris. Donc on en a quatre, puis on a ajouté trois, on a poussé sur nos trois, et ensuite on va faire la suivante, on doit pousser sur quatre autres, donc avant trois, puis quatre. Et donc nous poussons sur ces quatre comme ça et maintenant ce que nous avons c'est que nous avons trois déclarations pop . Donc notre première déclaration de pop va être ici, la deuxième déclaration de pop sera là, et la troisième déclaration de pop sera là. Et donc ce qu'on a sur la 1ère 1, c'est qu'on va sortir ces quatre. On va sortir ces quatre pour qu'il se résume à la sortie, et ensuite on va sortir ces trois. Donc tout ce qu'il nous reste est avant ainsi que trois va à la sortie. Et enfin, on va sortir du dernier élément. Donc, nous avons une pile vide ici à la toute fin. Et donc nous avons les quatre grands, comme ça, et vous remarquerez quelque chose. Vous remarquerez qu'au tout début nous avons ajouté ces quatre et qu'il n'a pas été retiré jusqu'à la fin. Il y avait tout un tas de choses à l'avant, mais ça n'a pas été bougé avant la fin, parce que c'est une pile. Et comme je l'ai dit, il pourrait être affamé ici. On ne pourrait plus jamais le toucher. Donc c'est juste un peu comme une des petites mises en garde qui vient avec une pile. Laisse-moi juste dessiner ces flèches en sorte de finir. Ce diagramme va être un peu regroupé ici, mais c'est comme ça que tout va se passer. Donc, un pas à la fois. On se déplace lentement l'un à l'autre, l'autre à l'autre, et on vide cette pile, et ça va être notre sortie finale. Ce numéro est juste là ? 15 à 7 à 434 Si on veut mettre des virgules ici, c'est tout. l'extérieur. Mets-le comme ça. Et donc, oui, c'est la sortie finale de notre pile. Et puis notre dernière pile a fini par être complètement vide. Alors faisons un autre exemple ici, et je vais rendre celui-ci un peu plus propre. Maintenant que nous ne le faisons pas. Je ne vais pas encore essayer de dessiner ces flèches. C' était bon pour le 1er 1, mais faisons-le d'une manière qui pourrait paraître un peu mieux. Ok, donc j'ai mis des chiffres ici. Et maintenant, allons-y. Étape 1. La première étape est une poussée à 10. Donc nous avions un sac vide pour commencer, éteindre, mettre ici. Donc on a eu une poussée de 10 ici. Allons-y et poussons 10. Deuxième étape : « Pop ». Donc on prend ce 10 et on l'éclate tout de suite. Maintenant, nous sommes de retour dans une pile vide. Et puis ce 10 va jusqu'ici. Ce 10 va jusqu'ici et mettons l'étape qu'il s'est passé au-dessus. Donc, il est arrivé à set à. Alors passons à l'étape 3. C' est la poussée vers Donc nous allons pousser les deux là comme ça et ensuite l'étape 4 dit pousser un cinq à cinq. L' étape 5 dit de pousser un C. Donc, nous allons mélanger différentes valeurs ici cinq, puis voir en haut. La sixième étape est une autre pop, donc on va sortir de la mer. Donc tout ce qu'il nous reste, c'est cinq et deux, et on va mettre le voir ici. Et puis c'est à l'étape 6 que c'est arrivé. Et puis passons à sept, ce qui est un autre pop. Donc maintenant nous n'avons plus que les deux sur la pile comme ça et ensuite nous allons aussi sortir ce cinq et nous le mettons ici. Ce n'est pas l'étape 7, et donc nous en sommes à l'étape 8 maintenant. Huit dit qu'on doit pousser sur un 14 Donc on a deux 14 9 dit qu'on doit pousser sur le chien. Donc maintenant, nous devons 14 et puis chien en haut ici. Et maintenant, on va sortir les trois éléments. Donc 10 va descendre à et 14 et on va ajouter le chien ici. Et c'était sur 10. Et puis nous allons aller de l'avant et aller à l'arrêt 11 juste ici, ce qui sort du 14. Donc, tout ce que nous avons est trop commun, et c'était à l'étape 11. Et finissons, c'est souvent que nous pouvons finir ce graphique ici. C' est une dernière pop, donc c'est une pile vide. Donc nous obtenons ou mon père 11 devrait avoir 14 11 ans. devrait avoir 14 ans ici, et ça devrait l'être aussi. Et puis c'est sur les étapes 11 et 12. Disons cependant que nous n'avons pas eu l'étape 12. Way est venu à la même chose à la fin ici nous avons trouvé une pile vide, la même que nous l'avons fait dans le dernier exemple. Cependant, venons avec un let ne s'est pas terminé dans une pile vide. Alors disons quoi ? Nous écartons l'étape 11. Disons que nous sommes l'étape 12. Donc, nous éliminons l'étape 12 et nous ne l'utilisons pas. Cela signifie que cela va se terminer dans une pile non vide afin que nous puissions juste effacer tout ça . Et c'est cela arrive beaucoup à dans ces sortes d'exemples est que la pile n'a pas besoin d'être vide pour finir. Le problème est qu'il peut toujours avoir une valeur à l'intérieur de celui-ci. Ou pourrait-il avoir encore plusieurs valeurs à l'intérieur ? Et dans cette situation, nous avons ici une sortie de 10 c cinq chien 14. Mais il nous reste quelque chose sur la pile aussi, et c'est aussi important. C' est pour ça que nous devons le faire. Habituellement, ces deux situations allaient obtenir la sortie et la pile régnante dans ces situations. Parce que la pile peut ne pas être vide, il pourrait ne pas être capable de commencer comme nous l'avons fait avec celui-ci avec anti Stack. Si nous revenons à cela quand nous devons comprendre qu'il reste encore deux dans la pile et faisons un exemple légèrement différent, disons que nous avons essayé quelque chose où nous avons sauté pour 12, puis 13. On pop encore si on fait un pop sur une pile vide. Donc, il y a une pile vide et nous essayons d'implémenter cette dernière pop pour que cela aille avec le cas original où nous sommes à une pile vide. Et maintenant, nous essayons de sortir quelque chose d'une pile vide qui va donner un air . Si vous essayez de sortir d'une pile vide, vous allez obtenir un air massif quelque chose comme un air de faille de segue ou n' existe pas d'air, quel que soit le genre de programme qui l'utilise va jeter un air différent. Mais fondamentalement, ce qui se passe, c'est que vous essayez d'attraper des informations qui n'y sont pas, et donc vous pouvez l'écrire dans le code où il va juste dire, Hey, hum, ça va l'ignorer ou quoi que ce soit. Ce n'est généralement pas la meilleure pratique de codage parce que cela signifie que vous ignorez le problème , que votre code était inoffensif, où il essaie de faire apparaître quelque chose qui n'est pas là, ce qui signifie l'innocence que pourquoi Est-ce que ça essayait de faire sortir quelque chose qui n'était pas là ? Quel genre de choses vient de ça ? Peut-être que le design était faux dans le code. Peut-être qu'il essaie d'attraper quelque chose qu'il n'a pas, donc on n'utilise pas. Je veux ignorer ça. Nous voulons laisser passer l'air et ensuite nous pourrons réparer notre code. On peut réparer les données qui entrent et sortent pour corriger ça. Alors, comprenez juste, cependant, ce popping. Si vous essayez de sortir de Empty Stack, vous obtiendrez un air de cela. Mais ce sont les exemples et la sorte de l'intuition de la façon dont vous pourriez descendre un exemple de pile poussant, copping vraiment, vraiment assez simple, surtout si vous le dessinez. Je vous recommande fortement de le dessiner afin que vous puissiez voir à quel point c'est vraiment simple. Ton ajout de trucs au sommet. Vous le sautez en haut et vous listez juste la sortie à la fin 26. 4-3 Queues: Maintenant qu'on a des piles sous notre ceinture, allons-y avec leur frère. Et ce sont les indices. Les indices sont très similaires à Stax, sauf qu'ils ont une différence importante, et c'est ainsi que les informations sont extraites de la structure de données. Alors faisons exactement ce qu'on a fait avec les piles. Et passons en quelque sorte l'intuition derrière ce qu'est un Q. Et la meilleure façon de le faire est en fait juste en Grande-Bretagne, comme la langue britannique et, je pense, langue australienne. Ils appellent ce que les Américains appellent une ligne un Q, et c'est pour une bonne raison. Par exemple, disons que nous avons, ah, ah, caissier de banque juste ici. C' est un caissier de banque et il y a une ligne, ce qu'on dit en Amérique , , une file de gens qui attendent. Vous aurez cette personne, cette personne, cette personne, cette personne et cette personne. Et la façon dont cette structure de données fonctionne est que la première personne qui est ici sort . Ils sont servis, ils sont enlevés, et ensuite les nouvelles personnes sont ajoutées à la fin ici. Et cela fonctionne d'une manière qu'il crée exactement une file d'attente. Les premières personnes sont les premières à être servies ici. Donc celui-ci est le Souvenez-vous comment la dernière fois que nous avons parlé de l i f Oh, celui-ci est f i f o. Et cela signifie premier dans premier, premier sorti. Donc les premiers qui sont arrivés sont les premiers qui sortiront, euh, euh,à nouveau. Et donc, comme je l'ai dit, celui-là genre de terminologie pourrait devenir un peu confus. Donc, si vous voulez y penser d'une manière différente, c'est la, euh, la plus longue attente, la plus longue attente est la 1ère sortie. Donc la personne la plus longue a attendu est la 1ère sortie, et bien sûr, ce serait la personne à l'avant ici. Et donc la façon dont vous implémentez cela dans une structure de données est au lieu de dessiner une pile comme celle-ci parce que c'est qui vous permettra seulement de saisir d'une extrémité est que vous pouvez le dessiner en quelque sorte de côté. Et c'est comme ça que je dessine habituellement, c'est que vous avez ce genre de structure de données où vous , euh , avez , genre, des côtés ici, et donc si quelqu'un, ça pourrait être à l'arrière, et cela pourrait être l'avant. Et si les gens y sont ajoutés, ils sont ajoutés à l'arrière. Disons que nous avons des données ici maintenant. Si les gens s'y ajoutent seront ajoutés de ce côté, et quand les gens en seront retirés, ils seront enlevés de ce côté. Donc, par exemple, nous avons une nouvelle personne qui arrive. Donc, il y a 31 personnes est servi. Donc ces trois sont enlevés et les stocks descendent comme ça. Et vous voyez que c'est un peu plus difficile à dessiner parce que ce n'est pas exactement stationnaire, c' est juste qu'il continue à bouger au fur et à mesure que vous allez. Et c'est juste une sorte de la nature d'un d'un Qué dans cette situation. Et donc, par exemple, il y a encore la poussée et les opérations pop, cependant, ils fonctionnent juste un peu différemment. Le pop va toujours prendre de l'avant au lieu de l'arrière, donc le pop attrape de l'avant au lieu de comme dans une file d'attente où il va attraper, ou au lieu de comme dans une pile, où il va attraper exactement du même côté qu'il a poussé . Donc, Pop va s'emparer de devant. Push va pousser à l'arrière. Et c'est la principale différence de cela. Et vous pourriez penser comment exactement ? Avec ça, tu sais quoi ? Quoi ? Quelques-uns. Les avantages de cela. Imaginez un ordinateur. On a un processeur juste ici. Ah, processeur. Donc, un CPU, comment obtient-il des données ? Eh bien, comment ça se fait, en fait des instructions de ce qu'il devrait faire ? Eh bien, le fait est que si elle utilisait une pile pour obtenir des instructions, vous auriez un problème où si, par exemple, disons que ce top était comme, ah, Navigateur Web. Et puis celui-ci était quelque chose qui devait faire pour le traitement général juste. Et puis ici, il y avait un document mot. Imaginez que si c'était un sac et que ces deux hommes continuaient à venir dans notre document Word se figerait parce qu'il ne serait jamais touché. Ce serait ce qui est connu comme affamé en bas ici, et ce n'est pas une bonne implémentation pour un CPU. Ah, meilleure implémentation serait si au lieu d'être une pile, au lieu d'être une pile, ce que nous en avons fait était un Q parce que maintenant il va s'exécuter. La première tâche va exécuter la première tâche et dans la deuxième tâche et dans la troisième tâche . Et puis, si quelque chose doit être exécuté ensuite, ceux vont être ajoutés ici. Et ce Q va juste continuer à envelopper autour et autour de nouveaux types de choses dont il a besoin pour dio et notre CPU va juste accomplir un après le prochain après le prochain après le prochain après le prochain après le prochain. Et il sera en mesure de parcourir tous les programmes dont nous avons besoin. Vous savez qu'il a besoin d'accomplir les calculs qui doivent dio sans jamais affamer une certaine tâche. Et donc c'est une sorte de fonctionnement d'un processeur. C' est un peu plus complexe que ça, juste parce que je veux dire qu'il doit faire ça comme quelque chose comme trois millions de fois par seconde ou un chiffre fou comme ça, et certaines choses ont priorité sur d'autres choses. Mais dans le sens fondamental, c'est pourquoi vous utiliseriez un Q sur une pile est quand vous voulez que tout ait la même quantité de valeur et que vous voulez que la chose qui a attendu le plus longtemps pour être servi premier. Alors regardons en quelque sorte les implémentations. Comment nous pourrions faire cela, nous pourrions utiliser à nouveau une liste liée ou dans le tableau jusqu'à présent sont la liste liée. On était pour notre Ray, mon père pour Array. On aurait quelque chose comme ça ici. Et le fait est que ce devrait être un tableau circulaire. Cela devrait être circulaire. Rappelez-vous quand nous avons parlé des piles que nous pouvions juste utiliser le droit normal quand nous devions faire était d'avoir une malédiction. Sont une sorte de Ouais, un curseur qui a pointé en bas, le dos, et puis il juste une sorte de déplacer de haut en bas. Le problème, c'est que l'avant et l'arrière vont toujours se déplacer partout. Donc, ce que nous devons faire, c'est que nous devons réellement mettre en œuvre. Nous devons mettre en place un droit circulaire pour que l'avant et l'arrière puissent se déplacer. Donc, ce que nous faisons, c'est que nous avons , disons , quelques informations ici, et nous aurions un curseur qui pointe vers l'avant et un curseur qui pointe vers le sollicite arrière dirait, Peut-être que c'est le front. Peut-être que c'est le dos. Et maintenant, lorsque nous avons ajouté des données, elles seraient ajoutées à l'arrière ou l'avant n'a pas vraiment d'importance tant que les côtés sont opposés. Vous aviez ajouté d'un côté et vous prenez des données de l'autre côté. Ensuite, vous déplaceriez chacun d'entre eux. Donc, si vous avez pris ou si vous avez ajouté à l'arrière, le dos serait alors déplacé. Le dos en moi s'est déplacé vers le nouveau morceau de données peu fort juste là. Pourtant, il serait déplacé comme ça, et alors l'avant ne bougeait pas. Et si vous êtes sorti de l'avant, alors vous attrapez celui-ci et vous déplacez celui-ci aussi. Donc c'est exactement comme ça que nous avons parlé du tableau circulaire. Nous devons le rendre circulaire. Pour que cela fonctionne autrement se heurtera à des situations où nous devons continuer à utiliser O à l' orteil n , déplacer toutes les données d'avant en arrière. Et cela devient vraiment, vraiment fastidieux fin vraiment gourmand en ressources. La prochaine option affaiblir Dio est que nous pouvons utiliser notre liste liée afin que nous puissions avoir notre liste liée ici et la façon dont nous allons le faire est que nous avons besoin à la fois ce pointeur de démarrage , le point de départ normal que nous avons. Nous avons aussi besoin de ce pointeur de queue dont nous avons parlé. La raison pour laquelle nous avons besoin du pointeur de queue est que nous sachions exactement ce qu'il y a à la fin de la liste ici. Et si nous savons ce qu'il y a à la fin et si nous pouvons y arriver immédiatement, alors affaiblir, attraper, affaiblir, supprimer et nous pouvons le sortir. Mais il y a un problème ici, c'est que si nous avons juste un pointeur de queue et que nous essayons , sortir ça,celui-ci ne sera pas réinitialisé et ça va être un problème. Nous ne pouvons jamais passer précédemment, donc cela va en fait avoir généralement besoin d'être une liste doublement liée. Cela nous permettra non seulement de passer à la fin, mais aussi de revenir en arrière et de réinitialiser tout cela pour savoir que nous n'avons pas de problèmes où cela est toujours en contact avec un non, qui n'existe plus. Donc nous allons devoir qu'ils utilisent la liste de liens la plus avancée dont nous avons parlé , qui est une liste doublement liée avec un pointeur de queue. Et maintenant, chaque fois que nous voulons ajouter quelque chose à cela, nous venons d'ajouter au début. Donc nous venons d'ajouter plus. Nous l'ajoutons comme ainsi et refaisons les flèches et il est ajouté à l'avant chaque fois que nous avons besoin de supprimer quelque chose, nous le retirons juste d'ici et puis réajustons le pointeur de queue à l'arrière tout en temps constant . Et c'est essentiel pour tout ça. On va parler de la fin de tout ça, comment sont les temps d'exécution de tout ça. Mais pour l'instant, on a juste besoin de comprendre, et ça va être. Le point principal de cela est qu'ils ont tous besoin de se retrouver en temps constant. Sinon, il commence à devenir beaucoup trop gourmand en ressources et surtout parce que si vous le faites correctement , ils peuvent tous être des temps constants, donc il n'y a aucune raison de le faire à la fin. Si elles peuvent tous être le temps constant. Donc, c'est un Q. Et c'est l'intuition derrière un Qué dans la prochaine conférence. Faisons exactement la même chose que nous avons fait avec des sacs et passons quelques exemples 27. Exemples d'arrêt de 4-4: ce n'est pas le cas. Nous avons passé en revue l'intuition derrière Cues. Passons à quelques exemples afin que nous puissions voir comment la structure d'état interagit avec les données qu'elle est donnée. Le premier exemple que nous allons faire va être très familier. C' est identique à l'un des exemples que nous avons fait pour les piles, et la raison est que je veux vous montrer comment les données sortiront différemment afin que vous puissiez le voir ici. Ce que nous avons est la sortie de pile que cela a donné. Et puis ici est exactement le même ensemble d'instructions que nous avons fait avec la pile pour obtenir cette sortie. Voyons donc ce qu'un Q vient avec. Donc, tout ce que nous avons à faire, c'est exactement la même chose que nous avons faite avec les piles dans le passé, où nous allons un pas à la fois et en faisant un pas à la fois, nous sommes capables de, euh, voir comment ces pile est en cours de construction ou dans cette situation, comment le Q est construit, puis quelle est la sortie finale. Allons donc ici et nous allons écrire la sortie aussi. Et donc les sorties seront ici. Ils sont tous numérotés pour nous. Pour que nous puissions, vous savez, créer cette grille ici des étapes. Alors commençons. Je vais le dessiner sur le côté. Il est temps de s'assurer que ça ressemble à un Q, et nous allons pousser sur un 10. C' est donc notre premier pas ici. La deuxième étape va être de pop, donc nous devons pop in element off. n'y a qu'un seul élément ici, alors on sort du 10. Alors maintenant que le Q devient vide, le 10 descend ici et puis nous pouvons aussi droite dans l'étape à laquelle cela s'est passé. Et puis passons à trois. Donc nous poussons sur un à quatre ont poussé sur un cinq et puis cinq. Nous poussons sur un C. Oops. Nous devrions probablement nous assurer que nous avons les deux là aussi. Et puis cinq ont poussé sur un C, donc ça va être trop cinq. Et puis six maintenant six ont éclaté et dans une pile on sortirait du côté droit ici, le côté que celui qui est arrivé ici le plus récent. Et puis six maintenant six ont éclaté et dans une pile on sortirait du côté droit ici, Mais c'est accusé. Donc on sort de celui qui a été ici le plus longtemps. Et vous verrez que la différence est ici dans la pile. On l'a fait. Nous avons sauté celui qui a obtenu leur premier la mer. Mais dans cette situation où nous allons sortir de la vers Donc les deux vont juste ici et ça n'a plus que cinq et voir à gauche dedans. Et ensuite, on pourra dire, quel numéro ? Les scientifiques, cette étape 6, c'est arrivé. Et au lieu de ça, sept, on va faire une autre pop. Donc, tout ce qui reste sur la pile, c'est la mer. Et donc nous avons mis la mer ici et nous continuons avec un huit. Donc, avec un huit poussaient sur un 14. Alors maintenant, il est 14. Pour mon mal c'est, See est sur la gauche, See est prêt à être sauté ensuite. Donc c'est C, puis 14 va à l'arrière, puis on va à neuf et on pousse sur le chien aussi. Et maintenant, nous avons C 14 et chien, et enfin, nous allons juste faire sauter. Donc, on a une pop. Il va supprimer un élément, le prochain Pops pourrait enlever un autre élément. Et puis enfin, nous avons une chaîne vide. Donc la première pop, on va enlever le 1er 1 ici, celui qui attend le plus longtemps, la mer. Donc tout ce qu'on va avoir ici, c'est qu'on va avoir un quatre, puis un chien ou 14 14 14 et un chien. Et puis tout ce qu'il nous reste ici, c'est un chien. Et ils auront une file d'attente vide juste à la fin par ici. Donc le C se détache, puis c'est le 14 qui sort, et puis le chien se détache. Donc ce qu'on a ici, c'est qu'on va avoir Oh, j'ai fait une erreur. J' ai fait une erreur. Ça ne devrait pas être vu, il devrait y en avoir cinq parce qu'on a sorti les cinq. Celle-ci est C et ensuite elle est 14. Et puis c'est le chien. Désolé pour cette erreur, les gars. Et puis c'est ce qui arrive à 10 heures. C' est ce qui se passe à 11 heures et celui-ci arrive à 12 heures. Et maintenant vous pouvez voir à moins d'autres erreurs que j'aurais pu faire, vous pouvez voir que celles-ci sont en fait très différentes les unes des autres. Leurs sorties il y a une sorte d'inverse l'un de l'autre où vous pouvez voir que les deux sont presque ici, tandis que les deux sont à la toute fin. Ici, le chien est complètement différent. Donc, il n'y a pas vraiment beaucoup d'un modèle ici, Mais vous pouvez voir que l'état de départ était le même, parce que pousser un pop va toujours être le même, si c'est un empileur que juste un juste après l'autre. Mais ce que vous commencez à obtenir plus de données là-dessus. Ils l'ont géré d'une manière complètement différente. Donc, si c'était comme, par exemple, un processeur informatique ou quelque chose, ces tâches seraient accomplies de manières très différentes. Et dans cette situation, les deux ont été poussés au sommet. Mais il n'a pas été exécuté avant la toute dernière déclaration. Donc celui-ci aurait attendu très longtemps. Eh bien, celui-là était beaucoup plus juste. Ce qui est arrivé en premier attendait le plus longtemps. Il les a calculés en moyenne. Donc, les temps d'attente étaient tous relativement moyens dans l'ensemble. Et c'est pourquoi c'est le meilleur pour, comme faire du traitement informatique et des trucs comme ça. C' est donc le premier exemple du Q, c'est assez facile. Tout ce que vous avez à faire est Pop et puis vous poussez ou vous poussez et puis vous sortez de l' extrémité opposée et vous obtenez ce genre de mignon juste comme la ligne fonctionnerait. Alors maintenant, faisons un autre exemple, et vous remarquerez qu'ici les noms ont changé et c'est parce que pop et push peuvent être utilisés. Mais aussi les gens utilisent dans Q et D. Q. Et la raison en est pour qu'il ne soit pas confondu avec, par exemple, une autre pile dans le programme afin que la pile ait une poussée popping, puis le le Q aurait en Q et D. Q. Et alors, qu'est-ce que cela fait ? Est-ce, comme je l'ai dit, sépare ces deux-là. Vous verrez peut-être que vous ne pourriez pas, mais je veux juste vous présenter ces concepts pour que vous compreniez. Si vous voyez un ANC, vous êtes de que ce qu'il est exactement. Et maintenant sur celui-ci, je vais faire un peu d'un résumé comment je pourrais résoudre ce problème parce que cela pourrait devenir très, très vante ver. Ici, c'est ça prend beaucoup de place sur beaucoup d'écriture donc je vais vous montrer un moyen plus rapide de le faire là où vous n'avez pas à écrire les étapes à chaque fois et vous pouvez avoir exactement la même quantité de précision. Alors allons-y et commençons. La première chose qu'on va faire, c'est qu'on va juste dessiner un très gros Q ici. Comme si on va, tu sais, rendre ça vraiment, vraiment gros. Et puis nous allons avoir une sortie ici et commençons. Donc la première chose qu'on va faire, c'est qu'on va au QA 10 un 15 et un 17. Nous incluons donc ces trois chiffres. Donc maintenant, nous en sommes là, et maintenant nous jetons votre 1er 1 Donc ce que nous pouvons faire est juste de barrer celui du côté opposé que nous ajoutons et de le mettre dans notre sortie. Et puis nous pourrions passer à l'étape suivante dans Q et l. Donc maintenant nous en Q de ce côté. Et maintenant on va faire à Deke. Utilisez ridicu un. Nous sommes dans un D mignon, aussi, donc ça va être ça 15 et dans ces 17 pour qu'on puisse juste rayer 15 17 et les écrire ici. 15 est venu en premier, puis le 17. Et maintenant, nous sommes là. Et donc ce que nous allons faire, c'est à Cuba 14. Donc nous avons mis un 14 ici, et puis nous avons deux autres utilisations de queue, donc nous allons aller de l'avant et de que le L d. Q. Q. Le 14 l 14. Corrigez ce 14 ici l 14 et enfin maintenant, tout en bas. Ici, nous sommes, droit dans les deux dernières opérations, l'in q de quatre, et puis nous allons de que que pour. Et maintenant, ce qu'il nous reste, c'est que nous avons notre, euh et en fait, Q. Et puis c'est notre sortie et vous remarquerez que cela a pris beaucoup, vous savez, moins de temps. Et c'est une bonne façon d'expliquer le concept, car vous pouvez voir chaque étape du chemin. Et si vous voulez y revenir, vous pouvez voir ce qui s'est passé entre chaque poussée et chaque pop. Cependant, lorsque vous résolvez ces problèmes, vous pourriez vouloir opter pour une version manuelle plus rapide et plus rapide comme celle-ci où vous pouvez juste avoir un Q que vous allez entrer et sortir . Donc, vous voulez continuer à redessiner des indices et garder une trace des choses, et cela vous aidera beaucoup. Parce que même dans cette situation, tu te souviens comment j'ai foiré ici ? Je n'ai pas mis un cinq et mis un c là. Même dans ça, ça ne m'a pas sauvé de ça jusqu'à la fin où je devais aller. En fait, vérifiez ça. Il a exactement la même précision, et il accélère votre flux de travail. Il ne vous montre pas les concepts aussi, mais vous obtiendrez le résultat final beaucoup plus rapidement. C' est donc cet exemple ici. Comme je l'ai dit, beaucoup plus vite. Quand vous le faites de cette façon et vous pouvez voir que c'est comme tous les autres indices que vous mettez de ce côté. Et puis vous, euh et bien, en fait, mettez dans le bon côté ici. Ce serait comme notre front et ensuite votre Ceci est notre dos. Donc nous sommes sortis de ce côté, poussés sur le côté, et cette chose bouge en quelque sorte ici comme nous le faisons lentement. Donc, ce sont quelques exemples sur les indices vraiment, structure de données vraiment soignée que vous pouvez construire à partir d'autres structures de données et qui a tant d'applications du monde réel et est vraiment essentiel pour apprendre un informaticien za. 28. 4-5 Qu'était-il et Stack Exécutez: Avant de terminer cette section, je voulais discuter de quelque chose dont nous avons discuté et de toutes les autres sections. Et c'est le temps d'exécution des piles et des files d'attente et les temps d'exécution ne sont pas aussi coupés et secs que, par exemple, les listes de lancement ou le tableau. Et c'est parce que ces structures de données ne sont pas des structures de données qu'elles-mêmes. Ils sont construits à partir d'autres structures de données, ce qui signifie que les temps d'exécution dépendent en fait de la structure de données sur laquelle vous la construisez. Donc, si nous allons ici et nous regardons nos actions, avons une poussée dans un pop et nos indices n'ont pas dans Q et D. Q. Et nous pouvons soit utiliser pour les deux, nous pourrions soit utiliser dans tableau. Donc, vous connaissez le tableau classique, ou nous pouvons utiliser une liste liée, donc nous avons le choix sur chacun de ceux-ci. Cependant, si vous pensez à ce sujet, chacun de ces le tableau et la liste liée ils ont tous eu la possibilité de si vous avez choisi l'un des autres orteils ont une odeur, l'un insérer signifiant insert temps constant et un temps constant suppression à la fin, ce qui signifie que nous devons tirer pour dans notre exécution de tous ces, nous devons tirer pour un temps constant parce que cela peut être fait en temps constant. Donc, comme cela peut être fait en temps constant, nous devons nous assurer que toutes nos encre utilisées accusés Push and Pops sont également en temps constant . S' il a couru en temps linéaire ou en temps carré ou tout autre temps plus long que notre Q et Stack serait horriblement inefficace parce que, comme je viens de le dire, nous avons déjà prouvé que ces opérations peuvent être effectuées en temps constant, pourquoi rendre les choses plus lentes que cela ? Et comment as-tu pu faire ça ? Alors passons à l'exemple d'une pile très rapidement. Disons qu'on a une pile juste ici. Et si nous avons utilisé, par exemple, un tableau avec un tableau, tout ce que nous avons à faire est de garder une trace d'une extrémité. Donc nous devons faire est de dire, trois à nous devons juste pousser jusqu'à la fin, et ensuite nous pouvons sortir de la fin, pousser jusqu'à la fin, pop de la fin. Nous pouvons continuer à faire cela d'avant en arrière et nous rappeler qu'un tableau est toujours constant, temps d'insertion si vous connaissez le numéro de l'endroit ici. Donc, par exemple, comme 123 Si vous connaissez l'exemple du spot, alors vous pouvez simplement aller à ce supprimer un off, aller à ce pousser un retour sur, ce qui signifie que la suppression et l'insertion sont les deux vont être finis avec un. Vous pouvez également le faire avec une liste liée tant qu'elle a un pointeur de queue. Donc, il suffit de pointer le pointeur de queue vers la fin. Et puis chaque fois que vous y arrivez, il va probablement avoir besoin d'être doublement liste pour que nous puissions en faire une insertion et une suppression rapides . Nous enlevons simplement la fin, puis déplacons le pointeur en arrière un. Et si nous voulions en ajouter un, nous faisons exactement la même chose où nous venons d'en ajouter un ici. Et puis nous déplaçons le pointeur de queue sur un aussi. Et donc, comme nous l'avons prouvé plus tôt, peuvent être un temps constant aussi. Donc cela signifie à la fois pop et push devraient être, Oh, à l'un, et c'est comme ça que vous savez que vous avez une pile efficace ou Q. Et puis nous pouvons juste faire le genre d'exemple rapide aussi bien pour le, um pour le Q. Alors allons de l'avant et mettons la file d'attente ici et maintenant celui-ci est un peu plus complexe, et c'est là que vous pourriez avoir un air ou quelque chose. Si vous choisissez le mauvais design, vous aurez quelque chose de vraiment lent. Par exemple, si nous avions Si nous implémentons, c'est juste par un tableau normal. Donc, implémentez cela juste par un tableau normal. Nous devons pousser et sortir des extrémités séparées, donc nous devons pousser à cette fin. Et nous avons eu le pop de ce bout. Mais le problème est avec un tableau. Si ce n'est pas circulaire, quand nous sortons de là, nous devons déplacer tous les éléments vers le bas pour garder une trace de tout. Et quand on recule tout vers le bas, ça devient une ode à l'opération en cours. Et comme nous l'avons dit, ce n'est pas ce que nous voulons. Nous devons donc nous assurer que si nous utilisons un tableau pour cela qu'il doit être circulaire , il doit avoir des pointeurs avant et arrière. On peut juste tracer le rail circulaire juste ici. Il doit avoir des pointeurs avant et arrière pour que, comme nous l'avons discuté plus tôt, ce soit cette circulaire où il pourrait aller dans l'une ou l'autre direction. Et il n'a pas besoin de déplacer toutes ses données pour maintenir cette intégrité. Donc, c'est une sorte de petit piège que les gens peuvent aller dans où ils essaient de faire un Qué, euh implémenté à travers un tableau. Et le problème est, est-ce qu'il doit être circulaire. S' ils ne l'ont pas. Circulaires, ils auront un très inefficace ou juste ici. Et maintenant le suivant est une liste liée, ce qui est en fait très commun pour un Q. Et c'est parce qu'il est très intuitif avec un Qué donc il doit être doublement lié avec un pointeur de queue, et puis il a la normale point de départ aussi. Et donc si nous poussons, nous allons pousser à cette fin. Donc ça va aller, tu sais, par ici et ensuite si on sort, on va sortir de ce bout, ou si tu veux, c'est dans Q. Et voici Deke. Vous et ces deux pointeurs sont assez communs. Comme je l'ai expliqué plus tôt, le point de queue est très facile de le garder juste un peu de code supplémentaire, une sorte de maintenance supplémentaire, et le pointeur de départ est toujours là. Donc, nous savons où sont liés liste est. Et avec ces deux éléments que nous pouvons pousser, nous pouvons Pushor dans Q et Popper. Dick, tu es vraiment, vraiment simple et toujours en temps constant. Donc, ce n'est que la base de l'exécution. Il suffit de comprendre qu'ils devraient toujours être constants. Il est temps de pousser et d'entrer. Q et D. Q. Si vous arrivez à une situation où il est dû à la fin, alors c'est un algorithme inefficace et il peut être repensé pour être plus rapide, vraiment joli, simplement simplement courir dedans seulement dans un cas comme ça. Mais je veux juste vous laisser, vous savez, vous savez, comprendre ce concept parce que, comme je l'ai dit, c'est un cours d'informatique et de comprendre les temps d'exécution. Tout est essentiel pour comprendre, gagner et où tout utiliser 29. Exemples de monde réel: afin que nous ayons une bonne compréhension des piles et des accusés. Regardons quelques exemples du monde réel d'où nous aurions pu les voir dans une application soignée ou deux d'entre eux. Donc, le 1er 1 que nous avons tous vu avant est l'annulation et le rétablissement. Donc, par exemple, sur un document Word, si je décide de revenir en arrière, vous pouvez voir que je peux annuler les choses. Mais si je décide de ne pas faire de changements, je pourrais revenir en arrière et cela fonctionne avec deux piles. Donc ici, nous avons, genre, notre pile d'activation ou de commande. Et ici, c'est la pile de réduction. Donc, nous sommes actuellement au feu de commandement. Nous avons entré quelque chose dans le programme et nous voulons revenir à la commande pour ce que nous faisons est qu'il éclate que cinq off et l'insère. Il le pousse sur cette pile droite. Disons que nous voulons revenir aux commandes. Il éclate les quatre et le pousse ici à la bonne pile aussi. Donc maintenant, ce que nous avons c'est que nous avons cette pile sur la gauche, qui est notre activation, ou notre pile de commandes. Et nous sommes maintenant à la commande trois, la troisième commande que nous avons entrée Maintenant, ces données n'ont pas été supprimées. C' est juste assis dans cet acte réduit. Si on veut refaire les choses, on le refait. Il sort de ça et le ramène. Disons que nous ne voulons pas vous lire. 55 était où une erreur. Waas Nous voulons ajouter un nouveau 16 à cela. Donc, ce que nous faisons, c'est que nous prenons et nous ajoutons 60 ici. Mais maintenant, si on cliquait sur Redo, ça prendrait 500 en plus de six et ça détruirait l'intégrité de cette pile ici. Donc, chaque fois que nous ajoutons quelque chose, chaque fois que nous ne refaisons pas, Donc, par exemple , ici, si nous avons ce d f g ici, si je supprime tous ceux et tapez quelque chose d'autre, il n'y a pas moyen que je pourrait revenir à cela. Ce que je fais, c'est que chaque fois qu'on ajoute un nouveau changement qui n'est pas une radio, on nettoie la bonne pile. Donc, nous avons tout retiré de et nous avons fait comme ça à nouveau. Et maintenant, nous pouvons commencer nos défaites et réduire encore une fois les allers et retours. Et si jamais nous faisons un autre changement, tout cela sera effacé et supprimé à nouveau. Donc, c'est essentiellement comme ça que fonctionne l'annulation et la restauration. Il y a aussi une petite chose soignée est que si vous avez déjà été dans, comme, comme, un document Word ou un autre programme, et que vous continuez à cliquer sur le contrôle Z, ce qui est indu ou en cliquant sur le bouton Annuler et vous atteignez la fin de l'indu. C' est parce que tu as rempli la pile. Donc si nous élargissons tout ça, vous savez, nous mettons un disons que nous avons le commandement, vous savez, six et cinq vont en fait ici. On n'a rien défait. Et, vous savez, on a mis un sept ici. Qu' est-ce qui était ? Si tu veux mettre un huit puits, pour mettre huit, on ne veut pas, tu sais, juste dire, tu sais quoi ? On ne va plus garder une trace de ça. Ce que nous faisons, c'est que nous prenons celui et nous l'effacons, été retirés de la pile, puis nous prenons tout et nous le déplaçons vers le bas. Donc maintenant, nous avons 2345678 Et donc vous remarquerez que la commande 1 n'est plus suivie. Cela signifie que nous pouvons Onley annuler jusqu'à commande, et chaque fois que nous faisons une autre commande, il va les prendre et enlever le fond de celui-ci et ensuite pousser tout vers le haut aussi. Donc c'est une sorte de Ah, pile modifiée dans le fait que nous pouvons supprimer du bas, mais ce n'est que quatre débordements sur la pile. Juste une petite sorte de mise en garde de, si jamais vous vous demandez pourquoi vous ne pouvez plus annuler, c'est parce que votre pile a été remplie et n'a plus de mémoire pour stocker ces commandes. Une sorte soignée de l'utilisation de la planification est ou l'utilisation soignée de cuse est la planification. Alors, qu'est-ce que c'est exactement la planification ? Eh bien sur n'importe quel ordinateur, des commandes lui sont données, et beaucoup de fois beaucoup de commandes sont données à un ordinateur, et il doit comprendre Win pour utiliser ces commandes. Pensons à un exemple d'impression. Disons que nous avons 100 ordinateurs dans un bureau ou une bibliothèque, tous connectés à une imprimante, et que tout le monde essaie d'imprimer en même temps. Comment traite-t-il avec lesquels imprimer en premier ? Ce qu'il fait, c'est qu'il a un Qué qui y arrive d'abord obtient leur travail terminé en premier. Donc, par exemple, disons que nous sommes sur cet endroit dans la file d'attente. Nous avons 345 Le prochain travail à compléter est sur le côté inférieur, et cela est une sorte d'une construction de Qué. Donc nous en avons trois. Il va aller de l'avant et être imprimé. Et puis maintenant, pendant qu'il était imprimé, décidé qu'ils voulaient avoir un travail d'impression, puis un autre a décidé qu'ils voulaient aussi un travail d'impression. Donc ce qu'il fait, il les met juste au dos de la liste, puis il continue vers le bas. Une fois qu'il a fini un travail et qu'il bouge, qu'il bouge, j'ai un autre boulot ici, il va à Prince, et il va aux 15 prochains et, vous savez, les gens peuvent retourner à l'autre bout. Donc, disons que ce Q continue de s'étendre ou nous pouvons réellement le rendre circulaire. Donc, nous avons mis les trois là où il s'agit d'imprimer que le travail 4 a un autre travail, alors ils l'ont mis là. L' un d'entre eux va être terminé et ça va comme ça. Donc, c'est juste une façon de programmer toutes ces commandes dans une belle sorte de ligne juste là . Donc, c'est juste si vous imprimez d'abord. Le gars qui a imprimé 10 minutes après vous ne devrait pas avoir son boulot avant que vous ne fassiez ça . C' est juste une façon de programmer pour le rendre juste. Il y a aussi un moyen de traverser un labyrinthe avec une pile. C' est juste une sorte d'exemple amusant. Ici, disons que nous avons une pile avec cette grille ne s'alignera pas exactement ici, mais il suffit de faire le point ce que vous pouvez faire avec étonner si disons que nous nous déplacons travers le labyrinthe et chaque mouvement, nous mettons sur la pile. Donc vous savez, nous passons par ici. Nous arrivons à ce point, nous pouvons soit aller à droite. On descend bien, si on va bien, on va mettre ce qu'est cette tuile. Donc, disons que cette tuile est de sept et cette tuile est de huit. Donc on va mettre sept ici et on va monter maintenant. On a eu un mur. n'y a plus d'options et plus de directions que nous pouvons aller. Donc, ce que nous faisons, c'est que nous commençons à sortir de la pile. Nous commençons à reculer jusqu'à ce que nous arrivions à un point où nous pourrons prendre une autre décision. Donc nous revenons à ce point et nous sommes comme, Eh bien, cette façon n'était pas bonne. Alors descendons par là. Maintenant, nous avons trois décisions. Donc, disons que sur la première décision, nous avons décidé, Allons à gauche, bouge jusqu'ici. Pas de portée morte dans pop off, pop, pop, pop, pop, pop, pop pop retour à celui-ci. Pourtant, nous pouvons prendre plus de décisions ici. On ne descend pas de médecin pop ici et on bouge dans cette direction. Nous devons prendre des décisions. Va à gauche. Non. Mort dans la pop, la pop, pop, pop, la pop, la pop. Et puis on y va, Prenons cette décision, mais on l'a fait hors du labyrinthe. C' est une façon dont votre programme peut en quelque sorte courir à travers un labyrinthe et trouver tout le chemin à travers lui. Ton pote, ton programme pourrait être très rapide. Disons qu'il prend les bonnes décisions chaque fois qu'il devine correctement. C' est comme aller ici. Allons vers le bas. Ok, nous avons plus de décisions ici Allons-y. Et puis on va jusqu'au bout. Allons à gauche. Non. Allons en bas. On a trouvé une sortie. Si ce n'était pas une sortie, je serais genre , OK, on remonte jusqu'ici. Allons ici. J' ai manqué de décisions pour aller ici et disons que nous revenons maintenant à celui-ci, et il commence à regarder sur celui-ci aussi. Donc, c'est juste un moyen de garder une trace de l'endroit où vous avez été et de quelle direction vous pouvez aller dans un labyrinthe. C' est une façon amusante d'utiliser une pile pour faire une sorte de jeu. Ce sont quelques applications soignées de piles et de files d'attente. Ils sont utilisés partout sur Internet juste parce que Internet et n'importe quel programme sont vraiment juste parce que les files d'attente sont idéales pour la planification ? Les piles sont idéales pour mettre des choses sur, puis les sortir d'une manière qui fonctionne,par exemple, par exemple, avec défaire et refaire de grandes structures de données et de grandes choses à apprendre. Si vous allez dans l'informatique 30. Introdcution d'Algorithme trié: Donc maintenant, nous avons une bonne compréhension de certaines structures de données de base, particulier d'une augmentation affaiblir. Commencez à discuter de la façon de trier les structures de données et celles dont nous allons parler dans cette unité particulière sont le tri des tableaux différents. Et vous pourriez penser, Pourquoi est-il si important de trier un tableau ? Eh bien, rappelez-vous comment nous parlons de l'algorithme de recherche, du temps d'exécution de la recherche pour nos tableaux, et nous avons dit que le temps d'exécution de la recherche est dû à la fin. Cependant, s'il est trié, alors il est dû au journal de in. Et puis nous avons même dit plus loin que sur le journal de celui-ci est fondamentalement temps constant. Donc, cela signifie qu'à peu près nous pouvons obtenir oh, temps constant en cherchant un tableau, c' est-à-dire, qui est assorti. Ce qui signifie que le tri améliorera notre temps d'exécution global, tout le lot. Donc, par exemple, si nous avions, vous savez, trois, un, six et un sept ici au lieu d'être comme ça, si nous le trions, si nous utilisons un algorithme de tri dessus, alors nous allons réellement sortir avec quelque chose qui fait un peu plus depuis 1367 Et cela nous permet d'appliquer à nouveau ce runtime de recherche plus rapide, et cela nous permet d'appliquer quelques autres opérations qui sont légèrement plus rapides aussi. Et donc le tri d'un tableau est extrêmement important. Cependant, il y a une tonne de différentes façons de le faire, et c' est donc ce que nous allons discuter dans cette unité est tous les différents rythmes de tri , leurs temps d'exécution quand vous pourriez utiliser un que les complexités et juste obtenir une meilleure compréhension de la façon dont nous pourrions trier quelque chose comme un tableau pour le rendre plus rapide sur les différents aspects. 31. Sort de bulles 5-2: Donc, le premier algorithme de tri que nous allons couvrir est un algorithme de tri connu sous le nom de Bubble Sort et Bubble Sort est un triage notoirement facile à mettre en œuvre mais très mauvais, et nous allons discuter de la raison pour laquelle c'est. Alors passons en revue l'intuition de la façon dont fonctionne le tri des bulles. Donc, disons que nous avons, par exemple, dans un rayon ici et nous allons en faire un tableau simple. On va faire six longs six gros ici, si séparés , ça et genre, peut-être comme un ici. Bien sûr, c'est six petites colonnes différentes là-dedans. Et disons que nous avons un 7 à 10 153 Et donc ce genre de bulles fait, c'est qu'il commence d'un côté de cela, donc il commence à gauche et il monte et il attrape le plus grand nombre qu'il voit. Donc par défaut, il va prendre le premier numéro, et ensuite il demande, ce nombre est-il plus grand que ce nombre ? Si c'est le cas, échanger leurs positions, puis une fois qu'elles sont échangées, passent à la suivante. Ce nombre est-il plus grand que ce nombre ? Si c'est le cas, échangez leurs positions et ça continue de monter et descendre comme ça. Alors passons en quelque sorte quelques exemples ici. Ce que nous avons, c'est que nous avons ces sept ici. Et donc sept est maintenant sont allergiques. Le nombre est sept plus grand que deux. Pourquoi, oui, ça l'est. Ce que nous faisons, c'est que nous allons de l'avant et nous avons échangé leurs positions à sept. Et laissez-moi simplement les mettre en rouge. Donc nous sommes assez cohérents ici. Nous avons donc échangé les positions à sept. Sept est plus grand que 10 ? Non, ce n'est pas le cas. Ce que nous faisons, c'est que nous les gardons au même endroit, et maintenant 10 deviennent notre plus grand nombre. 10 est plus grand qu'un ? Pourquoi, oui, ça l'est. Donc on a échangé leurs positions, puis on a les 10 ici et celui qui va juste ici . 10 est supérieur à cinq ? Oui, ça l'est. On a échangé leurs positions pour qu'ils viennent ici. Le 10 va ici et enfin, nous le faisons encore une fois, où le 10 va ici, puis les trois recule. Donc vous remarquerez que maintenant nous avons une place. L' étain trié est notre plus grand nombre. Il a été trié. C' est au sommet, ici. Ce qu'on a fait, c'est qu'on a pris le 10 qui a commencé ici, et on l'a déplacé jusqu'au haut. Et maintenant, nous avons le premier numéro. Nous avons une place triée. Et maintenant, ce que nous pouvons faire, c'est faire une autre étape ici. On peut faire un autre pas ici. On va redessiner ça très vite. Et puis commençons par nos deux est un plus grand que sept. Non. Donc les deux vont rester là où il est, et ensuite nous dirons que le sept sept est maintenant notre plus grand nombre est sept supérieur à un. Oui, ça l'est. Donc on va échanger celui à l'envers et on va bouger. Ces sept, c'est sept, plus que cinq. Il l'est. Donc on va échanger leurs positions. Donc maintenant cinq sont là et sept sont là, et nous allons juste dessiner le reste. Et ici, c'est sept de plus que trois. Il l'est. Donc nous avons échangé leurs positions une fois de plus et maintenant nous avons 37 Donc maintenant nous avons deux parties triées . Nous avons deux zones par ici triées. Continuons ici. Continuons ici. Et je vais être capable de copier. On va le mettre en évidence dans le CV de contrôle et le déplacer vers le bas et ensuite réparer la petite ligne juste là. On devrait être bon Dogo. Ok, donc l'étape suivante est de faire encore et encore est un gris qu'à elle. ISS Alors maintenant nous les déplacons et nous les échangeons autour de 12 est à plus de cinq. Ce n'est pas le cas. Donc maintenant cinq est notre plus grand nombre. Cinq est maintenant notre plus grand nombre. Ici, il y a cinq de plus que trois. Nous avons donc échangé ces 35 et maintenant ils sont dans la bonne position. Et puis maintenant vous remarquerez que nous allons le traverser une fois de plus et nous remarquons qu'un n'est pas supérieur à 22 n'est pas supérieur à 33 n'est pas supérieur à 55 n'est pas supérieur à 77 n'est pas supérieur à 10. Et nous avons fini. Notre petit um notre tableau ici a été trié en utilisant le tri à bulles. Donc, la raison pour laquelle il s'appelle Bubble Sort est parce que vous faites bouillonner le nombre le plus élevé jusqu'à la fin et que vous le triez un par un à la fois. Permettez-moi de montrer un peu plus d'une façon intuitive de voir. C' est un excellent site appelé Visual Go et donc je ne vous montrerais pas est leur représentation de l'algorithme juste ici. Alors laissez-moi aller de l'avant et cliquez sur le bouton de lecture sur ce, et donc vous remarquerez ici que c'est exactement la même chose. Les quatre sont plus gros, et il continue à vérifier et peu importe ce qu'il change. Donc, le 47 est plus grand que tous les nombres jusqu'à présent, donc il continue à l'échanger, puis 50 devient de grands nombres. Donc maintenant, nous avons une zone triée qui vient en jaune, et maintenant nous le faisons à nouveau. Le 44 est maintenant notre plus grand nombre, donc il monte et il change lentement un à la fois, puis 46 devient le plus grand, et maintenant nous avons une garantie à des spots qui sont triés. Fais-le encore. Nous continuons à monter avec un 38 et vous le voyez lentement. Il devient de plus en plus assorti comme nous G o. Maintenant, nous avons trois places garanties, et ça va continuer comme ça jusqu'à ce qu'il se termine afin que nous puissions réellement accélérer cela un onglet ici et maintenant vous pouvez voir que quand il le fait, ça va le faire presque instantanément. Hum, ça va traverser tout ça très, vraiment rapide. Et c'est l'essence de ce que fait le genre de bulles, et maintenant tout est trié. C' est donc une sorte de bulles en un mot. Alors maintenant, disons ça en quelque sorte et voyons pourquoi est-ce un si mauvais algorithme ? Eh bien, si on a juste une sorte de regard, disons qu'on en a peut-être quatre ici. Si nous regardons simplement ce dont il a besoin pour dio, jetons un coup d'oeil au pire scénario. Donc, le pire scénario est qu'il va devoir prendre un élément puis le déplacer vers le haut à chaque fois. Donc, le pire scénario serait en fait un complètement inverse un graphique complètement inverse, ce qui signifie qu'il a été trié dans la mauvaise direction. Donc, dans cette situation, au lieu d'être, au lieu d'être 37 contre 1, il serait 7321 et c'est donc une sorte de direction exactement opposée. Et cela signifie que chaque fois qu' il bulle, il va devoir prendre ça, le déplacer jusqu'au bout, prendre le suivant et le déplacer jusqu'au bout. Prenez ensuite, déplacez tout le chemin. Et vous verrez donc que le nombre d'opérations requises augmente en fait de façon assez exponentielle. Donc, nous devons prendre ça et le déplacer. 123 et maintenant les trois sont par ici. Donc j'ai dû le déplacer. 12 puis un. Et puis on est triés. Et cela sort en fait, aussi, parce que le pire scénario est que nous devons prendre cela et nous devons le comparer en nombre de fois et le déplacer dans le nombre d'endroits qui sort à une équation qui est oh, de fin des temps. Oh, de dedans. qui signifie que le pire scénario pour ça est en fait au carré. Et si vous faites des calculs derrière cela, vous comprendrez que le scénario de cas moyen est assez similaire. Le scénario de cas moyen pour le tri Bubble est également au carré, ce qui signifie qu'il s'agit d'une sorte de tri au carré. Tu te souviens comment on a parlé d'Exponentiel ? Si vous avez quelque chose de plus, 1000 ou 10 000 choses que vous devez trier cela peut commencer à prendre des minutes, heures, des jours. Et donc si on est sous une petite table ici, la table sera remplie tout au long de ce truc. Eh bien, nous pourrions voir notre genre moyen ici. Nous allons utiliser la notation car c'est la moyenne est en fait au carré et nos grands fantômes ou pires scénarios au carré. Maintenant, regardons le meilleur scénario. Donc, disons que cela est venu complètement trié. Eh bien, vous devez toujours vous assurer que c'est complètement trié, donc vous devriez quand même descendre et vérifier. Est-ce plus grand que ça ? Est-ce plus grand que ça ? Est-ce plus grand que ça ? Donc, si c'était complètement trié, par exemple, disons que nous avons celui-là juste ici. Ce que nous avons abordé c'était comme, Ok, c' le temps de trier ça. C' est génial là-dedans ? Non. Non, non, non, non, non. Ok, c'est trié. C' est dans. Il doit toujours toucher toute la longueur du tableau au moins une fois, donc c'est dans. Donc, cela signifie que notre meilleur scénario est O jusqu'à la fin est en fait Ah, c'est le meilleur cas. Nous voulons donc utiliser la notation appropriée pour cela, qui est le Sigma ou l'Oméga. Donc, ce que nous avons ici est que c'est le temps d'exécution de bulle a grimpé en raison de sa nature, où il doit comparer en nombre de nombres en nombre de fois, nous obtenons nous-mêmes est en relation carrée, et en moyenne, c'est va devoir le comparer. Donc, si nous ne faisions pas la moyenne ici, nous pouvons vraiment calculer ça très rapidement. La moyenne est dans plus de deux fois sur plus de deux, ce qui va égaler au carré sur quatre. Nous ignorons l'exponentiel, et il sort encore dans carré juste un peu de mathématiques rapide là. Si tu ne le fais pas, c'est bon. Il suffit de comprendre que le scénario moyen et le pire des cas sont au carré et que le meilleur cas est dans. C' est donc l'un de nos pires algorithmes. Cependant, c'est très facile à implémenter dans le code, tout ce que vous avez à faire est d'avoir une sorte de est plus grand que Laissez-moi juste vous montrer un petit extrait de code de celui-ci juste ici. Il a en fait le code écrit, et vous pouvez voir que c'est seulement comme cinq ou six lignes ici. Fondamentalement, il monte tout l'élément. Et si les éléments de gauche de celui qu'il a sélectionné sont plus grands que le droit, il change leur place, puis il le déplace et il continue de le faire encore et encore et encore. Donc, c'est très, très simple code à implémenter très, très simple. Mais à cause de cela, c'est là que nous avons parlé en quelque sorte de complexité et de temps. raison de sa simplicité, il devient en fait l'un des pires algorithmes ici. Donc c'est le tri des bulles. Nous allons commencer à passer aux différentes sortes au fur et à mesure que nous descendons, et je commencerai à vous montrer des sortes de plus en plus efficaces. Ils pourraient devenir un peu plus complexes, mais leur efficacité va certainement augmenter. 32. Triment de sélection: Donc la prochaine pensée que nous allons couvrir est le genre de sélection. Alors, quel est exactement le tri de sélection ? Alors passons en revue l'intuition de ça. Et puis nous allons aussi parler des temps d'exécution et ensuite regarder la représentation individuelle aussi. Donc, l'épée de sélection est légèrement différente de la sorte bulle. C' est en fait assez similaire, mais c'est certainement différent. Disons que nous avons un tableau ici. Donc nous nous sommes retrouvés dans un rayon comme normal, et il y a quatre chiffres dedans. Et ces quatre chiffres sont, disons, 17 18 2 et quatre. Donc, ce que les sélections ou fait est qu'il a une partie non triée et une partie sordide. Alors allons de l'avant et dessinons une partie non triée et triée. Et fondamentalement ce qu'on va faire, c'est qu'on va déplacer cette partie ici , comme ça, sélectionnez-la, on va la déplacer. Donc, tout à gauche de cela, tout à gauche est trié. Tout à droite n'est pas trié. Ce que nous faisons, c'est de passer par cette liste et de chercher la valeur minimale. Une fois que nous avons trouvé la valeur minimale, nous l'échangerons sur le premier espace qui est à droite de ceci. Et puis on bouge ça et on continue de le faire encore et encore. Alors passons par un exemple ici. Alors on va à la 17. Nous disons non. 17 yeux sont maintenant notre nombre minimum. C' est maintenant le plus petit nombre que nous ayons parce que nous ne l'avons pas comparé à quoi que ce soit d'autre. Donc, nous prenons que 17 nous pouvons le comparer à la suivante est 18 plus petit que 17. Non, comparez à la suivante est inférieure à 17. Oui, ça l'est. Maintenant aussi, c'est notre plus petit nombre. Et maintenant, nous comparons deux avec tout le reste est inférieur à quatre. Ce n'est pas si cela signifie à est notre plus petit nombre. Ce que nous faisons maintenant, c'est de prendre ce nombre et de le changer avec le numéro ou la position qui se trouve à droite de notre partie sordide. Donc on prend ça et on l'échange avec ce qui est à droite, qui est notre 1er 1 Donc ça veut dire qu'on va prendre les 17 et les deux vont les échanger . Donc les deux vont ici et les 17 vont ici, donc maintenant ce qu'on peut faire, c'est qu'on peut prendre ça et on va bouger, triés, non ? Comme ça. Et vous savez, tout ce qui reste est trié. Nous avons le 1er 1 que nous avons découvert que c'est le plus. C' est le nombre minimum dans cette liste. Donc ça va dans notre première position. Alors maintenant, nous le refaisons. 18 est maintenant un nombre minimum. On en entend 17. Un plus petit 17 est maintenant un nombre minimal. On entend parler d'une force plus petite dans notre nombre minimal et il n'y a rien d'autre à comparer. Donc maintenant, nous prenons notre nombre minimum, qui s'est avéré être quatre, et nous l'échangeons avec le 18 ici parce que c'est le 18 est la position à droite de la place de départ. Donc on le prend et on l'échange. Donc maintenant renonce ici 18 va ici et puis on prend notre partie sordide et on la déplace ici. Maintenant, il ne nous reste plus que deux numéros pour Dio. Nous prenons 17 nous le déplacons, nous disons est 17 plus petit que 18. Oui, ça l'est. Alors on prend ça. On le déplace sur 18 de leur dernier numéro. Donc, nous prenons cela et le déplacons, et maintenant nous sommes confirmés qu'il a été trié. Donc ça marche juste comme ça. Il scanne le nombre minimum. Ensuite, il l'échange dans le premier espace disponible, puis la partie sordide se déplace, et il continue à le faire jusqu'à ce qu'il se termine. Alors allons de l'avant et regardons une représentation visuelle de ceci et vous pouvez voir ça se passer en mouvement rapide, comme si donc nous avons ceci juste ici. C' est un, euh encore, par Visual Go Dot Net parce que j'ai un très bon matériel ici, et on va juste cliquer sur le bouton de lecture et on peut regarder ce truc, faire son truc. Donc, trois, voyez-vous, c'est le minimum à qui il trouve est un minimum échangé dans la première position. Ceci sur la gauche est maintenant la position non triée. On pourrait ralentir un peu si tu veux, et tu pourrais voir les quatre. Maintenant, il le compare un à la fois. Quatre, c'est le minimum, l' échange. Tous les jaunes sont dans le genre de position, et il recommence à zéro. Il commence à cinq ans, c'est le minimum, et maintenant il le compare à chacun d'entre eux. Au fil du temps, cinq finissent par être le minimum. Rien ne change de comparaison, il a trouvé. 15 n'est pas le minimum qui se compare avec, et ça va continuer. 15 est le plus petit dans ce moins à gauche. Alors va l'échanger avec la prochaine position disponible et le marché tel que trié. Et il va continuer à le faire au fil du temps jusqu'à ce qu'il finisse la production ici , qui va maintenant accélérer la reprise afin que nous puissions voir ce genre de mouvement rapide et vous verrez qu'il continue de changer, comme ainsi, trouver le minimum, l' échanger à droite du genre de position jusqu'à ce que tout soit trié. Et on y va. Maintenant, c'est trié. Alors, comment exactement quel est l'exécution de quelque chose comme ça ? Alors passons en revue le runtime juste ici. Pensons à ce genre d'essayer intuitivement de comprendre ce que l'exécution est juste en regardant ceci. Donc nous en avons un ici et disons que nous avons nous-mêmes ceci et que nous allons tirer sont triés comme ça et puis quelques chiffres ici à un vin 17 pour chose non triée ici. Et alors qu'est-ce qu'on a à dio ? Nous devons passer par là pour chaque numéro ici. Nous allons devoir traverser cela au plus n fois, au moins en moins les temps de repos. Donc, cela signifie que nous n'aurons pas à traverser cela en moyenne, moyenne, en plus de deux fois. Et comment pouvons-nous finir aussi ? Eh bien, ça doit le faire d'ici. Cela doit le faire à la fin moins un. Cela doit le faire en moins deux en moins trois. M moins quatre. Et ce que vous pouvez voir, c'est que sur le côté gauche ici, nous allons avoir des choses qui sont pondérées vers l'intérieur et sur le côté droit du sable. Nous avons des choses qui sont en quelque sorte pondérées vers un. Et cela signifie que dans le centre ici, le temps moyen va prendre toutes ces deux courses va être en plus de deux. C' est la moyenne de tous ces types combinés de la façon dont la moyenne fonctionne et Donc, fondamentalement, comment cela ressort est que l'exécution de ceci va être pour chaque point ici. Ça va être dans plus de deux. Et comme nous avons en nombre que nous devons faire cela, nous les multiplions ensemble. Donc, ils vont être en nombre de valeurs ici, multipliés par plus de deux, et cela signifie va sortir comme au carré. Donc, le temps d'exécution moyen ici est en carré, ce qui est également le temps d'exécution le plus mauvais cas. Mais tu dois penser à autre chose. C' est légèrement différent dans le genre de bulles, dans le sens où ce n'est pas le cas. Il n'y a aucune chance qu'il puisse simplement vérifier et confirmer que l'ensemble du tableau a été trié. Il doit faire ce genre de mouvement au-dessus de la partie non triée, et il doit le déplacer et vérifier chaque numéro. la partie non triée, Même si on a un nombre complètement trié, Ah, tableau ici. Donc, si nous avons, si cela sort trié, par exemple, si nous avons 1 à 8, laissez-moi juste mettre ceci ici. Faisons un petit exemple ici. Créons un tableau complètement trié ici. 12345 Nous avons donc un droit complètement trié. Comment savons-nous que c'est complètement trié ? Eh bien, notre programme, tout ce qu'il sait faire est de passer et de vérifier. C' est le nombre minimum est un plus petit Oui, Oui, oui, oui. D' accord. C' est plus petit que tous. Cela signifie qu'il peut dire à sa place qu'il se déplace sur le genre de grade. C' est plus petit ? Oui. Oui, oui, oui. Ok, on le déplace. Oui, oui, oui. OK, on le déplace. Oui, oui, oui. OK, on le déplace. Oui. D' accord. On le déplace. Et donc nous continuons à le déplacer, peu importe combien. Peu importe comment trié, ça commence en fait par être. Et c'est important. Parce que cela signifie que même dans le meilleur des cas, même dans le meilleur des cas, il sera toujours au carré. Contrairement au tri de bulles, qui peut courir à travers cela et vérifier immédiatement qu'il est trié en disant, Est-ce plus petit que cela ? Non. C' est petit là-dedans ? Non. Non. Non. Une fois qu'il aura le et c'est comme, Oh, on est déjà triés. Il met fin au programme. Il ne peut pas faire ça. Il doit déplacer cette grille triée. Et donc le problème avec le tri de sélection est que nous entrons dans les trois valeurs sont au carré . Donc, notre meilleur scénario, notre meilleur scénario, euh, va toujours être au carré, le temps d'exécution moyen sera toujours au carré, puis le pire runtime sera au carré ou La notation Big O est également au carré. Donc, ce programme est en fait très, très inefficace. C' est l'album de départ le plus inefficace que nous allons traiter, et vous pouvez voir que l'intuition derrière lui est en fait assez soignée. Vous créez une portion assortie. Vous déplacez les chiffres d'avant en arrière. C' est, tu sais, on dirait que ça a très bien fonctionné. Le problème est, c'est à cause de cette partie sordide ont eu ce cas où il va toujours être au carré. Et donc à la fin de tout ça, on en a un autre qui est au carré, au carré et au carré, juste comme des bulles. Ces deux-là sont plutôt mauvais. La sélection est assez mauvais algorithmes de tri et ce sont vous savez qu'ils sont bons à apprendre parce qu'ils vous montrent des façons intuitives de le faire. Tu sais, des façons que tu peux, hum, façons qui ont du sens, mais ce ne sont pas les meilleures façons de le faire. Donc ce sont les mauvais rythmes de tri, et ensuite, nous allons passer à de meilleurs algorithmes de tri qui ont en fait des temps d'exécution plus rapides . Et ça va être plus compliqué parce que c'est comme ça que la programmation fonctionne. Donc, vous ne pouvez pas juste avoir ça, vous savez, échanger là où vous pouvez juste obtenir des temps de fonctionnement plus rapides et ce sera plus simple. D' habitude, ça va être un peu plus complexe, mais ils sont encore assez sensés une fois qu'on l'a traversé plusieurs fois . Donc, oui, c' est le tri de sélection. Et nous allons sauter dans des algorithmes de tri plus rapides. 33. Sort Insertion 5-4: la dernière conférence, nous avons parlé de la façon dont nous allons entrer dans des algorithmes qui étaient un peu plus rapides et j'ai menti juste un peu parce que nous devons encore passer par Insertion Sort, qui est encore assez lent insurgés. Ou c'est l'étape suivante logique parce qu'il construit en quelque sorte de bulle court et la sélection sorte de ensemble dans ce nouveau genre d'algorithme de départ. Ça semble un peu plus comme si ça devait être fait. Mais il a encore ces tendances lentes. Et donc on va passer à l'examen de celui-ci. On va voir comment ça marche plutôt que de montrer la visualisation et de faire les temps de course comme le reste d'entre eux. Alors commençons avec ça. La première chose qu'on va faire, c'est qu'on va juste faire pousser un peu de Ray ici pour qu'on puisse regarder ça intuitivement comme ça et donc j'ai ce tableau ici et maintenant on va mettre quelques chiffres ici. Huit pour 17 comme ça Et donc ce que les insurgés ou font, c'est comme je l'ai dit, ça marche hors de la sélection où nous avons cette partie triée et non triée. Sauf contrairement à la sélection. Ce que nous faisons, c'est de retirer le numéro et de le réinsérer dans la section sordide . On ne cherche pas le minimum ici. On vient de prendre le 1er 1 et on l'a refait. Alors faisons-le juste ça. D' abord, nous allons prendre notre section triée. On va le déplacer. En fait, nous devrions d'abord sortir notre numéro, donc nous le gardons comme une variable ou quelque chose comme ça. Nous l'apportons, puis nous prenons ça et nous le déplacons. Donc maintenant tout ici est la section sordide. Alors nous réinsérons ceci, mais nous l'insérons dans un point où il devrait aller. Donc, ce que nous faisons est de l'insérer dans ce nouvel espace vide. Techniquement, comme en théorie, on l'enlève et on le remet. Mais dans les faits, si vous avez vu ce qui s'est passé là-bas, ça ne bouge pas. Donc nous déplaçons juste cette partie et parce que toujours à droite de la partie sordide, tout ce que nous avons à faire est de déplacer ça, puis saisir ceci et c'est déjà dans la position qu'il devrait être alors ce que nous faisons c'est que nous prenons ceci et maintenant nous le comparons et une sorte de faire un tri de bulles vers l'arrière pour comprendre où il devrait aller. Alors, disons, ça va ? C' est plus petit que ça ? Pourquoi ? Hier ? Donc on prend ça et on l'échange avec ça, et on le déplace comme ça ? Et alors ce que nous faisons c'est que nous faisons exactement la même chose. Nous attrapons ceci, le déplacons et nous citons unquote, nous retirons ceci et ensuite nous l'avons inséré dans ce tableau sordide. Mais dans le code, on le garde juste ici, et on l'échange jusqu'à ce qu'on trouve l'endroit où il doit aller. Donc on a pris ça et on a été comme ça pour échanger comme ça, est-ce encore moins ? Oui. Donc on redescend ça, on échange ça, puis on échange celui-là ici, et on fait exactement la même chose pour finir. Prends ça, bouge-le. Donc, non, tout est dans notre partie sordide. Attrapez. C' est cette leçon. C' est ça. Donc on le pose et on prend ce swap. Il et ce n'est pas moins que ça. Donc, nous en avons fini avec notre algorithme de tri. Alors jetons un coup d'oeil à une visualisation de la façon dont cela se fait à un peu plus grande échelle. Il suffit de cliquer sur le bouton aller et vous verrez qu'il l'attrape, enlève, puis il l'insère dans la partie sordide. Donc, il cherche où il devrait aller. Inséré dans le sort. Si c'est exactement ce qu'il est aux bons endroits déjà, trier il le remet juste et il dit que nous ne sommes pas triés, puis il les échange jusqu'à ce qu'il arrive au point où il est trié. Et donc il le fait tout le chemin jusqu'à ce que ce soit fait. Il suffit de prendre le 1er 1 à chaque fois et de faire un peu comme une sorte de bulle inverse le mettre au bon endroit et ainsi vous pouvez voir qu'il se combine comme je l'ai dit, tri de sélection parce que nous avons une partie triée et non triée et un tri de bulles, Parce que Bubble est la façon dont nous la mettons dans ces endroits par ici. Et donc nous l'avons là. Maintenant, nous avons un algorithme assorti juste ici. Allons voir le runtime. Combien de temps cela prend-il ? Comment se compare-t-il aux autres ? Eh bien, fondamentalement, ça va être à peu près la même chose que Bubble Sort. Et vous pouvez penser à pourquoi ? Parce qu'il s'enfuit de bulle Sort. Mais on va passer en revue une seule différence, ce qui fait en sorte que ça ressemble à ça. Donc, ce que nous avons ici est que nous avons assorti partie et rappelez-vous, avec tri de sélection, il est devenu à tous au carré et la raison pour laquelle il est sorti à tous dans les carrés parce que vous deviez trouver le minimum. Vous deviez trouver la valeur minimale ici à droite, et pour ce faire, il a fallu citation sans devis en quantité de temps, moyenne, environ dans plus de deux, ce qui sort à l'heure de fin. Nous avons donc dû chercher le minimum. Et puis nous le mettrions dans l'endroit trié assorti sans avoir à le chercher . Parce que c'est une fois que nous avons trouvé le minimum, nous savons que c'est la prochaine étape logique. Mais faire cela ici a fait en sorte que, peu importe si c'était trié ou non, nous sommes toujours sortis au carré. Mais maintenant, si nous avons quelques chiffres ici, ce que cela fait, c'est que cela nous permet d'entrer, ah, un peu plus vite,dans ah, un peu plus vite, le meilleur scénario. Donc, si vous y pensez, nous devons prendre beaucoup de données. Nous avons donc dû prendre une quantité de données dans la quantité de données, et nous devons les comparer en nombre de fois. Hum, parce qu'on doit l'insérer ici. Donc, le maximum qu'il pourrait avoir à faire est d'échanger en quantité de fois. Et cela en fait comme dans les autres exemples, se termine sur deux. Mais les deux sont enlevés et on finit par avoir au carré juste ici. Et c'est ainsi que le pire des cas. Et le cas moyen ici est que la moyenne dans le pire des cas, le pire étant qu'elle est complètement inversée. Et il doit faire le maximum sur, qui est cette fin par plus de deux. Et le genre de cas moyen est qu'il doit faire peut-être moins. Ah, au travail. Il n'a pas besoin de toujours aller à la plus grande quantité de swaps. Peut-être qu'il a de la chance quelques fois et qu'il les place juste alors c'est un peu moins carré, mais c'est toujours dans l'ordre de en carré, donc nous pouvons mettre ces deux dans notre tableau juste ici. Donc, la moyenne est au carré et le pire scénario est au carré. Cependant, il se porte un peu mieux sur son meilleur cas. Et jetons un coup d'oeil à ça juste ici. Effacons. Cela ne dessine pas ici. Effacons ça. Ceci et ceci et faisons cela triés. Donc, nous avons eu cet algorithme et il est déjà arrivé trié déjà. Il est arrivé trié. Donc, ce que nous faisons, c'est nous saisissons le 1er 1 et nous avons inséré ici. Eh bien, il n'y a rien à faire. On ne fait aucun échange. Ça a pris combien de temps ? Eh bien, il a fallu cette opération pour la déplacer et cette opération pour vérifier si ces deux-là sont plus grands que celle-là. Donc, il est venu à deux opérations ferait exactement la même chose à nouveau. On bouge ça, on attrape ça et on le déplace. Prenez ceci et nous le déplacons et nous vérifions les notes encore triées. Attrapez ceci et déplacez-le et nous vérifions note, toujours triés. Donc, chacune de ces fois, il n'a fallu que deux, hum, pour une sorte de cycles. Tout ce que nous avions à faire était de déplacer le curseur. Donc, nous avons déplacé le curseur et ensuite nous vérifions, si plus grand que et ainsi à chaque fois. Ce n'est que deux opérations. Ce qui veut dire qu'il est toujours en cours d'opération. Peu importe combien de extrémités il y a, il va être 222222 Il ne va jamais s'échelonner en fonction des extrémités, donc cela signifie que c'est techniquement le temps constant. Donc maintenant, nous avons en quantité de transferts ici, nous avons en quantité de transferts, um, ou en quantité de données. Je suppose que vous pouvez les appeler avec la quantité de données multipliée par multipliée par le temps constant . Dans son meilleur scénario, ce qui signifie que notre meilleur scénario sera en fait dans un genre de bulles. Nous allons obtenir ce meilleur scénario de in, et tout cela se résume au fait que quand il est trié, nous n'avons qu'à faire des opérations constantes. Pour changer cela ici devient constante, dans lequel la sélection trier. C' était toujours dans plus de deux, ce qui signifie qu'il sortirait toujours à la fin au carré. Et c'est donc le tri d'insertion en un mot. Comme je l'ai dit, il combine les taches de Theus de tri de bulles et de tri de sélection, ayant le non trié et trié, puis bouillonnant le nombre minimum. Comme je l'ai dit, il combine les taches de Theus de tri de bulles et de tri de sélection, Et puis il se combine à ce genre de nouveau appelé Insertion Sort. Et cela vient à ces temps de course ici, ce qui est identique au tri à bulles. Hum, donc c'est encore assez lent. Donc, ce sont les années 60 de base seulement. Tous les informaticiens sont les trois sortes de choses, et ensuite nous entrons dans les plus rapides par ici. Et c'est là que certains, comme, vraiment intuitifs, sorte d'idées astucieuses viennent et nous commençons à améliorer réellement les algorithmes de tri de comparaison pour les rendre vraiment rapides trop rapides, assed rapide, comme dans la connexion, et des choses comme ça 34. Sort rapide 5 à 5: Ok, alors allons discuter du premier algorithme qui va être plus rapide que les autres albums dont nous avons parlé. Donc, quand nous regardons ces autres algorithmes temps d'exécution, nous avons remarqué que dans le pire des cas, ils sont tous au carré. Et même dans le scénario moyen, ils sont tous au carré, et l'un d'eux est légèrement plus rapide dans le meilleur temps d'exécution. Mais c'est si ça a déjà commencé. Donc ça ne compte même pas vraiment, parce que c'est un cas sur un nombre infini de cas. Donc tout ce qu'on veut vraiment regarder, c'est ici, et on voit qu'ils sont tous assez mauvais. Et donc ce qu'on va faire, c'est regarder l'étape suivante dans le genre d' évolution de l'algorithme de tri . Nous allons comprendre une façon beaucoup plus rapide de commencer sur le temps moyen. Vous remarquerez que quelques autres parties sont toujours les mêmes. Mais notre temps moyen va s'améliorer, et ensuite on va fusionner, trier. On va pouvoir tout améliorer avec ça. Donc ce qu'on va faire dans cette conférence, c'est un tri rapide. On parlera de l'intuition derrière Quick Sort. Comment cela fonctionne et fonctionne réellement. Et je vais faire un exemple en vous montrant étape par étape comment vous savez, tri exactement rapide fonctionne. Ensuite, nous allons faire un peu visuel, puis la leçon suivante passera en revue l'exécution parce que ces deux parties sont un peu complexes et dans leurs propres droits. Et je ne veux pas vous faire savoir, comme une vidéo de 40 minutes sur cette pause pour que nous puissions comprendre chaque partie individuellement. Alors allons derrière l'intuition pour un tri rapide. Alors allons de l'avant et créons un joli petit rayon ici. On va en faire un peu plus grand A. C'est un peu trop près du sommet. Apportons-le juste un peu ici. Donc on s'est mis dans un rayon et on va faire, hum, huit gros. Donc nous allons continuer à le diviser au centre ici et maintenant nous avons huit endroits différents et remplissons ça avec ces chiffres ici. Disons 15 22 13 27 12 10 20 puis 25. Allons de l'avant et réparons ce 10 ici pour qu'il soit perceptible. Et maintenant, nous avons notre tableau. Et donc, ce que fait le tri rapide, c'est que cela fonctionne sur cette idée de quelque chose appelé un pivot. Qu' est-ce qu'un pivot ? Un pivot va être l'endroit où il va se séparer. Donc, ce que nous faisons, c'est que nous créons une augmentation sous A à partir de ce tableau. Donc nous appliquons l'algorithme de tri rapide à différents petits sous-tableaux, et ensuite nous allons continuer à l'appliquer jusqu'à ce que nous n'ayons qu'un ou deux, um, morceaux de données dans notre augmentation, et puis nous allons tout faire apparaître . Ce que cela fait, c'est qu'il crée une approche diviser et conquérir pour le programme qui va accélérer le temps d'exécution global. Et tout cela aura du sens alors que nous commençons à examiner cela un peu plus et que vous commencez comprendre comment cela fonctionne exactement. Et puis le moteur d'exécution expliquera pourquoi c'est plus rapide. Alors partons avec ça pour maintenant et j'espère que cela a du sens quand nous le traversons. Donc, ce que nous avons ici, c'est que nous allons choisir un pivot. Tout ce qui est inférieur au pivot va aller dans le sous-tableau gauche. Tout le moins va aller à gauche et tout ce qui est plus grand que va aller à droite. Alors, quel est notre pivot ? Quel numéro allons-nous choisir comme pivot ? Eh bien, nous devons penser que c'est complètement, hum, un peu caché pour nous. Nous ne savons pas quels sont ces chiffres. Nous ne pouvons pas trouver de moyennes ou de médianes ou quelque chose comme ça parce que ce n'est pas trié. Et on pourrait, tu sais, essayer de trouver le numéro du milieu. Mais comme je l'ai dit, ce n'est pas trié, donc nous devrions connaître beaucoup plus d'informations et nous devons le trier pour trouver le numéro du milieu afin que ça n'ait aucun sens. Donc ce que nous pouvons dio est affaiblir. Il suffit de choisir le pivot basé sur la gauche, Most element. Donc, dans cette situation, ce qu'on va faire, c'est qu'on va prendre le pivot juste ici. On va dire que c'est la gauche, la plupart des éléments. Et maintenant ce que nous allons faire c'est que nous allons mettre tous les nombres qui sont inférieurs à notre pivot à gauche, tous les nombres qui sont plus grands que notre pivot à droite, donc ce que nous faisons, c'est que nous prenons notre pivot et nous descendons comme ça Et donc maintenant, il est au centre . Maintenant, ce pivot est au centre, et par définition il va être trié parce que tout à gauche va être inférieur et tout à droite sera plus grand que ça. Donc on en a fini avec ce numéro. Ce que nous devons faire maintenant est séparé afin que nous ayons ce sous-tableau gauche et que nous ayons résumé droit. Allons de l'avant et drawl sont des sous-tableaux et regardons quels nombres sont plus ou moins grands que, moins grands que,Ce que nous avons ici, c'est que nous avons les nombres 10 13 puis 12 mis dans la gauche ici parce que ce sont tous ceux qui sont moins que ça. Donc, nous avons 10 13 12 et il y a un tas d'algorithmes différents pour trouver ceci pour rechercher ceci et comprendre ce qui est moins, vous pouvez aller juste de gauche à droite, cherchant les nombres qui sont inférieurs. Donc, dans cette situation, cela pourrait arriver à 13 12 10. Ou vous pouvez aller de droite à gauche ou du pivot à gauche. Et puis à partir du pivot qui va à droite, il y a vraiment un tas de façons différentes de le faire. Um, où va-t-il aller avec ce que cet algorithme sortira ? Et c'est juste parce que ça va prouver quelques choses au fur et à mesure que nous traversons, ça aura le plus de sens. Maintenant, nous avons sur la gauche. Ici, nous avons le 20 à 27 20 et puis 25. Donc tous ces chiffres à droite sont plus grands. Tous ces chiffres sur la gauche sont moins alors. Et maintenant, ce que nous faisons est d'appliquer cet algorithme à ces deux encore une fois. Donc, nous trouvons le pivot et dans ce cas, va être ce nombre à nouveau sur la gauche. Ce sera ce numéro ici et ici. Ce sera ce numéro ici. Allons d'abord dans le sous-arbre gauche, et c'est l'idée d'un algorithme récursif. Il va d'abord s'attaquer aux sous-arbres de gauche. Ensuite, il va revenir, il va s'attaquer à tout ça jusqu' au bout. Ensuite, il va revenir et il va s'attaquer au bon sous-arbre suivant. Et un traité signifie que c'est le résumé séparé, un résumé. Donc ce qu'on va faire, c'est qu'on va se trouver un point pivot. C' est ce 10 que nous venons de choisir. Donc maintenant ça va arriver et on va avoir un 10 ici. Et puis nous allons mettre tous les chiffres plus grands que lui sur la gauche. Tous les chiffres inférieurs à lui à droite et vos lettres que 10 est en fait le minimum ici. sous-arbre gauche douloureux n'a rien techniquement, dedans. Donc cela signifie que ce sont 10 dans cette situation va être notre nombre le plus gauche, puis dans le sous-arbre droit, où nous allons finir par avoir sont les deux autres nombres, les deux autres nombres. Donc on va avoir un 13 et 12 ici, et là, on va le diviser une fois de plus, avec 22 au centre. Donc, nous tirons quand vers le bas et 22 va être notre nouveau numéro. Et jusqu'à ce qu'il reste, on aura 20 et 25 ans. Ou en fait, mon mauvais 25 est plus grand que donc nous allons juste avoir 20 va avoir 20 ici, et puis à droite va être le reste des chiffres à droite va être 27 et 25 et puis vous remarquerez que nous avons encore une place ouverte dans les deux. Donc vingtième 27 25. Et nous avons encore à un tableau de raid qui sont plus grands qu'un. Nous allons donc choisir un autre point pivot pour les deux ici et ici. Et donc ce qu'on va avoir, c'est avoir un 13 qui tombe et les 12 fantômes sont partis. n'y a rien sur le sous-tableau gauche. Donc nous avons les 12 ici, et ensuite faisons exactement la même chose sur la droite. Ici, nous avons le 27 qui descend le 27 qui va juste ici, et puis le 25 sera à gauche de celui-ci ici, qui 27. 25 sera ici et ce sera techniquement son propre sous-tableau. Comme ça Et maintenant ce que nous avons est en fait un tableau trié. Ça ne ressemble pas à ça. Mais nous avons une sorte de rayon, parce que maintenant ce que nous avons fait est que tout cela a lieu à l'intérieur du tableau ici. Donc maintenant, si nous tracons ceci, nous avons le tableau trié du plus petit le plus grand. On a les 10. Puis on descend et on en a 12. 13 quand nous reviendrons, Et puis nous avons le 15 2022 25 27. Et aussi Ray est créé par cette méthode ici. Et nous allons le diviser en huit originaux que nous avions. Et alors faisons cette trace juste une fois de plus. Donc on descend du côté gauche, et ce qu'on va faire, c'est un algorithme récursif. Donc nous l'avons divisé en deux, et maintenant nous partageons celui-ci en deux et nous vérifions. Il n'y a rien à gauche. On a vérifié. n'y a qu'un seul élément ici, donc on prend ça dessus, on l'écrit et on vérifie le bon côté. Il reste encore deux éléments, alors on le refait, on vérifie le côté gauche. Eh bien, il y a un élément là maintenant pour qu'on puisse écrire ça. On a vérifié le milieu. Il y a un élément là pour qu'on puisse l'écrire. Et maintenant il n'y a rien d'autre à vérifier. Il n'y a plus d'étapes. Alors il retrace et puis on a vérifié le milieu maintenant donc on a vérifié le sous-arbre gauche . Maintenant, nous vérifions le milieu et nous avons nous-mêmes un 15, puis nous allons de l'avant et nous vérifions le bon côté. Et la première chose une fois qu'on arrive ici, c'est qu'on vérifie toujours à gauche en premier. Donc on descend ici et il y a un 20 seul. Donc on prend le numéro un et c'est dans notre rayon. On y va quand on vérifie le milieu, il y a un 22 tout seul et ensuite on vérifie le bon sous-tableau et il y a encore des trucs ici. Donc, nous appliquons l'algorithme, nous descendons à gauche et nous voyons que tout cela est tout seul. Donc, nous avons un 25 et au milieu est également par lui-même 27. Et à la toute fin ici, il n'y a plus rien. C' est donc la fin. Et nous avons un tableau trié. Donc, tout cela fonctionne à partir de ce pivot au tout début parce que nous divisons ce problème en sous-problèmes. Et avec ces sous-problèmes, nous le divisons en plus de sous-problèmes et plus de sous-problèmes jusqu'à ce que nous atteignions des unités d' un. Et puis une fois que nous le ferons à cause de la façon dont l'algorithme fonctionne dans son ensemble, ils seront tous triés. Et puis tout ce qu'on a à faire, c'est tracer ce nouvel arbre que nous avons créé, et on va remonter comme des traces d'arbres un peu plus tard. Mais imaginez que tout cela se passe en place, qui signifie qu'il n'entre pas. Créer ces métros est en fait simplement tout faire dans ce tableau. Ici, vous remarquerez qu'une fois qu'il fait tout ça, il les place au bon endroit au fur et à mesure qu'il descend. Donc ça va commencer tout ce qui reste à faire ce genre de chose. Ensuite, il va trier tout ce droit en faisant ce genre de chose, et à la fin, il va ressembler à ceci comme une version triée finale. Alors jetons un coup d'oeil à cela visuellement, et je pense que cela fera un peu plus depuis, donc ces gens formidables à Visual Go Dot Net ont créé ces albums de tri que nous avons utilisé. Si vous voulez vérifier l'un de ces éléments, assurez-vous d'aller sur leur site Web car ils fournissent tout cela gratuitement. Donc, nous avons créé sont tri. Commençons maintenant le tri ici, et vous remarquerez que ce qu'il fait est d'allouer un sous-tableau. Donc il a choisi le euh 3 ici comme point de pivot. Et ce qu'il fait maintenant, c'est qu'il va et il trier le sous-tableau droit, puis trier le résumé gauche de ces nouveaux pivots gagnera à travers cela et il a trouvé un pivot. Et puis c'est trier le côté gauche, trier le côté droit de cette petite caisse que la gauche créative trouve que le pivot jaune le trie. Maintenant, nous trions le côté droit, donc nous avons juste une sorte de gauche. Maintenant, nous allons du bon côté et nous allons le trier ici, et, vous savez, c'est un peu plus complexe. Dans l'exemple, je suis allé plus loin, et c'est parce que lorsque vous l'implémentez réellement dans le code, il doit être ce genre de façon à ce qu'Onley échange parce que l'échange d'Onley est très, très important. Si nous créons tous ces petits résumés, va prendre de l'espace supplémentaire, temps supplémentaire et alors nous aurons réellement à faire comme des traces, ce qui ajoutera dans le temps final. Donc ce qu'il fait ici et nous pouvons jouer ça encore une fois. Nous pouvons en créer un nouveau ici, et nous pouvons réellement entrer dans les chiffres que nous sommes allés ici si nous le voulons. Alors donne-moi une seconde et je le ferai. Il était 15 que 22 13 27 que 12 10 2025 10 2025. Et puis on peut cliquer. Va juste ici. Et maintenant c'est le tableau que nous avions à l'origine, alors voyons comment il le fait. Nous devons cliquer sur aller, puis aller à trier et cliquer. Allez sur ce genre, et vous verrez. Ce qu'il fait, c'est qu'il a choisi le 15 comme pivot, et il saisit tous les nombres qui sont inférieurs à et vous verrez qu'il vient avec ce 10 13 12 aussi, parce qu'il fait l'échange donc il est juste saisir tous les nombres . Faisons ça encore une fois. Vous voyez les 15. Il saisit tous les nombres qui sont inférieurs à et l'échange dans le prochain espace disponible . Donc, il saisit le 13 1er et ensuite il l'échange dans l'espace. C' est à droite de la 15. Il attrape les 12. Ensuite, il change dans l'espace qui est le prochain sur cet endroit sordide, qui est 12. Et puis il attrape le 10 et il l'échange dans cet endroit, puis il saisit ça et il échange au début de la liste. Donc, comme je l'ai dit, un peu plus complexe et comment le code l'implémente réellement. Mais ça fait exactement ce qu'on a fait. Il a créé ce sous-arbre gauche ce 10 13 12 et il a créé ce sous-arbre droit ce 22 27 20 et 25 et le pivot est au centre et vous remarquerez que le papier est devenu orange , ce qui signifie qu'il est complètement trié. Et maintenant ce qu'il s'attaque, c'est le taux de sous-arbre gauche ici, et vous remarquerez que c'est juste ce qu'il a fait là qu'il a créé ce sous-arbre gauche et rien ne s'est réellement passé. Les 13 ou 12 disent au même endroit. Donc, il est tombé et il a fait une variation de plus. Et puis il a échangé les 12 et 13 pour les mettre au bon endroit. Et maintenant, il s'attaque au bon sous-arbre par ici, donc vous remarquerez qu'il fait exactement les mêmes étapes que nous l'avons fait. Il le sépare en ce taux de variante ici, échangeant les positions et en s'assurant qu'il est trié. Et puis maintenant vous verrez que l'ensemble des graphiques triés. Donc, c'est fondamentalement comment le tri rapide fonctionne. Il fonctionne à partir de la division en petits et petits problèmes. Cela vous donne un moyen plus rapide de le faire, et nous allons voir exactement pourquoi cela est plus rapide dans la prochaine conférence, où nous allons parler des temps d'exécution. 35. 5 à 6 heures de lecture rapide: Alors maintenant passons en revue l'exécution de cet algorithme que nous venons de parler de l' algorithme de tri rapide . Alors, à quelle vitesse cet algorithme est-il ? Quoi ? Nous devons y penser comme ça et ce sera la même intuition pour le prochain où nous discutons de Merge Sort. Et donc ce qu'on va faire c'est qu'on va briser ça, et ça va être comme je l'ai dit, le prochain, on va fusionner, trier. Ça va être la même intuition. Mais j'ai l'impression que si on passe ça deux fois d'affilée, ça va vraiment faire du ciment, et ça commencera à avoir du sens. Alors quoi, c'est qu'on fait cuire, en gros, on prend ce problème, et on le décompose en un tas de sous-marin. problèmes de Siri. Et la façon dont cela aide est qu'il le décompose en ces niveaux ici. Et vous verrez que dans ce niveau, quand nous le décomposons et que nous devons faire des comparaisons touchera tout au plus dans les éléments, et je crois que cela se termine par des comparaisons. Mais nous allons juste le laisser à n. Donc ce niveau prend dans ce niveau ici va prendre aussi bien. Et vous remarquerez cela à cause de la, hum, sorte de la façon dont ça fonctionne ici, c'est qu'il va devoir entrer en contact. Et c'est un peu moins que dans quand on descend ici. Et puis ce niveau ici va prendre en compte aussi. Donc, ce que nous avons ici, c'est que nous avons un programme qui en prend trois, ce que nous devons examiner. Ce que nous devons examiner, c'est comment cela se développe-t-il au fil du temps ? Comment est-ce que ce nombre, la quantité de extrémités que nous pourrions même appeler ce X ? Comment X de dans pousse-t-il ? Parce qu'une fois que nous avons trouvé la réponse à cela, une fois que nous comprenons comment ce nombre augmente, alors comprendra le runtime pour cet algorithme. Et donc ce que nous pouvons faire, c'est que nous pouvons penser à cela logiquement. Combien avons-nous ici ? Nous avions huit variantes différentes ici. Donc, ce que nous avons fait, c'est dans le meilleur des cas, nous en avions huit au sommet. Donc, comme huit sortes de parties différentes à cela, ou nous pouvons réellement faire ce genre inverse de comment cela fonctionne. Nous avons commencé par huit, puis nous l'avons divisé en deux groupes de quatre et nous l'avons divisé en deux groupes de deux. Et puis vous avez divisé ça en un et vous remarquerez que c'est ce que cela imite ici, c'est qu'on avait les huit. Nous l'avons divisé en deux groupes de quatre. Et puis parce que le pivot est impliqué, il est légèrement moins sur le côté gauche, et il descend en quelque sorte de là. Mais il garde cette forme générale, cette sorte de forme générale où il va à ces différents niveaux. Et donc, combien de niveaux nous avions ? Quoi ? Nous en avions un aussi Trois niveaux avant d'en arriver à tous et le programme a pris fin. Donc ça veut dire qu'à huit ans, nous avons nous-mêmes trois. Maintenant, combien en aurons-nous si nous avons commencé avec 16 par exemple ? Pour que nous puissions réellement faire ici, nous pouvons les mettre en évidence et nous allons de l'avant et les supprimer . Et puis dupliquons ceci ici. Alors attrapons tout ça ici. Contrôle CND. On va attraper ça. On va le déplacer vers la droite. En fait, déplacez-le vers le bas et nous allons l'attraper et le déplacer vers le bas aussi. Il suffit de les sélectionner tous, en essayant de gagner un peu de temps ici. Et donc ce que nous avons c'est que nous avons ces deux petits sous-ensembles de huit. Et donc ce n'est qu'un 16. Cela a ajouté. Donc tout ce qui a fait, c'est que nous venons d'ajouter un niveau supplémentaire. On l'a vendu après tout ce travail de copie et de collage. Et tout ce que nous avons vraiment fait a été ajouté un niveau de plus. Et c'est le niveau de huit. Donc, nous avons dans, dans aussi. Et donc ce que nous avons ici, c'est nous avons si nous en avions 16, nous en avons quatre. Et imaginez si nous refaisions ça. Si nous copions et collez cela à la fois à droite et à gauche et puis juste ajouté le prochain niveau de 32 bien, cela nous obtiendrait 32 égal à cinq et 64 équivaudrait à six. Et 128 serait égal à 12 ou mon maths 12 avec sept et ainsi de suite et ainsi de suite et ainsi de suite. Donc, ce que cela signifie, c'est que le nombre de niveaux se souviennent, C'est ce que nous essayons de trouver Ce taux X ici, le nombre de niveaux augmente réellement. À un certain rythme, il grandit quand cela double à chaque fois. Donc, il croît à un taux exponentiel inverse, ce qui signifie que la distance entre ces deux la distance entre les nombres de Maney que nous avons va lentement devenir de plus en plus de plus en plus grand. Par exemple, ici, il en a fallu huit ici. Il a fallu huit numéros de Dittemore pour que nous ayons un autre niveau ici. Il a fallu 16 pour obtenir un niveau 32 pour atteindre ce niveau 64 pour obtenir un niveau 128 pour obtenir un autre niveau, et cela va aller à l'infini. Donc, ce que nous avons, c'est que nous avons une sorte de graphique qui ressemble à ceci. Un graphique qui ressemble à ça au fil du temps. Et on en a déjà parlé. On va en parler en fusion. Ce graphique est connecté, donc le nombre de niveaux le nombre de fois que nous devons appliquer est connecté. Donc, cela signifie que notre équation se souvient que notre équation était que X, qui est le nombre de niveaux de dans nous avons. C' est le X Times. Combien de fois nous devons faire en fait va juste sortir pour se connecter de n ou mieux façon. Il est généralement mis est comme ça. Il est généralement écrit la notation standard pour cela est dans la loi à nouveau ou log temps linéaire. Donc, nous avons le temps linéaire log. Et c'était pour le meilleur des cas. Nous avons pensé que si elle était divisée au milieu, nous avons ce temps linéaire de log, et c'est exactement comme ça que nous avons pour le meilleur temps d'exécution que nous avons dans la connexion. Et puis maintenant, réfléchissons à cela pour le temps d'exécution moyen. Eh bien, le temps d'exécution moyen va supposer, en moyenne, que nous allons choisir un point pivot quelque part près du centre. Donc, en moyenne, si on fait tous les calculs, ça arrivera exactement à la même chose qu'il va arriver à la connexion. Mais qu'en est-il du pire scénario ? Quel serait le pire scénario ? Eh bien, le pire scénario serait que nous créions ce graphique ici, sauf qu'il ne se divise pas uniformément chaque fois qu'il est 15 ici, ce qui signifie que c'est par exemple, Ah un et c'est par ici. On doit le diviser à nouveau. Essayons donc de regarder ça. Regarde un peu le pire des cas ici. Regardons le pire cas ici. Donc nous avons un 16 et nous avons mal divisé. Nous avons choisi un point de pivot où tout était supérieur au point de pivot ou tout était inférieur au point de pivot. Donc on a choisi ça. Et au lieu d'avoir ce résumé ici, nous n'avons rien ici. Donc, nous avons juste et en moins un, nous avons exactement le même tableau accepté juste une dernière. Je ne nous ai pas aidés du tout. Donc, si nous continuons à faire cela, si nous continuons à choisir le plus bas ou le plus grand nombre de sous-tableaux n'allaient pas obtenir cette relation où nous divisons ce problème en ces petits sous-composants et le réduisons au minimum nombre de niveaux de fin. Et passons en quelque sorte ce que ça veut dire exactement. Nous avons donc choisi un point pivot où 15 d'entre eux étaient moins et un seul était plus grand que bien, celui-ci ne peut plus se séparer. Nous devons donc ajouter un niveau ici. Et donc nous avons choisi un point de pivot où 14 sur le côté gauche ou moins. Et un ici, c'était ça. Et 13 et un et 12 et un. Et on peut continuer. On pourrait aller 11 et 11 et un, 10 et un. 11 et un, Et je fais ce genre de façon exhaustive ici pour vous montrer quelque chose. Huit et 17654321 Et combien de niveaux est-ce que ça a fini par être quand on l'a divisé de cette façon horrible ? Ce qu'on a eu c'est entré, dedans , dedans , dedans, dedans, dedans, et juste continuer. Nous avons toutes ces fins à chaque fois parce que ce n'est pas comme ça. C' est allé plus vite à cause de ça. Il doit encore toucher tous ces éléments. Donc ce que nous avons fini par arriver ici était 123456789 10 11 12 13 14 15 ou à peu près à cause de la 1ère 16 extrémités. Donc, dans cette situation, nous arrivons en fait à droite entre en moins un et dans les niveaux, parce que nous pouvons juste oublier le N moins une partie. Donc, dans cette situation, si nous allons dans le pire des cas, nous allons dans le pire des scénarios. Donc c'est le meilleur et le cas moyen, le pire scénario va être ah, beaucoup différent. Dans le pire des cas sont x la quantité de niveaux égale dans. Et maintenant, vous commencez à voir ce qu'on se passe ici. Si X et dans sont la relation ici et nos ex aigles dans, cela signifie que nous avons dans les temps dans nous avons dans les temps dans notre pire scénario. Et ça veut dire qu'on est au carré. Dans le pire des cas, nous avons choisi un point pivot où chaque fois qu'il ne se séparait pas uniformément ou même presque uniformément, parce que dans notre cas moyen, cela pourrait être un six, et cela pourrait être un 10 . Tu sais, ça pourrait être au lieu de quatre, ça pourrait être deux et six ou quelque chose comme ça. Vous pourriez rompre assez près, et on pourrait juste ajouter une ou deux extrémités à ça. C' est toujours fondamentalement comme une connexion, mais dans le pire des cas et les choses à côté du pire scénario, il est fondamentalement dans . C' est essentiellement cette fin des temps et cette relation, et ça veut dire que dans notre pire des cas, on se retrouve au carré. Et donc, à la toute fin ici, vous remarquerez que notre pire cas ne s'est pas amélioré. Notre pire affaire est toujours au carré. On a eu beaucoup mieux d'un cas moyen, et c'est très important. Celui-ci a l'air plus lent, ce qui est techniquement le cas. plus lent, Si le tableau est déjà trié, cependant, nous ne traitons pas une augmentation déjà triée. Il y a une raison pour laquelle il est entré dans l'algorithme de tri. Donc généralement, c'est Onley, car si elle était déjà triée, cela fonctionnerait toujours comme ça. Ou si vous avez choisi le point de pivot parfait, je suppose, est dans cette situation. Et c'est le choix d'une sorte de proche du point de pivot, donc cela pourrait sembler pire, mais c'est toujours parfaitement bien en droit à nouveau. C' est toujours très bien, et ces deux-là n'ont pas vraiment de sens où ils sont tous les deux parfaitement triés. Mais notre temps moyen est beaucoup plus rapide ici. Ceci est une énorme différence ici dans une fin au carré donc si vous à long terme , si vous employez ceci, vous économiseriez comme je l'ai dit une tonne de temps parce que le cas moyen serait ce qui sortirait le plus souvent. Parfois, vous sautez ici, parfois vous sautez ici, mais tout est en moyenne au milieu ici pour que vous puissiez voir que c'est un temps de course plus rapide . Mais nous ne voulons pas que cet orteil se produise, parce que même une fois où ça pourrait se produire dans le carré, ça pourrait suffire à planter notre programme. C' est peut-être trop grand pour notre programme. Une poignée peut s'exécuter sur une mémoire dans cette situation. Peut-être que la puissance de traitement atteindrait 100 ne serait pas en mesure d'exécuter. Donc, ce que nous voulons faire, c'est que nous voulons garantir que cela va être connecté, et c'est là que nous allons sauter dans la fusion, tri, qui nous permettra d'avoir cette garantie. Et je vous expliquerai que quand nous entrerons dans la prochaine conférence 36. Sort 5-7 fusionneur: Donc maintenant, passons sur un algorithme qui est encore plus rapide que les autres algorithmes que nous avons couverts. Et c'est fusionner, trier et Merge Sort fait une sorte d'algorithme Ryker Zhen intuitif pour le rendre plus rapide. Nous allons voir exactement comment il fait ça. Nous allons en fait diviser celle-ci en deux vidéos, une sur l'intuition derrière, parce que c'est un peu plus complexe et l'autre sur les temps de course, parce que cela aussi, est un peu plus complexe et a besoin de son propre genre d'explication. Alors commençons. Allons juste à l'intuition, et ensuite nous allons regarder un modèle visuel de celui-ci en cours d'exécution aussi. Donc, la façon dont cela a fusionné ou fonctionne est qu'il prend les données pour qu'il prenne le tableau, puis il le divise en petits sous-tableaux. Donc, par exemple, ce que nous faisons c'est que nous prenons ce Ray ici et disons qu'il n'y a que quatre éléments de 7 10 9 et 8, et ce que nous faisons c'est que nous les séparons dans une colonne de gauche et une colonne de droite. Donc ce que nous avons ici, c'est que nous avons un 7 et 10 sauf ce qui permet de garder la couleur constante ici. Et allons-y comme ça. Donc, nous avons 1/7 un 10 et puis sur la droite ici, nous avons un autre sous-tableau. Vous remarquerez que nous ne faisons rien sans faire de tri à cette étape. Nous le divisons juste en ses petits sous-tableaux comme ça. Et puis, ce que nous faisons, c'est que nous le divisons à nouveau jusqu'à ce qu'ils soient juste dans des boîtes totalement indépendantes les unes des autres. Donc sept, 10 98 Et puis ce que nous faisons avec ça, c'est que nous le combinons. Nous recombinons ces deux dans un nouveau tableau de deux, et nous les avons réunis dans un tableau de deux. Et vous pourriez penser, quoi ? On les a séparés. Qu' est-ce qu'on va faire quand on les aura combinés ? C' est là que le tri a réellement lieu. Alors restez avec moi. On va se créer un curseur à gauche et un curseur à droite. On va se créer un curseur à gauche et un curseur à droite Et à cette étape, ça n'a pas beaucoup de sens. Mais quand nous entrerons dans les plus grands, cela commencera à avoir du sens. Donc, nous avons une malédiction à gauche. Nous avons un curseur sur la droite, et ce que nous allons faire, c'est nous allons les prendre et nous allons comparer ces chiffres. Donc, en ce moment, le curseur à gauche pointe vers un sept, et le curseur à droite pointe vers un 10. Lequel est le plus petit ? Eh bien, le sept est plus petit, donc ça va d'abord, et ensuite le 10 est plus grand que ça. Alors ça va ensuite. On est dans la même chose sur la droite. Ici, les huit vont d'abord ou puis le ou dans cette situation, les huit étaient sur la droite. fait, c'est bleu. Le huit va d'abord, puis le neuf va juste après. Huit va 1er 9 va juste après. Et je sais que ça n'a pas beaucoup de sens. Alors faisons en fait que ça ait du sens. C' est plus logique quand nous avons réellement des éléments mawr à suivre ici. Donc maintenant, ce que nous avons est que nous l'avons en le combinant à nouveau dans son tableau final. On va donc recréer ces curseurs. Nous avons un pointage vers la gauche et un vers la droite, comme ça. Et ce que nous faisons, c'est nous prenons ces chiffres et nous comparons les deux curseurs. Donc, le premier curseur pointe sur sept au moment actuel. Donc, il pointe vers un sept, et le curseur suivant pointe vers un huit. Nous prenons ces deux-là et nous les comparons bien. Ces sept sont le plus petit, donc nous avons mis cela dans le premier endroit du tableau. Maintenant, ce que nous faisons, c'est que nous rayons ce chiffre. On ne l'utilise plus. Nous prenons le curseur et nous le déplacons à l'élément suivant de n'importe quel tableau a été utilisé. Donc depuis qu'il est parti, Array a été utilisé, prenaient le curseur rouge, et nous le déplaçons vers la droite. Et quand nous le déplacons vers la droite, nous mettons ensuite le nouveau numéro. Donc, dans cette situation, c'est un 10. Donc nous l'avons mis dans le nouveau numéro. Nous prenons les deux chiffres et nous vérifions à nouveau. Lequel ? Plus petit ? Eh bien, maintenant c'est le bon côté. Donc, nous allons de l'avant et nous sommes dans le bon côté. Nous avons rayé ce nombre, nous déplaçons le curseur et puis nous refaisons les comparaisons. Maintenant, le côté droit est un neuf. Donc nous avons mis un neuf et ensuite nous avons mis dans le dernier élément de la 10 sur la gauche ici et vous remarquerez au cours de cette étape que nous avons couru. Combien de fois et pendant ce que nous avons couru sur Lee dans le temps, nous n'avons pas couru au carré ou quelque chose comme ça, parce que tout ce que nous avons fait c'est que nous avons juste déplacé le curseur. Nous avons touché le sept une fois, le huit une fois, le neuf une fois et le 10 une fois. Et puis on les touche à nouveau. Donc c'était juste deux de ces extrémités, et ça va se lier à l'exécution plus tard. Mais gardez ça en quelque sorte dans votre esprit parce que ce sera comme je l'ai dit plus tard, quand nous le ferons, l'exécution de tout ça va commencer à avoir un peu plus de sens. Mais faisons un exemple plus grand. Disons que nous sommes arrivés à l'étape finale de 24 par quatre tableaux, donc nous devons augmenter quatre par quatre ici et nous avons franchi l'étape finale, qui signifie que tout cela est trié à ce stade, comme ici. Ceux-ci sont triés du plus petit au plus grand, mais ils ne sont pas particulièrement triés entièrement. Donc ce qu'on va faire, c'est qu'on va remplir ces chiffres. Disons que c'est un 13 15 16 sur disons que celui-ci est 10 11 14 17 comme ça et donc ce qu'on va faire c'est qu'on va faire exactement la même chose qu'on a fait avant. Donc c'est arrivé. Nous avons dû sous-tableaux combinés en cela, et maintenant nous devons trier une augmentation. Et on va faire, c'est qu'on va les combiner ici, et on va faire un tableau final. C' est tout grand. Donc c'est la taille originale ici, qui était le 19 total, ou la nuit dans le 19 le huit total 123456 que nous avions besoin d'acheter cela à nouveau. Et maintenant ce qu'on va faire, c'est qu'on est dans la même méthode qu'avant. Nous allons attraper un curseur gauche, nous allons attraper un curseur droit, et ceux-ci sont juste en train d'analyser les tableaux, et nous comparons pour celui qui est le plus petit. Donc nous avons juste ici, nous avons l'un et le 10 étant comparés au moment actuel. Et alors on va monter ça. Donc nous avons de la place chaque fois que ça disparaît. Mais ça, genre, juste ici. Donc on compare celui sur 10. , Évidemment,un est plus petit. Donc, celui qui entre ici dans la première place. Nous allons de l'avant et rayons celui, puis nous déplaçons le curseur par un. Et puis maintenant, nous comparons les trois, nous comparons les trois et les 10. , Trois,c'est encore plus petit, donc j'ai mis les trois là-dedans. Nous le traversons et nous déplaçons le curseur sur le 15. Comme ça et maintenant nous pourrions faire une comparaison une fois de plus. Eh bien, maintenant le côté droit est plus petit. Le 10 est le plus petit, alors nous allons de l'avant. On met les 10 ici, fait sortir et on bouge. Le 11 est maintenant le plus petit parce que le prochain numéro ici est 11. 11 est maintenant plus petit. Alors j'ai mis les 11 là-dedans. On va continuer à faire ce processus encore et encore jusqu'à ce qu'on arrive à la fin. Mais je veux en quelque sorte passer par l'exemple entier. Vous comprenez ce qu'on fait ici ? Cela vous aidera vraiment à obtenir l'intuition qui vous aidera à comprendre le temps de course un peu plus tard. Donc maintenant, nous en avons 14. 14 et encore la plus petite. Donc, nous allons de l'avant et faisons exactement les mêmes processus qu'avant, en traversant, en déplaçant le curseur sur. Et maintenant, nous avons un 17 ici. Et alors nous faisons une comparaison sur le côté gauche. Eh bien, le 15 est maintenant le plus petit des 15 qui entrent ici. Sortez, bougez. Maintenant, nous avons 16 Verset 17. Le 16 est le plus petit, donc le 16 est placé ici. Elle est barrée, elle est barrée, puis le curseur se déplace. Mais il y a un cas particulier ici, c'est que quand le curseur passe et qu'il comprend que c' est à la fin du rayon, il n'y a rien de l'année passée, vous savez, vous savez, il n'y a rien qu'il puisse saisir ici une fois qu'il obtient jusqu'à ce point. Ce qu'il fait, c'est qu'il copie le reste de ce qu'il y a ici. Donc, dans cette situation, nous n'avons qu'un seul élément. Il ne fait que copier le 17 sur. Cependant, dans certaines situations, ce ne sera pas si facile. Peut-être un 17 18 1920 par ici. Et donc nous ne continuons pas à le comparer. Une fois que nous sommes à court d'un des côtés parce qu'il n'y a plus rien à comparer. Le taux est terminé, donc ce que nous allons faire est que nous allons effectivement descendre et nous allons juste copier le reste de l'autre taux parce que déjà trié. Nous savons donc que le reste de ce côté-ci sera plus grand que n'importe lequel des chiffres ici . Et tel est quelque chose à garder à l'esprit est à un moment donné que vous allez manquer sur un tableau mais avoir encore trois ou quatre éléments dans l'autre sens. Et cela signifie simplement copier les éléments partout dans la droite finale. Et maintenant ce que nous avons est notre tableau trié. Donc, c'est l'intuition derrière les travaux de tri de fusion maison. Vous prenez un numéro et vous le divisez vers le bas et vous êtes cursif. Lee. Divisez-le jusqu'à ce que vous arriviez à un point où vous êtes juste à ceux ici et l'algorithme lui-même ne le divise pas en fait comme il comprend juste que 012 et trois vont tous être des entités séparées, mais la façon humaine de le faire est que nous doivent faire ces scissions. L' ordinateur a un moyen légèrement plus rapide de deviner tout cela, mais ça n'a pas vraiment d'importance. C' est quelque chose qui est très facile à implémenter du code chaque fois que vous recherchez le code pour le tri emerge. Mais c'est ainsi que cela fonctionne et ceux que nous arrivons à notre dernière étape de fusion. Nous créons nos petits curseurs, puis ils comparent juste d'avant en arrière et vous remarquerez que même dans ce où ils sont mangés, il n'a fallu que huit essais différents parce que tout ce que nous avons fait c'est que nous sommes allés un que nous avons déplacé trois. Il ne sera donc pas 13 10 11 15 16 17 Il n'a touché que plusieurs fois. Donc, même à cette étape, il était dans. Et comme je l'ai dit, ça va arriver un peu plus tard quand on verra le temps de course . Mais regardons maintenant une visualisation de la façon dont cela pourrait fonctionner par un ordinateur. Alors allons de l'avant et créons nous-mêmes un tableau non trié ici et commençons. Et c'est en utilisant le tri de fusion, et nous allons aller de l'avant et cliquer sur le bouton de tri, puis aller et puis vous verrez que ce qu'il fait. Est-il d'abord sépare l'image. Ces côtés et ce qu'il fait, c'est qu'il se sépare. Allons ralentir ça une seconde. Ce qu'il fait, c'est qu'il se sépare en deux, les triant, séparant dans le suivant pour les trier, puis quatre. Et puis nous ferons exactement la même chose la prochaine. Donc deux en font quatre ici. Et puis ça va trier les huit ici. Donc c'est récursif Lee qui va entrer. Donc, ce qu' il fait, il a commencé en divisant ceci en deux, puis il est allé jusqu'à ce qu'il arrive à ces deux ici, peu comme dans cet exemple. Ça a fait tout le chemin jusqu'ici. Puis il a commencé à le trier vers le haut, et c'est ce qu'il fait en ce moment. Maintenant, c'est trier la moitié gauche de ça, et ça fait tout trié. Et puis ça commence la moitié droite. Donc, il faut les 2 premiers numéros. Ça les trie. Ensuite, il faut les deux numéros suivants et il les trie. Et maintenant il y a deux ensembles de deux. Alors maintenant, ils peuvent les définir parce que maintenant ils sont exactement les mêmes. Donc, il les compare et il les stocke à nouveau, juste attraper le moins de chaque côté le remet en place, et maintenant il en a quatre qui sont triés de sorte qu'il se déplace à l'endroit suivant. Et même s'il y en a trois, il ne doit pas toujours être parfaitement symétrique. Vous pouvez avoir un nombre impair et avoir toujours ce travail. Il va de l'avant et il sépare le il sorte de retour vers le bas, puis il choisit le moins de quantité et crée un site assorti sur la droite. Et puis ça le fait. Une finale après cela est fait, met tout cela en arrière et maintenant nous avons deux séries de huit avec ce 17 mais c'est aussi près de huit que nous pouvons obtenir. Et puis il commence à trier ceci pour le tri final, et maintenant vous remarquerez qu'il attrape le moins de quantité de chaque côté. Va accélérer ça. Si je peux vraiment cliquer dessus, vous allez juste là et puis il va juste une tête et remet tout ensemble. C' est donc l'intuition. C' est ainsi que le tri de fusion fonctionne. Allons dans la prochaine conférence. On parle du runtime et pourquoi, exactement ? C' est plus rapide que les autres. 37. 5 ou 8 fusionnants: Donc, dans la dernière conférence, nous avons parlé de l'intuition derrière Merge Sort. Dans cette élection, on va passer le temps d'exécution. Quel est le moteur d'exécution de ce genre et pourquoi est-il plus rapide que d'autres types ? Eh bien, pour ce faire, nous devons comprendre de quoi je parlais lors de la dernière conférence, qui était à chacune de ces étapes. Combien de fois ou combien d'opérations n'a pas besoin de faire ? Combien de comparaisons fait-on ? Et cela arrive toujours à la fin parce que ces curseurs travaillant dans deux endroits différents ici vont seulement aller 1234 Et puis nous allons exactement de la même façon qui a attrapé les sept que les huit que les neuf. Les 10 vont être dans chacun de ces temps, donc nous savons que la base de notre temps de course ici sera là. Mais combien de fois faisons-nous dans ce qui va être multiplié par ? Et c'est la clé de ce temps d'exécution. Jetons un coup d'oeil à celui que nous avions ici et nous pouvons voir ça dans quatre avec quatre avec quatre. Il a fallu deux extrémités distinctes pour arriver à ce point. Combien de bouts y avait-il ? Est-ce que ça va ? Quatre. Il y en avait deux, et combien seraient à huit ans ? Faisons ça. Disons que nous l'avons fait. Nous arrivons à la partie où il se combine, c' est-à-dire huit petits différents. Voyons voir. Est-ce que c'est 812345678 Et puis on va les combiner en deux, puis les combiner en vigueur et ensuite les regrouper en huit. Donc chacune de ces étapes est cette étape ici juste avec huit au lieu de quatre. Donc, il se résume à quelque chose qui ressemble à ça, et puis nous pouvons voir qu'il va y avoir ici va avoir une fin ici, ici et puis ici pour la combinaison finale. Donc, avec huit, nous avons trois extrémités que nous devons utiliser. y Combienyen aurait-il pour 16 ? Eh bien, si vous y pensez 16 tout ce qui va le faire va ajouter un calque séparé à cela . Donc au lieu de ces nombreux que nous allons avoir. Donc, au lieu de tout ça, on va avoir un duplicata de ça. Voyons si on ne peut pas dupliquer ça. Allons comme ça et déplaçons ça hors du chemin et attrapons. En fait, on pourrait attraper tout ça. Prenons le tout et dupliquons, puis déplacez-le vers la droite ici. Alors maintenant, il y en a 16. Maintenant, nous avons deux séries de huit, puis nous descendons et tout ce que nous avons à faire est un calcul de plus pour obtenir les 16 originaux. Alors qu'est-ce que le doublement de la taille nous a donné ? Eh bien, il nous en a fait qu'un de plus et nous en a fait qu'un de plus. Et cette intuition va tout au long du processus. Si vous doublez encore, le 32 qu'il ne va prendre que 5 64 va seulement prendre un supplément, ce qui signifie que 128 ne va prendre que sept. 2 56 ne va prendre que huit, 5 12 va seulement prendre 9024 va seulement prendre 10 et ainsi de suite et ainsi de suite et ainsi de suite. Et donc ce que vous voyez, c'est qu'il y a cette différence ici. Cette différence clé est que plus le nombre est important, moins le nombre de pas sera élevé de manière réelle et prévisible. Ça va être Souviens-toi de cette exponentielle inverse dont on a parlé tout à l'heure ? journal de bien, c'est exactement ce que le runtime s'avère être c'est qu'au fil du temps, car dans devient de plus en plus de plus en plus grand le nombre de fois que nous devons le faire en opération quantité de fois. Nous devons le faire parce que nous le divisons en deux sur Lee augmente d'une petite marge pour que nous puissions arriver à un point où nous doublons cela et vous pouvez voir qu'il doit y avoir 512 numéros supplémentaires qui en ajoutent un autre. Donc, cela signifie que la quantité de extrémités que nous utilisons va être multipliée par non pas par interrogation, mais par connexion. Donc, tout ajoute à cela, tout cela ajoute au fait que nous allons avoir un résultat final de dans les temps de connexion. Et cela signifie que peu importe la taille ou la taille de ce tableau, qu'il soit trié ou non, nous allons toujours faire exactement la même opération. Ça pourrait arriver. Venez à nous complètement triés ou aussi non triés que possible, et ce n'est pas grave. Nous ferions toujours exactement les mêmes opérations à chacune de ces étapes. Et cela signifie que non seulement le meilleur journal de cas est le cas moyen dans la connexion. Le pire des cas est de se connecter parce que, comme je l'ai dit, ça pourrait être complètement et totalement, hum, non trié. Et ça n'a pas d'importance parce que nous allons faire exactement les mêmes étapes à chaque fois. Cela pourrait nous arriver à 789 10 et nous pourrions encore le briser et faire les petites comparaisons. Cela pourrait nous arriver comme 10 987 et nous le divisions toujours en nombre exact de comparaisons. n'y aura pas de changement en fonction des nombres, ce qui signifie que tous les trois vont être identiques les uns aux autres, et donc cela en fait l'algorithme le plus rapide car maintenant non seulement est notre plus rapide et connectez-vous est notre moyenne dans la connexion, Mais pour la première fois, notre pire cas est en connexion. Nous sommes maintenant en mesure de vérifier cela et de comprendre que même dans le pire des cas, il sera toujours connecté, ce qui est beaucoup plus rapide que ceux-ci ici. Tu te souviens du graphique que nous avons montré au tout début de ça ? Le cours de cette chose est que dans carré va monter à une ligne droite, sera dans le journal sera l'angle entre ces deux sera de moins en moins. Et donc nous avons mis 1 000 000 dans celui-ci sur 1 000 000 dans celui-ci, les résultats seront nuit et jour. Celui-ci prendra des semaines, alors que celui-ci pourrait prendre quelques minutes ou peut-être une heure. Et c'est le pouvoir de penser à cela. Parce que maintenant nous pouvons utiliser ces autres algorithmes de tri. Pourquoi les implémenterions nous quand nous pouvons implémenter un algorithme de tri ? C' est encore plus rapide ici, celui qui est garanti de se connecter. Et donc avec ces sources de comparaisons, nous pouvons en fait trouver une dernière sorte d' nous pouvons en fait trouver une dernière sorte d'information à partir de tout ça et ça. Est-ce que le plus rapide que vous serez jamais en mesure de faire une comparaison tri un tri de comparaison, ce qui signifie que vous comparez réellement les deux nombres les uns aux autres tri de comparaison que le plus rapide que vous serez jamais en mesure de le faire est en fait dans la loi à nouveau. n'y a pas de comparaison plus rapide tri là-bas et par comparaison, tri je veux dire, vous savez, vous avez 2468 Et pour trier cela, vous comparez This ce nombre avec ce nombre ou ce nombre avec ce nombre ou ce avec ce bois d'oeuvre, vous les comparez en lui-même. Et donc le plus rapide que vous serez en mesure de faire cela dans est de vous connecter. Donc, cela devient le plus rapide de ces algorithmes. Il y a d'autres rythmes de tri plus rapide, mais ils prennent beaucoup plus d'intuition et ils vont dans une sorte d'analyse du nombre lui-même pour déterminer où il va sans réellement le comparer avec d'autres nombres. C' est un peu complexe, et on y reviendra peut-être un peu plus tard. Cependant, comme je l'ai dit, c'est encore assez complexe. Donc, tout ce que nous avons à vraiment comprendre pour la base de l'informatique est le tri de comparaison et nous devons comprendre que le plus rapide que nous pouvons jamais obtenir est de connecter et de fusionner. SORT nous fait qu'en utilisant cette intuition de tout briser en deux afin que notre programme n'échelles que par les extrémités, temps log Evans et cela nous donne cette sorte rapide d'algorithme de in log in qui est de fusionner vraiment, vraiment une sorte de plaisir, sorte de passer par et quelque chose qui est vraiment puissant dans le round de l'informatique. 38. 5-9 Stable et nonstable: Discutons donc d'une dernière chose avec les algorithmes de tri, et c'est de savoir si un algorithme est stable ou non stable. Alors, qu'est-ce que ça veut dire exactement ? Eh bien, ce que cela signifie, c'est que si nous avons commencé un algorithme qui ressemblait à ceci, disons que nous avons un tableau qui ressemble à ceci. Disons qu'on en avait un de trop cinq pour ça. Il arriverait toujours que cela à cela. Ces deux à gauche viendraient avant ça aussi. Pour qu'on puisse y penser comme ça. Nous pourrions dire que c'est à un et cela doit être et donc il a besoin orteil arrive toujours que lorsque le tableau final est construit, quand le tableau final est construit, qu'il s'avère que c'est un à un être cinq comme ça dans aucune autre façon, s' il s'avère qu'il s'agit d'être et ensuite d'un type instable, cela signifie que les deux valeurs identiques ne sont pas conservées au même endroit, sorte que nous perdrions l'importance originelle du poste, mais par rapport à un un autre. Et cela pourrait être important. Par exemple, ce pourrait être des gens qui attendent dans une ligne ou quelque chose comme ça et d'avoir une personne saute devant, l'autre personne, juste parce qu'ils ont le même prénom n'a pas beaucoup de sens . Et, tu sais, ça pourrait entrer dans des choses plus importantes aussi. Mais c'est une sorte d'exemple qui m'est venu à l'esprit. Donc, beaucoup de fois, ou du moins parfois, la stabilité compte. Donc, nous regardons nos algorithmes qui sont stables ? Eh bien, ça se résume à ça. Le tri des bulles est stable parce que chaque fois que nous permutons, les valeurs n'étaient que des valeurs par rapport à l'autre réunion que deux ne vont jamais échanger avec deux autres, et il ne peut pas sauter ou tomber derrière les deux autres ou l'autre valeur identique de quelque façon que ce soit. Donc, le tri des bulles sort pour être stable. Le magasin d'insertion sort pour être stable et fusionner. Trier sort pour être stable. Et je ne vais pas expliquer exactement pourquoi c'est. Ces trois sont stables, mais il suffit de comprendre que dans leur genre d'implémentation, il s'avère qu'ils sont stables. Ce qu'on va faire, c'est le à qui ne sont pas stables. Ces deux-là ne sont pas stables. Et la raison de cela, pour le genre d'explication de cela signifie que ces deux sauront, ils peuvent supprimer l'ordre. Ils peuvent détruire ça. Où être viendra avant un maintenant, dans ce genre d'unité graphique a dit 1225 Il n'a pas d'importance quel air être il est. Il est toujours citation unquote triée. Cependant, si c'est un à un cinq, alors ce n'est pas stabiliser trié. Alors passons en revue notre premier exemple ici. Allons sur le tri de sélection. Rappelez-vous comment le tri de sélection saisit le nombre le plus bas, puis l'échange avec le premier espace disponible. Alors passons sur un compteur Exemple un exemple qui montre le manque de stabilité. Et tout ce dont nous avons besoin pour cela, c'est juste trois colonnes de tableau ici. Et donc ce qu'on a ici, c'est d'aller avec deux et nous allons mettre le petit A ici à B et ensuite un juste ici. Et alors ce que nous faisons c'est que nous le recherchons. Celui avec au moins le nombre, le minimum. Alors on descend. On descend. 01 Nous l'échangeons avec le 1er 1 Alors nous recréons ce tableau comme ça, et ce que nous obtenons est un tableau qui ressemble à ceci où celui vient au début. Et puis c'est d'être encore là. Mais celui dans le à un échange. Alors maintenant, c'est trié. Mais si vous remarquerez à cause des tri de sélection, la façon dont il gère les données, nous avons un problème ici que le à être vient avant le à A. Et cela peut arriver avec tous les nombres qui sont identiques s'ils sont donnés dans un certain motif. Ce qui signifie que dans l'ensemble, nous ne pouvons pas garantir la stabilité du tri de sélection. Le tri de sélection n'est donc pas stable. Jetons donc un coup d'oeil à un autre très rapide aussi, l'autre qui n'est pas stable. Et c'est un tri rapide. Alors regardons pourquoi Quick store n'est pas stable, et cela revient exactement à la même chose. Alors rappelez-vous avec tri rapide ont choisi un pivot. Donc, avec le pivot en tête, ce que nous allons faire, c'est mettre tout à gauche du pivot qui est moins et tout à droite du pivot. C' est plus si nous avions ce même exemple ici. Et disons que notre pivot est choisi pour être, aussi. Donc, nous allons utiliser exactement le même exemple. Donc nous avons nous-mêmes un à un A à B et ensuite un à droite ici. Et si on choisissait ça ? Pose le ou allons-y avec ce pivot juste ici. Disons que nous avons choisi d'être notre point de pivot. Donc, ce que nous faisons c'est que nous réduisons cela est d'être, et c'est-à-dire, sont enfermés dans le pivot. Et puis on se vante de tout ce qui est à gauche pour être ici. Donc c'est tout ce qui est moins que alors nous avons mis ici un et puis tout ce qui est plus grand ou égal à sur le côté droit. Et vous remarquerez un problème ici. Chaque fois que nous faisons cela, chaque fois que nous saisissons et allons à droite ici, ce que nous obtenons est supérieur à égal pour être ainsi à un va à droite, et maintenant nous sommes à toutes les valeurs les plus basses possibles. Notre premier pas. C' est une étape finale, et donc ce que nous faisons c'est d'aller de l'avant et de l'attraper et d'écrire notre tableau final ici. Et comme on s'y attendait parce qu'il n'est pas stable. Ce que nous obtenons est le to A et le to be swap places en raison du pivot qui a été choisi. Donc, sur celui-ci, nous ne pouvons pas garantir la stabilité aussi. Ce n'est donc qu'une touche rapide sur la stabilité. Qu' un algorithme soit stable ou non, il est important que l'emplacement des nombres soit important. Ce qui signifie que le A doit venir avant que le B ne vienne devant les voyants. Que l'association de gauche à droite compte et juste quelque chose d'autre que nous pourrions à ces algorithmes, c'est que nous pouvons étudier que si nous utilisons la fusion ou l'insertion ou tri à bulles, nous garderons notre stabilité. Cependant, si nous utilisons la sélection ou si nous utilisons le tri rapide, nous perdrons notre stabilité. Nous pourrions avoir des noms potentiels qui ont échangé des valeurs potentielles qui sont échangées et qui n'auraient pas dû être échangées, et c'est donc la stabilité 39. Exemples de monde réel: Maintenant que nous avons une bonne compréhension des algorithmes de tri et que nous avons vu beaucoup d' algorithmes de départ différents, allons de l'avant et regardons quelques exemples réels d'algorithmes de tri. Il y a donc beaucoup d'utilisations différentes pour le tri. Les algorithmes sont probablement la chose la plus utilisée dont nous allons parler dans ce cours. Et c'est juste parce que tout ce que nous faisons de nos jours doit être trié d'une manière ou d' une autre, juste à cause de la quantité de données impliquées. L' exemple le plus simple est de regarder un document Excel. Donc, vous voyez que nous l'avons fait. En ce moment, c'est trié à gauche par ici. 123456789 Que voulons-nous trier par les chiffres à droite ? Disons qu'ils sont tous, par exemple, l'argent, et nous voulons le trier par l'argent. Voyez quelle transaction avait le plus d'argent. Eh bien, nous pouvons mettre en évidence tout cela et, vous savez, juste aller trier et filtrer, faire un tri personnalisé et dire, Trier par colonne D, qui est cette colonne juste ici, et on va aller du plus petit au plus grand, et tu verras qu'il le trie comme ça. Maintenant, un algorithme de départ a dû être impliqué pour déterminer où ces nombres devraient aller, puis il a dû donner une liste. Et puis cette liste est représentée dans le document Excel. Maintenant, vous pouvez voir qu'il va le plus petit le plus haut. Et vous pouvez aussi voir si nous revenons juste une seconde qu'il y a un trois avec 7$ un sept avec 7$. Et quand nous allons de l'avant, vous remarquerez que c'est un genre stable car il maintient les trois et les sept dans endroit relatif qui ne les supprime pas ou les désorganise en ce sens. Donc c'est un petit effet secondaire Nate de cet algorithme de tri juste ici. Mais Excel documente vos algorithmes d'histoire tout le temps. Un autre exemple est, chaque fois que vous faites une recherche Google, Google, vous remarquerez qu'il y a, vous savez, ces boutons de tri l'heure passée, par pertinence. Il dit même que le genre par pertinence de tri par date, tous les résultats. Vous pouvez fondamentalement affiner votre filtre, et il va trier par cela et il ne fait pas avancer notre qu'en venant avec une sorte de score similaire pour chaque lien, puis il suffit de le trier par le score le plus élevé au score le plus bas. Et le score est calculé en fonction de ce que vous mettez ici, vous savez, il est classé. C' est des choses extrêmement avancées, et je crois qu'il utilise même, comme, graphiques et des trucs pour créer cela. Mais les bases sont là, le début de notre chambre. Ainsi, par exemple, nous pourrions mettre n'importe quel temps et il le ressource dans une autre liste. Um, si nous revenons aux paramètres ou aux paramètres de recherche, il y a différents paramètres que vous pouvez mettre ici et qu'il passera si vous allez aux outils. Ce sont différents paramètres ici, hum, les principaux étant comme le temps. Et je crois que tu vas à une recherche avancée et que tu cherches des choses différentes à l'intérieur de ça . Mais chaque fois que vous changez cela, suffit de comprendre que si vous utilisez un algorithme de tri d'une manière ou d'une forme pour trier cela afin qu'il sache comment le mettre ici pour vous aussi, Un autre bon exemple est avec tout comme le site d'achat Amazon en particulier comme ces sites de vol ou fondamentalement tout site Web que vous transportez de l'argent sur vos sites de commerce électronique. Ils vont toujours avoir ce tri ici. Par exemple, sur ce simulacre de voyage de Baltimore à Minneapolis, où, vous savez, parfois, vous voulez regarder par le prix le plus bas. Parfois, vous voulez regarder par la date de départ ou la date d'arrivée ou la durée, par exemple, qui était le plus court. Il va recalculer et créer une nouvelle liste. Disons que nous voulons le prix le plus élevé. Quel est le coût le plus élevé ? Affaiblir Dio et vous pouvez voir que c'est ce vol United. Ça change complètement autour. Donc l'algorithme de tri ici, il va prendre chacune de ces entrées. Et comme je l'ai dit, l'autre. Il calcule probablement un score ou utilise un certain paramètre dans ce cas en utilisant le prix, et il trier sur cela, puis renvoie ce genre de liste, puis affiche ce genre de liste pour vous. Donc, le départ est vraiment important sur ce site aussi bien qu'il donne. Il permet à l'utilisateur de trouver l'information qu'il veut, et avec tant d'informations là-bas tri, nos chambres deviennent de plus en plus importantes pour obtenir l'information que nous voulons en tant qu'utilisateurs plus rapidement et plus rapidement sans avoir à creuser à travers des choses qui n'utiliseraient jamais ou que nous qui ne sont pas pertinents pour nous. Donc, les algorithmes de tri, ils sont partout, et ils sont largement utilisés en informatique et dans le monde réel. 40. Les bases de la 6-1 d'arbres: Parlons donc d'un concept. Une structure de données que nous n'avons pas encore abordée. Et c'est l'arbre. Alors, qu'est-ce qu'un arbre ? Comment l'utilisons-nous ? Et pourquoi est-ce utile pour nous ? Ce sont quelques-unes des questions qui répondront tout au long de cette conférence alors que nous dirons dans une introduction à ce que sont les arbres et comment ils fonctionnent. Alors, que sont exactement les arbres ? Quoi ? Nous avons en fait traité quelques arbres,par exemple, par exemple, avec le tri de fusion et le tri rapide. Tu te rappelles quand on regardait leur exécution et qu'on l'a rompu ? Comme si nous avons rompu chaque niveau du temps de course et nous avons fait ce petit arbre juste ici. Eh bien, ici, c'est en fait un arbre. Il a un nœud racine, ce qui est le début même de celui-ci ici. Et puis il a des niveaux. Donc, nous avons, par exemple, niveau 12 puis trois ici, et chaque niveau va avoir un certain nombre d'étapes et puis pour atteindre le niveau suivant, nous allons aller de l'avant et créer des enfants à partir de nos nœuds ici pour descendre au niveau suivant, comme si et alors quoi ? C' est un arbre. Et cela peut également être une structure de données ainsi, qui signifie que affaiblir stocker quelque chose comme ceci. Et nous pouvons l'utiliser pour nous aider à stocker simplement les données afin que nous puissions les trouver plus rapidement ou nous pouvons les utiliser pour la recherche. Ou nous pouvons l'utiliser uniquement pour le stockage général en général. Donc, ce que cela fait et comment cela fonctionne est en fait à travers ce que nous avons appris auparavant, qui est un nœud. Donc tu auras un non au sommet. Disons que celui-ci est huit et il doit sous-nœuds de quatre et quatre, et cela pointe de cette façon et ensuite nous avons des nœuds ici et ça continue comme ça. Et donc ce que nous avons, c'est que cet arbre organisé est construit à partir de nos données. Alors rappelez-vous quand nous parlons de nœuds et nous avons dit que dans une liste liée,par exemple, par exemple, nous avions le précédent, puis le suivant et l'un de ceux pointés de cette façon, un de ceux pointés de cette façon, et puis nous avons eu nous-mêmes essentiellement cette liste liée qui a été construite à partir de ce genre de choses. Eh bien, j'ai dit que tu peux remplir ça ici avec n'importe quoi, et donc quand tu regardes des arbres, c'est exactement ce que tu fais. Vous allez remplir ces pointeurs avec d'autres informations que le précédent et le suivant. Alors, qu'est-ce qu'on peut faire ici ? Ce que nous allons à dio, c'est qu'on va aller de l'avant et montrer, genre, un exemple ici de la façon dont vous pourriez construire ce truc. Donc, par exemple, disons que nous avons un nœud géant ici en haut, et qu'il n'a pas besoin d'être géant, mais il a besoin de suffisamment d'espace pour que je puisse écrire ici. Donc, au lieu d'un précédent, puis le suivant, nous allons nous avoir sur le côté gauche. Ah, à gauche, puis dans le parent moyen et en bas, à droite, comme ainsi et maintenant, sur quoi va pointer la gauche ? Ça va pointer ici. La droite va pointer ici et ensuite sur le dessus. Voici nos données. Peu importe ce qu'on compare ou trie ou quoi que ce soit du genre. Et colorions ça. Colorions le parent d'une couleur différente ici. Allons de l'avant et le colorer en rouge cela aura du sens dans un peu de temps. Et donc ce qu'on va faire c'est qu'on va aller de l'avant et dupliquer ce taux de structure exact ici, et ensuite on va le coller ici. On va exactement la recommencer exactement lamême chose et la déplacer ici. Et donc ce que nous obtenons ici, c'est cette liste. Et au lieu d'être une liste qui est comme ça la liste liée, c'est une liste de noeuds qui pointe en fait dans des directions différentes. n'y a pas de départ, et il n'y a pas de fin ici. Les pointeurs parents qui sont en rouge, vont pointer vers l'endroit d'où il vient, donc il crée une sorte de liste doublement liée. Dans un sens, cependant, cela n'a pas trop de sens pourquoi c'est différent de juste cela. Alors ajoutons un autre niveau. Ajoutons un autre à gauche et à droite ici. Donc nous allons avoir un noeud ici, une note par ici, une juste là, une juste là, puis pointer le vers l'arrière et vous remarquerez quelque chose que cela ne peut plus être un live doublement lié comme nous avons créé dans le passé, parce que vous ne pouvez pas aller d'ici à ici d'une façon qui ait du sens. Par exemple, je devrais aller ici plutôt que de toucher ça une fois. Descendez que touchez ça deux fois, montez, descendez, touchez ça deux fois et descendez. Ce n'est plus une ligne droite. Maintenant, il devient dans cette forme différente, et c'est la forme d'un arbre sur. Ce qui nous permet de faire, c'est de prendre des décisions à l'intérieur de nos programmes et de trier les données en fonction de ces décisions. Et il y a en fait quelque chose appelé l'arbre de décision, qui est où si vous arrivez à ce point, il dira Ok, si vous avez, vous savez, x supérieur à trois, allez à la à l'heure actuelle, si pourquoi est moins que d'aller à gauche et que vous pouvez réellement prendre des décisions basées sur un arbre et le mettre en place comme ça ? Donc, ce que cela nous permet de faire et montrons un exemple de ceci, c'est qu'il nous permet de classer les données et d'obtenir les données beaucoup plus rapidement. Donc, par exemple, dans une liste liée, si vous vouliez accéder au huitième élément, disons que l'élément est ici, vous prendriez que vous devez faire huit étapes à travers le moins. Donc ça ira ici, ici, ici. Et puis vous n'avez pas besoin de continuer à aller à la liste des liens pour la trouver. Ça prend beaucoup de temps avec un arbre. Cependant, si vous connaissez les bonnes idées, alors vous le savez. Disons que votre élément est à deux droits, non ? Droit. Nous sommes ici en deux coups étaient ici. On en a beaucoup parlé avant. Nous sommes ici dans le journal de n mouvements au lieu d'ici, ce qui prend en recherche. Donc, disons que, par exemple, nous classons les animaux. Disons que nous avons des animaux, et ensuite nous allons le classer en trois groupes différents. Nous sommes dans un classer ces animaux en trois groupes différents. Que pourraient donc être ces trois groupes ? Eh bien, je veux dire, on peut vraiment trouver tout ce qu'on veut. Disons ici qu'on a, genre, mammifère, et au milieu, on a quelque chose comme carnivore. Et là, à droite, on a quelque chose comme le primate. Et maintenant, ce que nous pouvons faire, c'est de créer cette liste qui va trouver ces différents animaux. Donc, par exemple, ici, chat peut-être un chien. Je ne sais pas. Peut-être. Ah, requin. C' est un animal qui ne l'est pas. Et puis, mammifère, on pourrait avoir mammifère,on pourrait avoirun écureuil et peut-être comme un rat. Et vous pourriez voir qu'il pourrait y avoir des similitudes ici, donc nous devrions dupliquer. Mais on pense juste à ce gorille primate et peut-être comme un humain. Mais vous pouvez voir qu'il ne s'agit plus d'une liste de données. C' est en fait une classification des données, donc nous pouvons commencer par animal et dire que je veux attraper tous les carnivores et donc nous n'avons qu'à toucher. Nous n'avons qu'à toucher si nous voulons tous les carnivores, cet arbre juste ici. veut dire qu'on n'a pas à le faire. Même si cela a 3000 éléments ici et ici a 2000 éléments. On peut toujours trouver tous les mammifères à temps. Il ne nous faudra qu'un pas, puis deux pas pour trouver tous les animaux ici. Donc, ce que cela fait est comme je l'ai dit, cela nous permet de classer les données, nous permet de diviser les données et nous permet de saisir les données beaucoup plus rapidement. C' est un peu comme les bases de ce que sont les arbres. C' est comme ça qu'ils fonctionnent. C' est ainsi qu'ils vont aux prochaines élections, en parlant vraiment d'un arbre très standard, quelque chose qui est utilisé un peu. Et ça s'appelle un arbre de recherche binaire. Donc c'est vraiment amusant à faire sur. Je vous verrai à la prochaine conférence. 41. Arbre de recherche Binaire 6-2: Parlons donc de quoi, sur les arbres les plus importants de l'informatique, et c'est l'arbre de recherche binaire et les initiales de cette STbr, que vous pouvez voir ici et tout ce qu'ils représentent est juste ça. Quel est l'arbre de recherche binaire. Alors, qu'est-ce qu'un arbre de recherche binaire ? Eh bien, nous allons le décomposer. Allons le décomposer à travers les mots. Nous savons que ce sera binaire, ce qui signifie que vous allez avoir deux options. Tu te souviens des nombres binaires Zéro dans un. Alors quoi ? L' arbre. Vous allez avoir deux options. Ce ne sera pas un arbre avec plusieurs options, comme donc il va juste avoir un simple deux options donc à gauche et la droite définit les parties binaires . C' est la partie binaire. Et puis ce sera un arbre de recherche. Donc, la méthode de recherche est juste en quelque sorte d'énoncer comment cet arbre va être utilisé. Donc nous allons pouvoir avoir un tas de ces noeuds ici et en utilisant cet arbre, affaiblir la recherche et atteindre certains noeuds vraiment, très rapidement, et je vous montrerai un peu plus tard. Et puis, bien sûr, ce sera un arbre. Ce sera donc ce dont nous avons parlé lors de la dernière conférence. Il va sortir des propriétés de l'arbre, donc c'est un arbre de recherche binaire. Alors, comment ça marche exactement ? Eh bien, ce qu'il fait est que chaque noeud ici a deux options. Allez à gauche ou à droite. Et puis chacun de ces nœuds a aussi deux options. Jusqu' à deux options que vous ne pouvez avoir. Vous pouvez avoir une option ou zéro option, mais jusqu'à deux options et tout à droite. Donc, disons que cette note est X. Tout à droite de X va être plus grand que et tout à gauche de X va être inférieur à cela. Ce que ça veut dire, c'est que ce sous-arbre, ce côté gauche juste ici, sera moins que des nombres qui sont inférieurs à X. Et ça à droite va être des nombres qui sont supérieurs à X. Donc ce qu'on peut faire, c'est qu'on peut en fait construire un arbre juste à partir de cela. Allons-y et disons qu'on avait un tas de chiffres ici. Voyons qui avait 15 27 10 11 et 8 ici. Et nous pouvons construire un arbre à partir de ça. Donc, ce que nous faisons est de créer notre première note, notre nœud racine juste ici au début, et nous avons mis dans notre premier numéro de la 15. Ensuite, nous prenons le deuxième numéro, qui est un deux. , Deux,c'est moins de 15. Alors on va à gauche et on met les deux ici. Et puis nous avons un sept. Les sept sont donc moins de 15, mais plus de deux. Donc ça va aller juste ici. Euh, eh bien, mettez les sept juste là. Mettons-le en rouge sept. Et puis on a un 10. Donc c'est moins que plus grand que et puis 11. En fait, nous allons changer ces chiffres à l'arrière. Juste pour que nous ayons, ah, arbre plus équilibré ici. Disons 18 18 et 25. Nous avons donc le 10 dans, et maintenant nous avons un 18 qui est plus grand que nous le mettons à droite ici, et ensuite nous avons un 25 qui est aussi plus grand que cela. Maintenant, nous avons notre arbre de recherche binaire créé et comme vous le voyez, il n'a pas l'air aussi plein qu'un arbre normal. Nous avons ces nœuds qui ont des notes vides. La gauche. Ici, il y en a. Aucun d'entre eux ne sait que celui-là n'a pas d'enfants. Celui-ci ne nous a pas laissés. Il a seulement des droits, mais nous avons créé ici est un arbre que nous pouvons facilement rechercher. Alors jetons un coup d'oeil à ça. Regardons les niveaux ici. C' est donc le niveau principal au sommet. Et puis nous avons le niveau un, niveau deux, puis le niveau inférieur trois. Donc, c'est le niveau technique 012 et trois, et donc nous pouvons voir que le plus long qu'il faudra pour arriver à n'importe quel nœud sera trois niveaux, même si nous avons 123456 informations différentes ici. Et c'est là que les arbres de recherche binaire entrent vraiment en jeu. Parce que, comme nous en avons parlé dans beaucoup d'aspects différents de ce cours, chaque fois que vous mettez des choses dans un arbre ou que vous pourriez casser des choses en deux, nous pouvons obtenir une relation de connexion de lui. Donc, disons que nous voulions rechercher un nombre ou que nous n'avons pas à être des nombres, ils pourraient être des propriétés que nous pourrions chercher et qui sont supérieures au dernier centime. Mais disons que nous voulons chercher la propriété de sept. Eh bien, comment on le trouve ? Tout ce qu'on a à faire, c'est de tracer l'arbre. Nous avons commencé la note et nous regardons sept et nous allons est sept plus grand ou moins que 15 Will sept est moins de 15. Donc, nous allons à cette note. Sept est supérieur ou inférieur à un ? , Sept,c'est plus grand que notre 27, c'est plus grand que deux. Alors on va ici. On en a trouvé sept. Il nous a fallu 12 mouvements pour y arriver. Donc, même s'il y a tout ce genre de séquence de nombres entière, il y avait six numéros ici. Nous n'avons eu qu'à toucher deux des chiffres pour trouver notre numéro. Et nous pouvons chercher tout aussi facilement. Disons qu'il y a une industrie de six ? Eh bien, on y va, on déménage ici. Puis nous avons déménagé pour entendre six, c'est moins de six, c'est plus que six, c'est moins qu'il n'y a rien ici, qui signifie que six n'est pas dans cet arbre. Il nous a fallu au plus trois coups pour y arriver. Donc, ce qui nous donne, c'est la possibilité de commencer à décomposer nos informations pendant la recherche , parce que chaque fois que nous prenons cette décision chaque fois que nous prenons la décision de moins ou de plus que nous coupons le arbre en deux. Théoriquement, nous coupons l'arbre en deux, ce qui signifie que nous sommes nous n'avons pas à tout toucher à droite ou tout à gauche . Et si notre arbre est assez normal, alors nous avons cette affaire où nous allons tout couper en deux et vous obtiendrez ce graphique exponentiel inverse. Et ça, bien sûr, va être journal. Donc, beaucoup de vos opérations sortiront en apparence, en particulier votre opération de recherche. Mais on parlera plus du temps de course dans la prochaine conférence. Et c'est ainsi qu'un arbre de recherche binaire fonctionne fondamentalement. Vous êtes capable d'insérer ces choses dans, et ensuite vous êtes en mesure de les rechercher très, très rapidement pour savoir si vous en avez un dans votre graphique ou non, vous pouvez également en supprimer à peu près en temps constant. Delicious est un peu plus un sujet complexe, donc nous n'allons pas y toucher. Mais si vous supprimez simplement, par exemple, les sept, vous pouvez juste faire monter ce 10 et il conservera les propriétés de recherche binaire. Mais quelles fois ? Si vous êtes comme supprimer ce 15 ici, vous auriez alors besoin de pivoter cela vers le haut vers le haut afin que cela puisse être si les propriétés de recherche binaire sont toujours, um, conservées. Vous pouvez également faire pivoter celui-ci vers le haut, mais vous devez faire plus de rotations. Donc, comme je l'ai dit, c'est un peu plus complexe. Nous allons juste aller avec insert, et nous allons juste regarder seulement l'exécution de suppression. Alors regardons un autre exemple ici. Disons que nous avons Regardons un exemple pire. Donc, c'est là que les arbres de recherche binaires ont échoué juste un peu. Et c'est le pire des cas. Ce n'est pas le cas moyen, donc c'est un peu le pire cas, mais je veux le montrer, et la prochaine conférence parlera de l'exécution derrière cela, mais vous pouvez voir qu'un arbre ne sort pas toujours complètement rempli. Cela vient en fait à une liste liée. Donc si on perçoit des niveaux ici, laisse-moi voir si je ne peux pas faire ça correctement. Donc, nous avons 012345 et puis six ici et vous remarquerez que c'est fondamentalement dans. Si on a commencé ça, l'un des meilleurs ici, qui est juste un peu hors de vous, laissez-moi les glisser sur le toucher. Donc si on commençait ce top un à un, on aurait un problème ici parce que ça ici, ça va toujours être un problème. Ça va toujours sortir à sept et tu remarqueras que ça veut dire que c'est là . Donc, si nous avons une liste triée que nous essayons d'entrer dans un arbre de recherche binaire et que nous n'y appliquons pas de choses supplémentaires, nous allons réellement entrer dans l'opération du sergent parce que maintenant nous avons Teoh. Maintenant, il est juste une liste liée maintenant est juste une liste de nombres qui ont été liés ensemble et il n'y a pas de propriétés spéciales. Il n'y a aucun point où ça va se brancher, et nous allons être en mesure de couper les choses en deux étaient en fait juste de chercher la liste de gauche à droite, et donc ça devient un problème et nous en parlerons dans la prochaine conférence où ça va devenir un gros problème pour notre temps de course aussi. 42. 6-3 Horaires d'exécution BST: Parlons donc des temps d'exécution d'un arbre de recherche binaire maintenant, et il y a quelques temps d'exécution qui sont importants pour les algorithmes de recherche. Je suppose que vous pourriez les appeler nos structures de données de recherche, et cela va être la recherche, insertion et la suppression. Et nous nous soucions vraiment du cas moyen et le pire parce que le cas moyen et le meilleur sont généralement combinés ici. Alors jetons un coup d'oeil à ceux-ci. Commençons par l'algorithme de recherche. Donc, quand nous avions notre arbre binaire juste ici et dans le cas moyen, ça va ressembler à un arbre normal. Ça pourrait, tu sais, avoir un peu comme ça. Mais en général, ça va ressembler à un arbre normal. Et pour cette raison, à chaque décision, nous allons couper l'arbre en deux. C' est comme des petits sous-arbres ici, à droite. Aziz. Eh bien, et à chaque décision, on découpe un des sous-arbres. Donc on coupe toutes les données et la moitié. Donc, si nous avons commencé avec huit après, un serait en bas à quatre que Donna à cela, nous avons notre réponse vers le bas orteil un, et nous avons passé cet exemple quelques fois et qui sort toujours le journal des orteils juste parce que de toute cette nature de couper tout en deux. Et donc, avec la recherche, vous allez obtenir l'heure exacte. Le temps moyen finira par être pour le temps moyen ici, le temps moyen finira par être, oh, journal de fin. Et c'est juste à cause de la façon dont nous cherchons ce truc. Et on descend la liste. On prend des décisions. Est-il inférieur à ce qui est un plus grand que dans chaque fois que nous le coupons en deux. Donc, en moyenne, ça devrait ressembler à quelque chose. Cet arbre devrait ressembler à ça. Et nous obtenons ce journal en sorte de relation où nous pourrions avoir 16 articles ici, mais seulement quatre niveaux dans l'arbre. Donc le maximum que nous aurions à aller est de quatre niveaux. Maintenant, regardons le pire des cas et nous sommes passés. Le pire des cas est un peu dans la dernière conférence, et c'est si vous avez une ligne droite. Donc, si vous insérez quelque chose qui est déjà trié et que vous obtenez cette ligne droite, vous pourriez même en avoir un ici. Combattez. La majorité continue. Et c'est comme une liste liée. C' est comme si vous allez tout droit vers le bas de la liste liée et chaque décision que vous supprimez seulement une que vous ne supprimez pas la moitié du possible sait que vous pouvez toucher. Vous n'en retirez qu'un. Et donc à chaque fois, si votre seul bouge, ça veut dire que vous ne descendez que mon en moins un en moins un en moins un. Vous savez, constamment, ce qui veut dire que ça va prendre du temps pour traverser cette chose parce que nous avons au lieu de ces quatre niveaux, nous avons 1234567 niveaux. Donc c'est très proche de l'intérieur. Et ça veut dire que ça va être notre pire cas. Rappelez-vous que c'est si nos données ont déjà été triées donc comme 1 à 5 pour six 789 Donc nous avons quelque chose qui a été principalement trié. N' importe quel cheveu de Allons, nous nous trouvons une ligne droite, et cela nous donne notre mauvais ou notre pire temps de oh jusqu'à la fin. Maintenant, cela peut être amélioré. Il y a quelque chose qui s'appelle un A V l et un arbre noir rouge. Et ce qu'ils font, c'est qu'ils colorient réellement les nœuds, et chaque fois que vous arrivez à un certain point où vous avez quelque chose qui est très lourdement pondéré, cela prendra. Et il va faire pivoter ça vers le haut, puis prendre ces notes et les mettre à gauche pour s' assurer que vous avez cet arbre. Mais ce sont en fait des procédures très complexes parce qu'il faut beaucoup de variables différentes, de peinture et d'autres choses comme ça pour garder une trace de lui. Donc, sachez juste qu'ils sont là-bas, et peut-être que dans un cours plus avancé, nous irons sur quelque chose comme ça. Donc, le suivant est insert, et vous devez penser à insert comme exactement le même que celui-ci ici. Et nettoyons certaines de ces lignes. C' est nettoyer certaines de ces lignes ici, et donc ce que l'insert fait est insert. Tout ce qu'il fait est de trouver l'endroit où un nœud devrait aller. Donc, par exemple, si nous avions nous-mêmes un nœud qui voulait être comme, disons que sa destination finale était juste ici, c'était juste ici. Eh bien, ça va être tout ce que ça va prendre le sien va être que tu vas insérer le nombre est plus grand que moins alors. Il n'a fallu que trois opérations pour arriver ici, même si nous avons quelque chose comme neuf numéros ici. Et donc tout comme la recherche, ce sera exactement le même algorithme pour trouver où il devrait aller. Vous allez tout couper en deux à chaque fois que nous allons vous trouver un meilleur cas ou un cas moyen de O jusqu'à la fin, ou vous connecter dans mon dos Oh, à la connexion. Et comme dans le pire des cas, si nous avons une ligne droite et que nous avons besoin d'insérer, est-ce que les inserts vont arriver à un log de N ou à un juste un régulier dans un temps linéaire ? Parce que nos pires cas qui ont été insérés à la fin de cette liste ici constamment et nous faisons juste une ligne droite plus longue et plus longue. Donc, notre pire cas va également être à la fin, et si vous pouvez le deviner, la suppression va être exactement la même parce que la seule opération non constante est de trouver le savoir que nous voulons supprimer et de trouver la note que nous veulent supprimer si nous avons un arbre moyen ici est exactement comme les deux autres opérations moins que accord, nous avons trouvé la note à supprimer. L' opération de suppression réelle est un peu complexe, mais c'est un temps constant car c'est exactement la même chose à chaque fois et fondamentalement en quoi elle se décompose. Est-ce que la note a zéro enfants ? Est-ce qu'il a un enfant ou pour couper les enfants ? Donc, vous avez juste trois décisions, et il exécute juste chaque algorithme en fonction du nombre d'enfants ont pour qu'il puisse prendre. Tu sais, peut-être que celui-là fait huit pas, il fait quatre pas, et celui-là fait zéro pas ou quoi que ce soit. Mais ça n'a pas d'importance, car ce sont des temps constants. Il faudra toujours 84 et zéro ou quoi que ce soit ces chiffres sortent pour être. Ce qui compte, c'est combien de temps cela prend. En fait, arrivez à la note que nous voulons supprimer, et cela va toujours être connecté dans un cas moyen moyen. Et puis vous pouvez penser à l'exemple en ligne droite à nouveau. Si nous voulions supprimer un nœud. Ça pourrait être à la toute fin de cette liste ici. Et donc le cas se révèle être un journal de fin ou linéaire. Je n'arrête pas de dire journal, mais je veux dire linéaire. Ça va devenir juste parce que tu dois traverser tout cet arbre pour arriver ici. Vous ne coupez rien et 1/2 vous allez littéralement comme si c'était une liste liée. Et donc notre dernier temps d'exécution ici n'est pas dans, et donc c'est ce qu'un arbre de recherche binaire nous donne. Vous pouvez voir qu'il a quelques faiblesses dans le pire des cas, mais c'est le cas, mais c'est le cas moyen est en fait assez bon. Nous avons limité insérer supprimer dans la loi le temps donné, qui est l'un des meilleurs moments que nous pouvons toucher. Le journal est fondamentalement constant parce que la constante serait quelque part juste ici, et puis votre journal va apparaître, donc il va apparaître et puis il va se stabiliser. Ça va presque devenir constant avec le temps, donc tu vas juste avoir ce petit écart. Mais pour le reste jusqu'à l'infini, ces deux-là vont être essentiellement parallèles, donc c'est un temps presque constant, ce qui est génial, surtout vous essayez de mettre des chiffres et ensuite, vous savez, le chercher constamment. Vous voudriez un algorithme comme celui-ci afin que vous puissiez rechercher constamment et avoir ces heures de connexion . Et puis vous pourriez, bien sûr, implémenter certains de ces arbres de recherche binaires plus avancés comme l'aviall et l' arbre noir rouge , et obtenir ces bas toe connexion aussi bien. Mais ce sont les temps d'exécution de l'arbre de recherche binaire. 43. Traverses de 6 ou 4 arbres: Parlons maintenant de la traversée de l'arbre ALS. Donc, chaque fois que vous avez un arbre, il y a un tas de façons différentes que vous pouvez traverser la rue pour l'imprimer en quatre. Donc, par exemple, si nous avions cet arbre juste ici, si nous avions cet arbre, comment pouvons-nous l'imprimer comme une chaîne ? On pourrait l'imprimer. Peut-être par niveau. C' est ce qu'on appelle les ordres de niveau. Où tu vas. 2010 15 5 13 23 7 24 six et huit. On va juste à chaque niveau sur cet arbre. On pourrait l'imprimer en regardant d'abord le sous-arbre gauche, puis le sous-sol moyen le sous-arbre droit. On pourrait aller de haut en bas. Il y a un tas de différentes façons d'imprimer ceci, et il y a en fait un tas de terminologie différente pour le faire, et c'est la terminologie de l'inversion de traitement. Donc, ce que nous avons, c'est que nous avons un afin de survendre ah traverse pré-commande loin, puis un post order traverse ALS et ce que sont les différentes façons de traverser un arbre afin que l'on puisse l'imprimer dans un flux. Et comment ils fonctionnent. L' ordre dans est quelque chose appelé à gauche, puis route et puis à droite tandis que la pré commande est route. Puis à gauche puis à droite ? Et puis l'ordre de poste est à gauche route droite. Donc je sais que ça n'a aucun sens tout de suite. Mais fondamentalement ce que cela dit est que si nous avions un noeud ici, si nous avions un petit arbre qui va juste ici, ce que nous faisons dans l'ordre c'est que nous prenons à gauche un arbre d'abord, puis la route, puis la droite. Donc, nous prenons ce serait notre premier numéro et ensuite nous irons dans la racine. Donc on remonte, on prend ce numéro, puis on prend ce numéro et on remonte tout le chemin. On prend ce numéro et on va dans ce sous-arbre. Retournez à gauche pour entendre en bas, non ? Et puis la pré-commande nous prendrions ce numéro et puis nous irons ici, nous prenons ce numéro et puis nous allons ici, nous prenons ce numéro, et puis nous prendrions le bon sous-arbre pour aller à droite et donc nous allons en fait un exemple, parce que je pense que cela fera un peu plus puisque donc commençons par un afin d'inverser dans l'ordre. Traversez ALS. Alors quoi ? C' est ce qu'un afin de survendre est il est la route gauche, non ? Donc c'est le cas. On peut juste mettre quelque chose ici, on va à gauche et à droite. Donc ce qu'on veut faire, c'est qu'on va d'abord au sous-arbre gauche, et ensuite on va aller jusqu'à ce qu'il ne trouve plus le reste, quelques arbres. Ensuite, nous allons aller à la racine, puis nous allons à droite, alors allons à gauche. Donc nous commençons par une racine ici et nous allons à gauche. Un arbre. Eh bien, est-ce que ça a un pays gauche ? C' est le cas. Alors on va à ce sous-arbre gauche. Est-ce qu'il y a un siècle dernier ? Ce n'est pas le cas. Donc il n'y a plus d'arbre ici, ça veut dire qu'on peut sortir à gauche ici. On va y aller, et maintenant on va prendre la racine de tout ça. Donc nous allons écrire un cinq, puis nous allons aller à l'arbre de droite et nous allons appliquer à nouveau l'algorithme . Nous allons à gauche, et il n'y a rien dans la gauche, droite ou la route. Donc, ce que nous faisons, c'est de prendre la route, qui est la période de six ans, et nous l'écrivons. On pourrait mettre une virgule entre les genoux. Donc maintenant, nous avons maintenant celle-là fait. Eh bien, on va remonter dans l'algorithme. Et comme nous avons déjà regardé le sous-arbre gauche, nous pouvons maintenant regarder la racine, qui va être ce sept. Donc nous écrivons ce sept, et ensuite nous pouvons aller à l'arbre de fils droit. Maintenant, c'est quoi ce huit là-bas ? Donc, ce que nous faisons, c'est que nous appliquons cet algorithme à chaque étape jusqu'à ce que nous ne puissions pas l'appliquer . Et puis nous collectons juste les données à ce moment-là pour que nous ayons exploré le bon sous-arbre pour que vous ayez le dernier du genre de liste. Ici, nous remontons, et nous avons déjà exploré la route. Donc nous remontons, et maintenant le côté droit de ces cinq est terminé. Donc nous remontons parce que maintenant cela signifie 10 le sous-arbre gauche de 10 est maintenant accompli. Donc maintenant, nous pouvons regarder la racine pour celui-ci afin que nous puissions mettre un 10 vers le bas et ensuite vous remarquerez que le prochain numéro que nous devons faire pour que nous ayons le sous-arbre gauche fait. Nous avons fait la route. Donc maintenant, nous devons faire le bon sujet, qui est un 13. Et si vous voyez un modèle par ici, vous voyez un modèle par ici. C' est ce que c'est. Et c'est pour ça qu'on l'appelle dans l'ordre. On en parlera dans une seconde. Alors revenons en arrière. Tout ça, c'est fini. La droite gauche et l'itinéraire sont terminés. Donc maintenant, nous remontons à 20 a maintenant tout le sous-arbre gauche fait donc il peut maintenant mettre son propre numéro dans son numéro de route et ensuite nous avons le sous-arbre droit. Donc maintenant, nous sauterons ici dans le sous-arbre droit et l'arbre de fils droit a un élément gauche qui est 23. Donc on va prendre le taux de 23 ici, et on va en fait aller à Ouais, attrape le 23 juste ici. Et c'est ainsi que nous avons exploré le sous-arbre gauche invisible. Il n'y avait rien là-bas. Alors nous sommes allés à la route. Nous prenons le 23 puis nous sommes allés à droite à la 24. Rien dans la gauche. Donc, nous avons attrapé la racine de la 24 Ici, explorez-le. Va à droite. Il n'y a rien. Donc maintenant ceci est accompli Nous arrivons, ce sous-arbre droit est maintenant accompli. Alors nous montons. Cette sous-arborescence gauche est maintenant accomplie. Maintenant, on peut prendre la route et on en a 25. Et si vous remarquez quelque chose si vous remarquez quelque chose ici, ce que nous avons obtenu c'est que nous avons le dans ordre traverser un amour cet arbre et il aussi le dans l'ordre traverse beaucoup de ceci des nombres. Donc ce que c'était ici, c'est un arbre de recherche binaire. Si vous remarquez tout à gauche a laissé moins. Tout à droite est plus mais à cause de cela, chaque fois que nous appliquons afin d'y revenir, nous obtenons effectivement la représentation dans l'ordre de l'arbre qui sort de la 56789 10 . Il sort dans l'ordre croissant. Et c'est juste à cause de la façon dont cela fonctionne. On explorait le moins que le premier. Et puis on prend ceux du milieu, et ensuite on va au plus grand que le suivant. Donc sont explorer moins de milieu plus grand que et qui fait sortir à ce global. Ce n'est pas la seule traversée dont on a parlé. Nous avons également une inversion pré-commandée. Alors faisons-le maintenant sur ce sujet. Donc nous avons eu une pré-commande et la pré-commande va être route à gauche, non ? Donc ça va être génial à gauche, non ? Donc ça veut dire que ce qu'on va faire c'est qu'on va faire exactement la même chose sauf le faire légèrement différemment. Donc, nous avons pris la route pour tout droit hors de la chauve-souris. On va juste prendre la route, l' écrire 20. Maintenant, nous explorons le sous-arbre gauche. Donc nous sommes maintenant dans le pays de gauche et ensuite nous appliquons cet algorithme à cela. Donc, nous explorons la route à droite la racine vers le bas, puis allons dans le sous-arbre gauche. Nous explorons la route, écrivons cela et explorons ensuite le sous-arbre gauche. Il n'y a rien là-bas. Alors nous explorons ensuite le bon siècle. Nous écrivons la route, puis explorons la gauche puis la droite. Donc, la gauche sera notre six. Le droit va être un huit, et ensuite on en a fini avec facilité. Donc on monte, ce qui veut dire qu'on a fini avec le droit. Donc on en a fini avec ça. On monte, on en a fini, moins il y a d'arbres. Et j'irais au sous-arbre droit, qui est le 13 ici. Et maintenant on en a fini avec ça. Il y a la route, la gauche et la droite explorées. Alors on remonte. Cela a maintenant la racine et la gauche explorés. Donc, nous allons à droite, nous écrivons ce numéro, puis nous allons à gauche, qui est ce 23. Mais c'est aussi une route, donc on va écrire ça. Et maintenant, nous sommes là. Nous avons exploré la route. Il ne reste plus rien. Nous explorons le prochain, qui est le 24. Et puis nous explorons le 25. Enfin, nous sommes non, non, nous explorons vous permet. Nous avons donc exploré le droit. On y va. Sauvegardez. Nous avons déjà exploré la route. On remonte. On a déjà exploré ça. On remonte. On a déjà exploré ça. Donc, c'est notre dernière traversée de pré-commande loin de sorte que vous pouvez remarquer que le traversable est sorti différemment et qu'avec une chirurgie binaire, il n'y a pas de véritable modèle dans ce. Mais c'est une autre façon de le traverser. Et vous pouvez réellement combiner traversée als. Donc, dans l'ordre et une pré-commande, vous pouvez les combiner pour recréer un arbre généralement besoin d'au moins deux. Mais c'est juste une autre façon de traverser l'arbre, et vous pouvez voir que les nombres ne peuvent pas complètement différents. façon de traverser l'arbre, Celui-ci est entré en ordre, et celui-ci est sorti. Euh, fondamentalement, complètement hors presque identique, genre, complètement différent. Et c'est le vaccin que nous pouvons explorer est le post-commande. Donc l'ordre de poste est à gauche, à droite, puis l'itinéraire. Donc, il est à gauche puis à droite ? Et ensuite la route. Alors quoi ? Nous le faisons à la poste comme nous allons aller à gauche, à gauche, gauche, exploré, à droite, puis à gauche. Donc six va être notre premier numéro, et ensuite on va le faire. Donc, nous avons exploré la gauche. On a exploré la gauche. Et maintenant, nous allons explorer la droite. Donc le huit, et puis nous allons explorer la route, qui est le sept. Alors on est partis à gauche, non ? Et puis la racine et une heure de retour ici et nous avons exploré la gauche. Nous avons exploré la droite. Et maintenant, nous pouvons écrire les cinq ici, nous revenons au 10 et maintenant nous avons exploré la gauche. Alors explorons le droit, qui est le 13 ici. Et c'est tout ce qu'il y a ici. Et puis nous allons explorer la route, qui est le Ted. Et donc nous avons exploré les 10. On remonte les 20, on a exploré le sous-arbre gauche. Maintenant, nous explorons le bon sous-arbre. Accédez à ce nœud. Nous explorons la gauche, arrivons à cette note. Nous explorons le bon d'abord et nous avons tout exploré. Ici, nous revenons. On a exploré la gauche. Nous avons exploré la droite. Alors maintenant, on peut attraper les 23. Revenez au 25 ou au 23. Donc, nous avons exploré la gauche. On a exploré, c'est vrai, on a exploré la route. Alors maintenant, c'est fait. Nous remontons, les 25 explorés à gauche que nous avons explorés, à droite. Il n'y a rien ici. Alors maintenant, nous prenons la route, qui est le 25 nous allons au sommet, qui est 20. On a exploré la gauche. Nous avons exploré le maintenant nous prenons la route et nous avons nous-mêmes un 20 ici aussi . Et puis vous pouvez voir que c'est encore différent de celui-ci aussi. n'y a pas de véritable type de modèle à ces deux qui sera au moins un motif aussi perceptible que le modèle dans l'ordre avec un arbre de recherche binaire. Cependant, ils sont différents inverses il différentes façons de regarder ce graphique dans leurs différentes façons de les écrire comme une chaîne. Donc, c'est traiter les inversions. Ce ne sont que quelques-unes de la traversée ALS. Une autre traversée. Tout ce que vous pourriez rapidement dio, c'est ce que nous avons fait comme un exemple du début, et c'est ce qu'on appelle ordre de niveau. C' est appelé ordre de niveau, et tout ordre de niveau est juste de prendre littéralement les niveaux de la je veux dire, faisons effectivement cela. Allons-y. Si on voulait juste un ordre de niveau à celui-ci. On pourrait. Donc, disons que nous séparons cette fin de ses niveaux comme ça et que cela devient un peu délicat. Vous devez vous assurer qu'ils sont tous au bon niveau ici, comme ça. Ok, sorte que ce sont donc alors vous allez juste soit de haut en bas ou de bas en haut, selon la façon dont vous voulez le faire. Mais d'habitude, c'est de haut en bas. Nous avons donc notre premier niveau à 20. Ensuite, nous avons 10 25 puis 5 13 23 et puis sept, 24 six et huit. Et donc vous pouvez voir que même s'ils sont de différents côtés de l'arbre ici, ils sont toujours au même niveau. Et donc cela vous donne cet ordre de niveau, traversez beaucoup de l'arbre. Mais si vous remarquez que c'est difficile de savoir ce qu'était cet arbre une fois que vous l'avez mis ici parce que nous ne savons pas combien. Si c'était un arbre plein, ce qui signifie qu'il y avait toujours après il y avait toujours deux enfants, ce serait facile à reconstruire en un arbre. Mais si vous ne savez pas que vous ne savez pas quels sont les niveaux qui, et cela devient un peu difficile. C' est pourquoi, généralement pour les combiner pour reconstruire un arbre. Mais ce sont les traversées d'un arbre, juste différentes façons de regarder un arbre et de l'écrire comme une chaîne. Différentes façons de diversifier ont des propriétés différentes. 44. 6 ou 5 exemples de monde réel: Alors maintenant que nous avons une bonne compréhension des arbres, faisons ce que nous avons fait dans toutes les autres sections et passons en revue quelques exemples concrets de l'endroit où nous aurions pu voir des arbres et de l'action. Le premier exemple est commun, et il s'agit d'un répertoire. Donc, tout système d'exploitation que vous visualisez a eu une sorte de système de fichiers pour parcourir les fichiers dans, um, ordinateur lui-même ou dans le disque dur. Donc, fondamentalement, comment cela fonctionne est que vous avez un répertoire racine, puis il a des sous-répertoires plus de sous-répertoires, et à un moment donné vous arrivez à des fichiers et liez tous ceux-ci ensemble. Vous pouvez créer des programmes et vous pouvez ouvrir des images et des choses comme ça. Mais tout est lié comme un arbre. Vous avez le 1er 1 Chaque fois que vous cliquez sur le suivant, il va de plus en plus loin. Ainsi, par exemple, vous pouvez voir sur cette instance d'Android Studio que j'ai sur mon ordinateur. Je peux aller dans ce dossier pour aller dans un autre fichier. Continuez à descendre la liste jusqu'à ce que je trouve un fichier réel qui pourrait être exécuté quelque part ici, et vous remarquerez que l'arbre est gardé ici et ensuite je pourrais revenir en arrière en remontant l'arbre. Donc, quand je clique sur le bouton de retour, j'ai sauté dans un répertoire. Il les répertorie tous et je retourne vers le bas le répertoire ici. Donc, un arbre nous permet de construire l'accès à ces données vraiment, vraiment rapidement, et de pouvoir les avoir dans un format où nous pouvons facilement les comprendre, la prochaine utilisation de celui-ci est avec l'indexation de base de données. Maintenant, c'est un peu plus un côté avancé des choses. C' est en fait un arbre B juste ici. Et fondamentalement, comment cela fonctionne, c'est qu'il crée un arbre très plat, donc il n'a plus vraiment de couches en trois ou quatre. Mais il sépare la base de données entière dans ce genre d'arbre condensé, et il permet juste un temps d'accès décemment rapide sur n'importe quelle entrée. Le sinon devrait passer par une liste entière pour essayer de les trouver. Et vous ne pouvez pas faire un tableau qui fait des millions et des millions et des millions de lignes. Cela ne fonctionne pas parce que vous auriez probablement besoin de plusieurs disques durs, ce qui signifie que vous allez vous rencontrer pour aller à plusieurs endroits pour garder toutes ces données. Donc, à cause de cela, parce que nous ne pouvons pas utiliser un tableau en raison de la taille gigantesque donnée, il finit généralement par être une forme d'une liste liée, qui vient ensuite sous une forme d'arbre afin que nous puissions tout garder ensemble et que nous pouvons accéder à l'information très rapidement tout au long de la base de données et vous remarquerez qu'un arbre comme je l'ai parlé dans cette section, c'est un élément très rapide parce que tout au plus devra passer par peut-être quatre. Et puis, cependant, beaucoup d'entre eux sont si, par exemple, serait 12 et puis au plus deux autres mouvements par ici. Donc, même avec 55 entrées ou probablement plus près de 20 entrées, nous n'avons qu'à aller peut-être trois ou quatre pour arriver à n'importe quel endroit dans la base de données. Il accélère juste au moment. C' est ce qu'on peut y accéder en temps quasi réel. Un autre est, ah, quelque chose d'intéressant, et c'est avec des arbres de décision. Donc, les arbres de décision sont des choses qui guident fondamentalement le programme, en fonction de l'entrée qui a été donnée, donc beaucoup d'apprentissage automatique utilisera réellement les arbres de décision et le fait qu'il apprendra quelque chose sur les essais répétés et les erreurs, puis trier de construire un arbre de ce qu'il devrait faire ensuite. Et vous pourriez voir certains de ces trucs ici comme ceci sont juste des nombres aléatoires et, comme si et le vôtre, aller et venir et tout essayer de le trouver. Mais par exemple, un jeu vidéo pourrait faire quelque chose de similaire. Disons que vous, ah, ah, il y a des jeux vidéo comme plusieurs terminaisons à la fin. Selon ce que vous avez fait tout au long du jeu, il pourrait avoir un arbre de décision qui sorte d'ajouter quelques choses ensemble et détermine quelle fin il devrait vous donner. C' est quelque chose qui pourrait être utilisé là-bas. Ceci est un exemple de tic-tack toe ici, juste un arbre de décision de la façon dont un ah, ordinateur pourrait jouer tic-tack, orteil, décider vers le bas, um, jeux d' échecs ont souvent si vous avez un poitrine comme l'ordinateur qui essaie de battre d'autres personnes comme elle. Ah, l'ordinateur qui joue aux échecs. Habituellement, il a une décision. L' arbre de celui-ci calcule un à partir de l'endroit où il se trouve actuellement. Disons que c'est en mouvement 12. Il va calculer les mouvements 13 14 et 15, puis prendre la meilleure décision pour lui-même d'essayer d'arriver à une très bonne position en mouvement 15 choses. Des trucs comme vous le remarquez vont, un peu exponentiels. Donc, si nous voulions passer une autre couche vers le bas, il serait de plus en plus grand, surtout avec un programme comme les échecs. Donc, il crée un arbre condensé, puis réajuster l'arbre à chaque fois. Mais les arbres de décision sont souvent utilisés dans beaucoup de choses gagnantes et beaucoup d' applications du monde réel où le programme doit penser sur lui-même. C' est donc une sorte d'utilisation des arbres. Ils sont utilisés partout, et ils sont parfaits pour accéder rapidement aux données et organiser les données à donner aux programmes pour prendre des décisions. Ils sont une grande structure de données, et ils sont largement utilisés 45. Timing - Préparation du projet: Voici un petit problème amusant que j'ai rencontré lors du revêtement qui va vraiment vous montrer extraits de code qui sont parfaitement bons extraits de code que vous pourriez trouver un code réel et les ramifications si vous utilisez le mauvais un temps sage que ISS. Alors voici le problème ici. Ce que nous essayons de faire est juste de trouver la valeur maximale d'un tableau. Donc, nous avons un tableau, vous savez, peut-être qu'il y a des milliers d'éléments dedans, et ce que nous essayons de faire, c'est que nous essayons de trouver les valeurs max à Peut-être cinq est nos valeurs Max qui voulaient voir dans tout ce tableau ? Quel est le plus grand nombre ici ? Et c'est aussi le même problème. Si nous essayons de trouver les hommes ici, nous avons cette idée à gauche, qui semble plutôt bien. C' est un très, vous savez, court dans l'extrait de code ponctuel. C' est Far Max est égal à tableau, donc nous prenons notre tri de points de rayons afin de le trier point pop. Donc, nous prenons le premier élément de l'avant du tableau. Eh bien, si c'est trié et que nous supposons que le tri va du plus grand au plus petit, alors nous avons le Si nous venons de sortir de l'élément avant comme, disons cette petite chose ici Nous sommes allés tête et triés et ça s'est passé comme ça , point, point, point, point zéro. Et maintenant tout ce qu'on fait c'est qu'on sort juste du premier élément ici, et ça va être notre maximum, vraiment court, doux au point. Ensuite, nous avons une approche légèrement plus encombrante ici, où nous créons une variable appelée Max. Nous parcourons ensuite le tableau, et chaque fois qu'une valeur est supérieure à Max, nous définissons Max à cette valeur plus grande. Et donc, la fin du tableau, chaque fois que nous arrivons à la fin du rayon, qui va à l'ensemble je veux toucher chaque élément, nous allons alors avoir la valeur maximale, parce que chaque fois que quelque chose était plus grand, nous sommes allés de l'avant et l'avons touché, et donc le cela reviendrait Max égale à cinq, donc tous les deux accomplir le même problème. Mais quelles sont lesramifications temporelles de ces deux ? Mais quelles sont les Quels extraits de code plus rapides et pourquoi ? Si vous ne savez pas si c'est un problème intéressant positivité. On pense à ça pendant une seconde. Lequel d'entre eux va être plus rapide ? Pensez à toutes les connaissances que nous avons tirées de tous les différents algorithmes et essayez de trouver une réponse à cela. Alors j'espère que vous arrêtez la vidéo et que vous l'avez trouvée tout seul. Mais sinon, je suis là pour vous aider. Voici la chose qui a vraiment ce problème. C' est le genre ici. Ce problème. Tu te souviens quand on a parlé d'algorithmes de tri ? Les algorithmes de tri ont quel minimum sur eux ils n'ont pas dans le minimum de connexion pour le tri de comparaison . Cela signifie que ce sera la signature de synchronisation minimale pour effectuer cette opération. Par ici. Nous devons d'abord trier le tableau, puis nous sortons de l'élément. Le pop est fini avec un parce que c'est une constante, il accède juste au premier élément de la droite. Donc nous n'avons même pas besoin d'examiner ça. Ce que nous regardons, c'est que nous prêtons. Regarde par ici. Et quelle est la signature de ce testament ? Tout ce que nous avons à faire est de toucher chaque élément. Une fois, on a juste besoin de tout regarder. Et si elle est plus grande, nous effectuons juste une opération constante pour définir notre variable max sur ce tableau plus grand. Par conséquent, ce côté de l'équation est juste dans, et maintenant nous pouvons voir la différence ici. Cela va être beaucoup plus rapide dans des scénarios plus importants. Et je dis beaucoup plus vite. Vous verrez dans une seconde quand nous allons sur le moment de mettre ceci à un exemple du monde réel, ce n'est pas, vous savez, est mauvais est comme dans carré ou ou dans le troisième ou dans factoriel ou quelque chose comme ça. Ce ne sera pas une de ces situations où vous savez que le soleil brûle ou quelque chose comme ça. Mais ce sera une inefficacité qui peut s'accumuler au fil du temps et s'assurer que le programme, Ah, beaucoup moins évolutif. Jetons un coup d'oeil à ça. Donc, sur le côté gauche ici, nous avons notre loi à nouveau en cours d'exécution, et nous disons dans cette situation que dans va être égal à quelque chose de tout à fait raisonnable à nouveau, si nous utilisons Facebook ou pour utiliser les pages sur, par exemple, CNN comment les différents articles qu'il y a 100 000 n'est pas si mauvais 100 000 est assez typique du monde d'aujourd'hui, et sont donc ici équivaut à 100 000. Que faire si chaque opération prenait 0,1 millisecondes, ce qui est très, très rapide et semble juste pour beaucoup de timing ? Ah, beaucoup d'opérations qui seraient à peu près juste pour combien de temps ça devrait prendre. Eh bien, dans ce ici, ce qu'on a c'est qu'on a un raid sur les points pop, donc ça va être une connexion, ce qui veut dire que ça va être 100 000 fois basé sur le journal. Et rappelez-vous quand ils sont dans ce cours, si le journal n'a pas de base, c'est aussi parce que c'est ainsi que les ordinateurs fonctionnent. Donc c'est basé sur la loi deux sur 100 000 qui nous donne 100 000 bûches basées sur deux sur 100 000 à 16.6. Si vous voulez voir cela, juste la base de journal Google à la calculatrice et vous pouvez mettre ce nombre dans et vous verrez que 16.6 est le résultat de cela. Et ce que nous obtenons quand nous multiplions ces deux ensemble, c'est que nous obtenons 1,66 million d'opérations. Maintenant, nous postulons. Notre timing est un pistolet 2,1 millisecondes. Chacune de ces opérations, nous obtenons 16 600 millisecondes, ce qui équivaut à 16,6 secondes. Imaginez que vous êtes sur un appareil mobile et que cette opération, ce que nous essayons de faire, c'est que nous avons, comme, une requête de recherche et que nous voulons trouver le meilleur dans une requête de recherche. Pourquoi serait entré dans ça ? Puissions-nous avoir un algorithme qui attribue un score combien il est pertinent pour notre recherche. Nous avons donc maintenant une gamme de 100 000 articles, et nous avons juste besoin de choisir le meilleur pour montrer notre utilisateur sur notre application. , ce faire,nous avons besoin d'un maximum. Nous devons savoir quelle valeur l'article est revenu avec le score maximum pour la requête. Donc on fait juste un Max pour y arriver. Eh bien, dans cette situation, chaque fois que vous cliquez sur le bouton, ça va prendre 16,6 secondes pour récupérer cette requête. Imaginez attendre sur une application pendant 16,6 secondes. Imaginez aller sur Google et chercher quelque chose et attendre 16 secondes pour le faire. Je veux dire, un Mississippi, deux Mississippi, trois, Mississippi, jusqu'à 16 pour obtenir votre requête de recherche maintenant sur le côté droit ici parce que nous avons utilisé cette version de Max, nous avons maintenant juste à 100 000, ce qui n'est pas opérationnel, donc équivaut à 100 000. Donc équivaut à 100 000. Facile, facile, facile. Ensuite, nous prenons les 100 000 et nous le multiplions par 0,1 millisecondes et nous obtenons 1000 millisecondes, ce qui est juste une seconde. C' est tout à fait raisonnable. C' est en fait assez rapide pour beaucoup de termes d'aujourd'hui. Vous allez sur Google maintenant et vous cherchez quelque chose. Cela prendra probablement environ une seconde ou deux pour cela, toutes ces informations à venir, et maintenant vous pouvez voir l'évolutivité. Celui-ci écaille beaucoup plus que celui-ci. Celui-ci ressemble à un bon morceau de code. Si elle est condensée, je peux le lire et comprendre exactement ce qui se passe. Mais dans cette situation, c'est en fait une inefficacité qui nous coûtera beaucoup de temps à long terme. Donc juste un petit exemple amusant ici qui vous montre des extraits de code et comment un simple changement peut réellement accélérer votre programme beaucoup. Savoir quoi ? La signature de chronométrage de quelque chose comme point sort est d'accélérer votre programme, rendre beaucoup plus efficace et de rendre l'utilisateur final Ah, beaucoup plus heureux.