1 00:00:00,000 --> 00:00:08,532 >> [Mūzikas atskaņošanai] 2 00:00:08,532 --> 00:00:12,060 >> ZAMYLA Chan: Pirmā lieta, jūs varētu Paziņojums par atradumu ir tas, ka mēs jau 3 00:00:12,060 --> 00:00:13,450 ir kods rakstīts par mums. 4 00:00:13,450 --> 00:00:15,160 To sauc par sadales kodu. 5 00:00:15,160 --> 00:00:18,000 Tāpēc mēs esam ne tikai rakstot mūsu pašu kodu no nulles vairs. 6 00:00:18,000 --> 00:00:22,800 Drīzāk, mēs esam aizpildot tukšumu dažās iepriekš esošo kodu. 7 00:00:22,800 --> 00:00:27,790 >> Find.c Programma piedāvā numurus aizpildīt siena kaudzē, meklē 8 00:00:27,790 --> 00:00:32,189 siena kaudzē lietošanas iesniegts adatu, un tas tiek panākts, aicinot veida un 9 00:00:32,189 --> 00:00:35,590 meklēt, definēti funkcijas in helpers.c. 10 00:00:35,590 --> 00:00:37,670 Tāpēc find.c jau ir uzrakstīts. 11 00:00:37,670 --> 00:00:40,770 Tavs uzdevums ir rakstīt palīgi. 12 00:00:40,770 --> 00:00:41,870 >> Tātad, ko mēs darām? 13 00:00:41,870 --> 00:00:44,210 Mēs īsteno divas funkcijas. 14 00:00:44,210 --> 00:00:49,030 Meklēšana, kas atgriež true, ja vērtība ir atrodams siena kaudzē, atgriežoties 15 00:00:49,030 --> 00:00:51,370 false, ja vērtība ir ne siena kaudzē. 16 00:00:51,370 --> 00:00:57,990 Un tad mēs esam arī īstenošanas veida kas sakārto masīva sauc vērtības. 17 00:00:57,990 --> 00:00:59,960 >> Tā ļauj risināt meklēšanu. 18 00:00:59,960 --> 00:01:04,560 Meklēšana patlaban tiek īstenots kā lineārā meklēšana, bet jūs varat darīt daudz 19 00:01:04,560 --> 00:01:05,550 labāk nekā to. 20 00:01:05,550 --> 00:01:09,910 Linear meklēšana tiek īstenota O n laiku, kas ir diezgan lēns. 21 00:01:09,910 --> 00:01:13,850 Lai gan tas var meklētu jebkurš saraksts, kas tai piešķirts. 22 00:01:13,850 --> 00:01:20,130 Tavs uzdevums ir īstenot bināro meklēšanu, kura darbības laiks O log n. 23 00:01:20,130 --> 00:01:21,130 Tas ir diezgan ātri. 24 00:01:21,130 --> 00:01:23,170 >> Bet tur ir noteikums. 25 00:01:23,170 --> 00:01:27,600 Bināro meklēšanu var tikai meklēt izmantojot iepriekš sakārtoti sarakstos. 26 00:01:27,600 --> 00:01:30,370 Kāpēc tā? 27 00:01:30,370 --> 00:01:32,620 >> Nu aplūkosim piemēru. 28 00:01:32,620 --> 00:01:36,280 Ņemot vērā masīvs vērtībām, siena kaudzē, Mēs ejam, lai meklē 29 00:01:36,280 --> 00:01:37,130 adatu. 30 00:01:37,130 --> 00:01:40,460 Un šajā piemērā, skaitlis trīs. 31 00:01:40,460 --> 00:01:44,130 Veidā, ka bināro meklēšanas darbiem ir tas, ka Salīdzinot vidējo vērtību 32 00:01:44,130 --> 00:01:48,370 masīvs uz adatas, līdzīgi kā mēs atvērām Telefonu grāmatu vidū 33 00:01:48,370 --> 00:01:50,660 lapa nedēļā nulles. 34 00:01:50,660 --> 00:01:54,650 >> Tātad, pēc tam, salīdzinot vidējo vērtību adatu, jūs varat izmest vai nu 35 00:01:54,650 --> 00:01:58,530 pa kreisi vai pa labi puse no masīva , pievelkot savas robežas. 36 00:01:58,530 --> 00:02:03,390 Šajā gadījumā, tā trīs, mūsu adatas, ir mazāks par 10, vidū vērtību, 37 00:02:03,390 --> 00:02:05,990 tiesības robežu var samazināt. 38 00:02:05,990 --> 00:02:08,400 Bet mēģināt padarīt jūsu robežas cik stingri vien iespējams. 39 00:02:08,400 --> 00:02:11,630 Ja vidū vērtība nav adatu, tad jūs zināt, ka jums nav nepieciešams 40 00:02:11,630 --> 00:02:13,010 iekļaut to meklēšanu. 41 00:02:13,010 --> 00:02:17,310 Tātad jūs esat tiesības saistoša var savilkt meklēšanas robežas tikai niecīga mazliet vairāk, 42 00:02:17,310 --> 00:02:21,770 un tā tālāk, un tā tālāk līdz jums atrast savu adatu. 43 00:02:21,770 --> 00:02:23,480 >> Tātad, ko tas pseudocode izskatās? 44 00:02:23,480 --> 00:02:28,420 Labi, bet mēs joprojām meklējam cauri sarakstu un joprojām ir elementi 45 00:02:28,420 --> 00:02:33,690 izskatās, mēs vidū saraksta, un salīdzināt šo vidējo vērtību 46 00:02:33,690 --> 00:02:34,950 Mūsu adatu. 47 00:02:34,950 --> 00:02:37,310 Ja viņi ir vienāds, tad tas nozīmē, ka mēs esam atrada adatu un mēs varam 48 00:02:37,310 --> 00:02:38,990 atgriezties true. 49 00:02:38,990 --> 00:02:42,870 >> Pretējā gadījumā, ja adata ir mazāks nekā vidējā vērtība, tad tas nozīmē, ka mēs 50 00:02:42,870 --> 00:02:47,280 var izmest pareizo pusi, un tikai meklēt kreisajā pusē masīvs. 51 00:02:47,280 --> 00:02:51,090 Pretējā gadījumā mēs meklētu labajā pusē masīva. 52 00:02:51,090 --> 00:02:54,410 Un beigās, ja jums nav nekādu vairāki elementi, pa kreisi, lai meklētu, bet jūs 53 00:02:54,410 --> 00:02:58,050 nav atraduši savu adatu vēl, tad jūs atgriezties viltus jo adata 54 00:02:58,050 --> 00:03:01,890 noteikti nav siena kaudzē. 55 00:03:01,890 --> 00:03:05,270 >> Tagad veikls lieta par šo pseudocode binārā meklēšanas ir, ka tas var būt 56 00:03:05,270 --> 00:03:09,940 interpretēt kā nu iteratīvs vai rekursīvs īstenošanu. 57 00:03:09,940 --> 00:03:13,810 Tātad tas būtu rekursīvs ja jūs sauc meklēšanas funkcija meklēšanu 58 00:03:13,810 --> 00:03:17,350 darbojas uz abām pusēm no masīva. 59 00:03:17,350 --> 00:03:21,030 Mēs segtu rekursijas nedaudz vēlāk Protams, bet zina, ka tas ir 60 00:03:21,030 --> 00:03:24,190 iespēja, ja jūs vēlaties, lai mēģinātu. 61 00:03:24,190 --> 00:03:26,030 >> Tagad aplūkosim veida. 62 00:03:26,030 --> 00:03:30,750 Šķirot notiek masīvu un skaitlim n, kas ir lielums masīva. 63 00:03:30,750 --> 00:03:34,030 Tagad tur ir dažādi veidi, par veidu, un jūs varat apskatīt dažus 64 00:03:34,030 --> 00:03:36,370 šorti demos un skaidrojumus. 65 00:03:36,370 --> 00:03:39,580 Atgriešanās tips mūsu šķirošanas funkcija ir spēkā neesošs. 66 00:03:39,580 --> 00:03:43,580 Tātad tas nozīmē, ka mēs nebrauksim atgriezties jebkuru masīvs no veida. 67 00:03:43,580 --> 00:03:48,140 Mēs esam patiešām gatavojas mainīt ļoti masīvs, kas tika pieņemts par mums. 68 00:03:48,140 --> 00:03:52,290 >> Un tas ir iespējams, jo masīvi ir nodots ar atsauci C. Tagad mēs 69 00:03:52,290 --> 00:03:55,290 redzēt vairāk par šo vēlāk, bet Būtiskā atšķirība starp garām 70 00:03:55,290 --> 00:03:59,340 kaut kā veselam skaitlim, un iet masīva, ir tas, ka tad, kad jūs 71 00:03:59,340 --> 00:04:03,490 pāriet veselam skaitlim, C ir tikai gatavojas veikt norakstu no šīs skaitlim un nodot 72 00:04:03,490 --> 00:04:04,450 to funkciju. 73 00:04:04,450 --> 00:04:08,530 Sākotnējais mainīgais netiks mainīti pēc tam, kad funkcija ir pabeigta. 74 00:04:08,530 --> 00:04:12,480 Ar masīva, no otras puses, tas ir nav gatavojas veikt kopiju, un jūs 75 00:04:12,480 --> 00:04:17,910 faktiski rediģēšanas ļoti masīvs pati. 76 00:04:17,910 --> 00:04:21,269 >> Tāpēc viena veida veida ir atlase kārtošanas. 77 00:04:21,269 --> 00:04:24,750 Atlases kārtot darbojas, sākot sākumā, un tad jūs atkārtot 78 00:04:24,750 --> 00:04:26,820 vairāk un atrast mazāko elementu. 79 00:04:26,820 --> 00:04:30,710 Un tad jūs mijmaiņas ka mazākā elements ar pirmo. 80 00:04:30,710 --> 00:04:34,360 Un tad jūs pārvietot uz otro elementu , Atrast nākamais mazākais 81 00:04:34,360 --> 00:04:38,320 elements, un tad apmainīt, ka ar Otrs elements masīva, jo 82 00:04:38,320 --> 00:04:41,100 pirmais elements ir jau ir sakārtoti. 83 00:04:41,100 --> 00:04:45,370 Un tad jūs turpināt katru elements nosakot mazāko 84 00:04:45,370 --> 00:04:47,690 vērtība un pārnešana to ārā. 85 00:04:47,690 --> 00:04:53,460 >> Es vienāds 0, ļoti pirmais elements līdz n mīnus 1, jūs gatavojas, lai salīdzinātu 86 00:04:53,460 --> 00:04:57,820 katru nākamo vērtību pēc tam, un atrast indekss no minimālās vērtības. 87 00:04:57,820 --> 00:05:02,520 Tiklīdz jūs atrast minimālo vērtību indeksu, Jūs varat mijmaiņas šo vērtību masīva 88 00:05:02,520 --> 00:05:05,930 minimālo un masīvs I. 89 00:05:05,930 --> 00:05:09,760 >> Vēl viens veida tips, ka jūs varat īstenot ir burbulis kārtošanas. 90 00:05:09,760 --> 00:05:14,380 Tātad burbulis kārtot vairākkārt uzsvērts pār saraksta Salīdzinot blakus elementiem un 91 00:05:14,380 --> 00:05:17,720 pārnešana elementus, ir nepareizā secībā. 92 00:05:17,720 --> 00:05:22,380 Un tādā veidā, lielākā daļa būs burbulis līdz galam. 93 00:05:22,380 --> 00:05:28,070 Un saraksts ir sakārtots pēc tam, kad vairs nav elementi ir samainīti. 94 00:05:28,070 --> 00:05:31,920 >> Tātad tie ir divi piemēri veida algoritmi, kas var īstenot 95 00:05:31,920 --> 00:05:33,230 atrast programmu. 96 00:05:33,230 --> 00:05:37,350 Kad esat pabeidzis kārtot, un jūs esat darīts meklēšanu, jūs esat pabeidzis. 97 00:05:37,350 --> 00:05:39,720 Mans vārds ir Zamyla, un tas ir CS50. 98 00:05:39,720 --> 00:05:46,987 >> [Mūzikas atskaņošanai]