DAVID Malan: Très bien.
C'est donc CS50, et c'est maintenant le début de la troisième semaine.
>> Donc, jusqu'à présent, nous avons été d'écrire des programmes en C
qui ressemble un peu quelque chose comme ça ici.
Donc, nous avons un couple de forte comprend au sommet.
Nous avons int, principale, vide, et alors quelque chose à faire dans le milieu,
certains peu de code à l'intérieur de cette fonction.
Mais la clé a été le fait que nous disons depuis le vide ici.
Donc vide, tout ce temps, précise que ce programme, lorsqu'il est exécuté,
ne pouvant être exécutée via son nom.
Vous ne pouvez pas saisir d'autres mots ou chiffres qui suivent le nom du programme quand
l'exécuter.
Ainsi, par exemple, si le programme était compilé dans un fichier appelé bonjour,
vous pourriez faire ./hello, mais c'est tout.
>> La seule façon que vous pourriez apporter une contribution à ce programme
est en appelant une fonction.
Par exemple, quelle est la fonction avons-nous eu recours jusqu'à présent
d'obtenir les commentaires de l'utilisateur?
>> PUBLIC: Obtenir chaîne.
DAVID Malan: Pour obtenir une chaîne ou obtenir int, ou vous avez vu d'autres,
même si vous ne les avez pas encore utilisé, comme être longue, longue, etc.
Mais supposons que nous voulez réellement commencer
l'écriture de programmes qui sont un peu plus polyvalent, et, franchement, un peu plus
comme les commandes que vous avez été faire, nous l'espérons,
un peu habitué.
Comme cd espace Dropbox.
Ceci, bien sûr, des changements votre répertoire, en supposant
vous êtes dans la maison de John Harvard répertoire, dans votre dossier Dropbox.
Pendant ce temps, une commande comme crée un nouveau répertoire nommé PSet2,
que vous pourriez avoir déjà ou sera bientôt pour problème posé deux.
Assurez Bonjour, bien sûr, est une commande qui construit un programme appelé bonjour
à partir d'un fichier appelé bonjour point c.
Et dans chacun de ces cas, maintenant, nous avons eu
fournir un argument sur la soi-disant ligne de commande, l'invite à clignoter,
de sorte que la marque sait ce qu'il faut construire, et ainsi de que mkdir sait ce dossier pour créer,
et que sait cd où vous voulez aller.
Mais jusqu'à présent, nous continuons à dire que, votre principale fonction par défaut,
a une expression vide à l'intérieur de ces parenthèses,
ce qui signifie qu'il ne peut pas prendre tous les arguments.
>> Donc, à partir d'aujourd'hui, ce que nous allons faire
est, nous allons commencer soutenir ce genre de choses même.
En fait, dans ce cas, que vous ne pas généralement saisir manuellement,
Faire a été de faire ce pour nous, il n'y a pas
mais une une, deux, trois supplémentaire chaînes après le programme de nom
clang.
Alors, comment pouvons-nous atteindre ce?
>> Eh bien, à partir d'aujourd'hui, dans les cas où nous voulons
d'apporter une contribution par l'intermédiaire du soi-disant ligne de commande,
nous allons commencer à ajouter ici ce qui est dans yellow--
remplacement vide avec int argc virgule chaîne argv parenthèse ouverte fermer la parenthèse.
Maintenant, ce qui est intéressant pour un couple de raisons.
Premièrement, il va nous écrivons programmes qui sont un peu plus dynamique.
Mais, plus convaincante, il va ouvrir
maintenant une conversation à ce qui peut vraiment réseaux
être utilisé, pour quelle chaîne est vraiment sous le capot,
jusqu'à la semaine prochaine lorsque nous commençons la plongée encore plus profondément dans la façon dont la machine est
faire tout ce travail de trucs.
Mais pour l'instant, nous allons dessiner, peut-être, une image.
>> Lorsque vous écrivez un programme avec les principaux déclarée
de cette manière, de telle sorte que principal prend deux arguments, un int
et-- ce type de données est le deuxième argument?
>> PUBLIC: Array.
DAVID Malan: Array.
Ainsi, il semble à première vue que c'est un chaîne, mais il faut noter les crochets.
Rappeler la dernière fois que nous avons introduit la notion d'un tableau.
Et tableaux utilisent crochets dans quelques contextes.
Vous pouvez utiliser la place supports d'aller dans un tableau
et obtenir un élément particulier, comme 0 support ou un support ou une console 2.
Mais nous avons vu, si brièvement, la semaine dernière, que vous avez également
utiliser ces crochets à déclarer la taille d'un tableau,
si vous savez à l'avance combien de ints ou le nombre de chaînes ou ce que vous
voulez réellement.
Ainsi, il s'avère qu'il ya un troisième contexte ici
qui n'a pas de numéro à l'intérieur des crochets.
Lorsque vous spécifiez, comme je l'ai ici, le nom de quelque chose comme argv,
qui est juste une façon élégante de disant vecteur d'argument, qui
est une autre façon de fantaisie dire un tableau d'arguments,
parenthèse ouverte fermer la parenthèse juste signifie que vous n'avez pas nécessairement
savoir à l'avance comment grand la matrice va être,
mais vous savez que ça va être un tableau.
Donc, si vous ne connaissez pas le nombre ne l'a pas mis là-dedans,
pour fermer la parenthèse ouverte support signifie que argv n'est pas une chaîne,
mais un tableau de chaînes.
Donc, syntaxiquement, si vous repenser la semaine dernière,
il est très similaire à dire quelque chose comme int âges de support ouvert,
et puis quelque chose par la suite.
Alors qu'est-ce que cela ressemble?
Disons fait faire un dessin.
Ainsi, lorsque vous exécutez ce programme avec principal ayant deux arguments définies à l'intérieur
de ces parenthèses, vous essentiellement au moins deux morceaux
de mémoire remis à vous sous la hotte.
Un, que je vais attire comme ce rectangle, va être appelé argc.
Et comme un résumé rapide, quel est le type de argc de données?
C'est donc un int.
Ainsi, un nombre va aller à tour de rôle argc--
que signifie un nombre d'arguments.
Pendant ce temps, j'ai dessiné argv comme un tableau.
Et je ne sais pas vraiment combien de temps il va être,
si pour les besoins d'aujourd'hui Dot Dot Dot.
Il pourrait obtenir d'une certaine longueur.
Mais j'ai imaginé ici au moins quatre rectangles.
Donc argv un bloc de mémoire qui stocke chaîne de chaîne de chaîne dot dot dot,
et argc est juste un morceau de la mémoire pour un nombre entier.
>> Alors maintenant, soyons un peu plus précis.
Si, quand j'ai chaînes dans ce tableau, appelé
argv, je tiens à les atteindre individuellement, comme la semaine dernière,
nous allons utiliser la notation comme support argv 0
pour obtenir la première chose un tableau.
Argv 1 support pour obtenir le deuxième chose, et ainsi de suite.
La clé ici est que nous sommes toujours 0 indexed-- nous sommes toujours en partant de 0.
Alors maintenant, de laisser effectivement mettre quelque chose dans ce domaine.
Si je devais établir un programme appelé bonjour à partir d'un fichier appelé bonjour point c,
puis je lance ce programme avec un point slash bonjour,
qu'est-ce que mon ordinateur, mon portable, ressembler sous le capot
le moment je lance points réduire bonjour et appuyez sur Entrée?
Eh bien, c'est peut-être ce que nous pourrions décrire
que le contenu de votre ordinateur de la mémoire, ou mémoire à accès aléatoire RAM--.
En d'autres termes, l'ordinateur, en quelque sorte pour vous comme par magie,
met le numéro 1 en argc, Alias ​​ArgCount, et il met littéralement la chaîne
./hello dans argv support 0.
Je n'ai aucune idée, franchement, ce qui est dans le support de argv 1 ou 2 ou 3,
parce que si l'utilisateur n'a pas quoi que ce soit d'ailleurs tapé ./hello,
nous allons supposer que ces sont des valeurs parasites les plus probables,
pour ainsi dire.
Ces blocs de mémoire existe, mais elle n'est pas à nous
à les regarder, parce la ArgCount est seul.
>> Maintenant, quant à lui, si je écrire exécuter un autre programme,
cd, ce qui est plus correctement une commande, dans votre clignotant espace cd prompt--
Dropbox-- quand je lance que, effectivement, lorsque le programme est exécuté cd, argc,
l'intérieur de la mémoire de mon ordinateur, est pour le plus bref deuxième le numéro 2.
Et puis argv support o a cd, argv support 1 a Dropbox,
et puis bien sûr la commande complète, de sorte que tous de cette mémoire
essentiellement s'en va et est utilisé pour autre chose.
Et c'est pourquoi je dis une fraction de seconde.
>> En attendant, si nous faisons mkdir PSet2, l'image est presque la même,
mais avec des cordes à l'intérieur argv.
Si je fais clang tiret bonjour bonjour point c, même idée.
Plus de choses est rempli pour argv et argc, bien sûr, est de 4.
En d'autres termes, même si ce tableau
pourraient être Dot Dot Dot, de certains longueur variable, pour ainsi dire,
vous savez toujours où la fin de celui-ci c'est parce que argc va vous dire
à quel moment vous devez vous arrêter regardant éléments dans argv.
Vous ne pouvez regarder quatre au total dans ce cas.
>> Prenons donc maintenant un oeil à, peut-être, un programme simple.
Celui qui dit juste bonjour pour quelqu'un comme Zamyla.
Donc, je prétends que je vais écrire un programme dans un instant par lequel je pouvais faire
./hello espace Zamyla, et puis je veux mon programme pour imprimer quelque chose
super simple comme "bonjour, Zamyla."
Or, dans le passé, nous avons utilisé getString.
Ainsi, dans le passé, même si vous êtes nouveau à la programmation,
chances sont que vous pouvez concocter un programme qui utilise getString
puis utilise printf pour dire salut à Zamyla.
Mais il ne faut pas utiliser GETSTRING cette fois.
Permettez-moi au lieu d'aller dans le Appliant et ne comprennent norme I O point h.
Permettez-moi également inclure CS50 point h.
Maintenant int main, et maintenant je suis ne va pas faire vide aujourd'hui.
Au lieu de cela, je vais faire int argc chaîne argv parenthèse ouverte fermer la parenthèse,
pas spécifier un numéro.
Et maintenant, voici mon soi-disant à faire.
Ce que je vais faire maintenant, je suis va faire un peu d'un acte de foi,
Je vais supposer que l'utilisateur de va utiliser ce programme correctement,
et je vais tout simplement faire printf bonjour,% sn.
Donc rien de nouveau.
Mais je veux maintenant mettre ce mot l' types d'utilisateurs après le nom du programme.
Donc, si je fais ./hello espace Zamyla, je vouloir en quelque sorte l'accès par programme
je cite "Zamyla." donc je peut aller dans mon argumentation vecteur,
mon tableau de chaînes, et si la commande, encore une fois, était ./hello espace Zamyla,
ce numéro que je veux de mettre en argv ici?
PUBLIC: 1.
DAVID Malan: 1, parce 0 support s'avère
va être l' le nom de programme, comme nous l'avons vu.
Donc support 1 est le premier mot que moi, l'utilisateur, ont tapé.
Je vais aller de l'avant et sauver ce.
Je vais aller dans mon dossier où j'ai placé ce fichier.
Je vais faire faire bonjour 3.
Le OK de Comp IO.
./hello Zamyla Entrée.
Qu'ai-je fait de mal?
J'ai été pris par surprise moi-même pour un instant là.
Qu'ai-je fait de mal?
>> PUBLIC: Nom.
>> DAVID Malan: Le fichier de en fait appelé hello3.c.
Et je l'ai fait juste pour cohérence, parce que nous avons
eu HELLO.c de dans le passé dans le code en ligne.
Donc, nous allons fixer ce ./hello support tableau de bord 3 Zamyla.
Entrée.
Et maintenant nous avons bonjour, Zamyla.
Pendant ce temps, je peux changer cela être Rob, ou vraiment d'autre mot.
>> Mais nous allons examiner un cas d'angle.
Qu'est-ce que vous attendez-vous qui va se passer si Je n'ai pas taper le nom de n'importe qui?
>> PUBLIC: Erreur.
>> DAVID Malan: Une erreur d'une certaine sorte, peut-être.
Voyons.
Entrée.
Null.
Donc printf est effectivement un peu de protection de nous
ici, et l'impression de littéralement parenthèse ouverte nulle, mais les choses encore pire peut arriver.
Et juste pour démontrer quelque chose que vous absolument
ne doit pas faire, allons dans ici et commencez à fouiller.
Droite?
Si je sais que l'image dans cette mémoire est essentiellement,
argv support 1 a Zamyla, argv support 0 a ./hello, ou ./hello-3.
Qu'est-ce que dans le support 2?
Donc je ne peux répondre à cette m'interroger, non?
Je peux juste changer le 1 en 2.
Je peux maintenant recompiler bonjour 3, ./hello3 Voyons un zoom avant et appuyez sur Entrée.
Oups.
Aucune marque de devis.
Intéressant.
Donc, c'est plutôt cool à voir quoi d'autre est ici.
>> Alors quoi d'autre est à l'intérieur de mon ordinateur portable?
Sauvons avec support 3.
Faire hello3, ./hello-3.
Curieux.
Et maintenant, passons vraiment bold-- 50.
Donc, c'est vraiment plongée profonde dans la mémoire de mon ordinateur.
50 indices dans.
Donc, assurez-bonjour 3 ./hello-3.
Curieux.
Très bien, maintenant je suis juste allez obtenir téméraire.
Allons à 5000.
Bien.
Alors permettez-moi recompile.
Faire hello3, ./hello-3.
Dáccord.
Maintenant, certains d'entre vous, il pourrait une ampoule de s'éteindre.
Combien d'entre vous avez vu ce message avant?
Dáccord.
Alors, pourquoi?
>> Les chances soient: et il ya différents choses qui peuvent causer ce,
et bien vous êtes en bonne company-- nous avons clairement
provoqué ce qu'on appelle une erreur de segmentation.
Et longue histoire courte pour aujourd'hui, je ont touché un segment de mémoire
que je n'aurais pas dû.
Où un segment signifie simplement un morceau de mémoire que je n'aurais pas dû.
Maintenant, l'ordinateur garantit que si je exécuter ./helloZamyla que je peux toucher argv
être support 0 et argv support 1.
Mais argc est la valeur 2, cela signifie que je suis seulement accueillie c'est un peu de l'honneur
system-- toucher 0 support et le support 1.
Si je vais plus loin, il ya absolument va être la mémoire il.
Mon RAM existe physiquement dans l'ordinateur.
Mais qui sait ce qui est là?
En effet, je suis en cours d'exécution multiples programmes en même temps.
Je pourrais avoir seen-- si je n'étais pas faire sur la Appliant
mais sur mon Mac ou PC-- je pourrais avoir vu le contenu d'un e-mail.
J'aurais pu voir un instant message que je l'ai récemment envoyé.
Tout ce qui peut être traînent autour de la mémoire
auraient pu être consultée par voie de cette notation crochet arbitraire.
Ou, pire encore, vous pourriez avoir trouvé un de mes mots de passe
que j'avais récemment tapé, qu'une programme avait stocké dans la mémoire de manière
me authentifier, et alors juste un peu laissé
dans la RAM jusqu'à ce que je quitte ce programme.
>> Et en effet, c'est l'un des le danger et l'un des pouvoirs
d'utiliser un langage comme C Vous avez un accès illimité
de la totalité du contenu de la mémoire de programme,
et ce que les méchants peuvent même faire dans ces cases--
surtout quand on obtenir de la programmation web
vers la fin du semestre, nous allons revoir cette topic-- est fouiner,
potentiellement, quelqu'un est ordinateur de mémoire et trouver des choses curieuses
comme nous l'avons vu là-bas.
Ou même pire encore, les mots de passe qu'il ou elle peut ensuite utiliser pour faire de mauvaises choses.
>> Il est donc clair que je n'aurais pas dû faire cela, parce que les choses étranges commencent à se produire.
En effet, il s'agit d'un plantage du programme.
Ce serait l'équivalent de Mac OS ou Windows
une fenêtre de programme juste disparaître.
Une erreur inattendue s'est produite.
Dans l'environnement de ligne de commande nous voyons quelque chose comme ça.
Mais c'est pourquoi, c'est que je suis simplement en touchant mémoire qui ne m'appartient pas.
>> Donc, nous allons défendre contre ce une peu d'une manière différente
en regardant ce programme ici.
Donc, encore une fois, le squelette que nous avons vu l'heure, à
et j'ai souligné ce temps int.
Et pendant tout ce temps principal a en effet retourné une valeur.
Même si dans la plupart de notre conférence exemples que nous avons jamais utilisés autrefois
quoi que ce soit en principal retourner.
Nous écrivons juste printf proximité accolade et c'est tout.
Mais gratuitement, ce que la compilateur été fait pour vous,
efficace, est de retour 0 pour vous.
Active out-- et c'est un peu counterintuitive-- que 0 est bon.
Cela ne signifie pas faux en soi.
0 est bon, et tout non-0 valeur, le monde a décidé,
peut signifier une erreur.
Donc, si vous avez déjà raté quelque chose sur votre ordinateur,
ou un programme vient de mourir sur vous et vous avez reçu une certaine fenêtre erronée
sur votre écran, erreur disant négative 49 ou erreur 23--
certains value-- apparemment arbitraire qui est parce qu'un programmeur a codé en dur
une valeur négative comme 49 ou positif 23 pour représenter n'importe quel nombre, osent dire,
de 4 milliards d'choses possibles qui pourrait aller mal dans un programme.
>> Alors, comment pourrais-je prendre avantage de moi-même?
Eh bien, permettez-moi d'ouvrir un programme que j'ai écrit à l'avance,
et fouiner en ligne appelé bonjour 4.
Et c'est presque identique, sauf que sa obtenu un peu de vérification des erreurs.
Dans ce cas, j'ai de nouveau déclaré principal que de prendre deux arguments,
mais cette fois, sur la ligne 17, un avis Je fais un peu d'un test de cohérence.
Je fais en sorte que argc est égal à égal à 2.
Parce que si c'est le cas, que signifie que je peux en toute sécurité
toucher non seulement le support 0, mais le support 1.
Et je vais de l'avant et d'imprimer, dans ce cas, Zamyla ou Rob
ou quel que soit le mot que j'ai tapé sur.
Et maintenant, juste pour obtenir un peu plus propre,
Je vais revenir explicitement 0 pour signifier que tout va bien.
Rien de grave s'est passé.
>> Mais par convention, je vais retourner 1, ou franchement tout-0 non valeur,
si quelque chose n'allait pas.
Maintenant, l'utilisateur ne va pas vraiment remarqué ce qui se passe.
En effet, si je vais dans ce répertoire, on fait un zoom et ne faisons bonjour 4,
./hello-4 Zamyla se comporte comme je le pense.
Mais si je ne tape pas la place rien, rien ne se passe,
mais il ne plante pas.
Et si je fais quelque chose à la place comme Rob est un surveillant
dans le partage Thayer-- Informations arbitraire.
Mais remarquez, argv 1, 2, 3, 4, et 5 devrait maintenant exister dans la mémoire.
Cela aussi, ce n'est pas ce mon programme prévoit,
parce que j'ai vérifié si argc est égal à 2 égaux ou non.
Donc, je suis en train de défendre contre cela.
>> Maintenant, en passant, nous le programmer-- ou plutôt nous le users--
jamais voir que 0 ou 1, mais en utilisant un outil appelé débogueur, ou d'autres outils,
comme nous le verrons avant longtemps, vous le programmeur
peut réellement voir ce qui pourrait être ne va pas à l'intérieur de votre programme.
>> Ainsi, des questions sur argc?
Ouais.
>> PUBLIC: j'ai vu où ils n'ont pas eu le caractère, [inaudible]
juste ladite chaîne d étoiles, comme caractère astérisque virgule.
Sont-ils équivalent ici?
>> DAVID Malan: Ils le sont.
Donc la question est, vous avez programmes de temps en temps vu
comme ce qui n'en ont pas dire support chaîne argv
mais au lieu de dire quelque chose comme l'omble support argv étoiles.
Et il ya même d'autres variantes que vous pourriez voir.
Ils sont en effet équivalent.
Pour l'instant, nous avons ces sorte de roues de formation
dans la forme de chaîne de caractères dans le CS50 bibliothèque, mais en un peu plus d'une semaine
ou si nous allons supprimer cette et en fait tout à fait obstruction
regarder ce que le charbon et l'étoile sont, et comment ceux qui se rapportent à la mémoire
représentation plus générale.
Donc, nous allons revenir à cela.
>> D'autres questions sur notre argv ou argc?
Ouais.
PUBLIC: Pourquoi at-il revenir une erreur [inaudible]?
DAVID Malan: Pourquoi il retourner une erreur terre que: oh!
Dans le cas précédent, lorsque nous ont été futzing autour de la mémoire,
pourquoi at-il seulement renvoyer une erreur quand j'ai vraiment tapé un grand nombre?
Réponse courte est, nous avons juste eu de la chance.
D'une manière générale, un ordinateur alloue de la mémoire en morceaux,
et il m'a donné un assez gros morceau que Je suis parti, sans se faire remarquer,
de support touchante 2, le support 3, support 50, mais dès que je poussais
ma chance, je suis allé au-delà du limites de la portion de mémoire
le système d'exploitation m'avait donné.
Et c'est là que ça réprimé et a dit non.
erreur de segmentation.
Ouais.
>> PUBLIC: Comment l'ordinateur connaître la valeur de argc?
>> DAVID Malan: Comment le ordinateur d'une valeur de argc?
Lorsque vous exécutez un programme, ce programme, par la nature du message clignotant,
est remis le tableau de mots qui ont été tapés
à l'invite, c'était tapé à l'invite.
Et si c'est votre exploitation système essentiellement
remplit les arguments principaux pour vous.
C'est donc l'un des services que vous obtenez, sorte de secret
sous le capot de un système d'exploitation.
D'autres questions?
Ouais.
>> PUBLIC: Qu'est-ce core dump signifie?
DAVID Malan: Qu'est-ce core dump signifie?
Donc, c'est une bonne question.
Et permettez-moi de revenir en ce répertoire ici.
Et vous remarquerez que J'ai un nouveau fichier il.
Il est en effet appelé noyau, et c'est en fait généralement un fichier d'une taille décente.
C'est essentiellement un instantané de le contenu de la mémoire de mon programme
ou RAM quand il s'est écrasé.
Et ce sera utile, éventuellement, pour le diagnostic,
une fois que nous parlons dans un avenir conférence et de l'article sur le débogage,
parce que vous pouvez réellement faire la équivalent numérique d'une autopsie
sur ce fichier pour aider à comprendre ce que vous avez fait de mal dans votre programme.
Ouais.
>> PUBLIC: Est argc une commande lui-même, ou pouvez-vous nommer quelque chose?
>> DAVID Malan: Bonne question.
Est argc une commande en elle-même, ou pouvez-vous nommer quelque chose?
Ce n'est certainement pas une commande.
C'est tout simplement une variable de nom ou le nom de l'argument,
et si absolument nous pourrait appeler ce truc,
nous pourrions appeler cette barre, qui tendent d'être le go-to mots qu'un ordinateur
scientifique va.
Mais par convention, nous utilisons argc et argv.
Mais c'est juste un humain convention, rien de plus.
Bien.
Ainsi se révèle, j'ai été dire un peu lie-- blanc
et franchement, à l'avenir, vous verrez nous avons dit à d'autres mensonges.
Mais pour l'instant, nous allons à peler un d'eux.
Dans ce cas là quand je l'ai déjà couru un programme comme ./hello ou ./hello-3
Zamyla, nous avons eu le contenu de mon la mémoire de l'ordinateur à la recherche à peu près comme
ce.
Mais rappelons ce qu'est une chaîne est.
Qu'avons-nous dit il ya une semaine ce qu'un chaîne est en fait sous le capot?
PUBLIC: Tableau de caractères.
DAVID Malan: Il s'agit d'une tableau de caractères, non?
Nous pourrions donc avoir un tableau de chaînes, mais, à leur tour, une chaîne
est un tableau de caractères.
Donc, si je veux vraiment être anal quand je dessine cette image,
Je devrais vraiment dessine un peu plus comme ça,
de sorte que dans chacune de celles-ci index de mon tableau argv,
il est lui-même un ensemble de chaîne qui se trouve dans un tableau.
Et maintenant, le mensonge nous disons aujourd'hui
est que l'image ne regarder tout à fait comme ça.
En fait, les petits carrés sont généralement en dehors des grands rectangles
Là.
Mais nous y reviendrons qu'avant longtemps.
Mais ce n'est ./hello barre oblique inverse 0, qui est le caractère spécial
délimite la fin d'une chaîne, et nous avons un autre après
Le nom de Zamyla.
Alors qu'est-ce que cela signifie?
>> Eh bien, laissez-moi aller de l'avant et ouvrir deux autres exemples
qui sont disponibles en ligne.
L'un est appelé argv1.c et l'autre est argv2.
Il s'agit d'un programme de super-simple est différent des programmes précédents
en ce moment je suis en utilisant argc et argv ici.
Et maintenant, je l'intégration avec une boucle for à la ligne 18, de i = 0 sur un maximum de argc.
Et que vais-je faire avec cette ligne de code ici?
En anglais.
Cela démontre bien évidemment l'utilisation de argc.
Mais en anglais, ce qui ne il faire si je lance ce programme?
Ouais?
>> PUBLIC: Ça va imprimer votre écran autant de fois que vous le souhaitez.
DAVID Malan: Exactement.
Donc, quelles que soient les mots I tapez à l'invite, il est
va régurgiter eux à moi un par ligne.
Donc, nous allons aller de l'avant et le faire.
Laissez-moi aller dans mon répertoire et faire faire ./argv1 argv1.
Et maintenant, nous allons garder les choses simples.
Faisons d'abord rien.
Il a fait imprimer une chose, et c'est en effet le nom du programme,
parce que c'est dans le support 0.
Si je vous dis maintenant foo, il va faire les deux, et si je dis foo bar,
il va dire ces trois choses.
Maintenant, c'est un peu intéressant, peut-être.
Mais rappeler que argv est un tableau de chaînes,
mais une chaîne est un tableau de caractères, afin que nous puissions prendre les choses d'un cran
et appliquer cette base logique et rendre le code que
regarde un peu plus cryptique, certes.
Mais en ayant une imbriqué boucle, quelque chose qui s'apparente
à ce que vous pouvez vous rappeler de Mario, par exemple, si vous avez fait de cette façon.
>> Alors maintenant, remarque sur la ligne 19, je suis nouveau itération sur mes arguments,
de 0 à jusqu'à argc.
Et maintenant en ligne 21-- je suis emprunter un truc de dernière week--
Je vérifie quelle est la longueur du support argv i.
Je suis le stockage de cette réponse n.
Et puis je l'intégration de j sur à n, où j est initialisé à 0.
Ainsi, la convention pour le comptage.
Une fois que vous avez utilisé i, si vous avez un boucle imbriquée, vous ne pouvez pas utiliser i nouveau,
sinon vous allez CLOBBER, potentiellement, la valeur à l'extérieur de la boucle interne.
Donc, je suis en utilisant j par convention.
Nous pourrions utiliser k.
Si vous avez plus de k, vous avez probablement avoir trop de nidification, généralement.
Mais maintenant, vous remarquerez mon printf ligne est légèrement différente.
Je ne suis pas l'impression% s, je suis % c impression, ce qui, bien sûr,
est un espace réservé pour un car.
>> Et maintenant remarquer cette syntaxe.
Nouveau.
Nous n'avons pas vu avant.
Mais logiquement, cela signifie juste obtenir la chaîne i dans argv
et obtenir le j quoi?
PUBLIC: Caractère.
DAVID Malan: caractère dans cette chaîne.
Donc, en utilisant des crochets suivi par des crochets,
c'est d'abord plongée dans les chaînes de argv,
et ensuite la seconde crochets avec j
est plongée dans les caractères de cette chaîne particulière dans argv.
Et puis, pour faire bonne mesure, Je l'impression d'une nouvelle ligne ici.
Alors maintenant, laissez-moi aller de l'avant et ouvrir un peu plus grande fenêtre
afin que nous puissions le voir en action.
Laissez-moi aller dans ce dossier.
Et faire maintenant faire argv 2-- whoops-- faire argv 2, ./argv 2.
Entrée.
Et c'est un peu difficile à lire verticalement,
mais c'est en fait le nom de la programme, suivie d'une ligne vide.
Maintenant, laissez-moi aller de l'avant et faire foo.
De même difficile à lire, mais c'est en effet l'impression d'un caractère par ligne.
Et si je fais bar, il est maintenant imprimer les ligne par ligne.
Donc, les plats à emporter ici n'est pas tant que, wow, regardez cette nouvelle astuce
où vous pouvez accéder au contenu des caractères spécifiques d'un tableau,
mais plutôt la façon dont nous prenons ces de base des idées comme l'indexation dans un tableau,
et ensuite l'indexation dans une tableau qui était dans ce tableau,
et juste en appliquant les mêmes idées à exemples un peu plus sophistiqués.
Mais les bases sont vraiment pas changé, même depuis la semaine dernière.
>> Maintenant, c'est une sorte de rapide, en ce que rappeler, en semaine zéro
nous avons joué avec un livre de téléphone de ce type.
Et même si ce n'est évidemment pièces physiques du papier,
vous pouvez sorte de penser un annuaire téléphonique sous forme de tableau.
Certes, si vous étiez à réimplémenter ces pièces de ces morceaux de papier
dans un ordinateur, probablement vous pouvez utiliser quelque chose
comme un tableau pour stocker tous ceux noms et des numéros de tout le chemin
à Z. Donc, c'est bien, parce que il nous donne l'occasion,
peut-être, de voir comment vous pourriez effectivement mettre en œuvre quelque chose comme ça.
Comme dans le cas d'une série de portes ici.
Donc, si je could-- nous avons besoin d'une volontaires pour venir sur place.
Voyons.
Un visage familier peut-être, visage familier peut-être.
Que diriez-vous de couleur orange?
Ici.
Chemise orange, venez sur place.
>> Allons de l'avant maintenant et déménagement ces portes sur le côté,
les déplacer de la route pendant un moment.
Quel est votre nom?
>> AJAY:
>> DAVID Malan: Ajay.
David.
Ravi de vous rencontrer.
Bien.
Nous avons donc derrière ces six portes numériquement sur la screen--
ou plutôt sur les sept portes screen-- tout un tas de chiffres.
Et je vous ai dit rien dans advance-- d'accord?
AJAY: Rien à l'avance.
DAVID Malan: Tout ce que je veux que vous fassiez est maintenant de trouver pour moi, et pour nous,
vraiment, le numéro 50, une étape à la fois.
>> AJAY: numéro 50?
>> DAVID Malan: Le nombre 50.
Et vous pouvez révéler ce qui est derrière chacune de ces portes
tout simplement en le touchant avec un doigt.
Bon sang. [Rires]
>> [Applaudissements]
>> Très bien fait.
Dáccord.
Nous avons un beau cadeau prix pour vous ici.
Votre choix de films que nous discuté la semaine dernière.
>> AJAY: Oh, mec.
Oh, je n'ai jamais vu Spaceballs.
>> DAVID Malan: Spaceballs.
Bien.
Donc, tenir sur un seul moment.
How-- faisons ce un moment-- enseignable
comment avez-vous fait trouver le nombre 50?
AJAY: J'ai choisi au hasard.
DAVID Malan: Donc, vous avez choisi au hasard et eu de la chance.
AJAY: Oui.
DAVID Malan: OK.
Excellente.
Alors maintenant, vous n'aviez pas eu de la chance, quoi d'autre
aurait pu se passer derrière ces portes?
Donc, si je vais de l'avant et révéler ces chiffres ici,
ils sont en fait dans un ordre aléatoire.
Et le mieux que vous pourrait avoir fait, franchement, est en fin de compte,
dans le pire des cas, tous de vérifier.
Donc tu as super chanceux, qui n'est pas ce qu'on appellerait un algorithme.
Oui, félicitations.
Mais maintenant let's-- humour moi, si vous le pouviez.
Allons à cet onglet ici.
Et voici les numéros en évidence ce qui semble être un ordre aléatoire,
et ils étaient.
Mais maintenant, si je place revendication que derrière ces portes
sont des nombres qui sont triées.
L'objectif est maintenant d'aussi nous trouver le numéro 50.
Mais le faire de façon algorithmique, et nous dire comment vous allez à ce sujet.
Et si vous le trouvez, vous gardez le film.
Vous ne le trouvez pas, vous le redonner.
AJAY: Donc, je vais vérifier les extrémités en premier lieu, de déterminer si there's--
[Rires et applaudissements]
DAVID Malan: Ici vous allez.
Jetons un coup d'oeil à l'un des prédécesseurs de Ajay,
Sean, qui n'était pas aussi chanceux.
OK, donc votre tâche ici, Sean, est le suivant.
J'ai caché derrière ces portes le nombre de sept,
mais niché dans certaines de ces portes ainsi sont les autres numéros non-négatifs.
Et votre objectif est de penser à ce rangée du haut des nombres comme un simple tableau.
Nous sommes juste une séquence de morceaux de papier avec des numéros derrière eux.
Et votre but est, en utilisant seulement le haut tableau ici, me trouver le numéro sept.
Et nous allons ensuite à la critique comment vous allez le faire.
Retrouvez-nous le nombre de sept, s'il vous plaît.
Non.
5, 19, 13.
Ce n'est pas une question piège.
1.
A ce stade, votre score n'est pas très bon, alors vous pourriez aussi bien continuer.
3.
Allez.
Franchement, je ne peux pas m'empêcher de me demander ce que vous y penser.
>> SEAN: Je peux prendre à partir de seulement la rangée du haut.
DAVID Malan: Seule la rangée du haut.
Donc, vous avez trois.
Donc me trouver 7.
>> [PUBLIC CRIE SUGGESTIONS]
Donc, à la fois de ceux qui étaient incroyables pour des raisons très différentes.
C'est donc là que nous gauche hors il ya un instant,
et l'idée fondamentale ici a été ces portes avaient numéros
derrière eux qui ont été triés, l'idéal emporter pour ce qui est que vous pouvez faire
fondamentalement mieux dans cette deuxième exemple--
et, en effet, que c'était Sean première tentative avec des nombres aléatoires
tout comme before-- mais dès que ces chiffres sont triés,
un peu comme le livre de téléphone, que pouvez-vous faire de toute évidence?
Ou comment pouvez-vous tirer parti de cette connaissance?
Ouais.
>> PUBLIC: Vous allez à mi-chemin [inaudible].
DAVID Malan: Ouais.
Exactement.
Donc instinct initial de Ajay était pour vérifier les extrémités, si je me souviens,
et puis nous avons sorte de fini l'exemple rapidement.
Mais si nous avons commencé à faire plus méthodiquement le long de ces lignes,
mais en partant peut-être dans l' milieu, car ils sont triés,
dès que nous révélons l' numéro 16, nous avons donc know--
et nous allons faire exactement that-- nous donc savoir que 50, dans le cas d'aujourd'hui,
a obtenu d'être à droite.
Ainsi, tout comme la semaine zéro lorsque Nous avons déchiré le livre de téléphone dans la moitié
et jeta la moitié de la problème de distance, même idée ici.
Nous pouvons jeter ce semestre du problème de distance.
Et sans doute ce que vous pourrait faire algorithmique,
une fois que vous savez que 50 doit être vers la droite, si elle est partout,
est d'essayer là-bas, au milieu des portes restantes.
Bien sûr, 50 est supérieure de 42, afin que nous puissions
jeter ce qui reste trimestre de problème de distance,
et, enfin, identifier quelque chose comme 50.
Mais tout comme la annuaire téléphonique, ces chiffres
ont été donnés à nous déjà en l'ordre de tri, ce qui nous laisse
à la question, comment voulez-vous faire avancer les choses dans l'ordre trié?
Et, franchement, à quel prix?
C'est une chose d'être remis le livre de téléphone
puis impressionner vos amis en trouver un numéro de téléphone très rapidement, non?
Déchirement 32 pages à la recherche d'un personne sur 4 milliards de pages,
nous avons dit était un exemple extrême.
Mais combien de temps at-il fallu Verizon pour trier ce livre de téléphone?
Combien de temps at-il fallu pour trier ces sept numéros?
C'est une question que nous avons jusqu'à présent complètement ignoré.
>> Donc, nous allons répondre à cette question maintenant.
Et nous sommes tous sur des films maintenant, mais nous avons quelques balles anti-stress.
Si, par exemple, huit bénévoles ne me dérangerait pas de nous rejoindre ici?
Allons de l'avant et à faire, que diriez-vous vous quatre, trois d'entre vous ici?
Obtenez de nouveaux visages.
Et quatre d'entre vous là-bas?
Et maintenant-- de ne pas laisser biais ici-- et Numéro huit sur ici sur la fin.
Venez sur place.
Bien.
Donc, ce que nous avons ici pour chacun de vous est un nombre.
Si vous voulez aller y, prenez ce numéro.
Quel est votre nom?
>> ARTIE: Artie.
>> DAVID Malan: Artie, d'accord.
Vous êtes numéro 1.
>> AMIN: Amin.
DAVID Malan: Amin.
David.
Vous êtes numéro 2.
Et aller de l'avant, comme je tends vous les feuilles de papier,
ligne vous en face de la musique se dresse dans le même ordre que là-haut.
>> ANDY: Salut, Andy.
>> DAVID Malan: Andy, il est bon de vous voir.
Numéro 3.
>> JACOB: Jacob.
>> DAVID Malan: Jacob, le numéro 4.
Bienvenue à bord.
SUBVENTION: Grant.
DAVID Malan: Grant.
Numéro 5.
>> ALANNA: Alanna.
>> DAVID Malan: Alanna, le numéro 6.
>> FRANCES: Frances.
DAVID Malan: Frances, numéro 7.
Et?
>> Rachel: Rachel.
>> DAVID Malan: Rachel, numéro 8.
Bien.
Allez-y et faites-vous dans cet ordre.
Permettez-moi de celui qui reste pupitre en place.
Où avez-vous besoin un stand?
Dáccord.
Allez-y et vient de mettre vos numéros où le public peut les voir sur,
le pupitre vers l'extérieur.
Et nous espérons, notre première test de cohérence ici-- 4, 2, 6.
Oh-oh.
Attendez une minute.
Nous n'avons pas un 8.
J'ai besoin de vous expulser de l'exemple d'une certaine manière.
Non.
Non, ce n'est pas grave.
Voyons.
Nous pouvons le faire.
Etre prêt.
Nous y voilà.
Correcte.
Bien.
Donc, nous avons maintenant 8, 1, 3 7, 5.
Dáccord.
Excellente.
>> Donc la question qui se pose est, à ce coût, et par quelle méthode,
pouvons-nous régler effectivement ces chiffres ici afin que nous puissions sorte de travailler à l'envers,
en fin de compte, et decide-- est-il vraiment impressionnant, est-ce vraiment efficace,
que je peux diviser et conquérir un annuaire téléphonique?
Est-ce vraiment efficace que Je peux diviser et conquérir
ces morceaux numériques de papier sur la carte,
si peut-être que ça va nous coûter un fortune dans le temps ou les cycles de l'énergie ou CPU
à réellement obtenir nos données dans un certain ordre de tri?
Donc, nous allons poser cette question.
>> Alors d'abord, ces chiffres sont à peu près dans un ordre aléatoire,
et je vais proposer un algorithme, ou processus
par lequel nous pouvons trier ces gens.
Je vais aborder cette jolie naïvement.
Et je vais donner la parole que c'est le genre de beaucoup pour moi
pour envelopper mon esprit autour de la ensemble des données fixées à la fois.
Mais vous savez quoi?
Je vais faire un peu d' corrections marginales très simples.
4 et 2 sont en panne, si la objectif est de passer de 1 sur un maximum de 8.
Donc, vous savez quoi?
Je vais vous faire les gars échangent, si vous changez
positions physiquement et vos morceaux de papier.
Maintenant, 4 et 6, ce sont dans l'ordre.
Je vais laisser les avoir.
6 et 8, ce sont dans l'ordre.
Aller à laisser être.
8 et1, sur commande.
Si vous deux ne me dérangerait pas échanger.
Maintenant, 8 et 3, si vous avez pu échanger.
8 et 7, si vous avez pu échanger.
Et 8 et 5, si vous avez pu échanger.
>> Maintenant, suis-je fait?
Non, évidemment pas.
Mais j'ai fait l' meilleure situation, non?
Quel est votre nom, numéro 8?
>> Rachel: Rachel.
DAVID Malan: Alors Rachel a efficace bouillonnait assez loin,
tout le chemin jusqu'à l'extrémité de mon tableau de nombres ici.
Et si ce problème est une sorte de résolu.
Maintenant, clairement, 2 doit encore bouger un peu, et 4 et 6 et 1.
Mais il me semble avoir eu un peu plus près de la solution.
Donc, nous allons appliquer le même heuristique naïf nouveau.
2 et 4, OK.
4 et 6, OK.
6 et 1, mm mm.
De laisser swap.
6 et 3, mm mm.
De laisser swap.
6 et 7 est OK.
7 et 5, Nope.
De laisser swap.
Et maintenant, 7 et 8.
Et quel est votre nom?
FRANCES: Frances.
DAVID Malan: Frances.
Alors maintenant, Frances est à même de mieux poste, parce que maintenant 7 et 8
sont correctement barboter jusqu'à la partie supérieure.
Donc, 2 et 4, OK.
4 et 1, l'échange de let.
4 et 3, l'échange de let.
4 et 6, vous êtes OK.
6 et 5, l'échange de let.
Et maintenant, ces gars-là sont bons.
Nous y sommes presque.
2 et 1, sur commande, donc échanger.
Et maintenant, laissez-moi faire un test de cohérence.
2 et 3, 3 et 4, 4 et 5, 5 et 6, 6 et 7, 8.
OK, donc nous avons fini.
>> Mais à quel prix ai-je trier ces numéros ici?
Eh bien, combien ai-je pas potentiellement prendre lors du tri de ces gens?
Eh bien, nous allons revenir à cette question.
Mais, franchement, si vous avez un peu ennuyé, c'est
sorte de révélateur que ce n'était pas peut-être l'algorithme le plus efficace.
Et en effet, franchement, je transpire d'autant plus la marche avant et en arrière.
Qui ne se sentent pas particulièrement efficace.
Essayons autre chose.
Si vous avez pu réinitialiser vous à ces huit valeurs.
Bon travail.
>> Jetons un coup d'oeil numériquement, pour seulement un moment avant d'essayer quelque chose d'autre,
ce qui vient de se passer.
Ici, vous êtes sur le point de voir une la visualisation de ces huit humains
laquelle bleu et rouge barres représentent des nombres.
Plus la barre, plus le nombre.
Et ce que vous allez voir est en un ordre aléatoire plus de huit d'entre eux.
Vous allez voir ces barres se trié par ce même algorithme,
ou un ensemble d'instructions, qui nous appellerons dorénavant tri à bulles.
Donc remarquer, toutes les secondes, deux barres s'allument en rouge,
sont comparées par l'ordinateur.
Et puis si le grand bar et la petit bar sont hors d'usage,
ils sont échangés pour moi.
>> Maintenant, c'est incroyablement fastidieux à regarder cela, certainement,
pendant très longtemps, mais la remarquerez takeaway-- grandes barres mobiles vers la droite,
petits bars mobiles vers la gauche.
Disons avorter ce processus et accélérer le processus
être beaucoup plus rapide, afin que nous puissions se faire une idée de haut niveau de ce que,
en effet, tri à bulles est fait.
En effet, il est bouillonnant à l' côté droit de la liste,
ou le tableau, les plus grands bars.
Et inversement, les petits bars sont barbotage leur chemin vers le bas vers la gauche,
mais à un rythme plus rapide que nous avons précédemment fait.
Donc, plus difficile à voir avec les humains, mais visuellement c'est bien ce que
qui se passait.
>> Mais essayons fondamentalement approche différente maintenant.
Essayons une autre algorithme par lequel nous vous avons
mecs commencent dans ces originale positions, qui était cet ordre ici.
Et allons-y maintenant.
Et je vais faire quelque chose encore plus simple, non?
En rétrospective, l'échange de nouveau par paires et encore, presque un peu intelligent.
Faisons les choses encore plus naïvement, où si je veux trier ces gens,
permettez-moi de continuer à chercher pour le plus petit élément.
Donc, en ce moment, 4 est la plus petit nombre que j'ai vu.
Je vais m'en souvenir.
Non, 2 c'est mieux, et rappelez-vous que.
1 est encore plus faible.
3, 7, 5.
Dáccord.
One-- quel est votre nom?
>> ARTIE: Artie.
>> DAVID Malan: Artie.
Donc, Artie, aller de l'avant.
Je vais vous sortir de la ligne.
Si vous pouviez revenir ici.
Et j'ai besoin de faire de la place pour lui.
Nous avons un point de décision ici.
Comment pourrions-nous faire de la place pour Artie ici au début où le numéro 1 appartient?
>> PUBLIC: Shift.
>> DAVID Malan: OK, nous pourraient se tourner vers tout le monde.
Mais proposer une optimisation.
Cela se sent un peu ennuyeux pour moi de demander quatre personnes
de déplacer tout le chemin vers le bas.
Que pouvais-je faire?
>> AUDIENCE: les allumer.
>> DAVID Malan: les allumer.
Et quel est votre nom?
>> JACOB: Jacob.
DAVID Malan: Jacob, se déplacer.
Bien plus efficace d'avoir juste Jacob swaps emplacements avec Artie,
au lieu de forcer tous les quatre de ces gens,
merci beaucoup, à leur position correcte.
Ce qui est bien Artie maintenant, il est dans sa position correcte.
Faisons-le à nouveau.
2, c'est le plus petit nombre que j'ai vu.
3, 7, 5.
Dáccord.
2 est certainement le plus petit.
Ne pas avoir à faire un travail.
Faisons-le à nouveau.
6.
Le plus petit?
8.
Non.
4?
Ooh.
Que je me souvienne 4.
3.
Que je me souvienne 3.
7, 5.
Plus petit nombre que je n'ai vu sur ce passage est 3.
Si vous venez nous.
Où allons-nous vous mettre?
Et quel est votre nom?
>> ALANNA: Alanna.
>> DAVID Malan: Alanna, nous sommes allez avoir à vous expulser.
Mais ce n'est plus efficace, juste échanger deux personnes,
que d'avoir plusieurs personnes effectivement contourner plus.
Maintenant, nous allons le faire à nouveau.
Je vais sélectionner 4, alors venez sur.
Et qui va se déplacer?
Numéro 8, bien sûr.
Si je trouve aujourd'hui au nombre de 5, allez sur.
Numéro 8 va se faire expulsé à nouveau.
Je vais maintenant trouver le numéro 6 en place.
7 à la place.
8 en place.
>> Ce que nous venons de faire maintenant est quelque chose qui s'appelle la sélection sorte,
et si nous visualisons cela, il est va se sentir un peu différent.
Allons de l'avant et de ce Menu ici, ce visualization--
nous allons changer ce to-- allez, Firefox.
Nous allons changer ce genre à la sélection.
Et nous allons accélérer comme avant, et commencer la visualisation maintenant.
Et cet algorithme a une sensation différente à elle.
A chaque itération, franchement, c'est encore plus simple.
Je suis juste en sélectionnant le plus petit élément.
Maintenant, franchement, je suis un peu de la chance que temps, en ce qu'il triée ultra-rapide.
Les éléments sont aléatoires.
Ce n'est pas, comme nous le verrons par la suite voir, fondamentalement plus rapide.
Mais nous allons voir une troisième et dernière aborder ici à ce qui se passe.
Donc, nous allons aller de l'avant et vous réinitialiser les gars une dernière fois d'être dans cet ordre ici.
>> Et maintenant, je vais être un peu plus intelligent,
juste pour compléter nos algorithmes.
Je vais le faire.
Je vais pas aller d'avant en arrière tellement.
Franchement, je suis fatigué de tout ce déplacement.
Je vais juste prendre ce que je suis donné au début de la liste,
et je vais trier que puis et là.
Donc nous sommes ici.
Numéro 4.
Je vais insérer le numéro 4 dans une liste triée.
Terminé.
Je prétends maintenant, et juste pour le rendre plus clair, cette partie de ma liste est triée.
C'est une sorte de sotte prétention, mais bien 4 sont triés dans une liste de taille un.
Maintenant, je vais prendre le numéro 2.
Numéro 2, je vais maintenant insérer dans le bon endroit.
Alors, où est 2 appartiennent?
Évidemment, ici.
Donc, aller de l'avant et revenir en arrière, si vous le pouviez.
Et pourquoi ne pas vous les gars juste prendre votre musique est avec vous cette fois.
Et de laisser la force que vous insérez au début de la liste.
Ainsi, un peu plus de travail.
J'ai dû déménager Jacob autour, et quel est ton nom?
>> AMIN: Amin.
>> DAVID Malan: Amin.
Mais au moins je ne suis pas allé dans les deux sens.
Je prends juste les choses que je vais.
Je suis juste en les insérant au bon endroit.
6, c'est en fait assez facile.
Laissez vous insérez là-bas, si vous je voulais juste aller sur un peu.
Numéro 8, également assez facile.
Juste là.
Bon sang.
Numéro 1 nous ne pouvons pas juste échanger avec Amin ici,
parce que ce qui se passe de gâcher l'ordre.
Donc, nous devons être un peu plus intelligent.
Donc, Artie, si vous pouviez sauvegarder pour un moment.
Allons de l'avant et décaler maintenant, contrairement à nos algorithmes précédents,
pour faire place à Artie ici au début.
Ainsi, à la fin de la journée, je suis une sorte de faire ce que je voulais éviter avant.
Et si mon algorithme est en quelque sorte de inversés, intellectuellement,
de ce qu'elle était à l'origine.
Je ne fais que le déplacement à un point différent.
Maintenant, je suis à 3.
Oh, putain.
Nous devons faire plus de travail encore.
Donc, nous allons vous faire sortir.
Passons 8, 6, 4-- oh groupes OH et 3 va aller là.
Donc, à moins de légères économies pour le moment.
7, pas trop de travail à faire.
Donc, si vous voulez de la pop retour, nous allons vous insérez.
Et enfin, 5, si vous vouloir y faire un saut, nous
besoin de vous déplacer, vous, vous, jusqu'à cinq est en place.
>> Alors maintenant, à voir ce à un de haut niveau graphique,
nous allons faire cet algorithme visualisation d'un délai supplémentaire.
Ce que nous allons donc appeler le tri par insertion.
Nous courons tout aussi rapide, et commencer ici.
Et, aussi, a un sens différent.
C'est une sorte de mieux en mieux et mieux, mais ce n'est jamais parfait
jusqu'à ce que je rentre et lisse ces lacunes.
Parce que, encore une fois, je ne fais que prendre ce On me donné de gauche à droite.
Donc, je n'ai pas eu autant de chance que tout était parfait.
C'est pourquoi nous avons eu ces petits mispositions que nous nous sommes fixés dans le temps.
>> Donc, tous ces algorithmes semblent fonctionner à peu des rythmes différents.
En fait, ce qui est selon vous la meilleure ou la plus rapide à ce jour?
Bubble sorte, le premier?
sorte de sélection, la deuxième?
Sorte insertion, la troisième?
J'entends certains types de sélection.
D'autres pensées?
>> Ainsi, il s'avère que l'ensemble de ces algorithmes
sont fondamentalement aussi efficace que chaque other-- ou, au contraire, de même que
inefficace comme de l'autre, parce que nous pouvons faire fondamentalement
mieux que tous les trois de ces algorithmes.
Et c'est un peu un mensonge aussi.
quand je dis aussi efficace ou comme inefficace,
c'est au moins pour super-grandes valeurs de n.
Lorsque nous avons seulement huit personnes ici, ou peut-être 50 ou si les barres sur l'écran,
vous aurez absolument remarquez des différences parmi ces trois algorithmes.
Mais comme n, le nombre de personnes, ou le nombre de chiffres,
ou le nombre de personnes dans le téléphone livre, ou le nombre de pages Web
dans la base de données de Google devient de plus en plus grande,
nous verrons que tous les trois de ces algorithmes sont en fait assez pauvre.
Et nous pouvons faire fondamentalement mieux que cela.
>> Jetons un coup d'oeil, enfin, à ce que ces algorithmes pourraient
ressembler à l' contexte de quelques autres
ainsi par l'intermédiaire de ce visualisation ici
qui va nous présenter un certain nombre d'algorithmes.
Allons de l'avant et de féliciter nos participants ici, qui ont tous
se triés très bien.
Si vous souhaitez prendre un cadeau d'adieu.
Vous pouvez conserver vos numéros ainsi.
Et ce que vous verrez, ou plutôt entendre, maintenant,
est que nous mettons des sons pour chacune de ces barres
et l'associer avec le logiciel, fréquence différente du son,
vous pouvez envelopper votre esprit plus audioly autour de ce que chacune de ces choses
ressembler.
Le premier est le tri par insertion
>> [TONS]
>> C'est tri à bulles.
>> [TONS]
>> sorte de sélection.
>> [TONS]
>> Quelque chose qui s'appelle le tri par fusion.
>> [TONS]
>> Sorte Gnome.
>> [TONS]
>> C'est tout pour CS50.
Nous nous reverrons mercredi.
>> Narrateur: Et maintenant, "Deep Pensées », par Daven Farnham.
Pourquoi est-ce une boucle?
Pourquoi ne pas faire mieux?
Je fais une boucle de cinq ans.
>> [Rires]