1 00:00:00,000 --> 00:00:03,000 [Powered by Google Translate] [Section 3] [Moins confortable] 2 00:00:03,000 --> 00:00:05,000 >> [Nate Hardison] [Université de Harvard] 3 00:00:05,000 --> 00:00:08,000 >> [C'est CS50.] [CS50.TV] 4 00:00:08,000 --> 00:00:10,000 >> Très bien, nous allons commencer. 5 00:00:10,000 --> 00:00:13,000 Bienvenue à la Semaine 4 de CS50. 6 00:00:13,000 --> 00:00:19,000 Si vous les gars ouvrez un navigateur Web et d'ouvrir pset 3, 7 00:00:19,000 --> 00:00:23,000 Scramble avec CS50, nous allons commencer à aller 8 00:00:23,000 --> 00:00:26,000 à travers la section de questions. 9 00:00:26,000 --> 00:00:32,000 Tout comme la semaine dernière, nous allons travailler dans les espaces CS50, 10 00:00:32,000 --> 00:00:35,000 si vous aussi tirer jusqu'à ce que ainsi, 11 00:00:35,000 --> 00:00:43,000 et si vous allez de l'avant et visitez ce lien que j'ai ici en haut. 12 00:00:43,000 --> 00:00:45,000 Il est temps de commencer. 13 00:00:45,000 --> 00:00:51,000 Nous avons notre programme de salut peu ici. Rien de fou. 14 00:00:51,000 --> 00:00:55,000 Une des premières choses que je veux faire avec vous aujourd'hui est d'aller sur quelques solutions 15 00:00:55,000 --> 00:00:58,000 à 1 Set problème, le type de solutions, par exemple, 16 00:00:58,000 --> 00:01:03,000 pour que vous puissiez avoir une idée de ce genre de code personnel est écrit, 17 00:01:03,000 --> 00:01:07,000 quels types d'étudiants d'autres codes sont l'écriture, 18 00:01:07,000 --> 00:01:10,000 et avez-vous jeter un coup d'oeil parce que je sais que c'est bizarre 19 00:01:10,000 --> 00:01:14,000 lorsque vous soumettez une solution à un problème posé et obtenir des commentaires 20 00:01:14,000 --> 00:01:18,000 sur votre propre version, mais il est parfois utile de voir comment d'autres personnes l'ont fait, 21 00:01:18,000 --> 00:01:22,000 en particulier ceux qui sont agréable à regarder. 22 00:01:22,000 --> 00:01:27,000 Pour la plupart, j'ai été vraiment impressionné par les solutions que vous les gars produites. 23 00:01:27,000 --> 00:01:31,000 Je n'ai pas encore commencé à regarder vos 2s problème posé, mais si elles sont quelque chose comme le premier, 24 00:01:31,000 --> 00:01:34,000 cela veut dire que de bonnes choses. 25 00:01:34,000 --> 00:01:40,000 >> Si vous regardez mes révisions, nous allons commencer tout en bas à la Révision 1, 26 00:01:40,000 --> 00:01:47,000 et nous allons prendre un coup d'œil à une solution Mario. 27 00:01:47,000 --> 00:01:54,000 Si vous tirez cette place, ces programmes que nous allons présenter sont corrects. 28 00:01:54,000 --> 00:01:56,000 Il n'y avait pas de problèmes avec exactitude ces problèmes, mais plutôt, 29 00:01:56,000 --> 00:01:59,000 nous voulons parler un peu plus sur les différents problèmes de conception 30 00:01:59,000 --> 00:02:03,000 qui ont été utilisées ici. 31 00:02:03,000 --> 00:02:08,000 Une des choses qui était intéressant au sujet de la solution 32 00:02:08,000 --> 00:02:11,000 c'est qu'il a utilisé ce nouveau concept appelé livre définir, 33 00:02:11,000 --> 00:02:15,000 parfois aussi appelé un hachage définir. 34 00:02:15,000 --> 00:02:18,000 Permettez-moi de faire un zoom avant sur le sujet ici. 35 00:02:18,000 --> 00:02:24,000 A # define permet de donner des noms à ces numéros dans votre programme. 36 00:02:24,000 --> 00:02:28,000 Dans ce cas, la hauteur maximale d'une pyramide de Mario 37 00:02:28,000 --> 00:02:34,000 a 23 et plutôt que de mettre 23 dans mon code- 38 00:02:34,000 --> 00:02:37,000 Nous renvoyons à ce que le codage en dur 23 - 39 00:02:37,000 --> 00:02:43,000 ce qui donne la place MAX_HEIGHT nom à ce nombre, 40 00:02:43,000 --> 00:02:48,000 de sorte que, ici dans ma boucle do-while 41 00:02:48,000 --> 00:02:51,000 vous pouvez réellement se référer à MAX_HEIGHT 42 00:02:51,000 --> 00:02:55,000 au lieu de mettre le numéro 23 po 43 00:02:55,000 --> 00:02:57,000 [Étudiants] Quel est l'avantage de faire cela? 44 00:02:57,000 --> 00:02:59,000 C'est une très bonne question. 45 00:02:59,000 --> 00:03:03,000 La première est la lisibilité. 46 00:03:03,000 --> 00:03:08,000 L'avantage d'utiliser ce # define est la lisibilité. 47 00:03:08,000 --> 00:03:11,000 Quand je lis ce code, je peux voir ce qui se passe. 48 00:03:11,000 --> 00:03:15,000 >> Je peux voir dans cet état là que nous testons 49 00:03:15,000 --> 00:03:19,000 pour la hauteur étant <0, ce qui nous aurait aussi défini 50 00:03:19,000 --> 00:03:22,000 à une hauteur minimale ou une hauteur min. 51 00:03:22,000 --> 00:03:25,000 L'autre avantage est que je peux alors lire le reste de la ligne pour voir 52 00:03:25,000 --> 00:03:30,000 que nous sommes également vérifier pour s'assurer que la hauteur ne dépasse pas la hauteur maximale, 53 00:03:30,000 --> 00:03:35,000 parce que nous allons continuer alors que la hauteur est supérieure à la hauteur max. 54 00:03:35,000 --> 00:03:40,000 L'autre avantage est, si je effectuer un zoom arrière un peu ici- 55 00:03:40,000 --> 00:03:49,000 si je lance ce programme et je le lance, disons, de 23 en ce moment, 56 00:03:49,000 --> 00:03:52,000 il affichera tous les 23 rangs juste comme ça. 57 00:03:52,000 --> 00:03:54,000 Mais disons que je voulais changer la hauteur maximale, 58 00:03:54,000 --> 00:03:57,000 et maintenant je veux limiter la hauteur maximale des pyramides 59 00:03:57,000 --> 00:04:06,000 d'être seulement dire-man, qui était géniale. 60 00:04:06,000 --> 00:04:14,000 # Include, # define MAX_HEIGHT, 61 00:04:14,000 --> 00:04:18,000 et disons que nous avons voulu mettre l'égal à 10. 62 00:04:18,000 --> 00:04:22,000 Or, à ce moment-là, tout ce que j'avais à faire était de changer à cet endroit-ci. 63 00:04:22,000 --> 00:04:27,000 Je ne peux recompiler le code, et maintenant, si je tente de taper 12, 64 00:04:27,000 --> 00:04:30,000 il demandera à moi. 65 00:04:30,000 --> 00:04:33,000 Dans ce cas, nous n'utilisons que MAX_HEIGHT fois. 66 00:04:33,000 --> 00:04:37,000 Ce n'est pas que les grandes d'une corvée d'aller dans 67 00:04:37,000 --> 00:04:40,000 et le changer dans la boucle while si vous avez besoin d'. 68 00:04:40,000 --> 00:04:44,000 Mais dans les programmes où vous référençant le nombre magique même 69 00:04:44,000 --> 00:04:47,000 encore et encore, ce mécanisme de # define est vraiment très utile 70 00:04:47,000 --> 00:04:52,000 parce que vous venez de changer une fois au début du fichier, c'est généralement là où vous les mettez- 71 00:04:52,000 --> 00:04:57,000 et le changement percole à travers le reste du fichier. 72 00:04:57,000 --> 00:05:02,000 >> D'autres choses que je voulais souligner dans cette mission que je pensais avait l'air vraiment sympa, 73 00:05:02,000 --> 00:05:05,000 l'un était l'appellation des variables. 74 00:05:05,000 --> 00:05:14,000 Vous voyez ici que nous avons appelées variables entières ligne et appelle hauteur. 75 00:05:14,000 --> 00:05:20,000 Les espaces, les tables de hachage, il contribue à rendre le code un peu plus lisible, 76 00:05:20,000 --> 00:05:25,000 rend un peu plus facile à comprendre ce qui se passe réellement. 77 00:05:25,000 --> 00:05:31,000 Ceci est en contraste à l'aide, par exemple, des lettres aléatoires 78 00:05:31,000 --> 00:05:35,000 ou juste un charabia tout à fait. 79 00:05:35,000 --> 00:05:39,000 Une dernière chose que je vais dire, c'est que dans les boucles for, 80 00:05:39,000 --> 00:05:45,000 souvent, ces variables d'itération, ces compteurs que vous utilisez dans votre pour les boucles, 81 00:05:45,000 --> 00:05:51,000 il est standard et conventionnel pour les commencer avec soit i et j, puis puis k 82 00:05:51,000 --> 00:05:54,000 et va à partir de là si vous avez besoin d'autres variables, 83 00:05:54,000 --> 00:05:56,000 et ce n'est qu'une convention. 84 00:05:56,000 --> 00:05:58,000 Il ya beaucoup de conventions. 85 00:05:58,000 --> 00:06:00,000 Cela dépend du langage de programmation que vous utilisez. 86 00:06:00,000 --> 00:06:04,000 Mais dans C, nous commencent généralement avec i. 87 00:06:04,000 --> 00:06:08,000 Il n'a pas de sens d'utiliser, par exemple, a ou b 88 00:06:08,000 --> 00:06:13,000 en fonction de la situation. 89 00:06:13,000 --> 00:06:15,000 C'est tout pour cette fois. 90 00:06:15,000 --> 00:06:25,000 Si maintenant vous tirer vers le haut Révision 2, vous verrez un autre Mario, 91 00:06:25,000 --> 00:06:29,000 et celui-ci est semblable à l'autre ce que nous venons de voir, 92 00:06:29,000 --> 00:06:32,000 mais il ne sorte quelque chose de cool. 93 00:06:32,000 --> 00:06:38,000 Si l'on regarde cette section ici à l'intérieur de l'intérieur de la boucle, 94 00:06:38,000 --> 00:06:44,000 ils utilisent une syntaxe de regard fou ici à droite de cette ligne. 95 00:06:44,000 --> 00:06:47,000 C'est ce qu'on appelle un opérateur ternaire. 96 00:06:47,000 --> 00:06:53,000 Il s'agit d'une déclaration if else condensées en une seule ligne. 97 00:06:53,000 --> 00:06:57,000 La condition est cette partie entre parenthèses. 98 00:06:57,000 --> 00:07:05,000 Il est équivalent à dire que si j 00:07:10,000 Et puis quoi le contenu de ce bloc serait si l'espace sont 100 00:07:10,000 --> 00:07:16,000 puis le contenu de ce que l'autre ne serait ce sont #. 101 00:07:16,000 --> 00:07:20,000 C'est essentiellement l'attribution d'un espace pour cette variable. 102 00:07:20,000 --> 00:07:24,000 C'est mettre un espace dans le contenu de la variable de bloc, 103 00:07:24,000 --> 00:07:29,000 si cette condition est remplie, et si la condition n'est pas remplie, 104 00:07:29,000 --> 00:07:32,000 alors la variable bloc reçoit ce #. 105 00:07:32,000 --> 00:07:37,000 Et puis, bien sûr, au lieu de construire une chaîne complète 106 00:07:37,000 --> 00:07:43,000 et l'impression tout à la fin de cette solution, il imprime un caractère à la fois. 107 00:07:43,000 --> 00:07:48,000 Pretty cool. 108 00:07:48,000 --> 00:07:53,000 >> Un autre couple de choses à regarder. Nous allons passer au gourmand. 109 00:07:53,000 --> 00:07:58,000 Maintenant, si nous regardons gourmand, cette première solution 110 00:07:58,000 --> 00:08:00,000 utilise ces # définit un peu. 111 00:08:00,000 --> 00:08:06,000 Nous avons une constante définie pour chacun des numéros différents dans ce programme. 112 00:08:06,000 --> 00:08:12,000 Nous avons obtenu un pour cent par dollar, un pour les trimestres, dimes, nickels, et centimes, 113 00:08:12,000 --> 00:08:15,000 et maintenant, si nous défiler et lire le code, 114 00:08:15,000 --> 00:08:22,000 nous pouvons voir une norme do-while tout l'impression de sortie de boucle. 115 00:08:22,000 --> 00:08:25,000 Type de l'essentiel de ce problème a été la réalisation que 116 00:08:25,000 --> 00:08:29,000 vous avez besoin de convertir le flotteur que vous avez lu à partir de l'utilisateur à un nombre entier 117 00:08:29,000 --> 00:08:32,000 avec précision faites le calcul, et c'est parce que 118 00:08:32,000 --> 00:08:36,000 avec des nombres à virgule flottante, comme nous en avons parlé brièvement dans la conférence, 119 00:08:36,000 --> 00:08:41,000 il n'est pas possible de représenter avec précision chaque valeur unique sur la droite numérique 120 00:08:41,000 --> 00:08:47,000 parce qu'il ya une infinité de valeurs entre 3 et, disons, 3,1 même. 121 00:08:47,000 --> 00:08:54,000 Vous pouvez avoir 3.01 et 3.001 et 3.0001, et vous pouvez continuer. 122 00:08:54,000 --> 00:09:00,000 Il s'avère à chaque fois que vous travaillez avec de l'argent, vous voulez souvent le convertir 123 00:09:00,000 --> 00:09:05,000 dans le format de nombre entier de sorte que vous ne perdez pas quelques centimes, et ce genre de choses. 124 00:09:05,000 --> 00:09:09,000 En faisant cela et en arrondissant a été la clé. 125 00:09:09,000 --> 00:09:14,000 Cette solution utilise un parfaitement simple, l'algorithme de grand, 126 00:09:14,000 --> 00:09:17,000 qui décrémente le nombre de cents autres, d'abord par quarts, 127 00:09:17,000 --> 00:09:19,000 puis par dimes, puis par nickels, puis par pièces de monnaie, 128 00:09:19,000 --> 00:09:24,000 et en ajoutant le nombre de pièces à chaque fois. 129 00:09:24,000 --> 00:09:31,000 >> Une autre solution que nous allons voir, comme je effectuer un zoom arrière et aller à la révision 4, 130 00:09:31,000 --> 00:09:40,000 a eu un début très similaire, mais plutôt utilisé div et mod 131 00:09:40,000 --> 00:09:44,000 juste ici pour calculer le nombre de cents. 132 00:09:44,000 --> 00:09:50,000 Ceci, le nombre de trimestres est égal au nombre de cents divisé par 25, 133 00:09:50,000 --> 00:09:53,000 et la raison pour laquelle cela fonctionne est parce que nous faisons la division entière, 134 00:09:53,000 --> 00:09:58,000 il est donc jeter tout reste. 135 00:09:58,000 --> 00:10:02,000 [Étudiants] Faut-il commenter la recherche? 136 00:10:02,000 --> 00:10:05,000 Cela dépend vraiment. 137 00:10:05,000 --> 00:10:08,000 [Étudiants] Vous faites remarquer plus que du code ici. 138 00:10:08,000 --> 00:10:16,000 Ouais, et si il ya un tas de différentes philosophies à ce sujet. 139 00:10:16,000 --> 00:10:21,000 Ma philosophie personnelle est que votre code est vraiment la vérité, 140 00:10:21,000 --> 00:10:24,000 comme votre code est ce qui est réellement l'exécuter sur l'ordinateur, 141 00:10:24,000 --> 00:10:29,000 et si votre code doit être aussi lisible que possible de ne pas nécessiter autant de commentaires. 142 00:10:29,000 --> 00:10:33,000 Cela dit, quand vous faites des choses qui sont un peu délicate mathématiquement 143 00:10:33,000 --> 00:10:38,000 ou algorithmique, il est bon de commenter celles de sorte que vous pouvez 144 00:10:38,000 --> 00:10:43,000 ajouter une dimension supplémentaire, une couche supplémentaire à celui qui lit votre code. 145 00:10:43,000 --> 00:10:49,000 Dans ces solutions, souvent elles sont commentées plus lourdement juste parce que 146 00:10:49,000 --> 00:10:52,000 nous voulons être en mesure de les distribuer et que les gens les ramasser 147 00:10:52,000 --> 00:10:56,000 et de les lire assez facilement. 148 00:10:56,000 --> 00:11:05,000 Mais certainement, je suis d'accord que c'est lourd. 149 00:11:05,000 --> 00:11:07,000 [Étudiants] Mais en cas de doute, allez le plus lourd? 150 00:11:07,000 --> 00:11:10,000 En cas de doute, allez plus lourd. 151 00:11:10,000 --> 00:11:17,000 Certaines personnes disent parfois retour 0 ou quelque chose comme ça. 152 00:11:17,000 --> 00:11:20,000 Je pense que c'est un commentaire ridicule. 153 00:11:20,000 --> 00:11:22,000 Il est clair que c'est ce qui se passe. 154 00:11:22,000 --> 00:11:25,000 Je n'ai pas besoin de l'anglais pour me le dire. 155 00:11:25,000 --> 00:11:28,000 Parfois, les gens écrivent des trucs comme "kthxbai!" 156 00:11:28,000 --> 00:11:32,000 C'est plutôt mignon, mais aussi pas- 157 00:11:32,000 --> 00:11:35,000 ce n'est pas faire la différence entre les points commentant ou non. 158 00:11:35,000 --> 00:11:41,000 Ce genre de commentaires ne sont que ha, ha. 159 00:11:41,000 --> 00:11:43,000 Cool. 160 00:11:43,000 --> 00:11:48,000 >> À ce stade, nous allons commencer à travailler sur le problème Set 3 section de questions. 161 00:11:48,000 --> 00:11:52,000 Si vous les gars tirer ce à nouveau, 162 00:11:52,000 --> 00:11:55,000 comme la semaine dernière, nous n'allons pas regarder les courts-circuits dans cette section. 163 00:11:55,000 --> 00:12:00,000 Nous allons vous laisser faire ça sur votre propre temps et de parler des questions. 164 00:12:00,000 --> 00:12:05,000 Mais maintenant, dans cette section, nous allons passer un peu de temps 165 00:12:05,000 --> 00:12:11,000 parle moins des rudiments de codage 166 00:12:11,000 --> 00:12:15,000 comme nous l'avons fait la semaine dernière, et à la place, nous allons nous concentrer davantage sur 167 00:12:15,000 --> 00:12:22,000 un peu plus de la théorie, alors parlons de recherche binaire, puis le tri. 168 00:12:22,000 --> 00:12:27,000 De ceux d'entre vous qui ont suivi avec la conférence, 169 00:12:27,000 --> 00:12:30,000 Quelqu'un peut-il me donner un résumé de ce qu'est la différence 170 00:12:30,000 --> 00:12:35,000 entre la recherche et la recherche linéaire binaire? 171 00:12:35,000 --> 00:12:37,000 Que se passe-t-il? Bien sûr. 172 00:12:37,000 --> 00:12:42,000 Recherches linéaires à travers chaque élément de la liste triée 173 00:12:42,000 --> 00:12:45,000 une par une par une par une par une, 174 00:12:45,000 --> 00:12:50,000 et recherche binaire divise la liste en 2 groupes, 175 00:12:50,000 --> 00:12:57,000 vérifie si la valeur touches que vous recherchez est supérieur ou inférieur à la valeur médiane 176 00:12:57,000 --> 00:13:00,000 que vous venez de trouver, et si elle est inférieure, il va de pair avec la liste du bas 177 00:13:00,000 --> 00:13:03,000 puis divise encore une fois, est-ce la même fonction 178 00:13:03,000 --> 00:13:07,000 tout le chemin vers le bas jusqu'à ce qu'il trouve le point milieu soit égale à la valeur elle-même. 179 00:13:07,000 --> 00:13:10,000 Droite. 180 00:13:10,000 --> 00:13:12,000 >> Pourquoi s'en faire? 181 00:13:12,000 --> 00:13:20,000 Pourquoi parlons-nous de recherche binaire par rapport recherche linéaire? 182 00:13:20,000 --> 00:13:22,000 Ouais. 183 00:13:22,000 --> 00:13:24,000 Binaire est beaucoup plus rapide, donc si vous doublez la taille du problème 184 00:13:24,000 --> 00:13:27,000 il prend un pas de plus, plutôt que deux fois plus nombreux. 185 00:13:27,000 --> 00:13:29,000 Exactement. 186 00:13:29,000 --> 00:13:31,000 C'est une excellente réponse. 187 00:13:31,000 --> 00:13:36,000 Recherche linéaire est très vérifiant un élément à la fois, 188 00:13:36,000 --> 00:13:39,000 et comme nous l'avons vu sur le premier jour de la conférence 189 00:13:39,000 --> 00:13:42,000 quand David est passé par son exemple annuaire 190 00:13:42,000 --> 00:13:45,000 et arraché une page de l'annuaire téléphonique à un moment 191 00:13:45,000 --> 00:13:47,000 et a continué à faire maintes et maintes et maintes fois, 192 00:13:47,000 --> 00:13:51,000 ça va lui prendre un temps très long de trouver quelqu'un dans l'annuaire téléphonique, 193 00:13:51,000 --> 00:13:55,000 à moins, bien sûr, il cherchait quelqu'un au tout début de l'alphabet. 194 00:13:55,000 --> 00:14:00,000 Avec binaire de recherche, vous pouvez aller beaucoup plus vite, 195 00:14:00,000 --> 00:14:05,000 et ce n'est pas seulement deux fois plus vite ou 3 fois plus vite ou 4 fois plus rapide. 196 00:14:05,000 --> 00:14:13,000 Mais le problème devient de plus en plus petit et plus petit beaucoup plus rapide. 197 00:14:13,000 --> 00:14:17,000 Pour illustrer cela, nous allons commencer à parler de ce qui se passe 198 00:14:17,000 --> 00:14:21,000 quand nous écrivons recherche binaire. 199 00:14:21,000 --> 00:14:27,000 Le problème qui se pose est que si j'ai un tableau de nombres, 200 00:14:27,000 --> 00:14:40,000 par exemple, 1, 2, 3, 5, 7, 23, 45, 78, 12,323, 201 00:14:40,000 --> 00:14:47,000 puis 9 avec une tonne de 0s après, 202 00:14:47,000 --> 00:14:52,000 nous voulons être en mesure de comprendre très rapidement ce qui est en 203 00:14:52,000 --> 00:14:57,000 ce tableau de nombres. 204 00:14:57,000 --> 00:15:00,000 Je sais que cela semble un peu ridicule et un peu artificiel, 205 00:15:00,000 --> 00:15:02,000 parce qu'en ce moment il est. 206 00:15:02,000 --> 00:15:05,000 Nous avons un tableau qui ne dispose pas des éléments très nombreux en elle, 207 00:15:05,000 --> 00:15:08,000 et si je vous demande de vous de déterminer si oui ou non 208 00:15:08,000 --> 00:15:11,000 23 est dans le tableau, vous pouvez le faire assez rapidement 209 00:15:11,000 --> 00:15:16,000 juste en regardant cela et me dire oui ou non. 210 00:15:16,000 --> 00:15:20,000 Le convertisseur analogique à considérer est l'imaginer si cela était, disons, 211 00:15:20,000 --> 00:15:27,000 une feuille de calcul Excel avec 10.000 lignes, 20.000 lignes. 212 00:15:27,000 --> 00:15:31,000 Bien sûr, vous pouvez faire la commande F ou F de contrôle et de chercher quelque chose. 213 00:15:31,000 --> 00:15:33,000 Vous pouvez également utiliser les filtres et les trucs de recherche, 214 00:15:33,000 --> 00:15:37,000 mais si vous aviez un oeil dans ce fichier ligne par ligne par ligne, 215 00:15:37,000 --> 00:15:40,000 il vous faudrait beaucoup de temps pour le trouver. 216 00:15:40,000 --> 00:15:42,000 C'est un peu comme dans l'exemple du répertoire téléphonique, aussi, où 217 00:15:42,000 --> 00:15:44,000 personne ne regarde à travers une page de livre un téléphone à la fois. 218 00:15:44,000 --> 00:15:47,000 En règle générale, ils ne l'ouvrir au milieu, 219 00:15:47,000 --> 00:15:50,000 ou dans le cas de beaucoup de livres et de dictionnaires de téléphone où 220 00:15:50,000 --> 00:15:54,000 vous avez réellement l'ont calé sur la première lettre, 221 00:15:54,000 --> 00:16:01,000 vous retournez à la première lettre et ouvrir et commencer à passer par là. 222 00:16:01,000 --> 00:16:03,000 >> Rappelez-moi votre nom. >> Sam. 223 00:16:03,000 --> 00:16:05,000 Sam. 224 00:16:05,000 --> 00:16:11,000 Comme l'a dit Sam, ce processus de recherche linéaire va être très lent, 225 00:16:11,000 --> 00:16:15,000 et au lieu de binaire de recherche, la façon dont cela fonctionne est que 226 00:16:15,000 --> 00:16:21,000 chaque fois que nous passons par une itération de notre algorithme de recherche, 227 00:16:21,000 --> 00:16:27,000 nous allons diviser la liste en deux, pour l'essentiel, 228 00:16:27,000 --> 00:16:33,000 dans deux listes plus petites. 229 00:16:33,000 --> 00:16:39,000 Et puis sur la prochaine itération de la boucle, nous allons le diviser à nouveau 230 00:16:39,000 --> 00:16:44,000 dans d'autres listes plus petites. 231 00:16:44,000 --> 00:16:48,000 Comme vous pouvez le voir, le problème ne cesse de plus en plus petits 232 00:16:48,000 --> 00:16:55,000 parce que nous garder la moitié des rejets de la liste à chaque fois. 233 00:16:55,000 --> 00:16:59,000 Comment cela fonctionne-t rejets? 234 00:16:59,000 --> 00:17:05,000 Pour rappel, ce que nous allons faire si nous étions un ordinateur 235 00:17:05,000 --> 00:17:11,000 et nous avons été, par exemple, la recherche de la numéro 5 dans la liste 236 00:17:11,000 --> 00:17:15,000 est que nous aurions choisir un nombre au milieu. 237 00:17:15,000 --> 00:17:26,000 Au milieu de cette liste, car il n'y a 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 chiffres, 238 00:17:26,000 --> 00:17:32,000 nous aimerions prendre le nombre soit à la 4ème position ou à la 5ème position, 239 00:17:32,000 --> 00:17:38,000 et nous aimerions appeler cela au milieu de notre liste. 240 00:17:38,000 --> 00:17:42,000 Choisissez nombre au milieu. 241 00:17:42,000 --> 00:17:51,000 Puis, comme l'a dit Sam, nous allons tester pour voir si ce nombre est égal 242 00:17:51,000 --> 00:17:59,000 au nombre que nous voulons obtenir ou notre numéro souhaité. 243 00:17:59,000 --> 00:18:06,000 Si c'est égal, nous l'avons trouvé. Nous gagnons. 244 00:18:06,000 --> 00:18:12,000 Si ce n'est pas égal, alors il ya un ou deux cas. 245 00:18:12,000 --> 00:18:15,000 Les deux cas sont soit le nombre doit être supérieur au nombre que nous étudions, 246 00:18:15,000 --> 00:18:19,000 ou c'est moins. 247 00:18:19,000 --> 00:18:25,000 Si elle est supérieure, nous nous dirigeons vers la droite. 248 00:18:25,000 --> 00:18:33,000 Et si c'est moins, nous nous déplaçons vers la gauche. 249 00:18:33,000 --> 00:18:41,000 Et puis on répète tout le processus 250 00:18:41,000 --> 00:18:48,000 soit sur la moitié droite ou la partie gauche de la liste. 251 00:18:48,000 --> 00:18:51,000 >> Le premier problème dans la section d'aujourd'hui est de savoir 252 00:18:51,000 --> 00:18:55,000 comment nous pouvons réellement commencer à exprimer cela dans le code C. 253 00:18:55,000 --> 00:18:58,000 Nous avons ici le pseudo-code. 254 00:18:58,000 --> 00:19:04,000 Ce que nous allons commencer à faire c'est que je vais remonter un tout nouvel espace, 255 00:19:04,000 --> 00:19:09,000 enregistrer cette révision afin que nous ayons ces notes pour plus tard, 256 00:19:09,000 --> 00:19:20,000 nous allons supprimer tout cela, et puis copiez et collez le problème posé 257 00:19:20,000 --> 00:19:26,000 cette information dans nos espaces, et j'espère que cela ne se brise pas. 258 00:19:26,000 --> 00:19:28,000 Parfait. 259 00:19:28,000 --> 00:19:33,000 Si vous les gars tout cela, copiez et collez ce code dans votre nouvel espace, 260 00:19:33,000 --> 00:19:43,000 dans une carte vierge. 261 00:19:43,000 --> 00:19:47,000 Essayons de Daniel. Si vous compilez et exécutez ce programme, ça marche? 262 00:19:47,000 --> 00:19:49,000 Non >> Qu'est-ce qu'il dit? 263 00:19:49,000 --> 00:19:53,000 Il affirme que le contrôle atteint la fin de non-fonction void. 264 00:19:53,000 --> 00:19:55,000 Ouais, donc je vais essayer de l'exécuter. 265 00:19:55,000 --> 00:19:59,000 Avez-vous les gars déjà vu ça? Savez-vous ce que cela signifie? 266 00:19:59,000 --> 00:20:01,000 Ok, nous allons disséquer cela un peu petite. 267 00:20:01,000 --> 00:20:10,000 C'est dire à fichier.c sur la ligne 9, colonne 1, nous avons une erreur, tout comme vous l'avez dit, 268 00:20:10,000 --> 00:20:16,000 et il dit qu'il est issu de l'avertissement et l'avertissement d'erreur type de retour. 269 00:20:16,000 --> 00:20:18,000 Il ressemble à quelque chose qui se passe avec le type de retour, ce qui est logique. 270 00:20:18,000 --> 00:20:21,000 Nous avons une fonction non nulle, ce qui signifie que nous avons une fonction 271 00:20:21,000 --> 00:20:24,000 qui ne retourne pas void. 272 00:20:24,000 --> 00:20:27,000 Une fonction nulle est celle qui ressemble à ceci: 273 00:20:27,000 --> 00:20:35,000 void foo (), et il est nul parce que le type de retour est void, 274 00:20:35,000 --> 00:20:38,000 ce qui signifie que si nous avions quelque chose ici 275 00:20:38,000 --> 00:20:45,000 comme retour 1, nous obtiendrions une erreur du compilateur pour cela. 276 00:20:45,000 --> 00:20:49,000 Cependant, nous avons une fonction non nulle. 277 00:20:49,000 --> 00:20:51,000 Notre non void de la fonction dans ce cas est la fonction de recherche 278 00:20:51,000 --> 00:20:56,000 parce qu'il a un type de retour bool. 279 00:20:56,000 --> 00:20:59,000 Quand il est dit que le contrôle atteint la fin d'une fonction non nulle, 280 00:20:59,000 --> 00:21:02,000 c'est parce que la recherche n'a pas d'instruction return. 281 00:21:02,000 --> 00:21:04,000 Ce n'est pas quelque chose de retour de type bool. 282 00:21:04,000 --> 00:21:09,000 >> Nous pouvons résoudre ce problème, et ce que vous en pensez 283 00:21:09,000 --> 00:21:13,000 recherche devrait revenir par défaut? 284 00:21:13,000 --> 00:21:16,000 Quelle devrait être la valeur de retour par défaut de la recherche? 285 00:21:16,000 --> 00:21:19,000 Parce que c'est ce que nous pouvons mettre à la fin. 286 00:21:19,000 --> 00:21:21,000 Charlotte, avez-vous un-? 287 00:21:21,000 --> 00:21:23,000 Vrai ou faux? >> Vrai ou faux. 288 00:21:23,000 --> 00:21:26,000 Lequel? 289 00:21:26,000 --> 00:21:28,000 Faux. Je ne sais pas. 290 00:21:28,000 --> 00:21:30,000 Faux? Essayons. 291 00:21:30,000 --> 00:21:32,000 Pourquoi dis-tu fausse déclaration? C'est une grande intuition. 292 00:21:32,000 --> 00:21:35,000 [Charlotte] Je ne sais pas. 293 00:21:35,000 --> 00:21:39,000 Nous allons retourner faux dans ce cas, car ce sera notre défaut 294 00:21:39,000 --> 00:21:44,000 si pour une raison quelconque, la liste est vide ou l'aiguille 295 00:21:44,000 --> 00:21:46,000 que nous cherchons n'existe pas. 296 00:21:46,000 --> 00:21:50,000 Puis, à la fin, si nous ne revenons pas réalisé plus tôt dans cette fonction, 297 00:21:50,000 --> 00:21:55,000 nous savons toujours que cette fonction va dire nope, ce n'est pas dans le tableau. 298 00:21:55,000 --> 00:21:58,000 Ce n'est pas dans la botte de foin. 299 00:21:58,000 --> 00:22:03,000 Maintenant, si nous compilons et exécutons il, laissez-moi sauver ce que nous puissions le tirer vers le haut. 300 00:22:03,000 --> 00:22:08,000 Maintenant, si nous compilons et exécutons notre programme, il construit. 301 00:22:08,000 --> 00:22:12,000 Nous obtenons notre petit prompt. 302 00:22:12,000 --> 00:22:20,000 Si je frappe 4-uh-oh. 303 00:22:20,000 --> 00:22:25,000 Il n'a pas d'imprimer quoi que ce soit. On dirait que tout finit bien. 304 00:22:25,000 --> 00:22:35,000 Nous devons combler ce po 305 00:22:35,000 --> 00:22:39,000 Nous avons parlé de l'algorithme en pseudo-code un peu plus tôt. 306 00:22:39,000 --> 00:22:44,000 Laissez-moi voir, enregistrer ce, 307 00:22:44,000 --> 00:22:49,000 et je vais te tirer de cet algorithme remonter. 308 00:22:49,000 --> 00:22:51,000 Frappons ce type. Nope. 309 00:22:51,000 --> 00:22:58,000 Il est là. 310 00:22:58,000 --> 00:23:03,000 Comment pouvons-nous faire cela? 311 00:23:03,000 --> 00:23:11,000 Que serait une stratégie bien pour un début ce code? 312 00:23:11,000 --> 00:23:16,000 Vous devez choisir un numéro dans le milieu. 313 00:23:16,000 --> 00:23:23,000 Comment pouvons-nous choisir un nombre au milieu d'un tableau? 314 00:23:23,000 --> 00:23:25,000 Des suggestions? 315 00:23:25,000 --> 00:23:27,000 [Étudiants] strlen divisé par 2. 316 00:23:27,000 --> 00:23:32,000 Strlen divisé par 2. C'est un grand. 317 00:23:32,000 --> 00:23:35,000 Strlen travaille avec des types particuliers de tableaux. 318 00:23:35,000 --> 00:23:38,000 Quels types de tableaux? 319 00:23:38,000 --> 00:23:44,000 Tableaux de chaînes, des tableaux de caractères. 320 00:23:44,000 --> 00:23:48,000 C'est ce même type de concept que nous voulons appliquer, 321 00:23:48,000 --> 00:23:52,000 mais nous ne pouvons pas utiliser strlen parce que nous n'avons pas un tableau de caractères. 322 00:23:52,000 --> 00:23:55,000 Nous avons un tableau d'entiers. 323 00:23:55,000 --> 00:23:58,000 Mais qu'est-ce que strlen obtenir pour nous? 324 00:23:58,000 --> 00:24:01,000 Savez-vous ce que cela devient pour nous? 325 00:24:01,000 --> 00:24:03,000 [Étudiants] strlen nous procure la longueur. 326 00:24:03,000 --> 00:24:05,000 Exactement, il nous procure la longueur. 327 00:24:05,000 --> 00:24:09,000 Strlen obtient la longueur du tableau pour nous. 328 00:24:09,000 --> 00:24:14,000 >> Comment pouvons-nous obtenir cela dans notre programme de recherche binaire? 329 00:24:14,000 --> 00:24:18,000 Comment pourriez-vous obtenir la longueur d'un tableau? 330 00:24:18,000 --> 00:24:20,000 [Étudiants] strlen? 331 00:24:20,000 --> 00:24:25,000 Vous pouvez obtenir la longueur d'un tableau de chaînes C correctement formaté avec strlen. 332 00:24:25,000 --> 00:24:31,000 Le problème, cependant, c'est que nous n'avons pas un tableau de chaînes. 333 00:24:31,000 --> 00:24:36,000 Si nous regardons en arrière à ce code, nous avons ce tableau d'entiers. 334 00:24:36,000 --> 00:24:38,000 Comment savons-nous combien de temps est-il? 335 00:24:38,000 --> 00:24:44,000 [Étudiants] Y at-il un équivalent pour un point de terminaison, comme l int ou quelque chose? 336 00:24:44,000 --> 00:24:49,000 Il s'avère qu'il ya effectivement pas, et donc, en un sens, ce n'est 337 00:24:49,000 --> 00:24:52,000 l'une de ces choses qui sont juste bon de savoir sur C, 338 00:24:52,000 --> 00:24:57,000 qu'il n'y a pas moyen d'obtenir la longueur d'un tableau 339 00:24:57,000 --> 00:24:59,000 si tout ce que je vous donne est le tableau. 340 00:24:59,000 --> 00:25:02,000 La raison pour laquelle cela fonctionne avec des cordes, la raison strlen travaux, 341 00:25:02,000 --> 00:25:06,000 En effet, si une chaîne est correctement formaté, 342 00:25:06,000 --> 00:25:12,000 il faudra que spécial caractère \ 0 à la fin. 343 00:25:12,000 --> 00:25:16,000 >> Vous pouvez aussi imaginer si vous avez une chaîne formatée incorrectement 344 00:25:16,000 --> 00:25:20,000 et il n'y a aucun caractère \ 0 là, alors tout ne fonctionne pas. 345 00:25:20,000 --> 00:25:22,000 [Étudiants] Pouvez-vous ajouter le \ 0? 346 00:25:22,000 --> 00:25:24,000 On pourrait dans ce cas. 347 00:25:24,000 --> 00:25:29,000 Nous pourrions ajouter une sorte de \ 0 348 00:25:29,000 --> 00:25:33,000 ou une sorte de signifiant caractère et ensuite l'utiliser. 349 00:25:33,000 --> 00:25:36,000 Mais ce n'est pas tout à fait d'aller travailler 350 00:25:36,000 --> 00:25:40,000 parce que le 0 \ est un type char, 351 00:25:40,000 --> 00:25:43,000 et ici nous avons ints. 352 00:25:43,000 --> 00:25:46,000 L'autre chose est de savoir si nous devions utiliser une valeur spéciale 353 00:25:46,000 --> 00:25:49,000 comme -1 pour marquer la fin d'un tableau 354 00:25:49,000 --> 00:25:54,000 alors nous ne pourrions jamais stocker un -1 dans nos tableaux d'entiers. 355 00:25:54,000 --> 00:25:56,000 Nous serions coincés. 356 00:25:56,000 --> 00:26:00,000 Il s'avère que la seule façon d'obtenir la longueur 357 00:26:00,000 --> 00:26:03,000 d'un tableau en C est en fait de s'en souvenir 358 00:26:03,000 --> 00:26:08,000 lorsque vous le configurer et de le passer autour de la baie 359 00:26:08,000 --> 00:26:14,000 de sorte que chaque fois que j'ai une fonction qui va faire un peu de travail 360 00:26:14,000 --> 00:26:18,000 sur un tableau d'entiers ou flottants ou en double ou je ne sais quoi, 361 00:26:18,000 --> 00:26:22,000 J'ai aussi besoin de donner à la fonction la longueur du tableau, 362 00:26:22,000 --> 00:26:26,000 et c'est exactement ce que nous avons fait ici, à la fonction de recherche. 363 00:26:26,000 --> 00:26:30,000 Si vous regardez, ce que nous avons fait quand nous passons dans notre tableau ici, 364 00:26:30,000 --> 00:26:36,000 nous avons également passer dans la longueur, la taille. 365 00:26:36,000 --> 00:26:41,000 Il se trouve que nous avons appelé cette variable ici, 366 00:26:41,000 --> 00:26:43,000 ce paramètre ou argument. 367 00:26:43,000 --> 00:26:46,000 C'est ce qu'on appelle la liste des arguments d'une fonction ou d'une liste de paramètres, 368 00:26:46,000 --> 00:26:51,000 et ceux-ci sont également appelés arguments ou paramètres. 369 00:26:51,000 --> 00:26:53,000 Les gens utilisent des termes différents à des moments différents. 370 00:26:53,000 --> 00:26:55,000 J'ai parfois échanger moi-même. 371 00:26:55,000 --> 00:27:00,000 Il se trouve que cette variable est ici nommés de la même 372 00:27:00,000 --> 00:27:03,000 à ce # define ici. 373 00:27:03,000 --> 00:27:06,000 Mais ils ne sont pas la même chose. 374 00:27:06,000 --> 00:27:11,000 La capitalisation est importante. 375 00:27:11,000 --> 00:27:14,000 >> Si vous regardez ce qui se passe ici, nous déclarons 376 00:27:14,000 --> 00:27:18,000 notre tableau int, que nous avons appelés nombres. 377 00:27:18,000 --> 00:27:23,000 Nous lui avons donné notre taille, ce qui correspond à notre # define au sommet. 378 00:27:23,000 --> 00:27:27,000 Il va y avoir 8. 379 00:27:27,000 --> 00:27:35,000 Et puis, quand nous appelons ensuite la fonction de recherche en bas, 380 00:27:35,000 --> 00:27:40,000 nous passons dans le nombre que nous voulons chercher, que nous avons invité, 381 00:27:40,000 --> 00:27:43,000 obtenu auprès de l'utilisateur. 382 00:27:43,000 --> 00:27:46,000 Nous passons dans le tableau, ces numéros, 383 00:27:46,000 --> 00:27:51,000 et puis il faut aussi passer à la taille de la matrice, 384 00:27:51,000 --> 00:27:57,000 puis la valeur de taille 8 est stockée 385 00:27:57,000 --> 00:28:01,000 ou transmis à cette taille entière appelée variable. 386 00:28:01,000 --> 00:28:08,000 Nous avons la taille du tableau. 387 00:28:08,000 --> 00:28:11,000 Maintenant, si nous revenons à ce dont nous parlions tout à l'heure, 388 00:28:11,000 --> 00:28:14,000 Je pense que Missy élevé au point que ce que nous avions besoin de faire est d'obtenir la longueur du tableau 389 00:28:14,000 --> 00:28:20,000 et le diviser par 2, et qui nous donnera le point médian. 390 00:28:20,000 --> 00:28:22,000 Voyons voir. 391 00:28:22,000 --> 00:28:25,000 Puis-je avoir quelqu'un écrire ceci et l'enregistrer dans son espace? 392 00:28:25,000 --> 00:28:27,000 Que diriez-vous Leila? 393 00:28:27,000 --> 00:28:31,000 Puis-je écrire ce que vous avez en? 394 00:28:31,000 --> 00:28:35,000 Écrire la première ligne où vous prenez la longueur du tableau et obtenir le point médian 395 00:28:35,000 --> 00:28:41,000 et le stocker dans une variable. 396 00:28:41,000 --> 00:28:44,000 Je vais vous donner quelques secondes. Êtes-vous prêt? 397 00:28:44,000 --> 00:28:46,000 [Étudiant inaudible] 398 00:28:46,000 --> 00:28:50,000 Bien sûr, ai-je pu vous calculez le milieu 399 00:28:50,000 --> 00:28:55,000 du tableau botte de foin à l'intérieur de la fonction de recherche 400 00:28:55,000 --> 00:29:03,000 en utilisant la longueur de la matrice de meule, qui est la variable de taille? 401 00:29:03,000 --> 00:29:08,000 Rien de compliqué ici. 402 00:29:08,000 --> 00:29:12,000 [Leila] Juste taille / 2 et tout- 403 00:29:12,000 --> 00:29:17,000 Et l'enregistrer, et appuyez sur le bouton Enregistrer ici au sommet, 404 00:29:17,000 --> 00:29:19,000 et nous allons le tirer vers le haut. 405 00:29:19,000 --> 00:29:22,000 Parfait. 406 00:29:22,000 --> 00:29:28,000 Nous y voilà. Awesome. 407 00:29:28,000 --> 00:29:30,000 >> En l'état, ce sera compiler? 408 00:29:30,000 --> 00:29:32,000 [Leila] Non, ce doit être plus élevé. 409 00:29:32,000 --> 00:29:34,000 [Nate] Ouais, alors que devons-nous faire? 410 00:29:34,000 --> 00:29:36,000 [Leila] Comme milieu int ou quelque chose. 411 00:29:36,000 --> 00:29:41,000 Awesome. Oui, allons-y, int taille = milieu. 412 00:29:41,000 --> 00:29:44,000 Est-ce que cette compilation? 413 00:29:44,000 --> 00:29:47,000 Nous allons supprimer ce commentaire et de le sortir de la voie. 414 00:29:47,000 --> 00:29:50,000 Quelle ne sera pas compilé à ce sujet? 415 00:29:50,000 --> 00:29:52,000 Nous ne faisons pas n'importe quoi avec entier, 416 00:29:52,000 --> 00:29:55,000 nous avons donc besoin d'imprimer ou quelque chose comme ça. 417 00:29:55,000 --> 00:29:58,000 Oui, exactement. 418 00:29:58,000 --> 00:30:00,000 Nous aurons une variable utilisé. 419 00:30:00,000 --> 00:30:02,000 Quoi d'autre ne va pas travailler à ce sujet? 420 00:30:02,000 --> 00:30:06,000 Je pense que vous avez dit quelque chose, Sam. Des points-virgules. 421 00:30:06,000 --> 00:30:08,000 Ouais, il me manque ces points-virgules. 422 00:30:08,000 --> 00:30:14,000 Il va y avoir une chose constante pendant toute la durée du terme. 423 00:30:14,000 --> 00:30:17,000 La dernière chose que je vais faire c'est que je vais mettre un peu d'espace blanc de chaque côté 424 00:30:17,000 --> 00:30:23,000 de cet opérateur ici, puisque c'est généralement la façon dont nous le faisons 425 00:30:23,000 --> 00:30:26,000 selon notre guide de style. 426 00:30:26,000 --> 00:30:29,000 Nous avons au milieu de notre tableau. 427 00:30:29,000 --> 00:30:32,000 Maintenant, si nous nous rappelons à notre algorithme, 428 00:30:32,000 --> 00:30:37,000 ce qui était la deuxième étape que nous avions à faire une fois que nous avons le milieu? 429 00:30:37,000 --> 00:30:42,000 [Étudiants] Si elle est supérieure [inaudible]. 430 00:30:42,000 --> 00:30:48,000 Oui, nous devons donc faire une sorte de comparaison, et qu'est-ce qu'on compare ici? 431 00:30:48,000 --> 00:30:53,000 Vous avez dit, si elle est supérieure. Qu'y at-il dans cette phrase allusion? 432 00:30:53,000 --> 00:30:57,000 Le numéro qui va sortir, si ce n'est supérieure à la médiane, puis remonter au tableau? 433 00:30:57,000 --> 00:31:05,000 Exactement, donc le nombre qui vient quand nous- 434 00:31:05,000 --> 00:31:10,000 L'aiguille, donc nous comparer à l'aiguille, 435 00:31:10,000 --> 00:31:12,000 et ce que nous comparant à l'aiguille? 436 00:31:12,000 --> 00:31:15,000 Parce que l'aiguille est ce que nous recherchons. 437 00:31:15,000 --> 00:31:18,000 Nous sommes le comparant à se rendre à la mi-parcours. 438 00:31:18,000 --> 00:31:21,000 >> Mais est-il sensé de vérifier 439 00:31:21,000 --> 00:31:27,000 si l'aiguille = milieu? 440 00:31:27,000 --> 00:31:32,000 Est-ce logique? 441 00:31:32,000 --> 00:31:35,000 Quelqu'un at-il pas d'accord? 442 00:31:35,000 --> 00:31:40,000 Nous allons faire un essai, si (== aiguille milieu). 443 00:31:40,000 --> 00:31:42,000 [Étudiants] Ne printf vous l'avez trouvé. 444 00:31:42,000 --> 00:31:51,000 [Nate] printf ("Nous l'avons trouvé \ n"); 445 00:31:51,000 --> 00:31:56,000 Sinon,-je vais commencer à faire quelque chose de différent ici. 446 00:31:56,000 --> 00:32:00,000 Je vais commencer à mettre des accolades autour if tout le temps 447 00:32:00,000 --> 00:32:05,000 simplement parce que si nous ajouter plus de choses, alors 448 00:32:05,000 --> 00:32:07,000 nous n'obtenons pas les compilateurs. 449 00:32:07,000 --> 00:32:09,000 Ouais, Sam. Vous avez un point. 450 00:32:09,000 --> 00:32:12,000 Le problème, c'est que point central représente une position dans le tableau, 451 00:32:12,000 --> 00:32:15,000 mais vous pouvez l'obtenir pour représenter la valeur dans cette position du tableau. 452 00:32:15,000 --> 00:32:17,000 C'est un excellent point. 453 00:32:17,000 --> 00:32:19,000 Tout le monde a entendu ce que Sam a dit? 454 00:32:19,000 --> 00:32:22,000 Il a dit que milieu est aussi 455 00:32:22,000 --> 00:32:28,000 ne représente qu'une position dans le tableau, mais ce n'est pas le véritable élément dans le tableau. 456 00:32:28,000 --> 00:32:30,000 Si vous pensez que le code écrit en ce moment, 457 00:32:30,000 --> 00:32:35,000 si l'on regarde ce tableau ici-bas, qui dispose de 8 éléments en elle, 458 00:32:35,000 --> 00:32:39,000 quelle est la valeur du milieu va être dans cette fonction? 459 00:32:39,000 --> 00:32:41,000 [Étudiants] 4. 460 00:32:41,000 --> 00:32:45,000 [Nate] 4. 461 00:32:45,000 --> 00:32:51,000 Si l'on regarde le nombre 4 - 462 00:32:51,000 --> 00:32:54,000 et nous pouvons exécuter ce code et mettez un petit visage triste ici 463 00:32:54,000 --> 00:32:58,000 parce que nous n'avons pas trouvé, si nous exécuter ce code 464 00:32:58,000 --> 00:33:04,000 comme c'est en ce moment, de le télécharger, bâtiment, permettez-moi de faire défiler vers le bas, 465 00:33:04,000 --> 00:33:09,000 et si l'on regarde le nombre 4, 466 00:33:09,000 --> 00:33:18,000 nous l'avons trouvé, mais nous n'avons pas obtenu ce à printf oui. 467 00:33:18,000 --> 00:33:23,000 Une des raisons est que nous n'avons pas retourner vrai, 468 00:33:23,000 --> 00:33:26,000 mais avons-nous vraiment trouver le numéro 4? 469 00:33:26,000 --> 00:33:28,000 Et Sam dit non. 470 00:33:28,000 --> 00:33:31,000 Qu'avons-nous trouvé? 471 00:33:31,000 --> 00:33:35,000 Nous avons vraiment trouvé le point médian, qui, si on regarde le tableau ici-bas, 472 00:33:35,000 --> 00:33:38,000 ça va être l'élément à l'index 4 que nous étudions, 473 00:33:38,000 --> 00:33:42,000 qui est 23. 474 00:33:42,000 --> 00:33:46,000 >> Comment pouvons-nous réellement obtenir cet élément au milieu 475 00:33:46,000 --> 00:33:48,000 et pas seulement le milieu lui-même? 476 00:33:48,000 --> 00:33:52,000 [Étudiants] Nous aimerions entrer char ou quelque chose? 477 00:33:52,000 --> 00:33:55,000 Qu'est-ce que cela ferait, juste par curiosité? 478 00:33:55,000 --> 00:33:57,000 Pouvez-vous nous en dire un peu plus? 479 00:33:57,000 --> 00:34:02,000 Vous avez pour transformer la position dans le nombre, 480 00:34:02,000 --> 00:34:05,000 de sorte que vous avez à faire un lien, je pense que c'est char, mais il pourrait ne pas l'être. 481 00:34:05,000 --> 00:34:07,000 Ouais, c'est un bon point. 482 00:34:07,000 --> 00:34:12,000 Nous avons fait beaucoup de ces postes de conversion en caractères, ces caractères, 483 00:34:12,000 --> 00:34:14,000 dans les deux premières séries de problèmes. 484 00:34:14,000 --> 00:34:18,000 Il se trouve que là, ce qui est presque semblable à 485 00:34:18,000 --> 00:34:24,000 l'accès au ième caractère dans une chaîne, si cela fait sens. 486 00:34:24,000 --> 00:34:30,000 Ici, nous voulons accéder à l'élément médian. 487 00:34:30,000 --> 00:34:34,000 Comment faisons-nous cela? 488 00:34:34,000 --> 00:34:39,000 Kevin, avez-vous des suggestions comment nous pourrions le faire? 489 00:34:39,000 --> 00:34:44,000 Vous pourriez faire botte de foin, ouvre la parenthèse, mi, fermé support. 490 00:34:44,000 --> 00:34:46,000 Pouvez-vous écrire cela pour nous? 491 00:34:46,000 --> 00:34:51,000 Enregistrez-le ici, et nous allons tirer que vers le haut. 492 00:34:51,000 --> 00:34:56,000 Nous nous penchons sur cette ligne 9, 493 00:34:56,000 --> 00:34:59,000 et nous sommes conscients que nous ne voulons pas comparer l'aiguille au milieu, 494 00:34:59,000 --> 00:35:03,000 mais au contraire, nous voulons comparer l'aiguille 495 00:35:03,000 --> 00:35:07,000 à l'élément au milieu poste au sein de notre gamme botte de foin. 496 00:35:07,000 --> 00:35:10,000 Cool. 497 00:35:10,000 --> 00:35:12,000 Nous y voilà. 498 00:35:12,000 --> 00:35:15,000 Ouais, ça semble assez bon, si (== aiguille botte de foin [milieu]). 499 00:35:15,000 --> 00:35:18,000 Nous l'avons trouvé. 500 00:35:18,000 --> 00:35:22,000 Maintenant, si nous courons le dos de code we'll un peu peu- 501 00:35:22,000 --> 00:35:26,000 il compile, il fonctionne, et maintenant, si nous recherchons 4, 502 00:35:26,000 --> 00:35:30,000 nous n'avons pas à le trouver, parce que maintenant nous sommes en train d'obtenir le nombre 23. 503 00:35:30,000 --> 00:35:33,000 Nous obtenons la valeur 23, et c'est ce que nous comparons à notre aiguille. 504 00:35:33,000 --> 00:35:35,000 Mais c'est une bonne chose. C'est un pas dans la bonne direction. 505 00:35:35,000 --> 00:35:37,000 >> C'est ce que nous essayons de faire. 506 00:35:37,000 --> 00:35:40,000 Nous n'essayons pas de comparer l'aiguille contre les positions dans le tableau 507 00:35:40,000 --> 00:35:44,000 mais contre les éléments réels du réseau. 508 00:35:44,000 --> 00:35:49,000 Si nous regardons en arrière à nouveau maintenant à la prochaine étape de notre algorithme, 509 00:35:49,000 --> 00:35:51,000 quelle est la prochaine étape? 510 00:35:51,000 --> 00:35:57,000 Leila déjà parlé brièvement. 511 00:35:57,000 --> 00:36:00,000 [Étudiants] Vérifiez pour voir si elle est supérieure ou inférieure, puis décider de quel côté aller. 512 00:36:00,000 --> 00:36:03,000 [Nate] Ouais, alors comment pourrions-nous le faire? 513 00:36:03,000 --> 00:36:07,000 Pouvez-vous mettre dans un certain je-enregistrer cette révision, 514 00:36:07,000 --> 00:36:13,000 et puis si vous mettez en quelques lignes qui vont le faire. 515 00:36:13,000 --> 00:36:15,000 Oui, Charlotte. >> J'ai une question. 516 00:36:15,000 --> 00:36:19,000 Devrait-il pas mi-parcours - 1 parce que la première chose est 517 00:36:19,000 --> 00:36:26,000 c'est 0 indexées, ainsi si nous mettions 4, ce n'est pas réellement le caractère que nous recherchons? 518 00:36:26,000 --> 00:36:30,000 Oui, et l'autre problème avec cela, c'est- 519 00:36:30,000 --> 00:36:35,000 c'est une belle prise, parce que ce qui va se terminer par se produire éventuellement 520 00:36:35,000 --> 00:36:42,000 si nous continuons à avancer et nous ne jamais régler d'abord? 521 00:36:42,000 --> 00:36:46,000 Je suppose que ce que nous pourrions finir par faire est d'essayer d'accéder à 522 00:36:46,000 --> 00:36:49,000 l'élément à la position 8 du tableau, 523 00:36:49,000 --> 00:36:53,000 qui dans ce cas n'existe pas. 524 00:36:53,000 --> 00:36:56,000 Nous voulons faire une sorte de tenir compte du fait 525 00:36:56,000 --> 00:36:59,000 que nous avons une indexation zéro. 526 00:36:59,000 --> 00:37:05,000 [Charlotte] Désolé, je voulais dire mi-parcours - 1 dans les crochets. 527 00:37:05,000 --> 00:37:08,000 Nous pouvons le faire. 528 00:37:08,000 --> 00:37:10,000 Nous reviendrons sur cette question dans un peu. 529 00:37:10,000 --> 00:37:13,000 Une fois que nous commençons à arriver à la boucle réelle, 530 00:37:13,000 --> 00:37:16,000 c'est là que nous allons vraiment voir cette entrent en jeu. 531 00:37:16,000 --> 00:37:21,000 Pour le moment, nous pouvons le faire, mais vous êtes tout à fait raison. 532 00:37:21,000 --> 00:37:28,000 Que l'indexation zéro aura un effet que nous devons rendre compte. 533 00:37:28,000 --> 00:37:30,000 Voyons voir. 534 00:37:30,000 --> 00:37:34,000 >> Comment est la plus grande et de moins-? 535 00:37:34,000 --> 00:37:36,000 [Étudiants] je reçois comment faire le plus long et moins de part. 536 00:37:36,000 --> 00:37:41,000 Je n'étais pas sûr de ce que d'imprimer si vous trouvez qu'il est inférieur au point médian botte de foin ou supérieur. 537 00:37:41,000 --> 00:37:43,000 Ici, je peux sauver ce qui j'ai- 538 00:37:43,000 --> 00:37:47,000 [Nate] Oui, si vous enregistrez ce que vous avez, et nous allons le tirer vers le haut. 539 00:37:47,000 --> 00:37:49,000 Nous y voilà. 540 00:37:49,000 --> 00:37:51,000 [Étudiants] Et je mets des points d'interrogation pour ce que je ne savais pas. 541 00:37:51,000 --> 00:37:54,000 [Nate] Cela ressemble beaucoup. 542 00:37:54,000 --> 00:37:58,000 Ici nous avons des points d'interrogation parce que nous ne savons toujours pas 543 00:37:58,000 --> 00:38:06,000 ce que nous allons tout faire pour le moment. 544 00:38:06,000 --> 00:38:12,000 Qu'est-ce que nous voulons faire, oups, nous avons quelques accolades tous géniaux sur nous. 545 00:38:12,000 --> 00:38:15,000 Nous allons corriger ces accolades. 546 00:38:15,000 --> 00:38:19,000 Nous y voilà. 547 00:38:19,000 --> 00:38:22,000 Et alors qu'est-ce que nous voulons faire, selon notre algorithme, 548 00:38:22,000 --> 00:38:27,000 si nous ne trouvons pas l'aiguille? 549 00:38:27,000 --> 00:38:32,000 Dire dans le cas où l'aiguille est inférieure à ce que nous nous penchons. Kevin. 550 00:38:32,000 --> 00:38:34,000 Regardez seulement la moitié gauche. 551 00:38:34,000 --> 00:38:40,000 Bon, alors on va mettre un commentaire ici qui dit "regarde moins la moitié gauche." 552 00:38:40,000 --> 00:38:46,000 Et si l'aiguille est supérieure à la botte de foin au milieu, que voulons-nous faire? 553 00:38:46,000 --> 00:38:48,000 [Étudiants] Et puis tu regardes la moitié droite. 554 00:38:48,000 --> 00:38:53,000 Regardez la moitié droite, "regarder à moitié raison." 555 00:38:53,000 --> 00:38:58,000 Pas trop mal. 556 00:38:58,000 --> 00:39:05,000 Bon, alors, à ce moment-là, les choses s'annoncent plutôt bien. 557 00:39:05,000 --> 00:39:13,000 Le problème avec le code tel qu'il est écrit, c'est quoi? 558 00:39:13,000 --> 00:39:15,000 [Étudiants] Vous n'avez pas terminaisons pour les deux moitiés. 559 00:39:15,000 --> 00:39:18,000 A droite, nous n'avons pas terminaisons pour les deux moitiés. 560 00:39:18,000 --> 00:39:20,000 Nous avons aussi allez seulement à passer par là. 561 00:39:20,000 --> 00:39:23,000 Nous allons seulement regarder un point médian. 562 00:39:23,000 --> 00:39:27,000 Soit l'élément est là, ou il n'est pas. 563 00:39:27,000 --> 00:39:34,000 Pour compléter cela, nous aurons besoin de faire une sorte de répétition. 564 00:39:34,000 --> 00:39:39,000 Nous devons continuer à répéter jusqu'à ce que nous constatons que 565 00:39:39,000 --> 00:39:43,000 soit l'élément est là parce que nous avons réduit et finalement trouvé, 566 00:39:43,000 --> 00:39:46,000 ou il est pas là parce que nous avons regardé à travers toutes les choses 567 00:39:46,000 --> 00:39:52,000 dans les moitiés appropriées de la matrice et constaté que rien n'est là. 568 00:39:52,000 --> 00:39:56,000 >> Chaque fois que nous avons obtenu cette répétition se passe, qu'est-ce qu'on va utiliser? 569 00:39:56,000 --> 00:39:58,000 [Étudiants] Une boucle. 570 00:39:58,000 --> 00:40:00,000 Une sorte de boucle. Oui. 571 00:40:00,000 --> 00:40:03,000 [Étudiants] Peut-on faire une boucle do-while et faites-le faire et puis, tout en 572 00:40:03,000 --> 00:40:10,000 l'aiguille n'est pas égale-je ne sais pas où je vais avec cela. 573 00:40:10,000 --> 00:40:18,000 Mais un peu comme faire tant qu'il n'est pas égale à la valeur que l'entrée de l'utilisateur. 574 00:40:18,000 --> 00:40:21,000 Oui, nous allons donc voir, comment cela pourrait-il lui-même écrire? 575 00:40:21,000 --> 00:40:23,000 Vous avez dit, nous allons utiliser une boucle do-while. 576 00:40:23,000 --> 00:40:26,000 D'où vient le faire début? 577 00:40:26,000 --> 00:40:33,000 [Étudiants] Juste après la taille / 2. 578 00:40:33,000 --> 00:40:42,000 [Nate] Bon, et qu'est-ce qu'on va faire? 579 00:40:42,000 --> 00:40:44,000 Nous allons remplir le temps plus tard. 580 00:40:44,000 --> 00:40:46,000 Qu'allons-nous faire? 581 00:40:46,000 --> 00:40:49,000 [Étudiants] N'avons-nous pas envie de faire toutes les choses que nous avons dans la partie, si? 582 00:40:49,000 --> 00:40:52,000 [Nate] Faites tout ce genre de choses, tant mieux. 583 00:40:52,000 --> 00:40:55,000 Copier et coller. 584 00:40:55,000 --> 00:40:59,000 Oh, mec. 585 00:40:59,000 --> 00:41:03,000 Voyons voir si cela fonctionne, si nous le pouvons onglet présent terminée. 586 00:41:03,000 --> 00:41:08,000 Belle. 587 00:41:08,000 --> 00:41:16,000 D'accord, et nous avons donc enregistrer ce que vous les gars l'ont. 588 00:41:16,000 --> 00:41:21,000 Très bien, et nous allons le faire en- 589 00:41:21,000 --> 00:41:25,000 ce qui était la condition alors que vous étiez après? 590 00:41:25,000 --> 00:41:31,000 [Étudiants] Alors que l'aiguille n'est pas égal, donc comme le point d'exclamation. 591 00:41:31,000 --> 00:41:37,000 Mais je ne sais pas exactement ce que c'est le moment. 592 00:41:37,000 --> 00:41:39,000 [Nate] Oui, c'est une façon de le faire. 593 00:41:39,000 --> 00:41:41,000 Sam, avez-vous un commentaire? 594 00:41:41,000 --> 00:41:43,000 [Sam] Je me suis souvenu quand j'ai regardé les vidéos, 595 00:41:43,000 --> 00:41:48,000 J'ai pris une capture d'écran d'un des-comme lorsque nous avons fait le pseudo-code pour elle, 596 00:41:48,000 --> 00:41:52,000 il y avait une certaine relation entre max et min. 597 00:41:52,000 --> 00:41:58,000 Je pense que c'était quelque chose comme si max est toujours inférieur à min. 598 00:41:58,000 --> 00:42:00,000 Got it. 599 00:42:00,000 --> 00:42:04,000 [Sam] Ou comme si max n'est pas inférieur à min ou quelque chose comme ça, 600 00:42:04,000 --> 00:42:06,000 parce que cela signifierait que vous avez cherché tout. 601 00:42:06,000 --> 00:42:13,000 >> Ouais, et alors qu'est-ce que ça sonne comme max et min parliez? 602 00:42:13,000 --> 00:42:16,000 [Sam] Sélection-ce que les nombres entiers qui vont changer 603 00:42:16,000 --> 00:42:18,000 par rapport à où nous avons mis au point médian. 604 00:42:18,000 --> 00:42:20,000 Exactement. 605 00:42:20,000 --> 00:42:24,000 [Sam] À ce moment-là, ça va [inaudible] calculer le max et min. 606 00:42:24,000 --> 00:42:29,000 Milieu cette idée max et min. 607 00:42:29,000 --> 00:42:35,000 Est-ce logique pour les gens? 608 00:42:35,000 --> 00:42:39,000 Si nous devions commencer à regarder comment nous allons faire cette itération, 609 00:42:39,000 --> 00:42:43,000 vous êtes tout à fait raison que nous voulons utiliser une sorte de boucle do-while. 610 00:42:43,000 --> 00:42:49,000 Mais je suppose que si nous nous souvenons de ce qui se passe à l'endroit de ce tableau 611 00:42:49,000 --> 00:42:53,000 et ce qui se passe réellement-je vais écrire ici- 612 00:42:53,000 --> 00:42:58,000 à l'itération toute première binaire de recherche, nous avons- 613 00:42:58,000 --> 00:43:05,000 Je vais utiliser b et e pour indiquer le début. 614 00:43:05,000 --> 00:43:10,000 Et puis la fin de notre tableau. 615 00:43:10,000 --> 00:43:14,000 Nous savons que le début est à 4 par ici, 616 00:43:14,000 --> 00:43:18,000 et nous savons que la fin est à 108. 617 00:43:18,000 --> 00:43:23,000 Dites nous recherchons pour le numéro 15. 618 00:43:23,000 --> 00:43:27,000 La première fois que nous faisons cela, comme nous l'avons vu précédemment, 619 00:43:27,000 --> 00:43:30,000 le milieu est soit va être 16 ou 23 620 00:43:30,000 --> 00:43:34,000 selon la façon dont nous calculons les choses. 621 00:43:34,000 --> 00:43:37,000 Depuis uniformément divisant dans le milieu nous donnerait cet espace 622 00:43:37,000 --> 00:43:42,000 entre 16 et 23, on ne peut le diviser uniformément 623 00:43:42,000 --> 00:43:47,000 ou la diviser et obtenir à un point médian vrai. 624 00:43:47,000 --> 00:43:49,000 Nous allons examiner 16. 625 00:43:49,000 --> 00:43:55,000 Nous vous rendrez compte "Hé, 16> 15 que nous recherchons." 626 00:43:55,000 --> 00:43:59,000 Pour ensuite examiner la moitié gauche du tableau 627 00:43:59,000 --> 00:44:03,000 ce que nous allons finir par faire est le rejet 628 00:44:03,000 --> 00:44:07,000 toute cette partie supérieure 629 00:44:07,000 --> 00:44:16,000 et en disant: «Bon, maintenant notre point de terminaison va être ici." 630 00:44:16,000 --> 00:44:22,000 La prochaine itération de notre boucle, nous cherchons maintenant à ce tableau, 631 00:44:22,000 --> 00:44:25,000 effectivement avoir écarté cette partie parce que maintenant 632 00:44:25,000 --> 00:44:30,000 si nous prenons le point médian de la différence entre le début et la fin, 633 00:44:30,000 --> 00:44:34,000 nous trouvons notre milieu à 8, 634 00:44:34,000 --> 00:44:40,000 que nous pourrons tester 8 pour voir où il est en relation avec le nombre que nous recherchons, 635 00:44:40,000 --> 00:44:44,000 15, trouve que 15 est plus grande, 636 00:44:44,000 --> 00:44:49,000 nous devons donc passer à la partie droite de la liste, 637 00:44:49,000 --> 00:44:51,000 que nous connaissons parce que nous sommes des êtres humains, et nous pouvons le voir. 638 00:44:51,000 --> 00:44:54,000 Nous savons que la partie droite va être là où nous le trouvons, 639 00:44:54,000 --> 00:45:01,000 mais l'ordinateur ne sait pas que, si ce que nous allons faire, c'est nous allons effectivement 640 00:45:01,000 --> 00:45:04,000 ont cette montent, et maintenant le début et la fin 641 00:45:04,000 --> 00:45:11,000 sont au même endroit, de sorte que le milieu devient le seul numéro dans la liste à ce moment-là, 642 00:45:11,000 --> 00:45:16,000 qui est de 15, et nous l'avons trouvé. 643 00:45:16,000 --> 00:45:21,000 Est-ce que faire la lumière sur toute max où cette notation et va min, 644 00:45:21,000 --> 00:45:24,000 garder la trace des points de terminaison du réseau dans le but de comprendre 645 00:45:24,000 --> 00:45:35,000 la manière de réduire les choses? 646 00:45:35,000 --> 00:45:42,000 >> Que se passerait-il si ce n'était pas égal à 15 maintenant? 647 00:45:42,000 --> 00:45:52,000 Et si nous étions à la recherche de 15 et, au contraire, ce nombre avait aussi 16? 648 00:45:52,000 --> 00:45:54,000 Nous dirions: «Oh, elle est supérieure. 649 00:45:54,000 --> 00:45:57,000 Nous voulons aller vers la gauche. " 650 00:45:57,000 --> 00:46:01,000 Et nous passerions notre e vers la droite, 651 00:46:01,000 --> 00:46:06,000 à quel point nous avons un point de terminaison qui serait contradictoire. 652 00:46:06,000 --> 00:46:09,000 Il ne serait pas en mesure de rechercher des éléments, pas plus 653 00:46:09,000 --> 00:46:13,000 parce que maintenant nous avons notre point de terminaison et de notre point de départ, 654 00:46:13,000 --> 00:46:16,000 notre max et min notre, sont maintenant inversés. 655 00:46:16,000 --> 00:46:23,000 Nous recherchons à travers l'ensemble du réseau. Nous ne pouvons pas trouver quoi que ce soit. 656 00:46:23,000 --> 00:46:27,000 C'est le moment où nous avions envie de dire: «Bon, nous allons nous arrêter cet algorithme. 657 00:46:27,000 --> 00:46:34,000 Nous n'avons pas trouvé quoi que ce soit. Nous savons que ce n'est pas ici. " 658 00:46:34,000 --> 00:46:36,000 Comment est-ce que ça va? 659 00:46:36,000 --> 00:46:40,000 [Étudiants] Comment fonctionne exactement l'ordinateur passer la fin? 660 00:46:40,000 --> 00:46:45,000 Comment ça la fin finissent avant le début? 661 00:46:45,000 --> 00:46:48,000 L'extrémité se termine avant le début 662 00:46:48,000 --> 00:46:54,000 en raison de la mathématique que nous allons faire à chaque fois que nous faisons cela. 663 00:46:54,000 --> 00:47:00,000 La façon dont nous échangeons, c'est que si vous regardez la toute première fois que nous faisons ce swap 664 00:47:00,000 --> 00:47:03,000 où nous avons le début à 4 et à la fin 665 00:47:03,000 --> 00:47:13,000 tout en bas à 108 et notre milieu, disons, à 16 - 666 00:47:13,000 --> 00:47:20,000 Je vais remettre ce retour à 15 si l'on envisage pour les 15, 667 00:47:20,000 --> 00:47:25,000 nous savions que ce que nous faisions quand nous sommes arrivés le 16 et vit que cela était plus 668 00:47:25,000 --> 00:47:28,000 et je voulais jeter toute la partie droite de la liste, 669 00:47:28,000 --> 00:47:36,000 nous avons vu que ce que nous voulions faire est de déplacer cet e ici. 670 00:47:36,000 --> 00:47:44,000 En effet, l'e me suis déplacé à une avant le milieu. 671 00:47:44,000 --> 00:47:48,000 De même, lorsque nous avons fait cette itération de l'algorithme 672 00:47:48,000 --> 00:47:51,000 et le point milieu est à 8, 673 00:47:51,000 --> 00:47:55,000 nous avons constaté que 8 <15, nous avons donc voulu déplacer le b 674 00:47:55,000 --> 00:48:00,000 une passé le point médian. 675 00:48:00,000 --> 00:48:07,000 Or, le début et la fin sont tous les deux en même temps à ce 15. 676 00:48:07,000 --> 00:48:10,000 >> Si nous avions été se passe à chercher une autre valeur, et non pas 15, 677 00:48:10,000 --> 00:48:14,000 ou, si cela 15 avait été à la place de 16, 678 00:48:14,000 --> 00:48:20,000 nous avons constaté que le courrier que nous voulons déplacer un avant le milieu. 679 00:48:20,000 --> 00:48:33,000 Maintenant, l'e serait là retournée inférieure à la b. 680 00:48:33,000 --> 00:48:39,000 Passons en revue la façon dont nous finissons par cet algorithme de codage. 681 00:48:39,000 --> 00:48:44,000 Nous savons que nous voulons avoir ce calcul milieu. 682 00:48:44,000 --> 00:48:48,000 Nous savons aussi que nous voulons suivre le début et la fin du tableau 683 00:48:48,000 --> 00:48:51,000 de notre gamme actuelle afin que nous puissions comprendre 684 00:48:51,000 --> 00:48:56,000 où cette moitié gauche de la liste et où la moitié droite de la liste est. 685 00:48:56,000 --> 00:49:03,000 Nous faisons cela avec soit commencer et finir, 686 00:49:03,000 --> 00:49:07,000 ou nous pouvons les appeler min et max. 687 00:49:07,000 --> 00:49:10,000 Je vais utiliser commencer et finir cette fois. 688 00:49:10,000 --> 00:49:15,000 Quand nous commençons, si nous regardons en arrière à notre exemple ici-bas, 689 00:49:15,000 --> 00:49:20,000 notre début a été fixé au tout début du tableau, aussi naturel. 690 00:49:20,000 --> 00:49:25,000 Quel indice était-ce? Quelle devrait être notre être commencer? 691 00:49:25,000 --> 00:49:27,000 Daniel. 692 00:49:27,000 --> 00:49:30,000 [Daniel] Haystack [0]. 693 00:49:30,000 --> 00:49:37,000 [Nate] Ouais, pour que nous puissions égal à botte de foin [0]. 694 00:49:37,000 --> 00:49:40,000 Le problème, cependant, c'est que cela nous donne pas la position du premier élément. 695 00:49:40,000 --> 00:49:45,000 Il nous donne l'indice du premier élément ou la valeur réelle à cette première position. 696 00:49:45,000 --> 00:49:47,000 [Étudiants] Cela se convertir à 0,20? 697 00:49:47,000 --> 00:49:52,000 [Nate] Qu'est-ce que cela va faire est, eh bien, il ne fera pas de conversion. 698 00:49:52,000 --> 00:49:56,000 Qu'est-ce qu'il va faire, c'est qu'il va stocker un 4 en commencer, 699 00:49:56,000 --> 00:49:59,000 puis il sera difficile de faire des comparaisons à l'encontre commencer 700 00:49:59,000 --> 00:50:03,000 parce begin tiendra la valeur de 4, 701 00:50:03,000 --> 00:50:06,000 qui est le début de notre tableau, 702 00:50:06,000 --> 00:50:08,000 mais nous voulons suivre les indices dans le tableau 703 00:50:08,000 --> 00:50:11,000 par opposition aux valeurs. 704 00:50:11,000 --> 00:50:17,000 Nous allons utiliser effectivement un 0, comme ça. 705 00:50:17,000 --> 00:50:20,000 Pour la fin du tableau-Charlotte a soulevé cette question un peu plus tôt. 706 00:50:20,000 --> 00:50:23,000 C'est là que nous allons tenir compte de l'indexation zéro. 707 00:50:23,000 --> 00:50:25,000 >> Charlotte, quelle est la fin du tableau? 708 00:50:25,000 --> 00:50:28,000 Quel est l'indice de la fin? 709 00:50:28,000 --> 00:50:30,000 [Charlotte] Taille - 1. 710 00:50:30,000 --> 00:50:32,000 Ouais, et dont la taille doit-on utiliser? 711 00:50:32,000 --> 00:50:35,000 Faut-il utiliser la taille du capital ou de la taille minuscule? 712 00:50:35,000 --> 00:50:37,000 La taille de la capitale. 713 00:50:37,000 --> 00:50:42,000 Dans ce cas, nous pourrions utiliser la taille du capital. 714 00:50:42,000 --> 00:50:45,000 Si nous voulions que cette fonction soit portable 715 00:50:45,000 --> 00:50:48,000 et utilisez cette fonction à d'autres programmes, 716 00:50:48,000 --> 00:50:50,000 nous pouvons utiliser la taille minuscule. 717 00:50:50,000 --> 00:50:52,000 C'est très bien aussi. 718 00:50:52,000 --> 00:51:01,000 Mais Charlotte est totalement juste que nous voulons avoir la taille - 1. 719 00:51:01,000 --> 00:51:03,000 A ce point de 720 00:51:03,000 --> 00:51:05,000 [Étudiants] Comment se fait-il que vous pouvez utiliser la taille majuscules? 721 00:51:05,000 --> 00:51:07,000 Comment est-ce que nous pourrions utiliser la taille majuscules? 722 00:51:07,000 --> 00:51:13,000 Il s'avère que ceux-ci définit # sont vraiment, 723 00:51:13,000 --> 00:51:19,000 sous le capot, un texte comme rechercher et remplacer, si cela fait sens. 724 00:51:19,000 --> 00:51:24,000 Lorsque vous compilez votre code, la phase de prétraitement 725 00:51:24,000 --> 00:51:27,000 du compilateur passe par le fichier, 726 00:51:27,000 --> 00:51:31,000 et il cherche partout que vous avez écrit la taille du capital, 727 00:51:31,000 --> 00:51:39,000 et il remplace ce texte littéralement avec un 8, juste comme ça. 728 00:51:39,000 --> 00:51:42,000 En ce sens, ce qui est très différent d'une variable. 729 00:51:42,000 --> 00:51:45,000 Il ne prend pas de place dans la mémoire. 730 00:51:45,000 --> 00:51:52,000 C'est un truc simple texte de remplacement. 731 00:51:52,000 --> 00:51:57,000 Dans ce cas, nous allons utiliser la taille. 732 00:51:57,000 --> 00:52:01,000 De là, nous voulons faire une sorte de répétition, 733 00:52:01,000 --> 00:52:03,000 et nous sommes sur la bonne voie avec notre boucle do-while. 734 00:52:03,000 --> 00:52:08,000 Nous voulons faire quelque chose jusqu'à ce qu'une condition ne tient plus, 735 00:52:08,000 --> 00:52:12,000 et comme nous l'avons vu plus haut, nous avons vu que cette condition 736 00:52:12,000 --> 00:52:19,000 était en effet que nous ne voulons pas la fin 737 00:52:19,000 --> 00:52:24,000 à moins que le début. 738 00:52:24,000 --> 00:52:26,000 >> C'est notre condition d'arrêt. 739 00:52:26,000 --> 00:52:35,000 Si cela se produit, nous voulons arrêter et déclarer comme «Hé, nous n'avons pas trouvé quoi que ce soit." 740 00:52:35,000 --> 00:52:43,000 Pour exprimer cela, nous voulons utiliser une sorte de boucle. 741 00:52:43,000 --> 00:52:49,000 Dans ce cas, serait-il une boucle do-while, une boucle for, une boucle while? 742 00:52:49,000 --> 00:52:51,000 Nous avons une boucle do-while ici. 743 00:52:51,000 --> 00:52:53,000 Avez-vous les gars comme cette approche? 744 00:52:53,000 --> 00:52:59,000 Pensez-vous que nous devrions essayer une approche différente? 745 00:52:59,000 --> 00:53:01,000 Kevin, des idées? 746 00:53:01,000 --> 00:53:06,000 Nous pourrions avoir une boucle while parce que nous savons maximale 747 00:53:06,000 --> 00:53:11,000 serait plus grand que min au début de toute façon. 748 00:53:11,000 --> 00:53:14,000 Oui, il n'y a donc pas d'initialisation qui doit se produire. 749 00:53:14,000 --> 00:53:17,000 Ces boucles do-while sont grands quand vous avez quelque chose à initialiser 750 00:53:17,000 --> 00:53:21,000 avant de tester ensuite, alors qu'ici, 751 00:53:21,000 --> 00:53:26,000 nous savons que nous n'allons pas garder réinitialisation commencer et finir 752 00:53:26,000 --> 00:53:28,000 chaque tour de la boucle. 753 00:53:28,000 --> 00:53:32,000 Nous savons que nous voulons pour les initialiser, puis vérifier notre état. 754 00:53:32,000 --> 00:53:38,000 Dans ce cas, je vais effectivement aller avec une boucle while simple. 755 00:53:38,000 --> 00:53:44,000 Il s'avère que boucles do-while sont utilisés très souvent. 756 00:53:44,000 --> 00:53:49,000 A beaucoup d'endroits ne sont même pas enseigner ne les boucles while. 757 00:53:49,000 --> 00:53:53,000 Ils sont bons pour la manipulation de l'utilisateur, de sorte que nous avons vu beaucoup d'entre eux à ce jour. 758 00:53:53,000 --> 00:53:59,000 Mais la normale et les boucles while sont beaucoup plus fréquents. 759 00:53:59,000 --> 00:54:03,000 Il s'avère que cette condition écrite 760 00:54:03,000 --> 00:54:09,000 ne sera pas vraiment nous faire beaucoup de bien, et pourquoi est-ce? 761 00:54:09,000 --> 00:54:11,000 Je suis désolé, je ne connais pas votre nom. 762 00:54:11,000 --> 00:54:13,000 Je suis Jerry. >> Désolé? 763 00:54:13,000 --> 00:54:15,000 C'est B-O-R-U-je. 764 00:54:15,000 --> 00:54:18,000 Oh, d'accord. 765 00:54:18,000 --> 00:54:23,000 Je ne vois-tu pas sur ma liste. 766 00:54:23,000 --> 00:54:26,000 Oh, c'est parce que, oh, c'est logique. 767 00:54:26,000 --> 00:54:31,000 Avez-vous une idée de pourquoi cette boucle while peut ne pas fonctionner comme prévu, 768 00:54:31,000 --> 00:54:38,000 tel qu'il est rédigé avec la condition? 769 00:54:38,000 --> 00:54:43,000 [Jerry] Tu veux dire comme vous voulez tous les trucs après dans le-? 770 00:54:43,000 --> 00:54:46,000 Ouais, donc c'est un. 771 00:54:46,000 --> 00:54:49,000 Nous pourrions avoir à faire toutes ces choses dans la boucle while, ce qui est totalement vrai. 772 00:54:49,000 --> 00:54:55,000 L'autre chose qui est un peu plus problématique, cependant, est que cette condition ne fonctionne pas. 773 00:54:55,000 --> 00:54:57,000 [Étudiants] Vous devez le retourner. 774 00:54:57,000 --> 00:55:04,000 Bon, alors cette condition ne sera jamais vrai d'abord la façon dont nous avons parlé. 775 00:55:04,000 --> 00:55:08,000 Nous voulons faire quelque chose jusqu'à ce que 00:55:13,000 mais nous voulons faire quelque chose de tout 777 00:55:13,000 --> 00:55:21,000 begin end ≤. 778 00:55:21,000 --> 00:55:24,000 >> Il est le renversement de la logique là-dedans. 779 00:55:24,000 --> 00:55:27,000 Je suis coupable de faire ces erreurs tout le temps. 780 00:55:27,000 --> 00:55:31,000 [Étudiants] Pourquoi faut-il être inférieur ou égal à? 781 00:55:31,000 --> 00:55:33,000 Parce que vous vous souvenez du cas que nous avons pu 782 00:55:33,000 --> 00:55:36,000 où il n'y avait qu'un seul élément, et nous sommes descendus, 783 00:55:36,000 --> 00:55:43,000 et nous cherchions juste à la 15 dans notre tableau? 784 00:55:43,000 --> 00:55:47,000 Et notre commencement et notre fin était le même élément. 785 00:55:47,000 --> 00:55:50,000 Nous voulons faire en sorte que nous traitons cette affaire. 786 00:55:50,000 --> 00:55:54,000 Si nous avons fait une quinte inférieure, 787 00:55:54,000 --> 00:55:58,000 nous ne serait capable de descendre à un tableau de 2 éléments. 788 00:55:58,000 --> 00:56:06,000 Une fois que nous sommes arrivés à ce dernier élément, si tel était notre élément, nous n'avions jamais le trouver. 789 00:56:06,000 --> 00:56:10,000 Or, ici, nous pouvons faire exactement comme vous disiez. 790 00:56:10,000 --> 00:56:15,000 Nous pouvons commencer plopping trucs en plein milieu de notre boucle while. 791 00:56:15,000 --> 00:56:20,000 Nous pouvons plop dans notre milieu. 792 00:56:20,000 --> 00:56:24,000 Nous pouvons prendre l'ensemble de ces instructions if, 793 00:56:24,000 --> 00:56:30,000 les sortir de cette boucle do-while, 794 00:56:30,000 --> 00:56:34,000 plop eux dans, 795 00:56:34,000 --> 00:56:39,000 nettoyer les choses un peu, 796 00:56:39,000 --> 00:56:48,000 et je vais aller de l'avant et d'économiser cette révision. 797 00:56:48,000 --> 00:56:53,000 Et à ce stade, nous obtenons assez proche. 798 00:56:53,000 --> 00:56:55,000 Sam. 799 00:56:55,000 --> 00:56:58,000 Je pense qu'il faut aussi avoir médiane int size = - 1/2. 800 00:56:58,000 --> 00:57:01,000 Il a obtenu, taille - 1/2. 801 00:57:01,000 --> 00:57:05,000 Y at-il autre chose que nous devons changer autour de cette ligne? 802 00:57:05,000 --> 00:57:10,000 C'était une bonne prise. 803 00:57:10,000 --> 00:57:14,000 >> Qu'est-ce que la taille fait? Sommes-nous toujours changeant la taille? 804 00:57:14,000 --> 00:57:17,000 Afin de garder la ligne comme celui-ci, nous devons changer la taille. 805 00:57:17,000 --> 00:57:21,000 Nous devons changer la taille à chaque fois que nous faisons le tour de la boucle for. 806 00:57:21,000 --> 00:57:25,000 Mais rappelez-vous quand nous allions à travers notre exemple un peu plus tôt, 807 00:57:25,000 --> 00:57:30,000 et nous avons eu au début à 4 808 00:57:30,000 --> 00:57:33,000 et à la fin tout le chemin à 108? 809 00:57:33,000 --> 00:57:35,000 Comment avons-nous calculer le point milieu? 810 00:57:35,000 --> 00:57:38,000 Étions-nous en utilisant la taille? 811 00:57:38,000 --> 00:57:40,000 Ou nous utilisions commencer et se terminer à la place? 812 00:57:40,000 --> 00:57:42,000 C'est la différence entre le début et la fin. 813 00:57:42,000 --> 00:57:50,000 Exactement, et comment exactement dois-je écrire que, Charlotte? 814 00:57:50,000 --> 00:57:52,000 Il suffit de terminer - commencer. 815 00:57:52,000 --> 00:57:55,000 Vous n'avez pas besoin de faire la - 1 816 00:57:55,000 --> 00:57:58,000 parce que la - 1 a été inclus à la fin et le début déjà. 817 00:57:58,000 --> 00:58:00,000 [Nate] Grande, vous êtes tout à fait raison. 818 00:58:00,000 --> 00:58:03,000 Nous n'avons pas à faire de - 1 parce que - 1 a été inclus 819 00:58:03,000 --> 00:58:08,000 et comptabilisés quand on initialiser la variable fin. 820 00:58:08,000 --> 00:58:11,000 >> Y at-il autre chose que je dois faire pour avoir la syntaxe de cette ligne a du sens? 821 00:58:11,000 --> 00:58:13,000 [Étudiants] Plus commencer. >> Plus commencer? 822 00:58:13,000 --> 00:58:15,000 [Étudiants] A la fin. 823 00:58:15,000 --> 00:58:20,000 Parce que c'est seulement la moitié de la longueur calculée. 824 00:58:20,000 --> 00:58:26,000 Vous devez ajouter le commencer. 825 00:58:26,000 --> 00:58:31,000 [Nate] Qu'est-ce que cela calculer pour nous? 826 00:58:31,000 --> 00:58:35,000 Si nous pensons à la fin de cette première itération de la boucle, 827 00:58:35,000 --> 00:58:40,000 fin va être dans 7 à la position index. 828 00:58:40,000 --> 00:58:43,000 Commencez est en position 0. 829 00:58:43,000 --> 00:58:47,000 Rappelez-vous, nous recherchons soit 830 00:58:47,000 --> 00:58:52,000 la position 3 ou la position 4. 831 00:58:52,000 --> 00:58:56,000 Si nous regardons ce calcul, juste pour le rendre un peu plus concret, 832 00:58:56,000 --> 00:59:02,000 mettre des chiffres ici, nous avons 7, 0, 833 00:59:02,000 --> 00:59:10,000 donc 7 - 0, puis / 2 834 00:59:10,000 --> 00:59:19,000 est 3 dans la division entière, ce qui est. 835 00:59:19,000 --> 00:59:26,000 Alors devons-nous alors rajouter notre commencer? 836 00:59:26,000 --> 00:59:28,000 Nous ne sommes pas dans ce cas. 837 00:59:28,000 --> 00:59:31,000 Sur la première itération, il fera beau, car de début est 0. 838 00:59:31,000 --> 00:59:36,000 Mais alors que nous progressons, nous faisons vraiment tout juste besoin d' 839 00:59:36,000 --> 00:59:42,000 fin - début / 2. 840 00:59:42,000 --> 00:59:46,000 Il ya un autre truc ici, et qui est notamment l'une des priorité. 841 00:59:46,000 --> 00:59:49,000 [Étudiants] Avons-nous besoin de parenthèses? 842 00:59:49,000 --> 00:59:53,000 [Nate] Exactement, et c'est parce que si nous ne mettons pas ces parenthèses, 843 00:59:53,000 --> 00:59:58,000 alors cette ligne sera interprétée au lieu 844 00:59:58,000 --> 01:00:09,000 que (fin) - (début / 2), que nous ne voulons certainement pas. 845 01:00:09,000 --> 01:00:11,000 Attention à ces règles de priorité. 846 01:00:11,000 --> 01:00:15,000 [Étudiants] Pourquoi n'est-il pas fin à + commencer? 847 01:00:15,000 --> 01:00:17,000 Pourquoi n'est-il pas fin à + commencer? 848 01:00:17,000 --> 01:00:19,000 [Étudiants] Pourquoi n'est-il pas cela? 849 01:00:19,000 --> 01:00:24,000 Pourquoi serait-il +? 850 01:00:24,000 --> 01:00:26,000 Je pense que vous avez raison. 851 01:00:26,000 --> 01:00:28,000 [Étudiants] Parce que c'est la moyenne? 852 01:00:28,000 --> 01:00:31,000 [Nate] + Fin de commencer, vous êtes tout à fait raison. 853 01:00:31,000 --> 01:00:34,000 Wow, je suis totalement raté son coup. Vous avez raison. 854 01:00:34,000 --> 01:00:39,000 Si nous faisions le moins, nous voudrions ajouter le retour commencent po 855 01:00:39,000 --> 01:00:43,000 Dans ce cas, vous avez raison que nous voulons prendre la moyenne des deux, 856 01:00:43,000 --> 01:00:45,000 si nous voulons les ajouter, au lieu de les soustraire. 857 01:00:45,000 --> 01:00:49,000 [Étudiants] Il serait aussi si vous ne finissent - begin / 2 + commencer. 858 01:00:49,000 --> 01:00:55,000 Il serait si nous le faisons, je crois que oui. 859 01:00:55,000 --> 01:01:00,000 >> Par exemple, si nous cherchions à commencer, 860 01:01:00,000 --> 01:01:04,000 et nous l'avons déplacé ici 861 01:01:04,000 --> 01:01:08,000 au 15. 862 01:01:08,000 --> 01:01:12,000 Maintenant commencer est en position 2. 863 01:01:12,000 --> 01:01:15,000 End est à la position 7. 864 01:01:15,000 --> 01:01:21,000 Si on les soustrait, on obtient 5. 865 01:01:21,000 --> 01:01:24,000 Diviser par 2, nous obtenons 2. 866 01:01:24,000 --> 01:01:27,000 Et puis on ajoute 2 à l'arrière dans, 867 01:01:27,000 --> 01:01:30,000 et qui nous arrive à la 4ème position, 868 01:01:30,000 --> 01:01:33,000 qui est ici, qui est le point central. 869 01:01:33,000 --> 01:01:36,000 [Étudiants] Avons-nous besoin de prendre soin de l'emballage? 870 01:01:36,000 --> 01:01:39,000 Dans quel sens faut-il prendre soin d'envelopper? 871 01:01:39,000 --> 01:01:43,000 Si la somme ou la différence entre 872 01:01:43,000 --> 01:01:45,000 selon la façon dont nous le faisons n'est pas un nombre pair. 873 01:01:45,000 --> 01:01:49,000 Ensuite, l'ordinateur devient confus si quand il est 2,5; 874 01:01:49,000 --> 01:01:52,000 déplacez-vous vers la gauche ou vers la droite pour déterminer qui est le milieu? 875 01:01:52,000 --> 01:01:54,000 Got it. 876 01:01:54,000 --> 01:01:56,000 Il s'avère que la division entière, 877 01:01:56,000 --> 01:01:59,000 nous ne jamais obtenir ces nombres à virgule flottante. 878 01:01:59,000 --> 01:02:01,000 Nous n'avons jamais obtenir la décimale. 879 01:02:01,000 --> 01:02:04,000 Il est totalement écarté. 880 01:02:04,000 --> 01:02:08,000 Si vous avez un ordinateur diviser deux variables int, 881 01:02:08,000 --> 01:02:11,000 et une est 7, et l'autre est 2, 882 01:02:11,000 --> 01:02:13,000 vous n'obtiendrez pas 3.5 en tant que résultat. 883 01:02:13,000 --> 01:02:16,000 Il obtiendra 3. 884 01:02:16,000 --> 01:02:19,000 Le reste sera rejeté, donc c'est effectivement arrondissement 885 01:02:19,000 --> 01:02:24,000 pas un rond, mais plutôt un plancher, si vous les gars sont familiers avec ce que les mathématiques, 886 01:02:24,000 --> 01:02:27,000 où vous rejeter complètement la virgule, 887 01:02:27,000 --> 01:02:31,000 et si vous êtes essentiellement le tronquer inférieur le plus proche de la 888 01:02:31,000 --> 01:02:33,000 position de l'ensemble, à l'entier le plus proche. 889 01:02:33,000 --> 01:02:38,000 [Étudiants] Mais alors c'est problématique parce que si vous avez un tableau de 7 éléments 890 01:02:38,000 --> 01:02:43,000 puis qui prend automatiquement le 3ème élément de la médiane au lieu de la 4ème. 891 01:02:43,000 --> 01:02:46,000 Comment pouvons-nous résoudre ce problème? 892 01:02:46,000 --> 01:02:49,000 C'est problématique parce que si nous avons eu une série de 7, 893 01:02:49,000 --> 01:02:54,000 il serait prendre la 3e place du 4. 894 01:02:54,000 --> 01:02:56,000 Pourriez-vous expliquer un peu plus? 895 01:02:56,000 --> 01:02:59,000 [Étudiants] Parce que si vous disposez de 7 éléments, puis le 4ème élément 896 01:02:59,000 --> 01:03:04,000 serait le point central, non? 897 01:03:04,000 --> 01:03:07,000 N'oubliez pas vos commentaires sur zéro étant indexé, cependant. 898 01:03:07,000 --> 01:03:10,000 [Étudiants] Ouais, donc en position 3. Ce serait le point central. 899 01:03:10,000 --> 01:03:12,000 Ouais. 900 01:03:12,000 --> 01:03:16,000 Oh, d'accord. Je vois ce que tu veux dire. 901 01:03:16,000 --> 01:03:19,000 C'est un peu bizarre, comme on s'habitue à cette notion de 902 01:03:19,000 --> 01:03:22,000 se débarrasser des nombres décimaux. 903 01:03:22,000 --> 01:03:26,000 C'est un excellent point. 904 01:03:26,000 --> 01:03:30,000 Finissons-en. 905 01:03:30,000 --> 01:03:32,000 Nous avons calculé notre milieu. 906 01:03:32,000 --> 01:03:37,000 >> Nous testons pour voir si notre aiguille est égale à la valeur moyenne. 907 01:03:37,000 --> 01:03:41,000 Nous l'impression que nous l'avons trouvé, mais vraiment, qu'est-ce que nous voulons faire dans cette situation? 908 01:03:41,000 --> 01:03:46,000 Nous l'avons trouvé, nous voulons que l'appelant que nous l'avons trouvé. 909 01:03:46,000 --> 01:03:49,000 Nous avons une fonction qui est une fonction booléenne typée. 910 01:03:49,000 --> 01:03:54,000 La façon dont nous signaler à l'appelant de notre fonction que nous sommes prêts à aller 911 01:03:54,000 --> 01:03:58,000 est-on dire, "Hé, c'est vrai." 912 01:03:58,000 --> 01:04:00,000 Comment ferions-nous cela, Kevin? 913 01:04:00,000 --> 01:04:02,000 Vous êtes en hochant la tête. >> [Kevin] Ajouter vrai retour. 914 01:04:02,000 --> 01:04:06,000 [Nate] Exactement, retournez true. 915 01:04:06,000 --> 01:04:12,000 Maintenant, si ce n'est pas égal, comment pourrions-nous examiner la moitié gauche? 916 01:04:12,000 --> 01:04:16,000 Des idées? 917 01:04:16,000 --> 01:04:18,000 Stella, des idées? 918 01:04:18,000 --> 01:04:21,000 Vous devez définir une nouvelle position pour la fin. 919 01:04:21,000 --> 01:04:23,000 Ouais. 920 01:04:23,000 --> 01:04:29,000 Donc, nous devons faire la position du milieu - fin. 921 01:04:29,000 --> 01:04:33,000 Grande. 922 01:04:33,000 --> 01:04:36,000 Nous avons besoin de définir une nouvelle position pour la fin 923 01:04:36,000 --> 01:04:38,000 à regarder la moitié gauche. 924 01:04:38,000 --> 01:04:41,000 C'est ce que nous avons parlé auparavant, où 925 01:04:41,000 --> 01:04:44,000 J'ai toujours revenir à cet exemple. 926 01:04:44,000 --> 01:04:50,000 J'ai le commencer ici, et puis j'ai la fin, tout en venant ici. 927 01:04:50,000 --> 01:04:53,000 >> Encore une fois, si nous sommes à la recherche de 15 ans, et notre milieu est à 16, 928 01:04:53,000 --> 01:04:56,000 et nous nous rendons compte, "Oops, 16 est plus grande. 929 01:04:56,000 --> 01:04:59,000 Nous voulons aller à la moitié gauche. " 930 01:04:59,000 --> 01:05:02,000 Nous serions alors déplacer l'extrémité de la 15, 931 01:05:02,000 --> 01:05:06,000 et nous le faisons par l'un emportant à partir du milieu 932 01:05:06,000 --> 01:05:09,000 et la mise que notre nouvelle fin. 933 01:05:09,000 --> 01:05:12,000 De même, si nous voulons regarder la moitié droite, comment ferions-nous cela? 934 01:05:12,000 --> 01:05:14,000 Avez-vous une idée? 935 01:05:14,000 --> 01:05:22,000 [Étudiants] Vous venez de définir commencer au point milieu + 1. 936 01:05:22,000 --> 01:05:24,000 [Nate] Grande. 937 01:05:24,000 --> 01:05:29,000 Et maintenant, dans le cas où nous ne trouvons rien, 938 01:05:29,000 --> 01:05:32,000 est-ce que vous pris soin de nous? 939 01:05:32,000 --> 01:05:36,000 Daniel, est-ce que vous prendre soin de nous? 940 01:05:36,000 --> 01:05:38,000 [Daniel] No. 941 01:05:38,000 --> 01:05:40,000 [Nate] Si nous le faire à travers l'ensemble du réseau et nous n'avons rien trouvé, 942 01:05:40,000 --> 01:05:42,000 où cela serait-il pris en charge, ou devrions-nous prendre soin de lui? 943 01:05:42,000 --> 01:05:44,000 [Daniel] La condition du while. 944 01:05:44,000 --> 01:05:48,000 [Nate] Ouais, la condition du while, exactement. 945 01:05:48,000 --> 01:05:51,000 Il prendra soin de passer par l'ensemble du réseau si l'on ne trouve rien. 946 01:05:51,000 --> 01:05:53,000 Cette boucle while se termine. 947 01:05:53,000 --> 01:05:56,000 Nous ne pourrons jamais avoir rencontré cette condition, 948 01:05:56,000 --> 01:06:03,000 et nous pouvons renvoyer false. 949 01:06:03,000 --> 01:06:10,000 On peut aussi laisser ce si ici comme ça 950 01:06:10,000 --> 01:06:14,000 parce que si cette affirmation est vraie si, 951 01:06:14,000 --> 01:06:16,000 et notre fonction sera de retour, 952 01:06:16,000 --> 01:06:21,000 et nous allons donc essentiellement annuler cette fonction à ce stade 953 01:06:21,000 --> 01:06:24,000 quand nous reviendrons vrai. 954 01:06:24,000 --> 01:06:28,000 Mais qu'est-ce qui se passe avec cette structure ici? 955 01:06:28,000 --> 01:06:34,000 Est-ce que cela fonctionne tout à fait, ou est-il une faille logique là-dedans? 956 01:06:34,000 --> 01:06:37,000 >> Il ya une certaine faille logique là-dedans, avec la façon dont il est mis en place. 957 01:06:37,000 --> 01:06:40,000 Que pourrait-il être? 958 01:06:40,000 --> 01:06:43,000 [Étudiants] Pourquoi avez-vous besoin - et + 1s? 959 01:06:43,000 --> 01:06:47,000 Qui définit notre gamme pour être notre nouvelle moitié gauche et la moitié droite. 960 01:06:47,000 --> 01:06:51,000 [Étudiants] Mais pourquoi ne pas le faire sans - 1s 1s et +? 961 01:06:51,000 --> 01:06:53,000 [Nate] Nous pourrions égale à la médiane? 962 01:06:53,000 --> 01:07:04,000 Ce qui pourrait être problématique à ce sujet? 963 01:07:04,000 --> 01:07:08,000 [Étudiants] Je suppose que c'est inefficace parce que vous vérifiez une valeur qui a déjà été vérifié. 964 01:07:08,000 --> 01:07:11,000 [Nate] Exactement, Sam est tout à fait raison. 965 01:07:11,000 --> 01:07:15,000 Si vous réglez la fin et le début égale à la médiane 966 01:07:15,000 --> 01:07:18,000 au lieu de - 1 et + 1 réflexive, 967 01:07:18,000 --> 01:07:22,000 à un certain moment dans l'avenir, nous allons finir par contrôler le milieu nouveau. 968 01:07:22,000 --> 01:07:26,000 [Étudiants] J'ai commencé le pset, et puis j'ai eu quelque chose comme ça 969 01:07:26,000 --> 01:07:30,000 où j'ai oublié le 1 +, et il est resté coincé dans une boucle infinie. 970 01:07:30,000 --> 01:07:34,000 Oui, parce que à un moment donné, vous ne réussirez jamais à faire commencer et terminer 971 01:07:34,000 --> 01:07:39,000 à fait se chevaucher. 972 01:07:39,000 --> 01:07:41,000 Cool. 973 01:07:41,000 --> 01:07:44,000 Il ya encore une faille logique, et c'est ce qui devrait certainement être 974 01:07:44,000 --> 01:07:48,000 un autre si. 975 01:07:48,000 --> 01:07:55,000 Pourquoi cela pourrait-il être? 976 01:07:55,000 --> 01:07:59,000 >> La raison en est que ce n'est pas une autre si-avez-vous vu cela, Kevin? 977 01:07:59,000 --> 01:08:02,000 [Kevin] Oui, parce que vous décidez de changer le point de fin. 978 01:08:02,000 --> 01:08:05,000 [Nate] Exactement. 979 01:08:05,000 --> 01:08:07,000 Nous changeons le point final, 980 01:08:07,000 --> 01:08:12,000 et si c'est écrit comme ça we'll-faire des espaces entre- 981 01:08:12,000 --> 01:08:14,000 il vérifiera ce cas. 982 01:08:14,000 --> 01:08:18,000 Cette affaire, si elle réussit, annulerait sortir de la fonction. 983 01:08:18,000 --> 01:08:21,000 Ensuite, il vérifie cette affaire suivante, 984 01:08:21,000 --> 01:08:24,000 et si cela réussit, il ajustera le point final, 985 01:08:24,000 --> 01:08:28,000 et puis il va continuer et vérifier ce cas. 986 01:08:28,000 --> 01:08:31,000 Mais à ce stade, nous ne voulons pas de poursuivre la vérification. 987 01:08:31,000 --> 01:08:35,000 Heureusement, nous n'avons pas réinitialiser le milieu ici, 988 01:08:35,000 --> 01:08:39,000 et nous savons que cette affaire ne réussira pas. 989 01:08:39,000 --> 01:08:44,000 Mais nous voulons vraiment mettre l'autre si il y en 990 01:08:44,000 --> 01:08:48,000 même si cela pourrait, dans ce cas 991 01:08:48,000 --> 01:08:52,000 puisque nous ne sommes pas régler le point milieu, cela ferait-il une différence? 992 01:08:52,000 --> 01:08:54,000 Non, parce que ces cas sont tous exclusifs. 993 01:08:54,000 --> 01:08:58,000 Encore une fois, mon mauvais. 994 01:08:58,000 --> 01:09:01,000 Nous n'avons pas, je crois, besoin de cette else if. 995 01:09:01,000 --> 01:09:05,000 Nous pouvons faire un essai et exécutez-le et voyez ce qui se passe. 996 01:09:05,000 --> 01:09:08,000 Bâtiment, une erreur s'est produite. 997 01:09:08,000 --> 01:09:12,000 C'est probablement parce que je suis parti de ces b et e en ici. 998 01:09:12,000 --> 01:09:14,000 Dois-je plus de ceux au sommet? 999 01:09:14,000 --> 01:09:16,000 Il ne ressemble pas à ça. 1000 01:09:16,000 --> 01:09:20,000 Nous zoom arrière, construire, 1001 01:09:20,000 --> 01:09:24,000 là, il va, maintenant si nous cherchons 15, 1002 01:09:24,000 --> 01:09:28,000 Oui. 1003 01:09:28,000 --> 01:09:30,000 Permettez-moi de zoom avant 1004 01:09:30,000 --> 01:09:33,000 15, oui. On peut l'exécuter à nouveau. 1005 01:09:33,000 --> 01:09:36,000 Téléchargement du code source, construction, au fonctionnement. 1006 01:09:36,000 --> 01:09:41,000 Nous pouvons chercher pour quelque chose comme 13, 1007 01:09:41,000 --> 01:09:45,000 et nous n'obtenons rien imprimer, il n'est donc pas conclure que pour nous. 1008 01:09:45,000 --> 01:09:51,000 C'est très bien, car ce n'est pas dans notre liste. 1009 01:09:51,000 --> 01:09:53,000 >> Nous sommes maintenant hors du temps. 1010 01:09:53,000 --> 01:09:55,000 Ça va être tout pour cette semaine. 1011 01:09:55,000 --> 01:10:00,000 Merci de vous joindre, et vous verrez plus tard. 1012 01:10:00,000 --> 01:10:02,000 >> [CS50.TV]