1 00:00:00,000 --> 00:00:06,370 2 00:00:06,370 --> 00:00:08,150 >> JASON Hirschhorn: Velkommen til uke tre, alle sammen. 3 00:00:08,150 --> 00:00:11,650 Vi har en travel, men spennende seksjonen foran oss. 4 00:00:11,650 --> 00:00:17,010 Så først, fordi vi har gjort noen framskritt med kurset, men vi har fortsatt 5 00:00:17,010 --> 00:00:20,570 har mye læring igjen å gjøre, jeg er kommer til å vise noen ressurser dere 6 00:00:20,570 --> 00:00:24,160 som skulle vise seg å være utrolig nyttig som du ikke bare nærmer deg 7 00:00:24,160 --> 00:00:28,130 Problemet sett, men også fordøye alle materialet vi gi dere i 8 00:00:28,130 --> 00:00:30,800 forelesninger og shorts og seksjon. 9 00:00:30,800 --> 00:00:34,790 >> Så får vi kommer til å tilbringe de første 20 25 minutters avsnitt gå over 10 00:00:34,790 --> 00:00:38,630 GDB, som du kan eller ikke kan ha anvendes på dette punkt, men det er en 11 00:00:38,630 --> 00:00:42,570 utrolig nyttig verktøy som vil hjelpe deg å feilsøke programmene dine. 12 00:00:42,570 --> 00:00:46,060 Mange av dere har kanskje brukt printf i midten av programmet for å finne 13 00:00:46,060 --> 00:00:47,430 ut hva en variabel tangert. 14 00:00:47,430 --> 00:00:52,060 GDB er enda bedre enn printf og ikke skru opp koden din fordi du 15 00:00:52,060 --> 00:00:53,320 kjøre den på en kjørbar fil. 16 00:00:53,320 --> 00:00:56,500 Så går vi over 10 mest nyttig kommandoer du trenger for GDB, og vi er 17 00:00:56,500 --> 00:01:00,540 kommer til å gå på en øvelse sammen så i oppgavesettet tre og utover, du 18 00:01:00,540 --> 00:01:03,320 kan bruke GDB å hjelpe debug programmene dine. 19 00:01:03,320 --> 00:01:06,420 Og til slutt, kommer vi til å gå over noen sortering og søking algoritmer 20 00:01:06,420 --> 00:01:10,590 at du så på forelesning, og vi er kommer til å faktisk kode, ikke bare 21 00:01:10,590 --> 00:01:17,360 pseudo, men kode binære søk, boble sortere og valg liksom. 22 00:01:17,360 --> 00:01:20,090 >> Så først, ønsker jeg å gå over ressursene. 23 00:01:20,090 --> 00:01:23,530 Dette er en omfattende liste, og det er mindre skrift fordi jeg hadde mye å 24 00:01:23,530 --> 00:01:24,390 passe på her. 25 00:01:24,390 --> 00:01:26,950 Men disse vil ikke bare hjelpe deg, igjen, med problemet sett og 26 00:01:26,950 --> 00:01:30,760 fordøye informasjonen du har lært, men definitivt, kommer quiz tid, disse vil 27 00:01:30,760 --> 00:01:32,130 være utrolig nyttig. 28 00:01:32,130 --> 00:01:34,700 Så først, bemerker forelesningen. 29 00:01:34,700 --> 00:01:39,480 Hvis du går til cs50.net/lectures og bla til den ønskede uke og dag, 30 00:01:39,480 --> 00:01:43,120 vil du se at det er notater for hver forelese, noe som ikke er rett og slett en 31 00:01:43,120 --> 00:01:47,250 avskrift, men en redigert versjon av hva som ble dekket i foredrag med kode 32 00:01:47,250 --> 00:01:49,610 snutter og andre nyttige ting. 33 00:01:49,610 --> 00:01:52,220 Jeg anbefaler å gå over dem. 34 00:01:52,220 --> 00:01:55,340 Og da også, det er kildekoden tilgjengelig fra hver forelesning. 35 00:01:55,340 --> 00:02:00,050 Og igjen, vil disse lysbildene også være tilgjengelig online på cs50.net/sections 36 00:02:00,050 --> 00:02:01,480 denne kvelden. 37 00:02:01,480 --> 00:02:06,860 >> Så andre er de shorts hver uke som dekker temaer, vanligvis 5 til 15 38 00:02:06,860 --> 00:02:08,090 minutter i lengde. 39 00:02:08,090 --> 00:02:12,310 Og de som forhåpentligvis vil gi deg en stor primer på forskjellige emner. 40 00:02:12,310 --> 00:02:12,870 Tredje - 41 00:02:12,870 --> 00:02:16,370 og dette er helt nytt denne år - er study.cs50.net. 42 00:02:16,370 --> 00:02:20,110 Hvis du ikke har sjekket det ut, jeg anbefaler at du gjør det. 43 00:02:20,110 --> 00:02:21,100 Du får velge et tema. 44 00:02:21,100 --> 00:02:23,040 Vi har dusinvis av emner på det. 45 00:02:23,040 --> 00:02:24,770 Så for eksempel, plukker du funksjoner. 46 00:02:24,770 --> 00:02:27,270 Det gir deg noen lysbilder og notater på funksjoner. 47 00:02:27,270 --> 00:02:31,190 De er faktisk de lysbildene som TFs oppfordres til å bruke under 48 00:02:31,190 --> 00:02:32,710 presentasjoner i seksjonen. 49 00:02:32,710 --> 00:02:35,040 Det er også tips og triks for å håndtere med funksjoner, og det er 50 00:02:35,040 --> 00:02:37,290 praksis problemer som hjelper du arbeider med funksjoner. 51 00:02:37,290 --> 00:02:41,500 Vi gir deg også lenker til kort på funksjoner og de gangene som fungerer 52 00:02:41,500 --> 00:02:42,750 har kommet opp i foredrag. 53 00:02:42,750 --> 00:02:46,550 Så study.cs50.net, splitter nytt dette år, en fantastisk ressurs. 54 00:02:46,550 --> 00:02:52,180 >> Deretter har jeg menneske, som er den manuelle kommando som du kan kjøre på 55 00:02:52,180 --> 00:02:52,770 kommandolinjen. 56 00:02:52,770 --> 00:02:57,880 Så hvis du har noen spørsmål om en kommando, for eksempel, rand, som vi 57 00:02:57,880 --> 00:03:00,900 møtte forrige uke under avsnittet og du har sannsynligvis oppstått i 58 00:03:00,900 --> 00:03:05,380 problemet satt når du går gjennom generere kode, men hvis du skriver mann 59 00:03:05,380 --> 00:03:09,980 rand, får du den siden som forteller deg alt om rand. 60 00:03:09,980 --> 00:03:14,040 Det gir deg det som trengs, det parametere det tar, samt retur 61 00:03:14,040 --> 00:03:16,530 type og en kort beskrivelse av denne funksjon. 62 00:03:16,530 --> 00:03:17,500 >> Så sjekk ut rand. 63 00:03:17,500 --> 00:03:22,270 Det kan være litt ordrike og forvirrende, så noen ganger finner jeg at 64 00:03:22,270 --> 00:03:26,150 bare Googling hva jeg ønsker å vite er den beste måten å finne svaret. 65 00:03:26,150 --> 00:03:27,940 Så øve med Google. 66 00:03:27,940 --> 00:03:28,600 Få gode på Google. 67 00:03:28,600 --> 00:03:30,600 Det vil bli din beste venn. 68 00:03:30,600 --> 00:03:34,300 >> I tillegg til Google, hvis du ikke kan finne det på Google, cs50.net/discuss, er det 69 00:03:34,300 --> 00:03:35,550 diskusjonsforum. 70 00:03:35,550 --> 00:03:39,390 Sjansene er hvis du har et spørsmål, en av dine 700 + jevnaldrende har også som 71 00:03:39,390 --> 00:03:42,110 spørsmål og kan ha spurt det allerede i diskuterer 72 00:03:42,110 --> 00:03:43,540 fora og har svart på det. 73 00:03:43,540 --> 00:03:48,130 Så hvis du har et vanlig spørsmål eller du har et spørsmål som du tror 74 00:03:48,130 --> 00:03:52,300 kanskje andre mennesker kan ha kjørt inn, sjekk ut cs50.net/discuss. 75 00:03:52,300 --> 00:03:55,450 >> Til slutt, de to siste, hvis du ønsker å snakke med et ekte menneske, kontor 76 00:03:55,450 --> 00:03:57,770 timer mandag til fredag. 77 00:03:57,770 --> 00:04:00,850 Det er også online kontortid for forlengelse studenter. 78 00:04:00,850 --> 00:04:04,370 Og sist, men absolutt ikke minst, meg, utropstegn. 79 00:04:04,370 --> 00:04:05,960 Dere har min kontaktinformasjon. 80 00:04:05,960 --> 00:04:11,940 Hvis du trenger noe, må du aldri nøl med å kontakte meg. 81 00:04:11,940 --> 00:04:14,020 Alltid gjerne gjøre det. 82 00:04:14,020 --> 00:04:17,490 Svært få av dere har lagt meg på Gchat, slik som har vært skuffende, 83 00:04:17,490 --> 00:04:20,410 men forhåpentligvis som vil veksle mellom dette og neste avsnitt. 84 00:04:20,410 --> 00:04:22,105 Eventuelle spørsmål så langt på ressursene? 85 00:04:22,105 --> 00:04:25,670 86 00:04:25,670 --> 00:04:27,450 Flott. 87 00:04:27,450 --> 00:04:34,280 >> Til slutt, en annen plugg for tilbakemeldinger, sayat.me/cs50. 88 00:04:34,280 --> 00:04:37,050 Du kan gi meg anonym tilbakemelding på hvordan jeg gjør. 89 00:04:37,050 --> 00:04:38,320 Det var virkelig nyttig i forrige uke. 90 00:04:38,320 --> 00:04:41,890 Jeg fikk et par kommentarer fra dere rett etter delen, pluss fra 91 00:04:41,890 --> 00:04:44,750 andre studenter som så den i løpet av uken, og det 92 00:04:44,750 --> 00:04:46,830 var utrolig nyttig. 93 00:04:46,830 --> 00:04:50,250 Jeg kommer til å prøve og begrense min bruk av ordet "søt", men jeg vil vise min 94 00:04:50,250 --> 00:04:52,410 entusiasme og spenning på annen måte. 95 00:04:52,410 --> 00:04:56,550 Men det var andre tilleggs substansielle tilbakemeldinger, 96 00:04:56,550 --> 00:04:57,600 både positive og Delta. 97 00:04:57,600 --> 00:05:00,480 Så vær så snill, jeg gir dere tilbakemelding på oppgavesett. 98 00:05:00,480 --> 00:05:01,790 Føl deg fri til å gi meg tilbakemelding på min undervisning. 99 00:05:01,790 --> 00:05:04,010 Jeg er her for dere. 100 00:05:04,010 --> 00:05:05,270 >> Flott. 101 00:05:05,270 --> 00:05:07,020 Det er alt jeg har for den første delen. 102 00:05:07,020 --> 00:05:08,565 Er det noen som har noen spørsmål så langt? 103 00:05:08,565 --> 00:05:12,370 104 00:05:12,370 --> 00:05:14,640 Og jeg har et notat for kontrollsenteret. 105 00:05:14,640 --> 00:05:21,200 Skjøte studenter har messaged meg sier at de ikke får noen lyd, 106 00:05:21,200 --> 00:05:23,870 men det er ute av min makt for å fikse. 107 00:05:23,870 --> 00:05:25,280 Så forhåpentligvis blir det løst innen kort tid. 108 00:05:25,280 --> 00:05:28,850 Hvis du ser på nettet, hi, men du kan ikke høre meg. 109 00:05:28,850 --> 00:05:33,860 >> Så først skal vi å gå gjennom GDB. 110 00:05:33,860 --> 00:05:37,100 GDB, som jeg antydet tidligere, er et feilsøkingsverktøy 111 00:05:37,100 --> 00:05:39,040 mye bedre enn printf. 112 00:05:39,040 --> 00:05:44,700 Så for å komme i gang med GDB, dere, hvis du ønsker å åpne opp apparatet 113 00:05:44,700 --> 00:05:49,070 og ta den filen som jeg mailet til deg tidligere - denne filen vil også være 114 00:05:49,070 --> 00:05:51,940 tilgjengelig på nettet i en bit - 115 00:05:51,940 --> 00:05:55,700 og kjøre GDB. / navnet på filen. 116 00:05:55,700 --> 00:05:58,580 Først, naturligvis, må du kompilere filen fordi GDB fungerer bare på 117 00:05:58,580 --> 00:05:59,890 kjørbare filer. 118 00:05:59,890 --> 00:06:02,300 >> Men hvis du noen gang ønsker å starte GDB, er det første du gjør, 119 00:06:02,300 --> 00:06:04,550 du kjører GDB. / Caesar. 120 00:06:04,550 --> 00:06:08,340 Så det er navnet på programmet vi er kommer til å gå med det akkurat nå. 121 00:06:08,340 --> 00:06:12,810 Så jeg kommer til å skrive gjøre Caesar, som vil gi meg en kjørbar fil 122 00:06:12,810 --> 00:06:14,100 her uthevet i grønt. 123 00:06:14,100 --> 00:06:19,250 Og så kommer jeg til å kjøre GDB. / Cesar. 124 00:06:19,250 --> 00:06:19,810 >> Og der du går. 125 00:06:19,810 --> 00:06:24,540 Du skjønner vi har litt tekst som forteller meg om hvilken versjon av GDB, gi meg 126 00:06:24,540 --> 00:06:27,570 noen garantiinformasjon, og da vi har BNP teksten, som ser liksom 127 00:06:27,570 --> 00:06:29,350 av som vår kommandolinjen, men du ser det er åpent 128 00:06:29,350 --> 00:06:32,510 paren, GDB, nære paren. 129 00:06:32,510 --> 00:06:36,520 Før vi fortsetter og feilsøke denne filen som jeg sendte til dere alle, la oss se på 130 00:06:36,520 --> 00:06:40,220 noen nyttige kommandoer, slik at vi har en følelse av hva vi kommer til å dekke. 131 00:06:40,220 --> 00:06:45,060 >> Disse kommandoene er listet her i rekkefølgen som jeg vanligvis bruker dem. 132 00:06:45,060 --> 00:06:50,230 Så jeg starter programmet ved å kjøre GBD. / Navnet på programmet, 133 00:06:50,230 --> 00:06:51,360 i dette tilfellet, Caesar. 134 00:06:51,360 --> 00:06:57,430 Og så er det første jeg gjør 99,9% av tiden er typen pause mener. 135 00:06:57,430 --> 00:06:59,070 Som setter en pause punkt på hoved. 136 00:06:59,070 --> 00:07:03,260 Hovedsak, hva du gjør det er programmet kommer til å stoppe på 137 00:07:03,260 --> 00:07:06,100 Hoved slik at du kan begynne å undersøke det linjen etter linjen, i stedet for å kjøre all 138 00:07:06,100 --> 00:07:07,040 veien gjennom. 139 00:07:07,040 --> 00:07:09,730 Du kan bryte på forskjellige punkter i koden din, men hoved er generelt en 140 00:07:09,730 --> 00:07:11,870 godt sted å begynne. 141 00:07:11,870 --> 00:07:14,840 >> Den neste kommando jeg kjører er løp. 142 00:07:14,840 --> 00:07:17,400 Det starter programmet kjører, og Hvis du trenger å skrive inn kommandolinjen 143 00:07:17,400 --> 00:07:19,090 argumenter, kjører du det som kommando. 144 00:07:19,090 --> 00:07:20,500 Kjør med argumentene. 145 00:07:20,500 --> 00:07:25,000 Så siden vi kommer over en versjon av C, som er det programmet dere 146 00:07:25,000 --> 00:07:26,160 skrev for PSett to - 147 00:07:26,160 --> 00:07:29,880 denne, selvfølgelig, har noen insekter i det som forhåpentligvis vil vi finne - 148 00:07:29,880 --> 00:07:32,810 vi kommer til å kjøre løp med en kommando argumenter fordi Caesar, 149 00:07:32,810 --> 00:07:34,860 som dere vet per problemet satt spec, tar litt 150 00:07:34,860 --> 00:07:36,380 kommandolinjeargumentene. 151 00:07:36,380 --> 00:07:40,000 >> Det neste par av kommandoer, den neste man blir faktisk kalt neste. 152 00:07:40,000 --> 00:07:42,470 At man tar du linje for linje gjennom programmet. 153 00:07:42,470 --> 00:07:45,800 Så treffer n deretter Enter tar deg til den neste linje, utføring 154 00:07:45,800 --> 00:07:46,880 forrige linje. 155 00:07:46,880 --> 00:07:49,440 Trinn tar ikke bare deg til neste linje, men 156 00:07:49,440 --> 00:07:51,070 tar du inne funksjoner. 157 00:07:51,070 --> 00:07:54,310 Så hvis du har skrevet en funksjon i koden din, eller hvis du ønsker å utforske et 158 00:07:54,310 --> 00:07:57,820 til i, for eksempel, kan du treffer s, og stedet for å gå til den neste linje i 159 00:07:57,820 --> 00:08:02,390 filen som du går gjennom akkurat nå, vil du faktisk gå inn 160 00:08:02,390 --> 00:08:04,670 denne funksjonen og se sin kode. 161 00:08:04,670 --> 00:08:12,300 >> Listen viser, i svært brukervennlig format, de 10 eller så linjer rundt 162 00:08:12,300 --> 00:08:14,940 hvor du befinner deg i koden så du kan faktisk se filen 163 00:08:14,940 --> 00:08:17,810 snarere enn å måtte bytte tilbake og tilbake mellom ulike visninger. 164 00:08:17,810 --> 00:08:21,890 Utskriften er som printf, som navnet tilsier. 165 00:08:21,890 --> 00:08:24,020 Som viser deg hva en variabel er lik. 166 00:08:24,020 --> 00:08:25,870 >> Info lokalbefolkningen er veldig nyttig. 167 00:08:25,870 --> 00:08:27,740 Dette er en spesiell versjon av print. 168 00:08:27,740 --> 00:08:31,770 Info lokalbefolkningen viser deg alle de lokale variabler, skriver dem ut for deg 169 00:08:31,770 --> 00:08:33,380 som er tilgjengelig for øyeblikket. 170 00:08:33,380 --> 00:08:36,360 Så jeg generelt, heller enn å måtte skrive ut de fire variabler som jeg er 171 00:08:36,360 --> 00:08:39,929 nysgjerrig på om jeg er i en for loop, for eksempel, jeg bare skrive info lokalbefolkningen, 172 00:08:39,929 --> 00:08:43,470 og det skal vise meg hva mitt teller jeg er lik, så vel som den matrise som er jeg 173 00:08:43,470 --> 00:08:45,130 arbeider med likemenn. 174 00:08:45,130 --> 00:08:47,530 >> Til slutt, fortsetter. 175 00:08:47,530 --> 00:08:49,300 Skrive pause stopper deg Stillingen ved pause punktet. 176 00:08:49,300 --> 00:08:51,380 Du kan gå gjennom linjen ved tråd med neste og trinn. 177 00:08:51,380 --> 00:08:55,640 Fortsett kjører programmet til din neste bryte punkt eller til den er ferdig hvis 178 00:08:55,640 --> 00:08:57,180 er det ingen flere brytepunkter. 179 00:08:57,180 --> 00:09:00,060 Deaktiver fjerner pause poeng hvis du besluttet pause på hoved var 180 00:09:00,060 --> 00:09:01,890 upassende, vil du sette den et annet sted. 181 00:09:01,890 --> 00:09:05,090 Og til slutt q, avslutte, kommer ut av GDB. 182 00:09:05,090 --> 00:09:10,784 >> Så dette programmet,. / Caesar, vi skal å se gjennom akkurat nå, og vi 183 00:09:10,784 --> 00:09:13,490 skal bruke GDB å finne bugs i dette programmet. 184 00:09:13,490 --> 00:09:18,110 Jeg kjørte dette programmet tidligere med Sjekk 50, og jeg fikk en rynke. 185 00:09:18,110 --> 00:09:22,310 Alt det eksisterte, det kompilert, det passerte en rekke av testene, men for 186 00:09:22,310 --> 00:09:27,950 noen grunn, gjorde det ikke passere den femte test, snu BARFOO, alle caps, inn 187 00:09:27,950 --> 00:09:33,350 E-D-E-I-R-R-, bokstaver, ved hjelp av tre som en nøkkel. 188 00:09:33,350 --> 00:09:34,090 Jeg fikk ganske nær. 189 00:09:34,090 --> 00:09:35,410 Jeg gikk av med én bokstav. 190 00:09:35,410 --> 00:09:37,340 Så det er noen små feil her. 191 00:09:37,340 --> 00:09:38,070 Jeg har sett gjennom min kode. 192 00:09:38,070 --> 00:09:38,850 Jeg kunne ikke finne ut av det. 193 00:09:38,850 --> 00:09:41,740 Forhåpentligvis kan dere hjelpe meg finne ut hva denne feilen er. 194 00:09:41,740 --> 00:09:44,610 >> Så det er feilen vi er søker etter. 195 00:09:44,610 --> 00:09:46,090 La oss flytte inn GDB. 196 00:09:46,090 --> 00:09:51,100 Igjen, jeg har kjørt GDB. / Caesar, så nå er vi i GDB. 197 00:09:51,100 --> 00:09:54,290 Og hva er det første ting jeg bør gjøre? 198 00:09:54,290 --> 00:09:56,680 Jeg har akkurat kommet inn GDB. 199 00:09:56,680 --> 00:10:00,316 Noen gi meg en god kommando for å gå inn. 200 00:10:00,316 --> 00:10:01,140 >> STUDENT: Bryt hoved. 201 00:10:01,140 --> 00:10:01,800 >> JASON Hirschhorn: Bryt hoved. 202 00:10:01,800 --> 00:10:02,900 Fantastisk. 203 00:10:02,900 --> 00:10:03,560 La oss skrive at i. 204 00:10:03,560 --> 00:10:06,390 Dere kan se deg her eller følg sammen på datamaskinene. 205 00:10:06,390 --> 00:10:09,410 Bryt hoved, og du vil se en break point ble satt til - 206 00:10:09,410 --> 00:10:12,340 det gir meg noen rare minneadresse, og det gir meg også linjenummer. 207 00:10:12,340 --> 00:10:15,310 Hvis jeg var å se tilbake på denne filen, Jeg ville innse at hoved 208 00:10:15,310 --> 00:10:17,700 skjedde på linje 21. 209 00:10:17,700 --> 00:10:18,950 Hva bør jeg kjøre neste? 210 00:10:18,950 --> 00:10:22,970 211 00:10:22,970 --> 00:10:25,060 Er min program som kjører? 212 00:10:25,060 --> 00:10:25,650 Nei. 213 00:10:25,650 --> 00:10:27,175 Så hva bør jeg kjøre neste? 214 00:10:27,175 --> 00:10:27,520 >> STUDENT: Kjør. 215 00:10:27,520 --> 00:10:28,050 >> JASON Hirschhorn: Kjør. 216 00:10:28,050 --> 00:10:30,760 Skal jeg bare kjøre løp, eller skal Jeg legger til noen andre ting i? 217 00:10:30,760 --> 00:10:31,960 >> STUDENT: Kjør med argumentet. 218 00:10:31,960 --> 00:10:33,320 >> JASON Hirschhorn: Kjør med kommandoen argumenter. 219 00:10:33,320 --> 00:10:36,420 Og siden jeg feilsøker i en veldig spesifikk tilfelle, skal jeg gå inn for at 220 00:10:36,420 --> 00:10:37,120 Argumentet for kommandolinjen. 221 00:10:37,120 --> 00:10:42,290 Så jeg skal ikke kjøre tre, som er, igjen, output jeg fikk fra Check 50. 222 00:10:42,290 --> 00:10:44,240 Starte programmet. 223 00:10:44,240 --> 00:10:45,420 Vi går gjennom et par linjer. 224 00:10:45,420 --> 00:10:47,700 Du vil nå se at vi er på linje 21. 225 00:10:47,700 --> 00:10:49,200 Hvordan vet jeg at vi er på linje 21? 226 00:10:49,200 --> 00:10:52,170 Fordi hvis du ser til venstre av min terminalvindu, der 227 00:10:52,170 --> 00:10:53,120 det sier Line 21. 228 00:10:53,120 --> 00:10:57,010 Og det gir meg, faktisk, den kode som er i linje 21.. 229 00:10:57,010 --> 00:10:58,440 Så jeg misspoke tidligere. 230 00:10:58,440 --> 00:10:59,770 Hoved er faktisk ikke på linje 21. 231 00:10:59,770 --> 00:11:02,000 Main er et par linjer over 21. 232 00:11:02,000 --> 00:11:04,300 Men på linje 21, er at hvor vi bryte. 233 00:11:04,300 --> 00:11:06,280 Dette kodelinje har ennå ikke utført. 234 00:11:06,280 --> 00:11:06,890 Det er viktig. 235 00:11:06,890 --> 00:11:09,120 Linjen du ser har ikke blitt utført ennå. 236 00:11:09,120 --> 00:11:12,650 Det er den neste linje med kode du er i ferd med å gjennomføre. 237 00:11:12,650 --> 00:11:15,860 >> Så neste linje, som dere er sannsynligvis kjent med, er dette 238 00:11:15,860 --> 00:11:20,070 tilstand sjekke for å se om jeg har gikk inn i en kommandolinje argument. 239 00:11:20,070 --> 00:11:22,140 Og en til jeg, hva er den andre en del av det å gjøre? 240 00:11:22,140 --> 00:11:23,457 Hva er en til jeg? 241 00:11:23,457 --> 00:11:24,950 >> STUDENT: Endre det til et heltall. 242 00:11:24,950 --> 00:11:25,450 >> JASON Hirschhorn: Sorry? 243 00:11:25,450 --> 00:11:27,400 >> STUDENT: Det er å endre argumentet til et helt tall. 244 00:11:27,400 --> 00:11:30,890 >> JASON Hirschhorn: Så en til jeg endrer arg v1 fra en streng til et heltall. 245 00:11:30,890 --> 00:11:32,140 Og hva er det å sjekke? 246 00:11:32,140 --> 00:11:35,414 247 00:11:35,414 --> 00:11:37,112 >> STUDENT: Hvis det er en andre kommandolinje argument, bortsett 248 00:11:37,112 --> 00:11:38,100 fra å kjøre programmet. 249 00:11:38,100 --> 00:11:39,460 >> JASON Hirschhorn: Og hva er den andre halvparten av dette 250 00:11:39,460 --> 00:11:41,220 Boolsk uttrykk sjekke? 251 00:11:41,220 --> 00:11:42,540 Denne delen over her, en til jeg? 252 00:11:42,540 --> 00:11:44,080 >> STUDENT: Hvis det er negativt. 253 00:11:44,080 --> 00:11:45,380 >> JASON Hirschhorn: Å sørge for hva? 254 00:11:45,380 --> 00:11:47,120 >> STUDENT: Sørge for at det er, faktisk, positive. 255 00:11:47,120 --> 00:11:47,650 >> JASON Hirschhorn: Nettopp. 256 00:11:47,650 --> 00:11:50,600 Dette er å sjekke for å se om det er negativ, og hvis den er negativ, I 257 00:11:50,600 --> 00:11:53,220 har en følelse av neste linje makt være meg roping på brukeren. 258 00:11:53,220 --> 00:11:55,930 Så la oss treffer enden for å utføre denne linjen. 259 00:11:55,930 --> 00:11:59,925 Vi kan ikke se at linjen som dere kanskje ventet å se roping på 260 00:11:59,925 --> 00:12:03,030 brukeren, og deretter retur, fordi denne linjen ikke kjøre. 261 00:12:03,030 --> 00:12:03,840 Jeg kom inn tre. 262 00:12:03,840 --> 00:12:06,860 Så jeg gjorde, faktisk, skriv to kommando argumenter, og tre er 263 00:12:06,860 --> 00:12:07,610 er større enn null. 264 00:12:07,610 --> 00:12:09,950 Så vi så den linjen, henrettet vi, men vi fikk ikke gå 265 00:12:09,950 --> 00:12:11,300 inne hvis betingelsen. 266 00:12:11,300 --> 00:12:17,060 >> Så nå, neste, jeg ser Jeg setter int nøkkel tilsvarer en til jeg arg v1. 267 00:12:17,060 --> 00:12:18,840 Så det er meg du oppretter en variabel nøkkel. 268 00:12:18,840 --> 00:12:22,450 Så hvis jeg skriver ut nøkkelen akkurat nå, fordi som lar deg se 269 00:12:22,450 --> 00:12:26,040 verdi inne i variabelen, Nøkkelen er lik 47. 270 00:12:26,040 --> 00:12:28,810 Det er rart, men selvfølgelig, det er fordi jeg har ikke 271 00:12:28,810 --> 00:12:30,490 henrettet den linjen ennå. 272 00:12:30,490 --> 00:12:35,880 Så nå hvis jeg treffer n, kjøre den linjen, og gjøre print nøkkel, vil nøkkelen lik 3, 273 00:12:35,880 --> 00:12:37,740 som er hva vi forventer at det skal være lik. 274 00:12:37,740 --> 00:12:41,170 >> Så igjen, i GDB, linjen du ser du ikke har utført ennå. 275 00:12:41,170 --> 00:12:44,850 Du må treffe n eller s eller et nummer av andre kommandoer til faktisk 276 00:12:44,850 --> 00:12:46,610 kjøre den linjen. 277 00:12:46,610 --> 00:12:47,380 Skriv ut nøkkelen. 278 00:12:47,380 --> 00:12:48,280 Keys på tre. 279 00:12:48,280 --> 00:12:49,750 Så langt, så bra. 280 00:12:49,750 --> 00:12:51,000 String er ren tekst. 281 00:12:51,000 --> 00:12:52,270 La oss kjøre den linjen. 282 00:12:52,270 --> 00:12:53,970 Jeg får en streng fra brukeren. 283 00:12:53,970 --> 00:12:58,690 >> La oss se i min Sjekk 50, jeg skriv BARFOO alle caps, så 284 00:12:58,690 --> 00:13:01,330 det er det jeg skal gå inn. 285 00:13:01,330 --> 00:13:07,300 Hvis jeg nå skrive ren tekst. 286 00:13:07,300 --> 00:13:08,610 Du vil se det tilsvarer en streng. 287 00:13:08,610 --> 00:13:11,100 Det gir meg noen rare heksadesimale tall, men det gjør i 288 00:13:11,100 --> 00:13:13,620 Faktisk si at min strengen er BARFOO. 289 00:13:13,620 --> 00:13:19,308 Hvis jeg ønsket å se hvilken tast tangert på dette punktet, hvordan kunne jeg sjekke nøkkelen? 290 00:13:19,308 --> 00:13:20,710 >> STUDENT: Skriv ut nøkkelen. 291 00:13:20,710 --> 00:13:22,010 >> JASON Hirschhorn: Skriv ut nøkkelen, akkurat. 292 00:13:22,010 --> 00:13:23,260 Og faktisk, det er en snarvei. 293 00:13:23,260 --> 00:13:25,910 Hvis du blir lei av å skrive print, du kan bare skrive s.. 294 00:13:25,910 --> 00:13:28,340 Så p-tasten gjør de samme ting. 295 00:13:28,340 --> 00:13:29,730 Og igjen, jeg ser det er lik tre. 296 00:13:29,730 --> 00:13:34,760 >> Hvis jeg ønsket å finne ut hva både nøkkel og BARFOO tangert samtidig 297 00:13:34,760 --> 00:13:37,215 men jeg var lei av å skrive hver en ut individuelt, jeg 298 00:13:37,215 --> 00:13:38,590 kunne skrive info lokalbefolkningen. 299 00:13:38,590 --> 00:13:41,170 Det gir meg viktige likhets tre. 300 00:13:41,170 --> 00:13:42,500 Ren tekst er lik BARFOO. 301 00:13:42,500 --> 00:13:45,265 Det gir meg også disse to rare ting på toppen, variabelen og 302 00:13:45,265 --> 00:13:46,590 denne variabelen n. 303 00:13:46,590 --> 00:13:48,460 >> De er faktisk eksisterende i min hovedprogrammet. 304 00:13:48,460 --> 00:13:51,280 Vi har ikke møtt dem ennå, men som en forhåndsvisning, de 305 00:13:51,280 --> 00:13:52,880 eksistere i min for loop. 306 00:13:52,880 --> 00:13:55,360 Så akkurat nå, de like noen rare tall, fordi de ikke har vært 307 00:13:55,360 --> 00:13:58,300 initialisert ennå, men de har fortsatt eksisterer i minnet, slik at de bare satt 308 00:13:58,300 --> 00:14:00,220 til noen søppel verdi. 309 00:14:00,220 --> 00:14:02,890 Men vi ser nøkkelen i ren tekst rett der. 310 00:14:02,890 --> 00:14:06,390 >> Så jeg kommer til å kjøre denne linjen, linje 34, for loop. 311 00:14:06,390 --> 00:14:08,220 Vi kommer til å hoppe i for loop ved å treffe n. 312 00:14:08,220 --> 00:14:10,050 Og vi er inne i for loop. 313 00:14:10,050 --> 00:14:11,360 Vi er på vår første sjekk. 314 00:14:11,360 --> 00:14:14,300 Og igjen, disse skal liksom se kjent for deg, fordi dette var en 315 00:14:14,300 --> 00:14:18,080 Cæsar-programmet som ble skrevet, men igjen, har en slags insekt. 316 00:14:18,080 --> 00:14:21,940 >> Og nå hvis jeg gjør info lokalbefolkningen, fordi jeg er innsiden som for loop, vil du se 317 00:14:21,940 --> 00:14:23,900 at jeg er lik null, som vi forventer. 318 00:14:23,900 --> 00:14:26,820 Det er det vi setter den til og initialisert det å i for loop. 319 00:14:26,820 --> 00:14:27,560 n er lik seks. 320 00:14:27,560 --> 00:14:30,700 Det gjør også fornuftig fordi vi satt det til strlen av ren tekst. 321 00:14:30,700 --> 00:14:34,270 Så jeg liker å gjøre info lokalbefolkningen eller print til variable ofte å sørge for at 322 00:14:34,270 --> 00:14:36,370 alt er alltid hva Jeg forventer at det skal være lik. 323 00:14:36,370 --> 00:14:39,800 I dette tilfellet er alt hva jeg forventer at det skal være lik. 324 00:14:39,800 --> 00:14:41,850 >> Så la oss begynne å bevege seg gjennom dette for loop. 325 00:14:41,850 --> 00:14:45,715 Linjen jeg er på det linje 36, hvis det er vanlig Teksten i er større enn en og vanlig 326 00:14:45,715 --> 00:14:48,540 Teksten i er mindre enn eller lik z. 327 00:14:48,540 --> 00:14:51,880 Jeg vet mitt problem er ikke med min første brev, er det med den andre bokstaven. 328 00:14:51,880 --> 00:14:56,290 Hvis vi ser tilbake på Check 50, B går til E fint. 329 00:14:56,290 --> 00:14:59,010 Jeg tar en og forlate det som en A, ikke endre det til D. Så 330 00:14:59,010 --> 00:15:00,200 noe er galt med den andre bokstaven. 331 00:15:00,200 --> 00:15:01,640 Så jeg kommer til å flytte det i et sekund. 332 00:15:01,640 --> 00:15:06,030 >> Men hvis jeg hadde lyst til å sjekke hva vanlig Teksten jeg tangert i denne spesielle 333 00:15:06,030 --> 00:15:07,760 Da tror jeg det skal være hva? 334 00:15:07,760 --> 00:15:10,980 Hva bør ren tekst jeg like i dette første runde gjennom for loop? 335 00:15:10,980 --> 00:15:14,046 336 00:15:14,046 --> 00:15:15,110 >> STUDENT: Zero? 337 00:15:15,110 --> 00:15:16,510 >> JASON Hirschhorn: Ren tekst av jeg? 338 00:15:16,510 --> 00:15:21,180 Slik det skal være stor B. I naturligvis lik null, men ren tekst 339 00:15:21,180 --> 00:15:25,600 brakett null lukket vinkelen er B fordi strenger, som vi så i forrige uke, 340 00:15:25,600 --> 00:15:28,650 er array, så vi får den første tegnet fra det. 341 00:15:28,650 --> 00:15:34,960 Så igjen, hvis jeg printet ut ren tekst av I, I do i virkeligheten få tegnet 342 00:15:34,960 --> 00:15:36,560 B. Og det er ryddig, ikke sant? 343 00:15:36,560 --> 00:15:40,380 Jeg har ikke egentlig ren tekst I. Det er ikke en av de variablene jeg satt 344 00:15:40,380 --> 00:15:42,950 eller initialisert, men du kan skrive ut ut en hel rekke ting 345 00:15:42,950 --> 00:15:45,640 hvis du ønsker det. 346 00:15:45,640 --> 00:15:47,340 >> Men la oss gå gjennom. 347 00:15:47,340 --> 00:15:50,050 Hvis ren tekst jeg er større enn A og ren tekst I er mindre enn eller lik 348 00:15:50,050 --> 00:15:53,290 Z, som tydelig er sant fordi vi har en kapital B. Jeg kommer til å kjøre 349 00:15:53,290 --> 00:15:54,230 noen kommando på den. 350 00:15:54,230 --> 00:15:58,530 Vi så at matematikk i forrige uke, så vi får ta det for gitt at det fungerer 351 00:15:58,530 --> 00:16:00,900 retten ifølge Sjekk 50. 352 00:16:00,900 --> 00:16:03,720 >> Disse klammeparentes, den første viste at jeg var spennende hvis 353 00:16:03,720 --> 00:16:07,030 stand, viste det andre en at jeg avslutter for loop. 354 00:16:07,030 --> 00:16:10,400 Og så nå da jeg traff Neste, vi får se vi er tilbake på for-løkken igjen. 355 00:16:10,400 --> 00:16:11,970 Vi går gjennom for loop igjen. 356 00:16:11,970 --> 00:16:18,110 La oss faktisk gå inn i andre iterasjon av for løkke og type 357 00:16:18,110 --> 00:16:20,520 info lokalbefolkningen. 358 00:16:20,520 --> 00:16:22,190 >> Så vi er i den andre iterasjon av vår for loop. 359 00:16:22,190 --> 00:16:24,530 Jeg er lik 1, som vi forventer. 360 00:16:24,530 --> 00:16:26,650 N er lik 6, som vi forventer. 361 00:16:26,650 --> 00:16:28,810 Key er lik 3, som vi forventer. 362 00:16:28,810 --> 00:16:32,625 Og ren tekst, vil du se, lik EARFOO nå, ikke BARFOO lenger fordi 363 00:16:32,625 --> 00:16:37,930 i vår forrige iterasjon, B var endret til en kapital E. Så vi er i ferd med 364 00:16:37,930 --> 00:16:40,040 å møte problemet, så dette er der vi kommer til å 365 00:16:40,040 --> 00:16:41,130 dykke inn i debugging. 366 00:16:41,130 --> 00:16:43,365 Men er det noen som har noen spørsmål om hva vi har gjort så langt? 367 00:16:43,365 --> 00:16:46,770 368 00:16:46,770 --> 00:16:47,910 Fantastisk. 369 00:16:47,910 --> 00:16:52,710 >> Så vi er i ferd med å gjennomføre dette hvis tilstand, ren tekst brakett jeg lukket 370 00:16:52,710 --> 00:16:57,500 brakett større enn A og ren tekst jeg mindre enn eller lik Z. Men før 371 00:16:57,500 --> 00:17:00,450 Jeg går inn på det, fordi det er der Jeg vet at min feil er at jeg ønsker å påpeke 372 00:17:00,450 --> 00:17:06,859 ut ren tekst av I. Så la oss sette print ut. 373 00:17:06,859 --> 00:17:12,020 Det gjør det tilsvare tegnet A, slik at virker så langt, er alt vel og bra. 374 00:17:12,020 --> 00:17:14,740 >> Så jeg forventer at denne linjen per min logikk, Denne linjen skal være sant. 375 00:17:14,740 --> 00:17:16,099 Det er en stor bokstav. 376 00:17:16,099 --> 00:17:20,599 Men hvis jeg treffer n, innser vi at dette linje, faktisk, ikke utføre. 377 00:17:20,599 --> 00:17:22,609 Jeg hoppet ned til annet hvis. 378 00:17:22,609 --> 00:17:25,460 Hvorfor skjedde det? 379 00:17:25,460 --> 00:17:27,480 >> STUDENT: Fordi du har din tilstand av ren tekst er større 380 00:17:27,480 --> 00:17:29,130 enn A, ikke er lik eller større enn. 381 00:17:29,130 --> 00:17:32,260 >> JASON Hirschhorn: Så jeg hadde min ren tekst I er større enn A, som ikke er større 382 00:17:32,260 --> 00:17:32,850 enn eller lik. 383 00:17:32,850 --> 00:17:38,130 Så klart, gjorde ikke hovedstaden A utløse dette hvis tilstanden, og vi gjorde 384 00:17:38,130 --> 00:17:40,520 ikke gå inn i det, og vi gjorde ikke gjør de nødvendige skift. 385 00:17:40,520 --> 00:17:41,360 Så det er det, faktisk. 386 00:17:41,360 --> 00:17:42,920 Jeg fant ut min feil. 387 00:17:42,920 --> 00:17:46,775 Jeg kunne gå tilbake i min kildefilen, endre det, og oppdatere det og 388 00:17:46,775 --> 00:17:47,855 kjøre Sjekk 50 igjen. 389 00:17:47,855 --> 00:17:52,590 >> Men vi får se, bare for pedagogikk er skyld, hvis jeg holde det gående. 390 00:17:52,590 --> 00:17:59,580 Annet hvis ikke kjøre heller, men hva stedet lik er kommandoen 391 00:17:59,580 --> 00:18:00,500 som ikke endres. 392 00:18:00,500 --> 00:18:04,840 Så det er ikke endret i det hele tatt, og hvis jeg skrive ren tekst her, vi får se kommer 393 00:18:04,840 --> 00:18:08,250 gjennom at for loopen ikke gjorde det, faktisk, endre det andre tegn i det hele tatt. 394 00:18:08,250 --> 00:18:09,600 Det er fortsatt en kapital A. 395 00:18:09,600 --> 00:18:12,690 >> Så igjen, vi feilsøkt vår feil. 396 00:18:12,690 --> 00:18:17,380 Vi innså at det var noen logikk mangler. 397 00:18:17,380 --> 00:18:20,590 Og vi feilsøkt det på forhånd før faktisk utfører den linjen, 398 00:18:20,590 --> 00:18:24,320 men du ville ha lagt merke hadde vi bare rammet Neste og gå til det annet hvis, 399 00:18:24,320 --> 00:18:26,710 det betyr at at hvis tilstanden var ikke sant. 400 00:18:26,710 --> 00:18:29,550 Vi gjorde ikke, faktisk, får resultatet vi forventet. 401 00:18:29,550 --> 00:18:33,240 Så da kunne vi ha blitt bedt om det, hadde vi ikke vært så slu, for å se på 402 00:18:33,240 --> 00:18:38,510 at hvis tilstand og sjekke om, faktisk, vår tilstand bør vurdere å 403 00:18:38,510 --> 00:18:41,150 sant i den aktuelle konteksten. 404 00:18:41,150 --> 00:18:42,880 >> Det er alt for debugging dette programmet. 405 00:18:42,880 --> 00:18:45,340 Er det noen som har noen spørsmål? 406 00:18:45,340 --> 00:18:50,486 Hvilken kommando kan jeg treffer å slutte GDB? 407 00:18:50,486 --> 00:18:53,900 Q. Og så skal jeg bli bedt om, slutte likevel? 408 00:18:53,900 --> 00:18:54,390 Ja eller nei. 409 00:18:54,390 --> 00:18:58,440 Jeg vil treffe ja, og jeg skal ha sluttet GDB. 410 00:18:58,440 --> 00:19:00,860 >> Så det var en rask primer til GDB. 411 00:19:00,860 --> 00:19:03,430 Egentlig, i en reell situasjon, Jeg gjorde dette i kontortiden. 412 00:19:03,430 --> 00:19:06,710 Jeg GDBed denne eksakte programmet på kontortid med en student. 413 00:19:06,710 --> 00:19:12,410 Og hvis vi går tilbake til kommandoene vi så før, brukte vi pause hoved, først 414 00:19:12,410 --> 00:19:13,190 ting vi gjorde. 415 00:19:13,190 --> 00:19:16,060 Vi brukte kjøre med kommandolinjeargumenter, andre ting vi gjorde. 416 00:19:16,060 --> 00:19:18,520 Vi brukte neste mye å flytte oss gjennom linjene. 417 00:19:18,520 --> 00:19:20,310 Og igjen, den korte versjonen neste er n. 418 00:19:20,310 --> 00:19:22,920 Det er i parentes i grått på lysbildet. 419 00:19:22,920 --> 00:19:28,590 >> Vi brukte ikke trinn, men vi gjorde ikke nødvendigvis må for dette tilfellet. 420 00:19:28,590 --> 00:19:32,150 Men vi kan bruke den i en litt senere på i dag hvis vi feilsøker, for 421 00:19:32,150 --> 00:19:36,500 eksempel binære søk når binær søk kalles i et eget 422 00:19:36,500 --> 00:19:38,200 funksjon, men det er noen feil med den. 423 00:19:38,200 --> 00:19:40,440 Vi kommer til å ønske å gå inn kallet til binære søk og 424 00:19:40,440 --> 00:19:41,840 faktisk feilsøke det. 425 00:19:41,840 --> 00:19:45,130 Lister vi fikk ikke bruke enten fordi vi hadde en god følelse av vår kode, men hvis jeg 426 00:19:45,130 --> 00:19:48,420 hadde lyst til å få en følelse av hva kode jeg var rundt, kunne jeg bare bruke listen. 427 00:19:48,420 --> 00:19:50,310 >> Skriv ut vi brukte, info lokalbefolkningen vi brukte. 428 00:19:50,310 --> 00:19:53,260 Fortsett vi ikke trenger å bruke i dette tilfelle, heller ikke vi trenger å bruke 429 00:19:53,260 --> 00:19:55,060 deaktivere, men vi gjorde bruk slutte. 430 00:19:55,060 --> 00:19:57,850 Igjen, disse 10 kommandoer, praktisere dem. 431 00:19:57,850 --> 00:20:00,770 Hvis du forstår disse 10 kommandoer, du bør settes for debugging noen 432 00:20:00,770 --> 00:20:02,525 utstede med GDB. 433 00:20:02,525 --> 00:20:05,230 434 00:20:05,230 --> 00:20:08,420 >> Så vi er i ferd med å gå på, igjen, til crux av seksjonen i dag, gå over 435 00:20:08,420 --> 00:20:09,720 disse sortering og søking algoritmer. 436 00:20:09,720 --> 00:20:14,075 Før vi gjør det, igjen, noen spørsmål, kommentarer, bekymringer for GDB? 437 00:20:14,075 --> 00:20:16,750 438 00:20:16,750 --> 00:20:20,960 Så er alle kommer til å bruke GDB snarere enn printf? 439 00:20:20,960 --> 00:20:24,550 Så alle, for all fremtid skyld, alle nikker hodet rett 440 00:20:24,550 --> 00:20:27,400 nå, så jeg vil se deg på kontortid og alle TFs vil se deg og 441 00:20:27,400 --> 00:20:29,460 de vil si, vis meg hvordan du bruker GDB, og du vil kunne 442 00:20:29,460 --> 00:20:31,240 å vise dem, ikke sant? 443 00:20:31,240 --> 00:20:31,760 Slags? 444 00:20:31,760 --> 00:20:32,640 Kanskje forhåpentligvis. 445 00:20:32,640 --> 00:20:33,670 Cool. 446 00:20:33,670 --> 00:20:35,790 >> Så vi kommer til å flytte inn sortering og søking. 447 00:20:35,790 --> 00:20:40,710 Du vil se jeg har en liste som allerede er sortert for oss, men som ikke kommer 448 00:20:40,710 --> 00:20:42,220 å være tilfelle alltid. 449 00:20:42,220 --> 00:20:49,170 Så i oppgavesettet spesifikasjon for Problemet satt tre, har du shorts 450 00:20:49,170 --> 00:20:51,410 som du kan se, og det faktisk ber deg om å se disse shorts. 451 00:20:51,410 --> 00:20:55,090 Også i foredrag i forrige uke, gikk vi over mange av disse algoritmene, så jeg er 452 00:20:55,090 --> 00:20:59,150 ikke kommer til å tilbringe tid i klassen går over disse algoritmene igjen eller tegning 453 00:20:59,150 --> 00:21:01,130 bilder for hvordan disse algoritmer fungerer. 454 00:21:01,130 --> 00:21:04,030 Igjen, at informasjon du kan re-watch forelesning, eller at informasjon 455 00:21:04,030 --> 00:21:08,570 fanges used på shorts for disse søk, alle 456 00:21:08,570 --> 00:21:10,920 som er tilgjengelig på cs50.net. 457 00:21:10,920 --> 00:21:14,200 >> Så i stedet, hva vi skal gjøre er å skrive disse programmene. 458 00:21:14,200 --> 00:21:18,190 Vi har en følelse, en mental modell, av hvordan de fungerer, og så hva vi skal 459 00:21:18,190 --> 00:21:20,210 å gjøre er å kode dem på ordentlig. 460 00:21:20,210 --> 00:21:23,430 Vi kommer til å slå den mentale modellen, det bildet, hvis du vil, inn i 461 00:21:23,430 --> 00:21:24,960 selve koden. 462 00:21:24,960 --> 00:21:28,460 Og hvis du var litt forvirret eller disig på mental modell, jeg helt 463 00:21:28,460 --> 00:21:28,770 forstå. 464 00:21:28,770 --> 00:21:30,540 >> Vi er faktisk ikke kommer til å hoppe til kode straks. 465 00:21:30,540 --> 00:21:36,030 Så mens denne meldingen i denne lysbilde spør du å kode binære søk, og 466 00:21:36,030 --> 00:21:39,470 faktisk, en iterativ versjon av binære søk, det første jeg 467 00:21:39,470 --> 00:21:42,370 virkelig ønsker at du skal gjøre er skrive noen pseudo. 468 00:21:42,370 --> 00:21:47,020 Så du har denne mentale modellen av hvordan binære søke fungerer. 469 00:21:47,020 --> 00:21:50,060 Ta ut et ark hvis du har en lett tilgjengelig, eller åpne en 470 00:21:50,060 --> 00:21:52,520 tekstredigeringsprogram, og jeg vil gjerne alle til å skrive. 471 00:21:52,520 --> 00:21:57,470 Ta fire minutter på å skrive pseudo for binære søk. 472 00:21:57,470 --> 00:21:58,990 >> Igjen, tenk på at mental modell. 473 00:21:58,990 --> 00:22:01,980 Jeg kommer rundt hvis du har spørsmål og vi kan trekke bildet ut. 474 00:22:01,980 --> 00:22:06,220 Men først, før vi starter programmeringen, Jeg vil gjerne skrive 475 00:22:06,220 --> 00:22:09,920 pseudo for binære søk så når vi dykke i, har vi noen retning som 476 00:22:09,920 --> 00:22:12,110 til hvor vi bør dra. 477 00:22:12,110 --> 00:22:15,330 >> STUDENT: Kan vi anta rekken av verdiene vi får er allerede sortert? 478 00:22:15,330 --> 00:22:17,960 >> JASON Hirschhorn: Så for binære søk å jobbe - utmerket spørsmål - du 479 00:22:17,960 --> 00:22:20,970 nødt til å ta i en sortert matrise av verdier. 480 00:22:20,970 --> 00:22:22,290 Så antar det vil fungere. 481 00:22:22,290 --> 00:22:23,480 Vi vil gå tilbake til dette lysbildet. 482 00:22:23,480 --> 00:22:27,220 Du vil se i lilla funksjonen Erklæringen er bool binary_search int 483 00:22:27,220 --> 00:22:29,230 verdi, int verdier, int n. 484 00:22:29,230 --> 00:22:32,910 Dette bør være kjent hvis du har allerede kontaktet eller fått din 485 00:22:32,910 --> 00:22:34,580 hendene skitne med problemet sett. 486 00:22:34,580 --> 00:22:35,910 >> Men det er din funksjon erklæring. 487 00:22:35,910 --> 00:22:39,080 Igjen, ikke skulle trenge å bekymre seg for at mye i dette øyeblikk. 488 00:22:39,080 --> 00:22:43,660 Det jeg egentlig vil at du skal gjøre er å ta fire minutter til pseudo binære 489 00:22:43,660 --> 00:22:46,380 søke, og deretter vil vi gå over det som en gruppe. 490 00:22:46,380 --> 00:22:47,500 Og jeg vil komme rundt. 491 00:22:47,500 --> 00:22:49,590 Hvis du har spørsmål, føler fritt til å heve hånden. 492 00:22:49,590 --> 00:25:07,110 493 00:25:07,110 --> 00:25:09,680 >> Hvorfor ikke ta to minutter til slutt opp pseudo? 494 00:25:09,680 --> 00:25:13,690 495 00:25:13,690 --> 00:25:15,820 Jeg vet dette kan virke latterlig at vi tilbringer så mye tid på 496 00:25:15,820 --> 00:25:20,350 noe som ikke engang faktisk i C, men spesielt for disse mer 497 00:25:20,350 --> 00:25:24,030 utfordrende algoritmer og problem sett som vi må finne ut, 498 00:25:24,030 --> 00:25:27,210 starter i pseudo ikke bekymre om syntaksen, bare å bekymre seg 499 00:25:27,210 --> 00:25:29,150 logikken, er utrolig nyttig. 500 00:25:29,150 --> 00:25:32,720 Og på den måten, du er ikke løse to utrolig vanskelige problemer på en gang. 501 00:25:32,720 --> 00:25:35,390 Du bare fokuserer på logikk, og så du flytte inn i syntaks. 502 00:25:35,390 --> 00:25:59,960 503 00:25:59,960 --> 00:26:01,385 >> OK. 504 00:26:01,385 --> 00:26:03,680 La oss begynne å gå gjennom den pseudo. 505 00:26:03,680 --> 00:26:05,380 Jeg har skrevet opp her, binære søk pseudo. 506 00:26:05,380 --> 00:26:07,360 Vi skal skrive dette på borde sammen. 507 00:26:07,360 --> 00:26:10,040 Eller jeg skal skrive det, og du vil gi meg instruksjonene jeg trenger. 508 00:26:10,040 --> 00:26:15,010 Så kan noen gi meg den første linjen i pseudo du 509 00:26:15,010 --> 00:26:18,350 skrev for binære søk? 510 00:26:18,350 --> 00:26:20,258 Ja, Annie? 511 00:26:20,258 --> 00:26:22,698 >> STUDENT: Mens lengden på listen er større enn null. 512 00:26:22,698 --> 00:26:26,114 513 00:26:26,114 --> 00:26:34,880 >> JASON Hirschhorn: Mens lengde av listen er større enn null. 514 00:26:34,880 --> 00:26:38,810 Og igjen ser vi noen C-jakt syntaktiske ting på her. 515 00:26:38,810 --> 00:26:41,550 Men det meste av dette er på engelsk. 516 00:26:41,550 --> 00:26:43,980 Hadde noen har noen linje de legger før dette i sin pseudo-kode? 517 00:26:43,980 --> 00:26:47,280 518 00:26:47,280 --> 00:26:50,210 >> STUDENT: Få en matrise av sortert tall. 519 00:26:50,210 --> 00:26:53,600 >> JASON Hirschhorn: Du skrev "får en utvalg av sorterte tall. "Per 520 00:26:53,600 --> 00:26:56,140 funksjon erklæringen, vil vi være bestått en rekke sortert tall. 521 00:26:56,140 --> 00:26:57,280 >> STUDENT: [uhørbart]. 522 00:26:57,280 --> 00:26:59,030 >> JASON Hirschhorn: Så vi vil ha det. 523 00:26:59,030 --> 00:27:01,820 Men ja, hvis vi ikke har det, vi ville trenge for å sortere vår rekke 524 00:27:01,820 --> 00:27:04,850 tall, fordi binære søk fungerer bare på sortert arrays. 525 00:27:04,850 --> 00:27:11,300 Så mens lengden på listen er lik null, er jeg kommer til å sette i noen klammeparentes 526 00:27:11,300 --> 00:27:15,420 slik at den ser litt mer ut som C. Men samtidig, ser ut til å kartlegge på en 527 00:27:15,420 --> 00:27:19,550 mens loop, så inne i denne stund løkke hva trenger vi å 528 00:27:19,550 --> 00:27:22,000 gjøre for binære søk? 529 00:27:22,000 --> 00:27:25,530 >> Noen andre som ikke har gitt meg en svar ennå, men som skrev dette? 530 00:27:25,530 --> 00:27:31,750 531 00:27:31,750 --> 00:27:33,320 >> STUDENT: Gå til midten av listen. 532 00:27:33,320 --> 00:27:33,980 >> JASON Hirschhorn: Tom. 533 00:27:33,980 --> 00:27:35,230 Gå til midten av listen. 534 00:27:35,230 --> 00:27:43,290 535 00:27:43,290 --> 00:27:45,530 Og oppfølgingsspørsmål, hva gjør vi når vi er på 536 00:27:45,530 --> 00:27:46,870 midten av listen? 537 00:27:46,870 --> 00:27:49,310 >> STUDENT: Gjør en sjekk om det er nummeret du leter etter. 538 00:27:49,310 --> 00:27:50,120 >> JASON Hirschhorn: Excellent. 539 00:27:50,120 --> 00:28:05,500 Gå midten av listen og sjekke hvis vår verdi er der - 540 00:28:05,500 --> 00:28:06,515 fantastisk. 541 00:28:06,515 --> 00:28:10,460 Har noen har noe annet som var annerledes enn dette? 542 00:28:10,460 --> 00:28:11,210 Det er helt riktig. 543 00:28:11,210 --> 00:28:13,800 >> Det første vi gjør i binært søk er å gå til midten av listen og 544 00:28:13,800 --> 00:28:15,870 sjekk for å se om vår verdi er der. 545 00:28:15,870 --> 00:28:19,682 Så jeg antar at hvis vår verdi er det, hva gjør vi? 546 00:28:19,682 --> 00:28:21,610 >> STUDENT: Vi returnerer null [uhørbart]. 547 00:28:21,610 --> 00:28:23,400 >> JASON Hirschhorn: Ja, dersom vår Verdien er der, fant vi det. 548 00:28:23,400 --> 00:28:27,950 Så vi kan fortelle noen måte, men dette funksjonen er definert, forteller vi brukeren 549 00:28:27,950 --> 00:28:28,520 vi fant det. 550 00:28:28,520 --> 00:28:30,950 Hvis den ikke er der, skjønt, er at der dette blir vanskelig. 551 00:28:30,950 --> 00:28:35,120 Så hvis det ikke er det, noen andre som jobbet på binære søk eller 552 00:28:35,120 --> 00:28:36,830 har en idé nå, hva gjør vi? 553 00:28:36,830 --> 00:28:37,830 >> STUDENT: Spørsmål. 554 00:28:37,830 --> 00:28:38,100 >> JASON Hirschhorn: Ja? 555 00:28:38,100 --> 00:28:39,920 >> STUDENT: Er matrisen allerede sortert? 556 00:28:39,920 --> 00:28:42,200 >> JASON Hirschhorn: Ja, vi antar rekken allerede er sortert. 557 00:28:42,200 --> 00:28:46,480 >> STUDENT: Så da må du sjekke om verdien som du ser er større enn 558 00:28:46,480 --> 00:28:51,745 verdien som du ønsker, kan du flytte til midten av den andre halvdelen. 559 00:28:51,745 --> 00:28:54,110 >> JASON Hirschhorn: Så hvis midten av listen er større enn hva vi er 560 00:28:54,110 --> 00:28:57,440 på jakt etter, så vi vet hva? 561 00:28:57,440 --> 00:28:58,320 Vi flytter hvor? 562 00:28:58,320 --> 00:29:01,400 >> STUDENT: Du ønsker å flytte til halvparten av listen med 563 00:29:01,400 --> 00:29:02,780 tall lavere enn det. 564 00:29:02,780 --> 00:29:04,460 >> JASON Hirschhorn: Så får vi kaller det venstre. 565 00:29:04,460 --> 00:29:15,435 Så hvis midten er større, kan vi søke den venstre halvdelen av listen. 566 00:29:15,435 --> 00:29:20,620 567 00:29:20,620 --> 00:29:22,980 Og så etter søk, hva mener jeg med søk? 568 00:29:22,980 --> 00:29:24,010 >> STUDENT: [uhørbart]. 569 00:29:24,010 --> 00:29:24,410 >> JASON Hirschhorn: Vi går til midten. 570 00:29:24,410 --> 00:29:25,740 Vi har faktisk gjenta denne tingen. 571 00:29:25,740 --> 00:29:29,210 Vi går tilbake gjennom vår mens loop. 572 00:29:29,210 --> 00:29:31,480 Jeg skal gi deg det siste - 573 00:29:31,480 --> 00:29:39,047 annet, hvis, i midten mindre enn hva vi, hva gjør vi her? 574 00:29:39,047 --> 00:29:40,360 >> STUDENT: Gå til høyre. 575 00:29:40,360 --> 00:29:41,610 >> JASON Hirschhorn: Søk i retten. 576 00:29:41,610 --> 00:29:47,440 577 00:29:47,440 --> 00:29:51,710 Dette ser bra ut, men er det noen som har noe som vi kan være mangler eller 578 00:29:51,710 --> 00:29:53,200 noe annet som du putter i pseudo-kode? 579 00:29:53,200 --> 00:29:57,080 580 00:29:57,080 --> 00:29:58,410 Så dette er hva vi har så langt. 581 00:29:58,410 --> 00:30:00,960 Mens lengden av listen er større enn null, skal vi gå 582 00:30:00,960 --> 00:30:03,220 til midten av listen og sjekke om vår verdi er der. 583 00:30:03,220 --> 00:30:06,970 >> Hvis midten er større, skal vi søke igjen, annet hvis midten er 584 00:30:06,970 --> 00:30:09,230 mindre, skal vi søke den rette. 585 00:30:09,230 --> 00:30:14,430 Så vi har alle hatt noen kjennskap til begrepene vi bruker i informatikk 586 00:30:14,430 --> 00:30:15,550 og de verktøyene vi har. 587 00:30:15,550 --> 00:30:18,300 Men vil du allerede merke vi var snakke på engelsk, men vi fant en 588 00:30:18,300 --> 00:30:24,790 mange ting som syntes å kartlegge om å verktøyene vi har i vår koding verktøysett. 589 00:30:24,790 --> 00:30:27,210 Så rett utenfor balltre, er vi ikke kommer til å faktisk kode ennå. 590 00:30:27,210 --> 00:30:33,300 >> Hva ser vi her på engelsk at kart på til ting vi kan skrive i C? 591 00:30:33,300 --> 00:30:34,560 >> STUDENT: Mens. 592 00:30:34,560 --> 00:30:35,320 >> JASON Hirschhorn: Mens. 593 00:30:35,320 --> 00:30:40,610 Så dette mens her kart på til hva? 594 00:30:40,610 --> 00:30:42,630 >> STUDENT: En stund loop. 595 00:30:42,630 --> 00:30:43,200 >> JASON Hirschhorn: En while-loop? 596 00:30:43,200 --> 00:30:44,540 Eller kanskje, mer generelt, en sløyfe. 597 00:30:44,540 --> 00:30:46,260 Vi ønsker å gjøre noe om og om igjen. 598 00:30:46,260 --> 00:30:49,050 Så vi kommer til å kode en loop. 599 00:30:49,050 --> 00:30:51,640 Og vi allerede vet, fordi vi har gjort dette et par ganger og vi 600 00:30:51,640 --> 00:30:54,180 har nok av eksempler der ute, hvordan faktisk å skrive 601 00:30:54,180 --> 00:30:55,310 denne indeksen for en loop. 602 00:30:55,310 --> 00:30:56,160 Så det burde være ganske enkelt. 603 00:30:56,160 --> 00:30:58,070 Vi bør være i stand til å få det startet ganske raskt. 604 00:30:58,070 --> 00:31:01,830 >> Hva annet skal vi se på her? 605 00:31:01,830 --> 00:31:06,820 Hvilke andre strukturer syntaxes, ting at vi er kjent med i C, gjør vi 606 00:31:06,820 --> 00:31:09,790 allerede har en følelse av naturbasert ut av de ordene vi brukte? 607 00:31:09,790 --> 00:31:10,830 Ja, Anna? 608 00:31:10,830 --> 00:31:11,360 [Uhørbart] 609 00:31:11,360 --> 00:31:12,990 bare tuller. 610 00:31:12,990 --> 00:31:13,540 Anna, gå videre. 611 00:31:13,540 --> 00:31:14,530 >> STUDENT: Hvis og annet. 612 00:31:14,530 --> 00:31:16,260 >> JASON Hirschhorn: Hvis og annet - akkurat her. 613 00:31:16,260 --> 00:31:18,840 Så hva gjør de ser ut? 614 00:31:18,840 --> 00:31:20,420 >> STUDENT: An hvis annet utsagn. 615 00:31:20,420 --> 00:31:21,560 >> JASON Hirschhorn: Yeah, forhold, ikke sant? 616 00:31:21,560 --> 00:31:24,650 Så vi må sikkert skrive noen tilstander. 617 00:31:24,650 --> 00:31:31,185 Og igjen, men kanskje forvirrende i første, vi har generelt en følelse nå 618 00:31:31,185 --> 00:31:34,010 om hvordan å skrive forhold og syntaksen for forholdene. 619 00:31:34,010 --> 00:31:36,850 Og hvis vi ikke gjør det, vi bare slå opp syntaks for forholdene, klipp og lim 620 00:31:36,850 --> 00:31:39,950 det, fordi vi vet vi trenger en tilstand her. 621 00:31:39,950 --> 00:31:44,910 Eventuelle andre ting vi ser at kartet på ting vi kanskje trenger å gjøre i C? 622 00:31:44,910 --> 00:31:48,312 623 00:31:48,312 --> 00:31:48,960 Ja, Aleha? 624 00:31:48,960 --> 00:31:50,370 >> STUDENT: Dette kan være opplagt, ved å bare sjekke om en 625 00:31:50,370 --> 00:31:51,990 Verdien er lik noe. 626 00:31:51,990 --> 00:31:54,578 >> JASON Hirschhorn: Så hvordan skal vi sjekke og - for så å gå til midten av listen 627 00:31:54,578 --> 00:31:55,610 og sjekk om vår verdi er det? 628 00:31:55,610 --> 00:31:56,570 Hvordan skal vi gjøre det i C? 629 00:31:56,570 --> 00:31:58,450 Hva er syntaksen for det? 630 00:31:58,450 --> 00:31:59,235 >> STUDENT: lik, lik. 631 00:31:59,235 --> 00:32:00,650 >> JASON Hirschhorn: lik, lik. 632 00:32:00,650 --> 00:32:03,540 Så denne sjekken er trolig kommer å være et lik, lik. 633 00:32:03,540 --> 00:32:04,510 Så vi vet vi trenger at et sted. 634 00:32:04,510 --> 00:32:07,510 Og faktisk, bare i å skrive det, vi ser de andre tingene. 635 00:32:07,510 --> 00:32:11,400 Vi er nødt til å gjøre noen sammenligningsoperatorer i det - 636 00:32:11,400 --> 00:32:12,010 fantastisk. 637 00:32:12,010 --> 00:32:14,980 Så det faktisk ser ut, ved og store, har vi ikke skrevet en 638 00:32:14,980 --> 00:32:16,390 ord av C-kode ennå. 639 00:32:16,390 --> 00:32:20,610 Men vi fikk den mentale modellen ned via forelesninger og disse shorts. 640 00:32:20,610 --> 00:32:22,350 >> Vi skrev pseudo-kode som en gruppe. 641 00:32:22,350 --> 00:32:27,110 Og allerede har vi 80% hvis ikke 90% av hva vi trenger å gjøre. 642 00:32:27,110 --> 00:32:28,550 Nå trenger vi bare å kode den, som igjen, er en 643 00:32:28,550 --> 00:32:30,110 ikke-triviell problem å løse. 644 00:32:30,110 --> 00:32:31,890 Men minst er vi fast på logikk. 645 00:32:31,890 --> 00:32:38,040 Minst nå når vi går til kontortiden, Jeg kan si, jeg vet hva jeg trenger 646 00:32:38,040 --> 00:32:40,160 å gjøre, men kan du minne meg av syntaksen? 647 00:32:40,160 --> 00:32:42,940 Eller selv om kontortiden er overfylt, du kan google for syntaksen, heller 648 00:32:42,940 --> 00:32:45,040 enn å bli sittende fast på logikken. 649 00:32:45,040 --> 00:32:48,570 >> Og igjen, heller enn å prøve å løse logikken og syntaks problemer alle 650 00:32:48,570 --> 00:32:51,900 på en gang, er det ofte er bedre å bryte disse to vanskelige problemer ut i 651 00:32:51,900 --> 00:32:58,280 to mer håndterbare seg og gjøre det pseudo-kode først og deretter koden i C. 652 00:32:58,280 --> 00:33:00,620 Så la oss se hva jeg gjorde for pseudo-kode på forhånd. 653 00:33:00,620 --> 00:33:04,060 >> Mens lengden av listen er større enn null, ser på midten 654 00:33:04,060 --> 00:33:05,090 av listen. 655 00:33:05,090 --> 00:33:09,610 Hvis nummeret funnet returnert sant, ellers hvis antallet høyere, søk venstre. 656 00:33:09,610 --> 00:33:13,200 Else if nummer lavere, søk høyre, return false. 657 00:33:13,200 --> 00:33:18,710 Så det ser nesten identisk hvis ikke nesten identisk med hva vi skrev. 658 00:33:18,710 --> 00:33:23,030 Egentlig, Tom, hva du sa først, bryte midten av listen og hvis 659 00:33:23,030 --> 00:33:24,880 nummeret funnet i to uttalelser er faktisk det jeg gjorde. 660 00:33:24,880 --> 00:33:25,507 >> Jeg kombinerte dem der. 661 00:33:25,507 --> 00:33:27,100 Jeg skulle ha lyttet til du første gang. 662 00:33:27,100 --> 00:33:30,640 Så det er pseudo-kode har vi. 663 00:33:30,640 --> 00:33:35,060 Hvis du ønsker å nå, beklager, går tilbake til vår opprinnelige problemet. 664 00:33:35,060 --> 00:33:37,780 La oss kode binary.c. 665 00:33:37,780 --> 00:33:40,870 Så gjennomføre en iterativ versjon av binære søk ved hjelp av følgende 666 00:33:40,870 --> 00:33:42,420 funksjon erklæring. 667 00:33:42,420 --> 00:33:44,550 >> Og du trenger ikke å kopiere det ned ennå. 668 00:33:44,550 --> 00:33:49,470 Jeg er faktisk kommer til å åpne opp rett her binary.c. 669 00:33:49,470 --> 00:33:52,880 Så det er funksjonen erklæringen i midten av skjermen. 670 00:33:52,880 --> 00:33:57,570 Og du vil se jeg tok den pseudo-kode fra on mine sider, men nesten identiske 671 00:33:57,570 --> 00:33:59,740 til det vi skrev, og sette det inn for deg. 672 00:33:59,740 --> 00:34:06,010 Så nå, la oss ta fem minutter å kode denne funksjonen. 673 00:34:06,010 --> 00:34:08,199 >> Og igjen, hvis du har noen spørsmål, rekk opp hånden, gi meg beskjed, vil jeg 674 00:34:08,199 --> 00:34:08,710 komme rundt. 675 00:34:08,710 --> 00:34:09,800 >> STUDENT: [uhørbart]. 676 00:34:09,800 --> 00:34:12,380 >> JASON Hirschhorn: Så jeg tok den binære søk definisjon på 677 00:34:12,380 --> 00:34:14,429 toppen, på linje 12. 678 00:34:14,429 --> 00:34:16,429 Det er hva jeg fikk for min lysbilde. 679 00:34:16,429 --> 00:34:20,940 Og så all denne pseudo-kode jeg bare kopiere og limes fra raset, 680 00:34:20,940 --> 00:34:22,190 pseudo-kode lysbilde. 681 00:34:22,190 --> 00:35:22,830 682 00:35:22,830 --> 00:35:26,786 Jeg er fortsatt ikke hørt [uhørbart]. 683 00:35:26,786 --> 00:37:13,010 684 00:37:13,010 --> 00:37:15,820 >> Så hvis du er ferdig med din implementering, jeg ønsker å sjekke det. 685 00:37:15,820 --> 00:37:19,410 Jeg mailet deg helpers.h fil tidligere i denne klassen. 686 00:37:19,410 --> 00:37:22,360 Og det vil være tilgjengelig på nettet også for nedlasting for folk å se 687 00:37:22,360 --> 00:37:24,750 denne delen tid forsinket. 688 00:37:24,750 --> 00:37:29,350 Og jeg bare brukt den generiske distribusjon kode fra pset3. 689 00:37:29,350 --> 00:37:34,590 Så jeg tok find.C, bruke min helpers.h fil snarere enn helpers.h fil 690 00:37:34,590 --> 00:37:36,280 som er gitt i fordelingskode. 691 00:37:36,280 --> 00:37:39,310 >> Og jeg måtte gjøre en annen endring i find.C snarere enn å ringe bare rett og slett 692 00:37:39,310 --> 00:37:42,770 søk, ring binary_search. 693 00:37:42,770 --> 00:37:49,080 Så hvis du ønsker å teste koden din, vet at det er hvordan du gjør det. 694 00:37:49,080 --> 00:37:52,530 Faktisk, når vi skal kjøre denne koden akkurat nå, jeg bare laget en kopi av 695 00:37:52,530 --> 00:37:59,820 min pset3 katalog, igjen, byttet ut hjelperne filer og deretter gjort at 696 00:37:59,820 --> 00:38:04,695 endre seg i find.C å ringe binary_search snarere enn bare å søke. 697 00:38:04,695 --> 00:40:08,620 698 00:40:08,620 --> 00:40:09,120 >> JASON Hirschhorn: Ja. 699 00:40:09,120 --> 00:40:11,258 Du har et spørsmål? 700 00:40:11,258 --> 00:40:12,150 >> STUDENT: Nevermind. 701 00:40:12,150 --> 00:40:12,600 >> JASON Hirschhorn: Ingen grunn til bekymring. 702 00:40:12,600 --> 00:40:13,370 Vel, la oss komme i gang. 703 00:40:13,370 --> 00:40:15,090 Vi vil kode dette som en gruppe. 704 00:40:15,090 --> 00:40:16,050 En annen kommentar. 705 00:40:16,050 --> 00:40:20,600 Igjen, dette er, kan lett byttes i for Problem Set Tre. 706 00:40:20,600 --> 00:40:25,530 Jeg har min helpers.h fil som, snarere enn helpers.h vi er gitt, 707 00:40:25,530 --> 00:40:28,560 erklærer binære søk, boble sortere og valg liksom. 708 00:40:28,560 --> 00:40:37,400 Og i find.c vil du merke på linjen, hva er det, linje 68, kaller vi binær 709 00:40:37,400 --> 00:40:39,160 søke snarere enn søk. 710 00:40:39,160 --> 00:40:42,930 Så igjen, den koden som er tilgjengelig online eller koden som du er 711 00:40:42,930 --> 00:40:46,590 skape akkurat nå enkelt kan byttes i for p satt tre for å sjekke det. 712 00:40:46,590 --> 00:40:50,620 >> Men først, la oss kode binære søk. 713 00:40:50,620 --> 00:40:53,690 Vår funksjon erklæring, vi tilbake en bool. 714 00:40:53,690 --> 00:40:55,810 Vi tar et heltall kalles verdi. 715 00:40:55,810 --> 00:40:59,285 Vi tar en matrise av heltall kalles verdier, og vi tar n være 716 00:40:59,285 --> 00:41:00,850 størrelsen av matrisen. 717 00:41:00,850 --> 00:41:05,640 På linje 10, akkurat her, har jeg skarp inkluderer stdbool.h. 718 00:41:05,640 --> 00:41:07,360 Er det noen som vet hvorfor det er det? 719 00:41:07,360 --> 00:41:12,180 720 00:41:12,180 --> 00:41:16,600 Så hva betyr det kodelinje gjøre? 721 00:41:16,600 --> 00:41:19,880 >> STUDENT: Den lar deg bruke en bool returtype. 722 00:41:19,880 --> 00:41:20,350 >> JASON Hirschhorn: Nettopp. 723 00:41:20,350 --> 00:41:22,300 >> STUDENT: Eller det er et bibliotek som lar å bruke en bool returtype. 724 00:41:22,300 --> 00:41:27,590 >> JASON Hirschhorn: Så skarp inkluderer stdbool.h linjen gir meg noen 725 00:41:27,590 --> 00:41:31,340 definisjoner og erklæringer for ting at jeg får lov til å bruke i 726 00:41:31,340 --> 00:41:32,400 dette biblioteket. 727 00:41:32,400 --> 00:41:36,570 Så blant dem er å si at det er denne type kalles bool, og det kan være 728 00:41:36,570 --> 00:41:37,750 sant eller usant. 729 00:41:37,750 --> 00:41:39,010 Så det er det den linjen gjør. 730 00:41:39,010 --> 00:41:41,680 Og hvis jeg ikke har den linjen, ville jeg komme i trøbbel for å skrive dette 731 00:41:41,680 --> 00:41:43,520 ord akkurat her, bool, rett der. 732 00:41:43,520 --> 00:41:44,140 Helt riktig. 733 00:41:44,140 --> 00:41:46,430 Så jeg trenger det i denne koden. 734 00:41:46,430 --> 00:41:47,690 OK. 735 00:41:47,690 --> 00:41:51,860 Så dette, igjen, er en iterativ utgave, ikke en rekursiv en. 736 00:41:51,860 --> 00:41:53,820 Så la oss komme i gang. 737 00:41:53,820 --> 00:41:56,200 >> La oss starte med dette første linje av pseudo-kode. 738 00:41:56,200 --> 00:41:58,770 Og forhåpentligvis vil vi - eller ikke forhåpentligvis. 739 00:41:58,770 --> 00:42:00,530 Vi kommer til å gå rundt i rommet. 740 00:42:00,530 --> 00:42:05,110 Vi vil gå linje for linje, og jeg vil hjelpe du finne ut av linjen som vi trenger 741 00:42:05,110 --> 00:42:06,310 å skrive først. 742 00:42:06,310 --> 00:42:10,550 Så mens lengden på liste er større enn null. 743 00:42:10,550 --> 00:42:12,680 La oss starte i front. 744 00:42:12,680 --> 00:42:15,190 Hvilken linje skal jeg skrive her, i koden? 745 00:42:15,190 --> 00:42:19,470 >> STUDENT: Mens parentes n er større enn 0. 746 00:42:19,470 --> 00:42:21,900 >> JASON Hirschhorn: Mens n er stor enn 0. 747 00:42:21,900 --> 00:42:26,550 Så n er på størrelse med en liste, og vi sjekker om - 748 00:42:26,550 --> 00:42:26,800 >> [interposing VOICES] 749 00:42:26,800 --> 00:42:27,660 >> JASON Hirschhorn: - beklager? 750 00:42:27,660 --> 00:42:29,360 >> STUDENT: Hvordan vet vi at n er størrelsen av listen? 751 00:42:29,360 --> 00:42:29,690 >> JASON Hirschhorn: Beklager. 752 00:42:29,690 --> 00:42:34,690 Per PSett spesifikasjonen, søke og sortere funksjoner du trenger for å skrive, 753 00:42:34,690 --> 00:42:36,230 n er størrelsen av listen. 754 00:42:36,230 --> 00:42:37,710 Jeg glemte å forklare det her. 755 00:42:37,710 --> 00:42:41,310 Men ja. n er størrelsen listen, i dette tilfellet. 756 00:42:41,310 --> 00:42:44,740 Så mens n er større enn 0. 757 00:42:44,740 --> 00:42:45,580 OK. 758 00:42:45,580 --> 00:42:50,090 Det kan vise seg litt problematisk skjønt, hvis ting går på. 759 00:42:50,090 --> 00:42:54,510 Fordi vi vil fortsette å vite Størrelsen på listen i denne 760 00:42:54,510 --> 00:43:06,640 funksjon, men sier vi starter med et utvalg av fem heltall. 761 00:43:06,640 --> 00:43:08,950 Og vi går gjennom, og vi har nå snevret det ned til 762 00:43:08,950 --> 00:43:10,310 en rekke to heltall. 763 00:43:10,310 --> 00:43:12,160 Hvilke to heltall er det? 764 00:43:12,160 --> 00:43:15,895 Størrelsen er to nå som vi ønsker å se på, men som to er det? 765 00:43:15,895 --> 00:43:17,720 Betyr det fornuftig, det spørsmålet? 766 00:43:17,720 --> 00:43:18,020 >> OK. 767 00:43:18,020 --> 00:43:19,120 Jeg spør det igjen. 768 00:43:19,120 --> 00:43:26,640 Så vi starter med denne matrisen av 5 heltall, og n er lik 5, ikke sant? 769 00:43:26,640 --> 00:43:28,050 Vi skal kjøre gjennom her. 770 00:43:28,050 --> 00:43:31,560 vi vil sannsynligvis endre størrelse, høyre, så ting går videre. 771 00:43:31,560 --> 00:43:32,700 Hvilket er hva vi sier vi ønsker å gjøre. 772 00:43:32,700 --> 00:43:34,150 Vi ønsker ikke å søke hele greia igjen. 773 00:43:34,150 --> 00:43:35,480 Så sier vi endrer det til to. 774 00:43:35,480 --> 00:43:36,970 Vi tar halvparten av listen som er rart. 775 00:43:36,970 --> 00:43:38,800 Så bare plukke to. 776 00:43:38,800 --> 00:43:40,590 Så nå n er lik to. 777 00:43:40,590 --> 00:43:42,780 Jeg beklager dårlig tørr slette markører. 778 00:43:42,780 --> 00:43:43,080 Høyre? 779 00:43:43,080 --> 00:43:45,670 Og vi søker gjennom listen igjen med en liste over størrelse to. 780 00:43:45,670 --> 00:43:48,580 Vel, er vårt spekter fortsatt av størrelse 5. 781 00:43:48,580 --> 00:43:51,920 Vi sier at vi bare ønsker å søke 2 flekker i det. 782 00:43:51,920 --> 00:43:53,590 Så hvilke to stedene er de? 783 00:43:53,590 --> 00:43:57,640 784 00:43:57,640 --> 00:43:58,815 >> Betyr det fornuftig? 785 00:43:58,815 --> 00:44:00,290 Er de de 2 venstre flekker? 786 00:44:00,290 --> 00:44:01,940 Er de de rette to stedene? 787 00:44:01,940 --> 00:44:03,540 Er de de midterste to stedene? 788 00:44:03,540 --> 00:44:06,350 Vi har brutt ned problemet, men vi faktisk vet ikke hvilken del av 789 00:44:06,350 --> 00:44:11,600 problemet vi fortsatt ser på, bare ved å ha disse to variablene. 790 00:44:11,600 --> 00:44:16,450 Så vi trenger litt mer da, mens n er større enn 0. 791 00:44:16,450 --> 00:44:21,410 Vi trenger å vite hvor det n er i vår faktiske array. 792 00:44:21,410 --> 00:44:26,660 >> Så er det noen som har en bytte til denne linjen? 793 00:44:26,660 --> 00:44:27,970 Det meste av denne linjen er helt riktig. 794 00:44:27,970 --> 00:44:29,170 Er det en annen tillegg? 795 00:44:29,170 --> 00:44:32,510 Kan vi bytte ut noe for n å gjøre denne linjen litt bedre? 796 00:44:32,510 --> 00:44:32,865 Mm-hm? 797 00:44:32,865 --> 00:44:38,040 >> STUDENT: Kan du initialisere en variabel som lengden til n som vil deretter bli brukt 798 00:44:38,040 --> 00:44:39,600 senere i funksjon? 799 00:44:39,600 --> 00:44:42,060 >> JASON Hirschhorn: Så initial en variabel lengde til n, 800 00:44:42,060 --> 00:44:42,900 og vi bruker det senere? 801 00:44:42,900 --> 00:44:47,070 Men da vi bare oppdatere lengde og vi fremdeles støte på dette problemet der vi 802 00:44:47,070 --> 00:44:51,180 kutte ned lengden på vårt problem, men vi vet aldri hvor, faktisk, 803 00:44:51,180 --> 00:44:52,510 at lengden kartene på. 804 00:44:52,510 --> 00:44:54,790 >> STUDENT: Er ikke det kommer til å skje senere når du sier, søke igjen, 805 00:44:54,790 --> 00:44:55,746 søke rett? 806 00:44:55,746 --> 00:44:57,640 Du kommer til å gå til en annen område av din - 807 00:44:57,640 --> 00:44:59,110 >> JASON Hirschhorn: Vi kommer til å gå til et område, men hvordan vet vi 808 00:44:59,110 --> 00:45:01,150 som er å gå til? 809 00:45:01,150 --> 00:45:03,800 Hvis vi bare har matrisen og dette n, hvordan vet vi hvor du skal 810 00:45:03,800 --> 00:45:05,050 gå til i matrisen. 811 00:45:05,050 --> 00:45:05,900 I ryggen, ja? 812 00:45:05,900 --> 00:45:07,507 >> STUDENT: Har du, i likhet, lavere grense og en øvre grense eller variabel 813 00:45:07,507 --> 00:45:08,586 noe sånt? 814 00:45:08,586 --> 00:45:09,060 >> JASON Hirschhorn: OK. 815 00:45:09,060 --> 00:45:10,780 Så dette er en annen idé. 816 00:45:10,780 --> 00:45:13,490 Snarere enn bare å holde orden på størrelse, holder vi oversikt over den nedre og 817 00:45:13,490 --> 00:45:14,770 øvre grense variabel. 818 00:45:14,770 --> 00:45:17,840 Så hvordan skal vi beregne størrelsen fra en nedre grense og øvre grense? 819 00:45:17,840 --> 00:45:18,520 >> [interposing VOICES] 820 00:45:18,520 --> 00:45:19,710 >> JASON Hirschhorn: subtraksjon. 821 00:45:19,710 --> 00:45:23,650 Og også å holde styr på den nedre bundet og øvre grense for å gi oss beskjed, 822 00:45:23,650 --> 00:45:26,215 er vi søker disse to? 823 00:45:26,215 --> 00:45:28,220 Er vi søker disse to over her? 824 00:45:28,220 --> 00:45:29,540 Søker vi midt to? 825 00:45:29,540 --> 00:45:32,810 Sannsynligvis ikke den midterste to, fordi dette, faktisk, er binært søk. 826 00:45:32,810 --> 00:45:37,320 Men nå vil vi være i stand til å få den størrelsen, men også grensene i tabellen. 827 00:45:37,320 --> 00:45:40,020 Kort sagt, hvis vi har vår giganten telefonboken, vi rive den i to. 828 00:45:40,020 --> 00:45:42,990 Vi vet nå hvor det mindre telefonboken er. 829 00:45:42,990 --> 00:45:45,260 Men vi er faktisk ikke ripping telefonboken i to. 830 00:45:45,260 --> 00:45:48,570 Vi trenger fortsatt å vite hvor nye grensene for vårt problem er. 831 00:45:48,570 --> 00:45:51,645 Er det noen som har noen spørsmål om det? 832 00:45:51,645 --> 00:45:52,440 Ja? 833 00:45:52,440 --> 00:45:56,020 >> STUDENT: Vil det fungere ved å skape en variabel, jeg, at du da bare skifte 834 00:45:56,020 --> 00:46:00,770 stilling i forhold til dens nåværende posisjon, og lengden, n? 835 00:46:00,770 --> 00:46:01,710 >> JASON Hirschhorn: Og hva er jeg? 836 00:46:01,710 --> 00:46:04,110 >> STUDENT: Som jeg være som liksom - 837 00:46:04,110 --> 00:46:08,040 Som du vil initial jeg å være den midtstilling av tabellen. 838 00:46:08,040 --> 00:46:12,540 Og så, hvis verdien i posisjon jeg i midten av matrisen i funnet 839 00:46:12,540 --> 00:46:17,870 være mindre enn verdien du trenger, jeg nå blir lengden av matrisen, samt 840 00:46:17,870 --> 00:46:19,215 verdien av i dividert med to. 841 00:46:19,215 --> 00:46:20,270 Som, se, du skiftet i - 842 00:46:20,270 --> 00:46:20,770 >> JASON Hirschhorn: Høyre. 843 00:46:20,770 --> 00:46:21,165 >> STUDENT: - opp til - 844 00:46:21,165 --> 00:46:24,010 >> JASON Hirschhorn: Så jeg er nesten positivt at vil fungere. 845 00:46:24,010 --> 00:46:26,800 Men poenget er, trenger du to biter av informasjon her. 846 00:46:26,800 --> 00:46:30,050 Du kan gjøre det med begynnelse og slutt, eller du kan gjøre det med størrelsen, og deretter 847 00:46:30,050 --> 00:46:31,060 noen markør. 848 00:46:31,060 --> 00:46:32,630 Men du trenger to stykker av informasjon her. 849 00:46:32,630 --> 00:46:34,160 Du kan ikke klare seg med bare én. 850 00:46:34,160 --> 00:46:35,830 Betyr det fornuftig? 851 00:46:35,830 --> 00:46:39,560 >> Så vi kommer til å gå gjennom, og vi kommer til å gjøre [uhørbart] 852 00:46:39,560 --> 00:46:41,330 og skape noen markører. 853 00:46:41,330 --> 00:46:42,690 Hva gjorde du skrive inn koden din? 854 00:46:42,690 --> 00:46:46,190 >> STUDENT: Jeg bare sa int bundet en er lik 0.. 855 00:46:46,190 --> 00:46:47,790 >> JASON Hirschhorn: La oss kalle som int, begynner. 856 00:46:47,790 --> 00:46:49,140 >> STUDENT: OK. 857 00:46:49,140 --> 00:46:50,590 >> JASON Hirschhorn: Det gjør mer fornuftig for meg. 858 00:46:50,590 --> 00:46:51,670 Og? 859 00:46:51,670 --> 00:46:54,340 >> STUDENT: Jeg sa, jeg gjette, int slutt. 860 00:46:54,340 --> 00:46:55,870 >> JASON Hirschhorn: int slutt. 861 00:46:55,870 --> 00:46:57,640 >> STUDENT: Jeg antar, n minus 1, eller noe sånt. 862 00:46:57,640 --> 00:46:59,100 Like, det siste elementet. 863 00:46:59,100 --> 00:47:02,310 >> JASON Hirschhorn: Så du skrev, int begynner lik 0, semikolon, og int 864 00:47:02,310 --> 00:47:04,320 ending lik n minus 1, semikolon. 865 00:47:04,320 --> 00:47:06,850 Så egentlig, hva vi gjør her, 0 den første posisjon. 866 00:47:06,850 --> 00:47:09,570 Og som vi vet i matriser, har de ikke gå opp til n, går de opp til n minus en. 867 00:47:09,570 --> 00:47:11,110 Så vi har noen grenser i vårt utvalg. 868 00:47:11,110 --> 00:47:15,730 Og disse innledende grenser skje for å være de første rammene av vårt problem. 869 00:47:15,730 --> 00:47:16,640 OK. 870 00:47:16,640 --> 00:47:19,200 Så det høres bra ut. 871 00:47:19,200 --> 00:47:22,380 Så hvis vi går tilbake til denne linjen, mens lengden av listen er større enn 0, 872 00:47:22,380 --> 00:47:24,752 det, i stedet for n, bør vi satt i her? 873 00:47:24,752 --> 00:47:28,820 >> STUDENT: Skriv ending minus begynnelsen. 874 00:47:28,820 --> 00:47:34,780 >> JASON Hirschhorn: Mens ending minus begynnelsen er større enn 0? 875 00:47:34,780 --> 00:47:35,480 OK. 876 00:47:35,480 --> 00:47:37,730 Og vi kunne, hvis vi ønsket å gjøre det litt hyggeligere, hva 877 00:47:37,730 --> 00:47:38,980 annet kan vi gjøre? 878 00:47:38,980 --> 00:47:41,650 879 00:47:41,650 --> 00:47:43,412 Hvis vi ønsket å rengjøre denne koden opp litt? 880 00:47:43,412 --> 00:47:46,716 881 00:47:46,716 --> 00:47:48,180 Hvordan kan vi bli kvitt den 0? 882 00:47:48,180 --> 00:47:51,560 883 00:47:51,560 --> 00:47:52,690 Dette er bare en stil spørsmål. 884 00:47:52,690 --> 00:47:53,690 Det er riktig akkurat nå. 885 00:47:53,690 --> 00:47:54,870 >> STUDENT: Ending ikke lik begynnelsen? 886 00:47:54,870 --> 00:47:55,740 >> JASON Hirschhorn: Vi kan gjøre hva? 887 00:47:55,740 --> 00:47:56,730 >> [interposing VOICES] 888 00:47:56,730 --> 00:47:57,330 >> STUDENT: Ending er større? 889 00:47:57,330 --> 00:47:57,720 >> JASON Hirschhorn: Yeah. 890 00:47:57,720 --> 00:48:01,110 Vi kan bare gjøre mens slutt er større enn begynnelsen. 891 00:48:01,110 --> 00:48:03,580 Høyre. 892 00:48:03,580 --> 00:48:06,240 Vi har lagt til begynnelsen til den andre siden av det, og vi ble kvitt 0. 893 00:48:06,240 --> 00:48:08,000 Så dette ser bare en litt renere. 894 00:48:08,000 --> 00:48:08,990 OK. 895 00:48:08,990 --> 00:48:11,460 Så, mens lengden på listen er 0, vi skrev det, er større mens slutt 896 00:48:11,460 --> 00:48:12,240 enn begynnelsen. 897 00:48:12,240 --> 00:48:19,840 Vi kommer til å sette i vår nødvendig klammeparentes, og da det første 898 00:48:19,840 --> 00:48:22,090 vi ønsker å gjøre er å se på dem i en liten liste. 899 00:48:22,090 --> 00:48:22,510 Du? 900 00:48:22,510 --> 00:48:23,320 Kan du gi meg den - 901 00:48:23,320 --> 00:48:26,460 >> STUDENT: Hvis parentes verdi hakeparentes - 902 00:48:26,460 --> 00:48:30,450 >> JASON Hirschhorn: Hvis parentes verdi hakeparentes. 903 00:48:30,450 --> 00:48:33,210 >> STUDENT: ending delt på to. 904 00:48:33,210 --> 00:48:33,952 >> JASON Hirschhorn: Ending? 905 00:48:33,952 --> 00:48:35,280 >> STUDENT: Jeg ser et problem med - 906 00:48:35,280 --> 00:48:35,750 >> JASON Hirschhorn: OK. 907 00:48:35,750 --> 00:48:39,150 Vel, se på midten. 908 00:48:39,150 --> 00:48:41,226 Hvordan vet vi hva midten er? 909 00:48:41,226 --> 00:48:42,450 Yeah. 910 00:48:42,450 --> 00:48:43,070 Så la meg slette den koden. 911 00:48:43,070 --> 00:48:46,360 Hvordan vet vi hva midten er? 912 00:48:46,360 --> 00:48:48,003 I alt, når du har begynnelsen og til slutt, hvordan finner du 913 00:48:48,003 --> 00:48:48,876 midten? 914 00:48:48,876 --> 00:48:49,590 >> STUDENT: Du gjennomsnittet. 915 00:48:49,590 --> 00:48:51,820 >> STUDENT: Du legger dem sammen og deretter - 916 00:48:51,820 --> 00:48:53,150 >> JASON Hirschhorn: Legg dem sammen og da? 917 00:48:53,150 --> 00:48:54,090 >> STUDENT: Og du gjennomsnittlig. 918 00:48:54,090 --> 00:48:55,050 Dele det med to. 919 00:48:55,050 --> 00:48:56,500 >> JASON Hirschhorn: Legg dem sammen og dele på to. 920 00:48:56,500 --> 00:48:59,400 Så int midten lik? 921 00:48:59,400 --> 00:49:01,120 Tom, kan du gi den til meg? 922 00:49:01,120 --> 00:49:03,550 >> STUDENT: Begynnelsen pluss ending - 923 00:49:03,550 --> 00:49:04,950 >> JASON Hirschhorn: Begynnelsen pluss ending. 924 00:49:04,950 --> 00:49:06,880 >> STUDENT: Alle, bracket, delt på to. 925 00:49:06,880 --> 00:49:10,940 >> JASON Hirschhorn: Alle, i parentes, dividert med to. 926 00:49:10,940 --> 00:49:16,300 Så det gir meg midten av noe, korrigere? 927 00:49:16,300 --> 00:49:18,980 >> STUDENT: Du trenger også å runde det opp. 928 00:49:18,980 --> 00:49:19,990 >> JASON Hirschhorn: Hva gjør du mener, trenger jeg å runde det opp? 929 00:49:19,990 --> 00:49:20,400 >> [interposing VOICES] 930 00:49:20,400 --> 00:49:24,520 >> STUDENT: Fordi hvis det er en merkelig tall, så det er som - 931 00:49:24,520 --> 00:49:25,440 >> JASON Hirschhorn: Vel, OK. 932 00:49:25,440 --> 00:49:26,360 Så jeg kunne runde det opp. 933 00:49:26,360 --> 00:49:33,350 Men hvis det er et oddetall, en fem, kan jeg tar en bort fra midten. 934 00:49:33,350 --> 00:49:35,665 Eller hvis det er et partall, heller, det er en bedre sak. 935 00:49:35,665 --> 00:49:39,600 Hvis det er fire, vi har bare fire, kan jeg ta den første "midten", sitat, unquote eller 936 00:49:39,600 --> 00:49:41,760 den andre "midt" en. 937 00:49:41,760 --> 00:49:46,390 Enten ville arbeide for en binær søk, så jeg ikke egentlig trenger å runde det. 938 00:49:46,390 --> 00:49:48,640 Men det er en annen ting jeg må se på denne linjen. 939 00:49:48,640 --> 00:49:50,530 Vi kan ikke klar over det ennå, men vi vil komme tilbake til det. 940 00:49:50,530 --> 00:49:53,200 Fordi denne linjen faktisk fortsatt trenger en annen ting. 941 00:49:53,200 --> 00:49:55,990 >> Men så langt har vi skrevet fire linjer med kode. 942 00:49:55,990 --> 00:49:58,120 Vi har fått vår begynnelsen og slutter markører. 943 00:49:58,120 --> 00:50:01,320 Vi har vår mens loop, som kart på direkte til vår pseudo. 944 00:50:01,320 --> 00:50:05,790 Vi ser på midten som kart direkte på vår pseudo. 945 00:50:05,790 --> 00:50:09,070 Jeg vil si dette går til midten av listen, på linje med kode. 946 00:50:09,070 --> 00:50:11,560 Og så, når vi går til midten av listen, neste ting vi må gjøre 947 00:50:11,560 --> 00:50:14,880 er å sjekke om vår verdi er det for den pseudo vi skrev tidligere. 948 00:50:14,880 --> 00:50:17,100 >> Så hvordan skal vi sjekke om vår verdi er på midten av listen? 949 00:50:17,100 --> 00:50:17,300 Du. 950 00:50:17,300 --> 00:50:18,511 Hvorfor ikke gjøre dette? 951 00:50:18,511 --> 00:50:23,070 >> STUDENT: Hvis vår verdi er er på midten er lik 952 00:50:23,070 --> 00:50:24,592 uansett hva vi setter - 953 00:50:24,592 --> 00:50:26,190 Jeg mener lik lik - 954 00:50:26,190 --> 00:50:26,690 >> JASON Hirschhorn: It - 955 00:50:26,690 --> 00:50:27,940 OK. 956 00:50:27,940 --> 00:50:30,080 957 00:50:30,080 --> 00:50:32,170 >> STUDENT: Jeg er ikke sikker på hva den variabel vi leter 958 00:50:32,170 --> 00:50:32,850 for selv, er fordi - 959 00:50:32,850 --> 00:50:33,330 >> [interposing VOICES] 960 00:50:33,330 --> 00:50:34,520 >> STUDENT: [uhørbart]. 961 00:50:34,520 --> 00:50:35,060 >> JASON Hirschhorn: Nettopp. 962 00:50:35,060 --> 00:50:37,260 Per funksjonen erklæringen, vi leter etter en verdi. 963 00:50:37,260 --> 00:50:39,760 Så vi søker etter en verdi i en matrise med verdier. 964 00:50:39,760 --> 00:50:41,080 Så du er helt riktig. 965 00:50:41,080 --> 00:50:45,040 Du vil gjøre, hvis åpen paren verdi brakett midten lukket vinkelen er 966 00:50:45,040 --> 00:50:49,930 lik verdi, og inni der hva trenger vi å gjøre? 967 00:50:49,930 --> 00:50:51,230 Hvis vår verdi er der, hva trenger vi å gjøre? 968 00:50:51,230 --> 00:50:51,420 >> [interposing VOICES] 969 00:50:51,420 --> 00:50:52,160 >> STUDENT: Return null. 970 00:50:52,160 --> 00:50:53,070 >> JASON Hirschhorn: Return sant. 971 00:50:53,070 --> 00:50:54,790 >> STUDENT: Return sant. 972 00:50:54,790 --> 00:50:57,856 >> JASON Hirschhorn: Michael, hva betyr denne linjen gjøre? 973 00:50:57,856 --> 00:51:01,105 >> STUDENT: [uhørbart] programmet har kjørt sin gang, og det er over, og 974 00:51:01,105 --> 00:51:01,920 du har det du trenger å gjøre? 975 00:51:01,920 --> 00:51:03,030 >> JASON Hirschhorn: Programmet eller hva? 976 00:51:03,030 --> 00:51:03,700 I dette tilfellet? 977 00:51:03,700 --> 00:51:04,210 >> STUDENT: Den funksjonen. 978 00:51:04,210 --> 00:51:05,170 >> JASON Hirschhorn: Funksjonen. 979 00:51:05,170 --> 00:51:08,420 Og så, for å gå tilbake til det som kalles den og gi den verdien, sant. 980 00:51:08,420 --> 00:51:09,890 Helt riktig. 981 00:51:09,890 --> 00:51:10,170 Main. 982 00:51:10,170 --> 00:51:12,035 Hva er returtypen av hoved, Michael? 983 00:51:12,035 --> 00:51:16,480 984 00:51:16,480 --> 00:51:17,150 >> STUDENT: int, heltall? 985 00:51:17,150 --> 00:51:18,080 >> JASON Hirschhorn: int, akkurat. 986 00:51:18,080 --> 00:51:18,680 Et heltall. 987 00:51:18,680 --> 00:51:20,980 Det var bare et spørsmål for å være sikker dere har vært på toppen av det. 988 00:51:20,980 --> 00:51:24,250 Hva betyr det som regel tilbake, hvis alle ting fungerer bra? 989 00:51:24,250 --> 00:51:24,520 >> STUDENT: Zero. 990 00:51:24,520 --> 00:51:24,820 >> JASON Hirschhorn: Zero. 991 00:51:24,820 --> 00:51:25,430 Helt riktig. 992 00:51:25,430 --> 00:51:28,790 >> STUDENT: Hvis dette bare returnerer true, det er ingen informasjon som blir gitt 993 00:51:28,790 --> 00:51:30,675 om hva - 994 00:51:30,675 --> 00:51:34,040 Oh, er dette bare å si at det Verdien er inne i matrisen. 995 00:51:34,040 --> 00:51:35,350 >> JASON Hirschhorn: Nettopp. 996 00:51:35,350 --> 00:51:38,080 Dette programmet er ikke å gi informasjon av hvor verdien er. 997 00:51:38,080 --> 00:51:41,850 Det er bare å si, ja, fant vi det, eller nei, det gjorde vi ikke det. 998 00:51:41,850 --> 00:51:42,990 Så hvis nummeret funnet, returnere true. 999 00:51:42,990 --> 00:51:45,500 Vel, faktisk vi bare gjorde det virkelig hurtig med at en kodelinje. 1000 00:51:45,500 --> 00:51:47,500 Så jeg skal flytte den linjen av pseudo. 1001 00:51:47,500 --> 00:51:50,045 >> STUDENT: Trenger vi ikke å forandre rekken? 1002 00:51:50,045 --> 00:51:52,830 Det bør være verdier, ikke verdi, ikke sant? 1003 00:51:52,830 --> 00:51:53,430 >> JASON Hirschhorn: Beklager. 1004 00:51:53,430 --> 00:51:54,010 Takk. 1005 00:51:54,010 --> 00:51:54,800 >> STUDENT: Ja. 1006 00:51:54,800 --> 00:51:55,850 >> JASON Hirschhorn: Denne linjen bør-verdier. 1007 00:51:55,850 --> 00:51:57,150 Helt riktig. 1008 00:51:57,150 --> 00:51:57,920 OK. 1009 00:51:57,920 --> 00:51:59,170 Så vi har sett på den midterste listen. 1010 00:51:59,170 --> 00:52:00,790 Hvis nummeret funnet avkastning sant. 1011 00:52:00,790 --> 00:52:04,470 Fortsetter videre med vår pseudo, hvis midten er større, søk igjen. 1012 00:52:04,470 --> 00:52:09,640 Så jeg hadde her, hvis antall høyere, søk igjen. 1013 00:52:09,640 --> 00:52:12,700 1014 00:52:12,700 --> 00:52:14,462 Constantine, kan du gi meg denne linjen med kode? 1015 00:52:14,462 --> 00:52:17,240 1016 00:52:17,240 --> 00:52:23,520 >> STUDENT: Hvis verdien av midten - 1017 00:52:23,520 --> 00:52:24,890 >> JASON Hirschhorn: Så hvis verdi - 1018 00:52:24,890 --> 00:52:28,890 hvis åpen paren verdier brakett midt tett brakett - 1019 00:52:28,890 --> 00:52:31,500 >> STUDENT: Er mindre enn verdien? 1020 00:52:31,500 --> 00:52:32,760 >> JASON Hirschhorn: Er mindre enn. 1021 00:52:32,760 --> 00:52:33,800 >> STUDENT: Mindre enn verdien. 1022 00:52:33,800 --> 00:52:34,060 >> JASON Hirschhorn: Verdi. 1023 00:52:34,060 --> 00:52:35,310 Vel, faktisk, vil du sjekk om nummeret - 1024 00:52:35,310 --> 00:52:38,310 1025 00:52:38,310 --> 00:52:38,490 Unnskyld. 1026 00:52:38,490 --> 00:52:39,140 Dette er litt forvirrende. 1027 00:52:39,140 --> 00:52:43,920 Men ellers hvis nummeret i midten av listen er større. 1028 00:52:43,920 --> 00:52:45,170 >> STUDENT: Oh, OK. 1029 00:52:45,170 --> 00:52:49,800 1030 00:52:49,800 --> 00:52:50,410 >> JASON Hirschhorn: Jeg kommer til å endre det. 1031 00:52:50,410 --> 00:52:55,060 Else hvis midten er høyere, vi vil søke venstre, OK? 1032 00:52:55,060 --> 00:52:57,310 Og hva gjør vi inne dette hvis tilstanden? 1033 00:52:57,310 --> 00:53:03,660 1034 00:53:03,660 --> 00:53:07,510 >> STUDENT: Kan jeg gjøre en liten endring til tilstanden, endre den til annet hvis? 1035 00:53:07,510 --> 00:53:08,380 >> JASON Hirschhorn: Else om? 1036 00:53:08,380 --> 00:53:09,270 OK. 1037 00:53:09,270 --> 00:53:12,840 Så denne koden vil kjøre omtrent det samme. 1038 00:53:12,840 --> 00:53:18,620 Men det fine med å bruke if, else hvis, annet hvis eller hvis, annet hvis, annet 1039 00:53:18,620 --> 00:53:22,320 betyr at bare en av dem skal skal kontrolleres, og ikke alle tre, 1040 00:53:22,320 --> 00:53:23,290 potensielt. 1041 00:53:23,290 --> 00:53:25,530 Og det gjør det litt finere på datamaskinen som er 1042 00:53:25,530 --> 00:53:26,670 kjøre programmet. 1043 00:53:26,670 --> 00:53:27,620 >> Så [? Constantine,?] 1044 00:53:27,620 --> 00:53:31,330 vi er inne i denne linjen, annet hvis verdier, brakett midt tett brakett 1045 00:53:31,330 --> 00:53:32,260 er større enn verdien. 1046 00:53:32,260 --> 00:53:33,150 Hva trenger vi å gjøre? 1047 00:53:33,150 --> 00:53:33,970 Vi trenger å søke venstre. 1048 00:53:33,970 --> 00:53:35,220 Hvordan gjør vi det? 1049 00:53:35,220 --> 00:53:46,960 1050 00:53:46,960 --> 00:53:48,720 Jeg kommer til å gi deg en start. 1051 00:53:48,720 --> 00:53:52,210 >> Vi har disse to tingene kalles begynner og slutter. 1052 00:53:52,210 --> 00:53:57,340 Så hva som må skje til begynnelsen? 1053 00:53:57,340 --> 00:53:59,640 Hvis du ønsker å søke venstre for liste, vi får vår nåværende begynnelsen. 1054 00:53:59,640 --> 00:54:01,080 Hva trenger vi å gjøre det? 1055 00:54:01,080 --> 00:54:04,220 >> STUDENT: Vi satt i begynnelsen til midten pluss en. 1056 00:54:04,220 --> 00:54:05,120 >> JASON Hirschhorn: Så hvis vi er søker venstre? 1057 00:54:05,120 --> 00:54:06,250 >> STUDENT: Beklager, midt minus - 1058 00:54:06,250 --> 00:54:11,310 så avslutningen ville være middel minus 1 og begynnelsen - 1059 00:54:11,310 --> 00:54:12,450 >> JASON Hirschhorn: Og hva skjer til begynnelsen? 1060 00:54:12,450 --> 00:54:13,210 >> STUDENT: Det forblir den samme. 1061 00:54:13,210 --> 00:54:14,120 >> JASON Hirschhorn: Så Betydningen forblir den samme. 1062 00:54:14,120 --> 00:54:16,040 Hvis vi søker venstre, er vi bruker samme begynnelsen - 1063 00:54:16,040 --> 00:54:16,860 helt riktig. 1064 00:54:16,860 --> 00:54:17,870 Og det slutter? 1065 00:54:17,870 --> 00:54:19,390 Sorry, hva gjør ending lik igjen? 1066 00:54:19,390 --> 00:54:20,750 >> STUDENT: Mellom minus en. 1067 00:54:20,750 --> 00:54:21,620 >> JASON Hirschhorn: Mellom minus en. 1068 00:54:21,620 --> 00:54:23,470 Nå, hvorfor minus en, ikke bare midten? 1069 00:54:23,470 --> 00:54:32,870 1070 00:54:32,870 --> 00:54:35,570 >> STUDENT: Den midterste er ute av bilde allerede, fordi vi hadde 1071 00:54:35,570 --> 00:54:36,700 sjekket at det er ute? 1072 00:54:36,700 --> 00:54:37,630 >> JASON Hirschhorn: Det er helt riktig. 1073 00:54:37,630 --> 00:54:38,580 Den midterste er ute av bildet. 1074 00:54:38,580 --> 00:54:39,800 Vi har allerede sjekket midten. 1075 00:54:39,800 --> 00:54:44,730 Så vi ikke ønsker "midten", sitat unquote, å fortsette å være i 1076 00:54:44,730 --> 00:54:46,110 array som vi ser. 1077 00:54:46,110 --> 00:54:47,670 Så dette er fantastisk. 1078 00:54:47,670 --> 00:54:50,670 >> Else hvis verdier brakett midten er større enn verdien slutter likhets 1079 00:54:50,670 --> 00:54:51,920 midten minus en. 1080 00:54:51,920 --> 00:54:55,060 1081 00:54:55,060 --> 00:54:57,340 Jeff, hva om denne siste linjen? 1082 00:54:57,340 --> 00:54:58,590 >> STUDENT: Else. 1083 00:54:58,590 --> 00:55:02,486 1084 00:55:02,486 --> 00:55:06,000 Verdier midten er mindre enn verdien? 1085 00:55:06,000 --> 00:55:07,570 >> JASON Hirschhorn: Vi vil du gir meg annet. 1086 00:55:07,570 --> 00:55:09,310 Så hvis du ikke gir meg - 1087 00:55:09,310 --> 00:55:12,270 >> STUDENT: Så da begynner ville være midt pluss en. 1088 00:55:12,270 --> 00:55:16,100 1089 00:55:16,100 --> 00:55:19,070 >> JASON Hirschhorn: Begynnelsen likemenn midtre pluss 1, igjen, for den samme 1090 00:55:19,070 --> 00:55:20,820 Grunnen til at Constantine ga oss tidligere. 1091 00:55:20,820 --> 00:55:24,280 Og på slutten, har som ikke gitt meg en linje med kode ennå? 1092 00:55:24,280 --> 00:55:26,600 Return false, Aleha, hva vi skriver her? 1093 00:55:26,600 --> 00:55:28,590 >> STUDENT: return false. 1094 00:55:28,590 --> 00:55:29,320 >> JASON Hirschhorn: return false. 1095 00:55:29,320 --> 00:55:33,340 Og vi må gjøre det, fordi hvis vi ikke synes det, trenger vi å si at vi 1096 00:55:33,340 --> 00:55:34,080 fant ikke det. 1097 00:55:34,080 --> 00:55:36,270 Og vi sa at vi kommer til å returnere en bool, så vi definitivt må tilbake 1098 00:55:36,270 --> 00:55:38,150 en bool sted. 1099 00:55:38,150 --> 00:55:42,590 >> Så la oss kjøre denne koden. 1100 00:55:42,590 --> 00:55:44,520 Jeg faktisk kommer til å - 1101 00:55:44,520 --> 00:55:45,930 så vi er i terminalen. 1102 00:55:45,930 --> 00:55:47,230 Vi vil fjerne vårt vindu. 1103 00:55:47,230 --> 00:55:49,270 La oss gjøre alt. 1104 00:55:49,270 --> 00:55:50,340 Vi fant det er en feil. 1105 00:55:50,340 --> 00:55:54,280 Det er en feil på linje 15, forventet semikolon ved enden av 1106 00:55:54,280 --> 00:55:54,890 erklæring. 1107 00:55:54,890 --> 00:55:56,454 Så hva gjorde jeg glemme? 1108 00:55:56,454 --> 00:55:57,230 >> STUDENT: Semicolon. 1109 00:55:57,230 --> 00:56:00,200 >> JASON Hirschhorn: Semicolon rett opp her. 1110 00:56:00,200 --> 00:56:00,950 Jeg tror det var Tom kode. 1111 00:56:00,950 --> 00:56:01,870 Så Tom, [uhørbart]. 1112 00:56:01,870 --> 00:56:03,120 Bare tuller. 1113 00:56:03,120 --> 00:56:05,010 1114 00:56:05,010 --> 00:56:07,310 La oss ikke gjøre hele igjen. 1115 00:56:07,310 --> 00:56:10,180 >> STUDENT: Hva Dropbox katalog bør vi være i for dette? 1116 00:56:10,180 --> 00:56:11,345 >> JASON Hirschhorn: Så du kan bare se for denne biten. 1117 00:56:11,345 --> 00:56:16,380 Men igjen, hvis du ønsket å flytte denne koden på pset3 katalogen for å prøve 1118 00:56:16,380 --> 00:56:17,050 det ut, det var det jeg gjorde. 1119 00:56:17,050 --> 00:56:18,600 Hvis du vil legge merke til her - sorry, godt spørsmål. 1120 00:56:18,600 --> 00:56:19,460 >> [? LS,?] 1121 00:56:19,460 --> 00:56:24,700 Jeg har her på find.c koden fra denne ukens distro kode. 1122 00:56:24,700 --> 00:56:26,300 Jeg har helpers.h. 1123 00:56:26,300 --> 00:56:30,010 Jeg har en Make-fil som jeg faktisk redigert litt for å inkludere disse nye 1124 00:56:30,010 --> 00:56:30,710 filene vi skriver. 1125 00:56:30,710 --> 00:56:34,120 Alt dette kode vil være tilgjengelig, ikke fordelingskode, men den nye 1126 00:56:34,120 --> 00:56:39,510 Gjør fil, vil den nye helpers.h fil være tilgjengelig på nettet for nedlasting. 1127 00:56:39,510 --> 00:56:41,800 Igjen, så de som er ekstra koder har vi. 1128 00:56:41,800 --> 00:56:46,130 >> Så gjør alt, per denne linjen, gjør finne, binær, boble utvalg - merker 1129 00:56:46,130 --> 00:56:50,930 alle tre av dem og kompilerer inn denne kjørbar kode finne. 1130 00:56:50,930 --> 00:56:54,090 Så generelt, ønsker vi ikke til rett til check50. 1131 00:56:54,090 --> 00:56:57,580 Vi ønsker å kjøre noen tester på vår egen. 1132 00:56:57,580 --> 00:57:11,750 Men bare så vi kan fremskynde dette litt, check50 2013 pset3.find vil passere 1133 00:57:11,750 --> 00:57:14,630 i helpers.c-- my bad. 1134 00:57:14,630 --> 00:57:16,050 >> Jeg har ikke det akkurat nå. 1135 00:57:16,050 --> 00:57:20,670 Så vi faktisk kommer til å kjøre koden på ordentlig. 1136 00:57:20,670 --> 00:57:23,570 Usage.find /, vet du hva det betyr? 1137 00:57:23,570 --> 00:57:25,970 >> STUDENT: Du trenger en andre kommandolinje på den. 1138 00:57:25,970 --> 00:57:26,980 >> JASON Hirschhorn: Jeg trenger en andre kommandolinje. 1139 00:57:26,980 --> 00:57:30,640 Og per spesifikasjonen, jeg trenger å gå inn på hva vi leter etter. 1140 00:57:30,640 --> 00:57:33,750 Så la oss se for 42.. 1141 00:57:33,750 --> 00:57:37,030 Vi vil holde det i sortert, fordi vi har ikke skrevet en slags funksjon ennå - 1142 00:57:37,030 --> 00:57:41,830 42, 43, 44. 1143 00:57:41,830 --> 00:57:46,240 >> Og Kontroll D ikke fant nålen i høystakken. 1144 00:57:46,240 --> 00:57:46,505 Det er ille. 1145 00:57:46,505 --> 00:57:47,200 Det er definitivt der. 1146 00:57:47,200 --> 00:57:48,090 La oss prøve noe annet. 1147 00:57:48,090 --> 00:57:49,860 Kanskje det er fordi jeg satt det i begynnelsen. 1148 00:57:49,860 --> 00:57:54,490 >> La oss gjøre 41, 42, 43. 1149 00:57:54,490 --> 00:57:55,012 Det vi går. 1150 00:57:55,012 --> 00:57:56,400 Den fant det. 1151 00:57:56,400 --> 00:58:00,040 La oss sette det på slutten nå, bare slik at vi kan være grundig - 1152 00:58:00,040 --> 00:58:03,580 40, 41, 42. 1153 00:58:03,580 --> 00:58:05,760 Fant du ikke nålen. 1154 00:58:05,760 --> 00:58:07,550 Så jeg nevnte dette tidligere. 1155 00:58:07,550 --> 00:58:08,980 Dessverre, jeg visste dette kom til å skje. 1156 00:58:08,980 --> 00:58:11,490 >> Men for pedagogiske formål, det er godt å utforske det. 1157 00:58:11,490 --> 00:58:12,990 Det fungerer ikke. 1158 00:58:12,990 --> 00:58:16,020 For noen grunn, kan det ikke finne det. 1159 00:58:16,020 --> 00:58:18,970 Vi vet hva som er der, men vi blir ikke å finne det. 1160 00:58:18,970 --> 00:58:24,140 Så en ting vi kan gjøre er å gå gjennom GDB å finne det, men gjør noen, 1161 00:58:24,140 --> 00:58:27,850 uten å gå gjennom GDB, har en følelse av hvor vi skrudd opp? 1162 00:58:27,850 --> 00:58:28,480 [? Madu? ?] 1163 00:58:28,480 --> 00:58:30,960 >> STUDENT: Jeg tror det kan bli når slutter er lik begynnelsen, og det er 1164 00:58:30,960 --> 00:58:33,090 bare ett element listen. 1165 00:58:33,090 --> 00:58:35,560 Da er det bare ignorerer det i stedet av faktisk sjekker det. 1166 00:58:35,560 --> 00:58:36,940 >> JASON Hirschhorn: Det er helt riktig. 1167 00:58:36,940 --> 00:58:41,110 Når ending tilsvarer begynnelsen, gjør vi fortsatt ha et element i vår liste? 1168 00:58:41,110 --> 00:58:42,480 >> STUDENT: Ja. 1169 00:58:42,480 --> 00:58:45,450 >> JASON Hirschhorn: Ja, faktisk, vi har ett og bare ett element. 1170 00:58:45,450 --> 00:58:50,500 Og det vil mest sannsynlig skje når, per koden vi testet, er vi på 1171 00:58:50,500 --> 00:58:54,640 forsiden av høystakken eller i slutten av høystakken. 1172 00:58:54,640 --> 00:58:56,000 Det er der begynnelse og ending kommer til å like 1173 00:58:56,000 --> 00:58:57,820 ett, med binære søk. 1174 00:58:57,820 --> 00:59:01,440 Så i disse to tilfellene det ikke fungerte, fordi slutter var lik begynnelsen. 1175 00:59:01,440 --> 00:59:06,030 >> Men hvis ender er lik begynnelsen betyr dette mens loop utføre? 1176 00:59:06,030 --> 00:59:06,390 Det gjør ikke det. 1177 00:59:06,390 --> 00:59:08,660 Og vi kunne ha sjekket som igjen gjennom GDB. 1178 00:59:08,660 --> 00:59:14,000 Så hvordan kan vi løse denne koden, fordi når mens slutt er lik 1179 00:59:14,000 --> 00:59:16,070 begynnelse, ønsker vi også dette mens sløyfen til å kjøre. 1180 00:59:16,070 --> 00:59:18,620 >> Så hva fikse kan vi gjøre til linje 18? 1181 00:59:18,620 --> 00:59:21,060 >> STUDENT: [uhørbart] er større enn eller lik. 1182 00:59:21,060 --> 00:59:21,700 >> JASON Hirschhorn: Helt riktig. 1183 00:59:21,700 --> 00:59:24,600 Mens ending er større enn eller lik begynnelsen. 1184 00:59:24,600 --> 00:59:27,300 Så nå, sørger vi for å få det hjørne tilfellet på slutten. 1185 00:59:27,300 --> 00:59:27,870 Og la oss se. 1186 00:59:27,870 --> 00:59:29,560 La oss kjøre dette en gang til. 1187 00:59:29,560 --> 00:59:31,266 >> La oss gjøre alt. 1188 00:59:31,266 --> 00:59:33,910 Igjen, må du bare følge med her. 1189 00:59:33,910 --> 00:59:36,280 Finn 41 denne gangen. 1190 00:59:36,280 --> 00:59:37,360 Bare holde det konsekvent. 1191 00:59:37,360 --> 00:59:38,210 >> Finn 42. 1192 00:59:38,210 --> 00:59:38,930 La oss sette det i begynnelsen - 1193 00:59:38,930 --> 00:59:41,630 42, 43, 44. 1194 00:59:41,630 --> 00:59:42,860 Vi fant det. 1195 00:59:42,860 --> 00:59:47,710 Så det var faktisk endring vi trengte å gjøre. 1196 00:59:47,710 --> 00:59:51,090 >> Det var en masse koding vi nettopp gjorde, binære søk. 1197 00:59:51,090 --> 00:59:55,760 Er det noen som har noen spørsmål før Jeg går videre inn i linjene vi skrev i 1198 00:59:55,760 --> 00:59:58,750 binære søk eller hvordan vi skjønte ut hva vi finne ut? 1199 00:59:58,750 --> 01:00:01,900 1200 01:00:01,900 --> 01:00:06,270 Før vi går videre, jeg ønsker også å påpeke ut at av og store, vi kartlagt 1201 01:00:06,270 --> 01:00:09,300 vår pseudo-kode ett til en på vår kode. 1202 01:00:09,300 --> 01:00:11,550 >> Vi har at vanskelige ting å regne ut med 1203 01:00:11,550 --> 01:00:12,890 begynner og slutter. 1204 01:00:12,890 --> 01:00:17,380 Men hadde du ikke funnet det ut, du ville ha skrevet ganske mye 1205 01:00:17,380 --> 01:00:20,740 identisk kode, lagre for de to øverste linjene. 1206 01:00:20,740 --> 01:00:23,380 Og så ville du ha realisert når du har gjort det i kontroller og saker som 1207 01:00:23,380 --> 01:00:24,840 du trenger noe annet. 1208 01:00:24,840 --> 01:00:28,510 Så selv om du hadde fulgt vår pseudo-kode linje til linje, ville du har 1209 01:00:28,510 --> 01:00:31,130 fått alle unntatt to linjer koden du trengte å skrive. 1210 01:00:31,130 --> 01:00:33,900 >> Og jeg ville være villig til å satse på at dere ville ha alt funnet ut 1211 01:00:33,900 --> 01:00:37,940 ganske raskt, at du trengte å sette en slags markør i det å regne 1212 01:00:37,940 --> 01:00:39,190 ut hvor du var. 1213 01:00:39,190 --> 01:00:41,540 1214 01:00:41,540 --> 01:00:44,550 Det igjen, er kraften til å gjøre pseudo-kode på forhånd. 1215 01:00:44,550 --> 01:00:47,310 Så vi kan gjøre logikken først, og deretter vi kan bekymre seg om syntaks. 1216 01:00:47,310 --> 01:00:51,470 >> Hadde vi vært forvirret om logikken mens du prøver å skrive denne koden i C, 1217 01:00:51,470 --> 01:00:53,110 vi ville ha fått all messed opp. 1218 01:00:53,110 --> 01:00:56,340 Og da ville vi stille spørsmål om logikk og syntaks og meshing 1219 01:00:56,340 --> 01:00:57,320 dem sammen. 1220 01:00:57,320 --> 01:01:02,170 Og vi ville ha fått tapt i det som raskt kan bli en 1221 01:01:02,170 --> 01:01:04,000 svært vanskelig problem. 1222 01:01:04,000 --> 01:01:08,680 Så la oss gå videre nå til valg liksom. 1223 01:01:08,680 --> 01:01:10,760 >> Vi har 20 minutter igjen. 1224 01:01:10,760 --> 01:01:14,130 Så jeg har en følelse vi vil ikke være i stand til å komme gjennom alle valg slags 1225 01:01:14,130 --> 01:01:15,940 og boble slag. 1226 01:01:15,940 --> 01:01:20,670 Men la oss i det minste forsøke å fullføre valget slag. 1227 01:01:20,670 --> 01:01:23,540 Så implementere utvalg slags bruker Følgende funksjon erklæring. 1228 01:01:23,540 --> 01:01:27,530 >> Igjen, dette er tatt fra oppgavesettet spesifikasjon. 1229 01:01:27,530 --> 01:01:31,560 Int verdier er parentes, er en rekke heltall. 1230 01:01:31,560 --> 01:01:33,490 Og int.n er størrelsen på denne matrisen. 1231 01:01:33,490 --> 01:01:36,840 Utvalg sorter kommer å sortere denne tabellen. 1232 01:01:36,840 --> 01:01:43,580 >> Så per vår mentale modell av utvalg sortere, trekker vi den - 1233 01:01:43,580 --> 01:01:47,720 første, vi går gjennom listen den første tid, finner det minste tallet, 1234 01:01:47,720 --> 01:01:52,860 sette den i begynnelsen, å finne den nest minste tallet, sette den i 1235 01:01:52,860 --> 01:01:56,380 andre posisjon hvis vi ønsker å sortere i stigende rekkefølge. 1236 01:01:56,380 --> 01:01:58,440 Jeg er ikke tvinge deg til å skrive pseudo-kode akkurat nå. 1237 01:01:58,440 --> 01:02:01,350 >> Men før vi gjør koden som en klasse i fem minutter, har vi tenkt å skrive 1238 01:02:01,350 --> 01:02:03,550 pseudo-kode, slik at vi har noen følelse av hvor vi skal. 1239 01:02:03,550 --> 01:02:05,630 Så prøv å skrive pseudo-kode på egen hånd. 1240 01:02:05,630 --> 01:02:08,610 Og deretter forsøke å snu det pseudo-koden inn kode. 1241 01:02:08,610 --> 01:02:10,740 Vi vil gjøre det som en gruppe i fem minutter. 1242 01:02:10,740 --> 01:02:32,560 1243 01:02:32,560 --> 01:02:33,895 >> Og selvfølgelig, la meg vite om du har noen spørsmål. 1244 01:02:33,895 --> 01:03:56,738 1245 01:03:56,738 --> 01:03:58,230 >> STUDENT: At det? 1246 01:03:58,230 --> 01:04:00,280 >> JASON Hirschhorn: Se hvor langt du kan komme i to minutter til. 1247 01:04:00,280 --> 01:04:01,790 Jeg forstår at du ikke vil være i stand til å fullføre. 1248 01:04:01,790 --> 01:04:03,050 Men vi vil gå over dette som en gruppe. 1249 01:04:03,050 --> 01:04:57,830 1250 01:04:57,830 --> 01:05:00,630 >> Du er all koding så [uhørbart], så jeg er beklager å stoppe hva du gjør. 1251 01:05:00,630 --> 01:05:02,530 Men la oss gå gjennom dette som en gruppe. 1252 01:05:02,530 --> 01:05:07,590 Og igjen, binære søk, du alle gi meg en hvis ikke flere linjer med kode. 1253 01:05:07,590 --> 01:05:08,530 Takk for det. 1254 01:05:08,530 --> 01:05:11,730 Vi kommer til å gjøre det samme Herfra koden sammen som en gruppe. 1255 01:05:11,730 --> 01:05:15,170 >> Så utvalg sort - la oss skrive noen raske pseudo-kode. 1256 01:05:15,170 --> 01:05:20,380 Per mental modell, kan noen gi meg den første linjen av pseudo-kode, er du snill? 1257 01:05:20,380 --> 01:05:23,000 1258 01:05:23,000 --> 01:05:24,270 Hva ønsker jeg å gjøre? 1259 01:05:24,270 --> 01:05:27,070 >> STUDENT: Mens listen er ute av drift. 1260 01:05:27,070 --> 01:05:30,630 >> JASON Hirschhorn: OK, mens listen er ute av drift. 1261 01:05:30,630 --> 01:05:33,540 Og hva mener du med "ute av drift?" 1262 01:05:33,540 --> 01:05:34,960 >> STUDENT: Mens [uhørbart] 1263 01:05:34,960 --> 01:05:36,210 har ikke blitt sortert. 1264 01:05:36,210 --> 01:05:38,460 1265 01:05:38,460 --> 01:05:40,290 >> JASON Hirschhorn: Mens listen er ute av drift, hva gjør vi? 1266 01:05:40,290 --> 01:05:44,200 Gi meg den andre linjen, vær så snill, Marcus. 1267 01:05:44,200 --> 01:05:47,186 >> STUDENT: Så finner den neste minste tallet. 1268 01:05:47,186 --> 01:05:49,000 Dette vil bli innrykket. 1269 01:05:49,000 --> 01:05:55,140 >> JASON Hirschhorn: Så finner den neste minste tallet. 1270 01:05:55,140 --> 01:05:56,460 Og så noen andre? 1271 01:05:56,460 --> 01:06:01,030 Når vi finner den nest minste nummer, hva gjør vi? 1272 01:06:01,030 --> 01:06:03,010 Jeg kommer til å si finne det minste tallet. 1273 01:06:03,010 --> 01:06:04,820 Det er det vi ønsker å gjøre. 1274 01:06:04,820 --> 01:06:06,210 >> Så finn det minste tallet. 1275 01:06:06,210 --> 01:06:08,061 Så hva gjør vi? 1276 01:06:08,061 --> 01:06:09,480 >> STUDENT: [uhørbart] til begynnelsen. 1277 01:06:09,480 --> 01:06:10,680 >> JASON Hirschhorn: Sorry? 1278 01:06:10,680 --> 01:06:12,700 >> STUDENT: Plasser den i begynnelsen av listen. 1279 01:06:12,700 --> 01:06:18,540 >> JASON Hirschhorn: Så legg den i begynnelsen av listen. 1280 01:06:18,540 --> 01:06:20,140 Og hva gjør vi for å tingen som var i begynnelsen 1281 01:06:20,140 --> 01:06:20,830 av listen, ikke sant? 1282 01:06:20,830 --> 01:06:21,910 Vi overskriver noe. 1283 01:06:21,910 --> 01:06:23,130 Så hvor skal vi sette det? 1284 01:06:23,130 --> 01:06:24,120 Ja, Anna? 1285 01:06:24,120 --> 01:06:25,520 >> STUDENT: Hvor den minste antallet var? 1286 01:06:25,520 --> 01:06:32,530 >> JASON Hirshhorn: Så legg begynnelsen av listen hvor 1287 01:06:32,530 --> 01:06:35,180 minste tallet var. 1288 01:06:35,180 --> 01:06:38,510 Så mens listen er ute av drift, finne det minste tallet, plasser den i 1289 01:06:38,510 --> 01:06:40,630 begynnelsen av listen, sett begynnelsen av listen der 1290 01:06:40,630 --> 01:06:42,900 minste tallet var. 1291 01:06:42,900 --> 01:06:45,780 Marcus, kan du omformulere denne linjen mens listen er ute av drift? 1292 01:06:45,780 --> 01:06:51,160 1293 01:06:51,160 --> 01:06:53,900 >> STUDENT: Mens tallene har ikke blitt sortert? 1294 01:06:53,900 --> 01:06:55,920 >> JASON Hirshhorn: OK, så for å at tallene ikke vært 1295 01:06:55,920 --> 01:06:58,670 sorteres, hva trenger vi å gjøre? 1296 01:06:58,670 --> 01:07:00,640 Hvor mye trenger vi å gå gjennom denne listen? 1297 01:07:00,640 --> 01:07:09,650 >> STUDENT: Så jeg antar en for loop, eller samtidig, er mindre, mens tallene kontrolleres 1298 01:07:09,650 --> 01:07:11,900 enn lengden av listen? 1299 01:07:11,900 --> 01:07:13,160 >> JASON Hirshhorn: OK, det er bra. 1300 01:07:13,160 --> 01:07:15,000 Jeg tror jeg misphrased spørsmålet mitt dårlig. 1301 01:07:15,000 --> 01:07:15,990 Jeg prøvde bare å få på vi er nødt til å gå 1302 01:07:15,990 --> 01:07:17,580 gjennom hele listen. 1303 01:07:17,580 --> 01:07:20,490 Så mens listen er ute av drift, for meg, er vanskelig å kartlegge på. 1304 01:07:20,490 --> 01:07:24,940 Men i utgangspunktet, det er hvordan Jeg tenker på dette. 1305 01:07:24,940 --> 01:07:28,880 Gå gjennom hele listen, finner minste tallet, plasser den i 1306 01:07:28,880 --> 01:07:30,130 begynner - faktisk, du har rett. 1307 01:07:30,130 --> 01:07:31,380 La oss sette dem begge. 1308 01:07:31,380 --> 01:07:33,470 1309 01:07:33,470 --> 01:07:39,050 >> Så mens listen er ute av drift, vi behov for å gå gjennom hele listen 1310 01:07:39,050 --> 01:07:42,250 gang, finne det minste tallet, sted det i begynnelsen av listen, sette 1311 01:07:42,250 --> 01:07:45,430 begynnelsen av listen hvor minste tallet var, og hvis det 1312 01:07:45,430 --> 01:07:47,460 listen er fortsatt ute av drift, vi har må gå gjennom dette 1313 01:07:47,460 --> 01:07:48,620 prosessen på nytt, ikke sant? 1314 01:07:48,620 --> 01:07:51,610 Det er derfor valg sortere, Big-O runtime av utvalget sortere, anyone? 1315 01:07:51,610 --> 01:07:52,830 >> STUDENT: n squared. 1316 01:07:52,830 --> 01:07:53,590 >> JASON Hirshhorn: n squared. 1317 01:07:53,590 --> 01:07:57,040 Fordi som Marcus og jeg innså her er vi nødt til å 1318 01:07:57,040 --> 01:08:00,310 går gjennom listen listen antall ganger. 1319 01:08:00,310 --> 01:08:03,420 Så går gjennom noe av lengde n n antall ganger 1320 01:08:03,420 --> 01:08:04,990 er faktisk n squared. 1321 01:08:04,990 --> 01:08:08,100 >> Så dette er vår pseudo. 1322 01:08:08,100 --> 01:08:09,360 Dette ser veldig bra ut. 1323 01:08:09,360 --> 01:08:11,870 Er det noen som har noen spørsmål om pseudo? 1324 01:08:11,870 --> 01:08:14,440 Fordi faktisk utvalg sorter bør trolig komme 1-1, kode fra 1325 01:08:14,440 --> 01:08:14,980 pseudo. 1326 01:08:14,980 --> 01:08:17,569 Så noen spørsmål om logikken i pseudo? 1327 01:08:17,569 --> 01:08:18,819 Spør den nå. 1328 01:08:18,819 --> 01:08:22,609 1329 01:08:22,609 --> 01:08:25,379 >> Utvalg sort - mens listen er ute av orden, kommer vi til å gå gjennom det 1330 01:08:25,379 --> 01:08:27,529 og finne den minste hver gang og legg den i fronten. 1331 01:08:27,529 --> 01:08:33,470 Så mens listen er ute av drift, kan noen gi meg at kodelinje som 1332 01:08:33,470 --> 01:08:39,689 har ikke gitt meg en linje av kode ennå, please? 1333 01:08:39,689 --> 01:08:40,939 Det høres ut som en hva? 1334 01:08:40,939 --> 01:08:43,669 1335 01:08:43,669 --> 01:08:44,649 >> STUDENT: Det er en for-løkke. 1336 01:08:44,649 --> 01:08:45,830 >> JASON Hirshhorn: Det høres liker en for-løkke. 1337 01:08:45,830 --> 01:08:47,653 OK, kan du gi meg for loop? 1338 01:08:47,653 --> 01:08:48,925 For - 1339 01:08:48,925 --> 01:08:50,219 >> STUDENT: i lik 0. 1340 01:08:50,219 --> 01:08:52,705 >> JASON Hirshhorn: i eller - 1341 01:08:52,705 --> 01:08:55,111 Hva er det vi mangler? 1342 01:08:55,111 --> 01:08:56,819 Hva går rett her? 1343 01:08:56,819 --> 01:08:57,550 >> STUDENT: Int. 1344 01:08:57,550 --> 01:08:59,270 >> JASON Hirshhorn: Nettopp. 1345 01:08:59,270 --> 01:09:02,590 (Int i = 0, - 1346 01:09:02,590 --> 01:09:07,843 >> STUDENT: i 01:09:09,319 >> JASON Hirshhorn: Nailed det, Jeff. 1348 01:09:09,319 --> 01:09:10,660 Vi går gjennom listen, ikke sant? 1349 01:09:10,660 --> 01:09:11,880 Vi har sett at koden før. 1350 01:09:11,880 --> 01:09:12,850 Perfekt. 1351 01:09:12,850 --> 01:09:14,790 Så la oss sette våre klammeparentes her. 1352 01:09:14,790 --> 01:09:17,859 Jeg kommer til å sette noen klammeparentes her. 1353 01:09:17,859 --> 01:09:21,660 >> Så selv om det er 0, må vi gå gjennom hele listen. 1354 01:09:21,660 --> 01:09:26,612 Så hver gang vi går gjennom listen, hva gjør vi ønsker å holde styr på? 1355 01:09:26,612 --> 01:09:28,260 >> STUDENT: Hvis noen bytteavtaler er gjort. 1356 01:09:28,260 --> 01:09:29,069 >> JASON Hirshhorn: Finn det minste tallet. 1357 01:09:29,069 --> 01:09:31,479 Så vi bør nok holde styr på det minste tallet hver gang. 1358 01:09:31,479 --> 01:09:34,590 Så linjen kan jeg gjøre for å holde oversikt av det minste tallet? 1359 01:09:34,590 --> 01:09:37,720 Aleha, hvordan kan jeg holde sporet av noe? 1360 01:09:37,720 --> 01:09:38,460 >> STUDENT: Start en ny variabel. 1361 01:09:38,460 --> 01:09:39,390 >> JASON Hirshhorn: Start en ny variabel. 1362 01:09:39,390 --> 01:09:40,069 Så la oss lage en variabel. 1363 01:09:40,069 --> 01:09:41,830 Hvilken type? 1364 01:09:41,830 --> 01:09:42,930 >> STUDENT: Int. 1365 01:09:42,930 --> 01:09:43,710 >> JASON Hirshhorn: Int. 1366 01:09:43,710 --> 01:09:44,939 La oss kalle det den minste. 1367 01:09:44,939 --> 01:09:47,600 Og hva gjør det like når vi akkurat har startet opp? 1368 01:09:47,600 --> 01:09:48,910 Vi har ikke gått gjennom listen ennå. 1369 01:09:48,910 --> 01:09:50,540 Vi er på den første delen av listen vår første gang gjennom. 1370 01:09:50,540 --> 01:09:51,930 Hva gjør det likt, jo minste tallet? 1371 01:09:51,930 --> 01:09:54,140 >> STUDENT: verdiene jeg. 1372 01:09:54,140 --> 01:09:54,900 >> JASON Hirshhorn: verdiene jeg. 1373 01:09:54,900 --> 01:09:56,980 Det høres helt riktig, ikke sant? 1374 01:09:56,980 --> 01:09:59,590 Det minste tallet i begynnelsen er der vi er. 1375 01:09:59,590 --> 01:10:01,960 Så nå har vi vår minste, og vi trenger for å gå gjennom hele listen og 1376 01:10:01,960 --> 01:10:05,080 sammenligne dette minste til alt annet. 1377 01:10:05,080 --> 01:10:08,150 Så skal vi gå gjennom listen igjen? 1378 01:10:08,150 --> 01:10:08,630 Michael? 1379 01:10:08,630 --> 01:10:10,000 >> STUDENT: Du må gjøre en annen for loop. 1380 01:10:10,000 --> 01:10:10,383 >> JASON Hirshhorn: Another for loop. 1381 01:10:10,383 --> 01:10:11,276 La oss gjøre det. 1382 01:10:11,276 --> 01:10:12,540 Gi meg noen kode. 1383 01:10:12,540 --> 01:10:13,790 >> STUDENT: For sløyfe - 1384 01:10:13,790 --> 01:10:16,750 1385 01:10:16,750 --> 01:10:19,470 for de minste - 1386 01:10:19,470 --> 01:10:23,040 1387 01:10:23,040 --> 01:10:25,770 bare int j, kan du si? 1388 01:10:25,770 --> 01:10:31,150 = 0, er slik at - 1389 01:10:31,150 --> 01:10:34,014 1390 01:10:34,014 --> 01:10:35,710 >> JASON Hirshhorn: Vel, hvis vi ønsker å gå gjennom hele listen - 1391 01:10:35,710 --> 01:10:37,847 >> STUDENT: j 01:10:42,140 1393 01:10:42,140 --> 01:10:42,405 >> JASON Hirshhorn: Fantastic. 1394 01:10:42,405 --> 01:10:46,100 Vi kommer til å gå gjennom for loop igjen. 1395 01:10:46,100 --> 01:10:51,380 Og hvordan skal vi finne den minste tallet? 1396 01:10:51,380 --> 01:10:52,630 Tom? 1397 01:10:52,630 --> 01:10:54,570 1398 01:10:54,570 --> 01:11:00,520 Vi har den nåværende minste tallet, så hvordan finner vi den nye minste? 1399 01:11:00,520 --> 01:11:07,200 >> STUDENT: Vi kan sjekke om de minste nummer vi har er større enn 1400 01:11:07,200 --> 01:11:09,040 . verdier brakett j 1401 01:11:09,040 --> 01:11:14,740 >> JASON Hirshhorn: Så hvis minste er større enn verdiene brakett j. 1402 01:11:14,740 --> 01:11:19,350 Så hvis vår nåværende minste er større enn - 1403 01:11:19,350 --> 01:11:21,770 Jeg kommer til å flytte disse to linjene med kode der ute for et sekund. 1404 01:11:21,770 --> 01:11:26,010 Fordi før vi gjør noe bytte, vi behov for å gå gjennom hele listen. 1405 01:11:26,010 --> 01:11:28,880 Så dette pseudo burde faktisk være utenfor det indre for loop. 1406 01:11:28,880 --> 01:11:30,390 Så gå gjennom hele listen. 1407 01:11:30,390 --> 01:11:34,520 Hvis minste er større enn verdier j hva så? 1408 01:11:34,520 --> 01:11:37,830 >> STUDENT: Da minste tilsvarer verdier j. 1409 01:11:37,830 --> 01:11:41,190 1410 01:11:41,190 --> 01:11:42,600 >> JASON Hirshhorn: Fantastic. 1411 01:11:42,600 --> 01:11:44,580 En rask spørsmål - 1412 01:11:44,580 --> 01:11:47,236 første gang vi går gjennom denne sløyfen, Jeg kommer til å være lik 0, er j kommer 1413 01:11:47,236 --> 01:11:50,710 til lik 0 når vi får inn her. 1414 01:11:50,710 --> 01:11:52,410 Så vi kommer til å være å sammenligne et tall til seg selv. 1415 01:11:52,410 --> 01:11:53,660 Er det effektivt? 1416 01:11:53,660 --> 01:11:57,260 1417 01:11:57,260 --> 01:11:58,390 Nei, det er ikke veldig effektivt. 1418 01:11:58,390 --> 01:12:02,915 Så gjør vår j må gå fra 0 til n hver gang? 1419 01:12:02,915 --> 01:12:06,310 Trenger vi alltid å sjekke gjennom hele listen? 1420 01:12:06,310 --> 01:12:06,520 [Uhørbart]? 1421 01:12:06,520 --> 01:12:07,564 >> STUDENT: Start med i stedet. 1422 01:12:07,564 --> 01:12:09,405 >> JASON Hirshhorn: j kan begynne med hva? 1423 01:12:09,405 --> 01:12:09,990 >> STUDENT: jeg. 1424 01:12:09,990 --> 01:12:13,040 >> JASON Hirshhorn: j kan starte med jeg. 1425 01:12:13,040 --> 01:12:18,840 Så nå sammenligner vi starter med den vi er på. 1426 01:12:18,840 --> 01:12:21,020 Men selv da er at ettersom effektiv som mulig? 1427 01:12:21,020 --> 01:12:22,320 >> STUDENT: i + en. 1428 01:12:22,320 --> 01:12:25,420 >> JASON Hirshhorn: i + 1 synes å være den mest effektive, fordi vi 1429 01:12:25,420 --> 01:12:26,120 allerede har jeg. 1430 01:12:26,120 --> 01:12:28,100 Vi sier at etter hvert som minste på linje 15. 1431 01:12:28,100 --> 01:12:29,350 Vi kommer til å starte med neste automatisk. 1432 01:12:29,350 --> 01:12:34,470 1433 01:12:34,470 --> 01:12:38,540 Så vi går gjennom for loop. 1434 01:12:38,540 --> 01:12:39,620 Vi vil gå gjennom hver gang. 1435 01:12:39,620 --> 01:12:40,860 Vi vil gå gjennom en rekke ganger. 1436 01:12:40,860 --> 01:12:42,860 Nå har vi fått gjennom denne indre for loop. 1437 01:12:42,860 --> 01:12:44,350 Vi har den minste verdien redninger. 1438 01:12:44,350 --> 01:12:46,045 Vi trenger å plassere den på begynnelsen av listen. 1439 01:12:46,045 --> 01:12:48,390 Så hvordan legger jeg det på begynnelsen av listen? 1440 01:12:48,390 --> 01:12:51,290 1441 01:12:51,290 --> 01:12:55,926 Hva er den variabelen som refererer til begynnelsen av listen? 1442 01:12:55,926 --> 01:13:00,500 Vi er i dette utenfor for loop, så hva refererer til 1443 01:13:00,500 --> 01:13:01,280 begynnelsen av listen? 1444 01:13:01,280 --> 01:13:02,880 >> STUDENT: verdiene jeg. 1445 01:13:02,880 --> 01:13:03,510 >> JASON Hirshhorn: Helt riktig. 1446 01:13:03,510 --> 01:13:04,650 Verdier jeg er i begynnelsen av - 1447 01:13:04,650 --> 01:13:06,320 eller beklager, ikke i begynnelsen. 1448 01:13:06,320 --> 01:13:07,090 Det var forvirrende. 1449 01:13:07,090 --> 01:13:11,620 Det er der vi er i begynnelsen av usortert del av listen. 1450 01:13:11,620 --> 01:13:12,800 Så verdiene jeg. 1451 01:13:12,800 --> 01:13:14,050 Og hva gjør det lik? 1452 01:13:14,050 --> 01:13:15,925 1453 01:13:15,925 --> 01:13:17,326 >> STUDENT: Minst. 1454 01:13:17,326 --> 01:13:18,862 >> JASON Hirshhorn: Verdier jeg tilsvarer hva? 1455 01:13:18,862 --> 01:13:19,310 >> STUDENT: Minst. 1456 01:13:19,310 --> 01:13:20,030 >> JASON Hirshhorn: Minst. 1457 01:13:20,030 --> 01:13:20,980 Helt riktig. 1458 01:13:20,980 --> 01:13:23,510 Så vi plassere det i begynnelsen av listen, og nå trenger vi å sette 1459 01:13:23,510 --> 01:13:25,710 begynnelsen av listen der det minste tallet var. 1460 01:13:25,710 --> 01:13:29,700 Så hvordan kan jeg skrive hvor minste tallet var? 1461 01:13:29,700 --> 01:13:31,670 Verdier av hva? 1462 01:13:31,670 --> 01:13:33,170 >> STUDENT: 0. 1463 01:13:33,170 --> 01:13:34,090 >> JASON Hirshhorn: Den lille nummeret står på 0? 1464 01:13:34,090 --> 01:13:35,340 >> STUDENT: Ja. 1465 01:13:35,340 --> 01:13:38,680 1466 01:13:38,680 --> 01:13:39,910 >> JASON Hirshhorn: Hva om de minste antallet var ved slutten av 1467 01:13:39,910 --> 01:13:40,860 dette usortert liste? 1468 01:13:40,860 --> 01:13:42,460 >> STUDENT: Unnskyld, hva var spørsmålet? 1469 01:13:42,460 --> 01:13:44,020 >> JASON Hirshhorn: Hvor er det minste tallet? 1470 01:13:44,020 --> 01:13:46,940 Vi tok den minste og sette den på begynner med denne linjen her. 1471 01:13:46,940 --> 01:13:48,987 >> STUDENT: Den må ha blitt lagret i noen - 1472 01:13:48,987 --> 01:13:50,510 >> STUDENT: Verdier j. 1473 01:13:50,510 --> 01:13:51,520 >> JASON Hirshhorn: Vel, det er ikke nødvendigvis verdier j. 1474 01:13:51,520 --> 01:13:54,100 Det trenger ikke engang eksisterer på dette punktet. 1475 01:13:54,100 --> 01:13:55,960 >> STUDENT: Du må erklære en variabel tidligere og 1476 01:13:55,960 --> 01:13:58,230 deretter tildele det til - 1477 01:13:58,230 --> 01:14:01,150 når du finner det minste tallet, tildele indeks over det tallet til 1478 01:14:01,150 --> 01:14:02,480 noen variabel eller noe sånt. 1479 01:14:02,480 --> 01:14:04,790 >> JASON Hirshhorn: Så kan du si det igjen? 1480 01:14:04,790 --> 01:14:08,390 >> STUDENT: Så hvor du erklært int minste, bør du også erklære int 1481 01:14:08,390 --> 01:14:10,750 minste indeks = i, eller noe sånt. 1482 01:14:10,750 --> 01:14:13,280 >> JASON Hirshhorn: Så hvor jeg int minste, bør jeg ikke bare holde styr 1483 01:14:13,280 --> 01:14:16,150 av verdien, men plasseringen. 1484 01:14:16,150 --> 01:14:20,850 int smallest_location = i dette tilfelle, vil vi bare gjøre jeg. 1485 01:14:20,850 --> 01:14:22,390 Vi trenger å vite hvor det er. 1486 01:14:22,390 --> 01:14:26,820 Vi kom til slutten av koden, og vi skjønte vi hadde ingen anelse om hvor det var. 1487 01:14:26,820 --> 01:14:29,810 Og så igjen, er vi kartlegging denne på 1-1. 1488 01:14:29,810 --> 01:14:32,890 Dere koding dette på din egen vilje sannsynligvis komme til samme problem. 1489 01:14:32,890 --> 01:14:34,130 Hvordan i all verden finner jeg det? 1490 01:14:34,130 --> 01:14:36,720 Og så du skjønner, vent, jeg trenger å holde styr på det. 1491 01:14:36,720 --> 01:14:38,500 >> Så hvis minste er større enn verdiene j. 1492 01:14:38,500 --> 01:14:39,740 Vi satt minste tilsvarer verdier j. 1493 01:14:39,740 --> 01:14:42,090 Hva annet trenger vi å endre? 1494 01:14:42,090 --> 01:14:43,710 Constantin, hva annet gjøre vi trenger å forandre? 1495 01:14:43,710 --> 01:14:44,560 >> STUDENT: Plasseringen. 1496 01:14:44,560 --> 01:14:45,270 >> JASON Hirshhorn: Nettopp. 1497 01:14:45,270 --> 01:14:46,925 Så gi meg den linjen i koden. 1498 01:14:46,925 --> 01:14:53,310 >> STUDENT: smallest_location = j. 1499 01:14:53,310 --> 01:14:54,790 >> JASON Hirshhorn: Nettopp. 1500 01:14:54,790 --> 01:14:58,210 Og så ned på slutten, hvis vi ønsker å sette begynnelsen av listen, hvor 1501 01:14:58,210 --> 01:15:00,790 det minste tallet var, hvordan vi referere til hvor 1502 01:15:00,790 --> 01:15:02,200 minste tallet var? 1503 01:15:02,200 --> 01:15:03,580 Marcus? 1504 01:15:03,580 --> 01:15:08,530 >> STUDENT: Den minste tallet var ligger på minste sted. 1505 01:15:08,530 --> 01:15:12,230 >> JASON Hirshhorn: Så på verdier smallest_location. 1506 01:15:12,230 --> 01:15:14,700 Og hva gjør vi satt der? 1507 01:15:14,700 --> 01:15:17,600 Begynnelsen av liste, hva er det? 1508 01:15:17,600 --> 01:15:19,710 >> STUDENT: Vel, trenger vi egentlig ikke vet lenger fordi vi har overskrevet. 1509 01:15:19,710 --> 01:15:23,250 Så det er en byttet steder av disse to linjene? 1510 01:15:23,250 --> 01:15:26,110 Hvis du bytter de to linjene rundt. 1511 01:15:26,110 --> 01:15:30,740 >> JASON Hirshhorn: OK, så vi gjør ikke lenger, fordi vi har tilbake linjen 1512 01:15:30,740 --> 01:15:31,960 førverdier jeg til minste. 1513 01:15:31,960 --> 01:15:33,810 Så vi mistet den opprinnelige verdien. 1514 01:15:33,810 --> 01:15:37,350 Så du sa swap disse to linjene. 1515 01:15:37,350 --> 01:15:41,780 Så nå satt i begynnelsen av listen der det minste tallet var. 1516 01:15:41,780 --> 01:15:47,060 Så smallest_location tilsvarer verdier jeg. 1517 01:15:47,060 --> 01:15:51,310 Som beveger seg i begynnelsen av denne usortert del av listen til 1518 01:15:51,310 --> 01:15:52,090 minste sted. 1519 01:15:52,090 --> 01:15:54,860 Og deretter inn verdiene jeg vi flytter det minste tallet. 1520 01:15:54,860 --> 01:15:57,450 >> Betyr det fornuftig hvorfor vi måtte gjøre at swap? 1521 01:15:57,450 --> 01:15:59,650 Vi ville ha overskrevet denne verdien - en annen ting du sannsynligvis ville ha 1522 01:15:59,650 --> 01:16:02,740 funnet ut og funnet i BNP. 1523 01:16:02,740 --> 01:16:05,310 Så vi har tatt vare på all pseudo. 1524 01:16:05,310 --> 01:16:10,935 Er det noe annet vi trenger å skrive her? 1525 01:16:10,935 --> 01:16:14,911 Kan noen tenke på noe? 1526 01:16:14,911 --> 01:16:16,180 >> STUDENT: Hvordan vet du når du er ferdig? 1527 01:16:16,180 --> 01:16:17,680 >> JASON Hirshhorn: Hvordan kan vi vite når vi er ferdige? 1528 01:16:17,680 --> 01:16:18,890 Store spørsmål. 1529 01:16:18,890 --> 01:16:21,684 Så hvordan vet vi når vi er ferdige. 1530 01:16:21,684 --> 01:16:24,720 >> STUDENT: Lag en variabel for å holde tellingen av om det er en swap gjort eller ikke 1531 01:16:24,720 --> 01:16:27,810 og gå gjennom et pass. 1532 01:16:27,810 --> 01:16:30,180 >> JASON Hirshhorn: OK. 1533 01:16:30,180 --> 01:16:31,800 Det ville jobbe i boble slag. 1534 01:16:31,800 --> 01:16:35,210 Men for valg sorter, hvis vi ikke gjør det lage en swap, kan det bare være 1535 01:16:35,210 --> 01:16:38,670 fordi den minste verdien er i det sin rett sted. 1536 01:16:38,670 --> 01:16:41,240 Vi kan ha en liste 1, 2, 4, 3. 1537 01:16:41,240 --> 01:16:42,830 Den andre gangen gjennom vi vil ikke gjøre noen bytteavtaler. 1538 01:16:42,830 --> 01:16:47,260 Vi vil være på nummer to, men vi vil fortsatt trenger å holde det gående. 1539 01:16:47,260 --> 01:16:49,390 Så trenger vi å holde styr på når vi er ferdige, eller ønsker vi bare å gå 1540 01:16:49,390 --> 01:16:50,640 før dette er ferdig? 1541 01:16:50,640 --> 01:16:54,098 1542 01:16:54,098 --> 01:16:56,740 >> STUDENT: Vi kan bare gå før det er ferdig. 1543 01:16:56,740 --> 01:16:58,090 >> JASON Hirshhorn: Vi kan bare gå før dette er ferdig. 1544 01:16:58,090 --> 01:17:01,720 I boble sortere, er du helt riktig, Jeff og Aleha, med løsningen - 1545 01:17:01,720 --> 01:17:04,990 det er flott å holde oversikt over hvor mange swaps du har gjort, fordi i boble 1546 01:17:04,990 --> 01:17:07,920 sortere, hvis du faktisk gjør ingen bytteavtaler, du er ferdig, og du kan kanskje klippe 1547 01:17:07,920 --> 01:17:09,000 Problemet ned litt. 1548 01:17:09,000 --> 01:17:11,440 Men for valg liksom, har du virkelig må gå gjennom til slutten av 1549 01:17:11,440 --> 01:17:14,940 listen hver gang rundt. 1550 01:17:14,940 --> 01:17:16,200 >> Så dette er det. 1551 01:17:16,200 --> 01:17:18,530 Vi har to minutter igjen. 1552 01:17:18,530 --> 01:17:21,560 La oss gjøre alt. 1553 01:17:21,560 --> 01:17:24,340 La meg bare åpen Finn her og gjøre sikker på at jeg faktisk ringer opp - 1554 01:17:24,340 --> 01:17:25,610 Jeg kaller boble slag. 1555 01:17:25,610 --> 01:17:29,230 La oss endre dette til valget slag. 1556 01:17:29,230 --> 01:17:31,060 gjøre alt. / finne. 1557 01:17:31,060 --> 01:17:32,360 La oss finne 42. 1558 01:17:32,360 --> 01:17:38,110 Denne gangen vi kommer til å passere en usortert liste, fordi det skal sortere 1559 01:17:38,110 --> 01:17:43,790 første, per funnkode - burde sortere først bruker vår sorteringsfunksjonen og deretter 1560 01:17:43,790 --> 01:17:44,995 se etter noe. 1561 01:17:44,995 --> 01:17:46,245 Fingrene krysset alle. 1562 01:17:46,245 --> 01:17:48,530 1563 01:17:48,530 --> 01:17:49,370 >> Oh my goodness. 1564 01:17:49,370 --> 01:17:50,800 Whoa, hjertet mitt slo. 1565 01:17:50,800 --> 01:17:52,320 Så det er riktig. 1566 01:17:52,320 --> 01:17:57,270 Faktisk, hvis vi kjørte denne mer omfattende, koden, så vidt jeg kan 1567 01:17:57,270 --> 01:17:59,280 fortelle, er helt riktig. 1568 01:17:59,280 --> 01:18:02,150 Det er noen forslag Jeg ville ha for deg. 1569 01:18:02,150 --> 01:18:06,215 For eksempel 15 og 16 virke litt overflødig. 1570 01:18:06,215 --> 01:18:09,450 Det virker som du ikke nødvendigvis må spare både de. 1571 01:18:09,450 --> 01:18:12,790 Hvis du har den minste sted, du kan lett finne den minste verdien av 1572 01:18:12,790 --> 01:18:14,750 bare å skrive verdier av i. 1573 01:18:14,750 --> 01:18:18,100 >> Så hvis jeg skulle bli gradering koden din, som jeg faktisk vil være, ville jeg 1574 01:18:18,100 --> 01:18:21,160 sannsynligvis ta av et poeng hvis du inkludert begge disse, fordi du 1575 01:18:21,160 --> 01:18:22,670 trenger ikke begge disse. 1576 01:18:22,670 --> 01:18:25,400 Hvis du har plasseringen, kan du veldig lett få verdien. 1577 01:18:25,400 --> 01:18:27,520 Og det virker litt rart å oppbevare dem begge. 1578 01:18:27,520 --> 01:18:31,070 Kanskje ikke engang ta et poeng, men sikkert kommentere at det er kanskje 1579 01:18:31,070 --> 01:18:32,670 ikke et stilistisk valg du trenger å gjøre. 1580 01:18:32,670 --> 01:18:35,290 Selvfølgelig koden fortsatt går helt bra. 1581 01:18:35,290 --> 01:18:36,860 >> Så vi har dessverre ikke komme til boble slag. 1582 01:18:36,860 --> 01:18:37,940 Jeg er lei for det. 1583 01:18:37,940 --> 01:18:39,135 Vi gjorde ferdig utvalg slag. 1584 01:18:39,135 --> 01:18:41,450 Er det noen som har noen endelige spørsmål om valg liksom? 1585 01:18:41,450 --> 01:18:44,320 1586 01:18:44,320 --> 01:18:47,690 >> OK, før vi setter kursen ut, jeg vil ha deg å åpne opp din Chrome nettleser. 1587 01:18:47,690 --> 01:18:54,340 Sorry, det var bare en blatant plugg for en type nettleser. 1588 01:18:54,340 --> 01:18:57,770 Du kan åpne opp hvilken som helst type nettleser, men det vil trolig være Chrome. 1589 01:18:57,770 --> 01:19:01,250 Og gå til denne følgende nettsted - 1590 01:19:01,250 --> 01:19:06,410 sayat.me/cs50. 1591 01:19:06,410 --> 01:19:07,685 Hvis du ikke skriver på datamaskinen akkurat nå, er du helt klart 1592 01:19:07,685 --> 01:19:10,210 ikke gjør det, Tom. 1593 01:19:10,210 --> 01:19:12,870 >> Og kan du gjøre det enten rett nå eller i den neste timen - 1594 01:19:12,870 --> 01:19:14,260 gi meg noen tilbakemeldinger. 1595 01:19:14,260 --> 01:19:15,660 Dette er bare delen to. 1596 01:19:15,660 --> 01:19:18,060 Vi har mange flere sammen, så jeg har mye rom for å forbedre. 1597 01:19:18,060 --> 01:19:19,620 Jeg forhåpentligvis også gjorde noen ting godt. 1598 01:19:19,620 --> 01:19:22,160 Så du kan få meg til å føle så verst, men hvis du også ønsker å gi meg en smiley 1599 01:19:22,160 --> 01:19:24,250 ansikt, ville jeg sette pris på det også. 1600 01:19:24,250 --> 01:19:25,330 Fylle det i. 1601 01:19:25,330 --> 01:19:28,210 >> Og med en liten venstre, som var uke tre. 1602 01:19:28,210 --> 01:19:30,750 Jeg skal stå utenfor for litt hvis du har spørsmål. 1603 01:19:30,750 --> 01:19:32,220 Jeg vil se dere i forelese i morgen. 1604 01:19:32,220 --> 01:19:34,742