1 00:00:00,000 --> 00:00:09,560 2 00:00:09,560 --> 00:00:13,120 >> ZAMYLA CHAN: Првото нешто што може да известување за откритие е дека ние веќе 3 00:00:13,120 --> 00:00:14,520 се код напишан за нас. 4 00:00:14,520 --> 00:00:16,219 Ова се нарекува дистрибуција код. 5 00:00:16,219 --> 00:00:19,060 Значи ние не сме само пишување нашите сопствени кодот од нула повеќе. 6 00:00:19,060 --> 00:00:23,870 Наместо тоа, ние сме пополнување на празнини во некои постоечки код. 7 00:00:23,870 --> 00:00:28,860 >> На find.c програмата го поттикнува за броеви да се пополни стогот, пребарувања 8 00:00:28,860 --> 00:00:33,260 haystack за поднесено корисникот игла, и тоа го прави ова со повикување вид и 9 00:00:33,260 --> 00:00:36,660 пребарување, функции дефинирани во helpers.c. 10 00:00:36,660 --> 00:00:38,740 Па find.c е напишано веќе. 11 00:00:38,740 --> 00:00:41,840 Вашата работа е да се напише помагачи. 12 00:00:41,840 --> 00:00:42,940 >> Па што правиме ние? 13 00:00:42,940 --> 00:00:45,270 Ние сме спроведување на две функции. 14 00:00:45,270 --> 00:00:50,110 Барај, кој враќа true ако вредност се наоѓа во стогот, враќајќи се 15 00:00:50,110 --> 00:00:52,430 лажни ако вредноста е не во haystack. 16 00:00:52,430 --> 00:00:59,060 А потоа ние сме, исто така, спроведување вид, Кои видови на низа наречен вредности. 17 00:00:59,060 --> 00:01:01,120 Па ајде да се справи пребарување. 18 00:01:01,120 --> 00:01:04,550 >> Барај во моментов е имплементиран како линеарна пребарување. 19 00:01:04,550 --> 00:01:06,620 Но можете да направите многу подобро од тоа. 20 00:01:06,620 --> 00:01:11,610 Линеарно пребарување се спроведува во О од n време, што е сосема бавно, иако тоа 21 00:01:11,610 --> 00:01:14,920 може да се бара било која листа дадена на него. 22 00:01:14,920 --> 00:01:21,190 Вашата работа е да се имплементира бинарни пребарување, кој ја стартувате време О на најавите n. 23 00:01:21,190 --> 00:01:22,200 Тоа е доста брзо. 24 00:01:22,200 --> 00:01:24,240 >> Но, има една одредба. 25 00:01:24,240 --> 00:01:28,910 Бинарни пребарување само да направите пребарување преку пред-сортирани листи. 26 00:01:28,910 --> 00:01:31,450 Зошто е тоа така? 27 00:01:31,450 --> 00:01:33,690 Добро, ајде да погледнеме еден пример. 28 00:01:33,690 --> 00:01:37,350 Дадени низа од вредности, стогот, ние ќе треба да се бараат 29 00:01:37,350 --> 00:01:41,510 игла, и во оваа пример, број 3. 30 00:01:41,510 --> 00:01:45,220 >> Начинот на кој бинарни пребарување работи е дека ја споредиме на средната вредност на 31 00:01:45,220 --> 00:01:49,430 низата на игла, многу сличен како ние отвори телефонски именик до средината 32 00:01:49,430 --> 00:01:51,720 страница во недела 0. 33 00:01:51,720 --> 00:01:55,710 Па по споредување на средната вредност за иглата, можете да ги отфрлите или 34 00:01:55,710 --> 00:01:59,620 лево или десната половина на низата со затегнување на вашиот границите. 35 00:01:59,620 --> 00:02:04,450 Во овој случај, бидејќи 3, нашите игла, е помалку од 10, на средната вредност, на 36 00:02:04,450 --> 00:02:07,060 право врзани може да се намали. 37 00:02:07,060 --> 00:02:09,470 >> Но, обидете се да направите вашиот граници како цврста како е можно. 38 00:02:09,470 --> 00:02:12,690 Ако средната вредност не е игла, тогаш знаете дека не треба да се 39 00:02:12,690 --> 00:02:14,070 вклучуваат во вашето пребарување. 40 00:02:14,070 --> 00:02:18,390 Па вашето право обврзани да ги заостри Барај границите само мал малку повеќе, 41 00:02:18,390 --> 00:02:22,840 и така натаму и така натаму, се додека да најдете игла. 42 00:02:22,840 --> 00:02:24,580 >> Значи она што го прави псевдо код изгледа? 43 00:02:24,580 --> 00:02:28,980 Добро, додека ние сме сè уште во потрага преку листата и се уште имаат 44 00:02:28,980 --> 00:02:33,540 елементи за да се погледне во, ние се средината на листата и споредете дека 45 00:02:33,540 --> 00:02:36,020 Средната вредност на нашите игла. 46 00:02:36,020 --> 00:02:38,380 Ако тие се еднакви, тогаш тоа значи дека ние сме најде игла, и можеме да 47 00:02:38,380 --> 00:02:40,160 врати вистина. 48 00:02:40,160 --> 00:02:43,940 >> Инаку, ако иглата е помала од средната вредност, тогаш тоа значи дека ние 49 00:02:43,940 --> 00:02:48,350 може да ги отфрлите десната половина и само пребарување на левата страна на низата. 50 00:02:48,350 --> 00:02:51,860 Инаку, ние ќе се бара десната страна на низа. 51 00:02:51,860 --> 00:02:55,470 И на крајот, ако не имате било какви повеќе елементи што останале да пребарување, но ќе 52 00:02:55,470 --> 00:02:58,030 не најдов вашиот игла сепак, тогаш ќе се вратите лажна. 53 00:02:58,030 --> 00:03:02,960 Бидејќи иглата дефинитивно не е во haystack. 54 00:03:02,960 --> 00:03:06,200 >> Сега, еден уредни нешто во врска со овој псевдо кодот во бинарен пребарување е тоа што може 55 00:03:06,200 --> 00:03:11,000 да се толкува или како итеративен или рекурзивен имплементација. 56 00:03:11,000 --> 00:03:14,900 Па тоа ќе биде рекурзивен ако наречен функцијата за пребарување во рамките на пребарувањето 57 00:03:14,900 --> 00:03:18,400 функционираат на двете половина на низата. 58 00:03:18,400 --> 00:03:20,750 Ние ќе ги покрие рекурзија малку подоцна во текот на курсот. 59 00:03:20,750 --> 00:03:23,210 Но знам дека тоа е опција ако сакате да се обиде. 60 00:03:23,210 --> 00:03:24,460