1 00:00:00,000 --> 00:00:09,560 2 00:00:09,560 --> 00:00:13,120 >> ZAMYLA CHAN: La unua afero, vi eble avizo pri trovaĵo estas ke ni jam 3 00:00:13,120 --> 00:00:14,520 esti skribita kodo por ni. 4 00:00:14,520 --> 00:00:16,219 Tio nomiĝas distribuo kodo. 5 00:00:16,219 --> 00:00:19,060 Do ni ne simple skribi nian propran kodigi de nulo plu. 6 00:00:19,060 --> 00:00:23,870 Pli ĝuste, ni plenigante en la malplenaj en kelkaj pre-ekzistanta kodo. 7 00:00:23,870 --> 00:00:28,860 >> La find.c programo stimulanta por nombroj plenigi la fojnamaso, esploras la 8 00:00:28,860 --> 00:00:33,260 fojnamaso por uzanto donita kudrilo, kaj ĝi faras tion per la alvoko varo kaj 9 00:00:33,260 --> 00:00:36,660 search, funkcioj difinitaj en helpers.c. 10 00:00:36,660 --> 00:00:38,740 Do find.c estas skribita jam. 11 00:00:38,740 --> 00:00:41,840 Via tasko estas skribi helpantoj. 12 00:00:41,840 --> 00:00:42,940 >> Do, kion ni faras? 13 00:00:42,940 --> 00:00:45,270 Ni efektivigo du funkcioj. 14 00:00:45,270 --> 00:00:50,110 Search, kiuj revenas vera se valoro troviĝas en la fojnamaso, revenante 15 00:00:50,110 --> 00:00:52,430 malvera se la valoro estas ne en la fojnamaso. 16 00:00:52,430 --> 00:00:59,060 Kaj tiam ni ankaŭ apliki varon, kiuj ordigas la tabelo nomata valoroj. 17 00:00:59,060 --> 00:01:01,120 Do ni pritrakti serĉo. 18 00:01:01,120 --> 00:01:04,550 >> Serĉu aktuale implementado kiel lineara serĉo. 19 00:01:04,550 --> 00:01:06,620 Sed vi povas fari multe pli ol tio. 20 00:01:06,620 --> 00:01:11,610 Lineara serĉo implementado en O de n tempo, kio estas sufiĉe malrapida, kvankam ĝi 21 00:01:11,610 --> 00:01:14,920 povas serĉi ajna listo donita al gxi. 22 00:01:14,920 --> 00:01:21,190 Via laboro estas efektivigi duuma serĉo, kiu kuras tempo O de log n. 23 00:01:21,190 --> 00:01:22,200 Tio estas sufiĉe rapida. 24 00:01:22,200 --> 00:01:24,240 >> Sed tie estas estipulación. 25 00:01:24,240 --> 00:01:28,910 Duuma serĉo povas nur serĉi per antaŭ-ordo listoj. 26 00:01:28,910 --> 00:01:31,450 Kial estas tiel? 27 00:01:31,450 --> 00:01:33,690 Nu, ni rigardu ekzemplon. 28 00:01:33,690 --> 00:01:37,350 Donita aro de valoroj, la fojnamaso, Ni tuj rigardos 29 00:01:37,350 --> 00:01:41,510 por kudrilo, kaj en tiu Ekzemple, la entjero 3. 30 00:01:41,510 --> 00:01:45,220 >> La vojo kiu duuma serĉo laboras estas, ke ni komparu la meza valoro de 31 00:01:45,220 --> 00:01:49,430 la tabelo al la kudrilon, multe ŝatas kiel Ni malfermis telefono libron al la mezo 32 00:01:49,430 --> 00:01:51,720 paĝo en Semajnon 0. 33 00:01:51,720 --> 00:01:55,710 Do post komparante la meza valoro al la kudrilon, vi povas forĵeti nek la 34 00:01:55,710 --> 00:01:59,620 maldekstra aŭ la dekstra duono de la tabelo por premita viajn limojn. 35 00:01:59,620 --> 00:02:04,450 En ĉi tiu kazo, ekde 3, nia nadlo, Estas malpli ol 10, la meza valoro, la 36 00:02:04,450 --> 00:02:07,060 dekstra baro povas malaltiĝi. 37 00:02:07,060 --> 00:02:09,470 >> Sed provu fari viajn limojn kiel firme kiel eble. 38 00:02:09,470 --> 00:02:12,690 Se la meza valoro ne estas la kudrilon, tiam vi scias ke vi ne bezonas 39 00:02:12,690 --> 00:02:14,070 inkluzivi ĝin en via serĉo. 40 00:02:14,070 --> 00:02:18,390 Do via dekstra ligitaj povas streĉi la search limojn nur ete pli, 41 00:02:18,390 --> 00:02:22,840 kaj tiel plu kaj tiel plu, ĝis vi trovos vian kudrilo. 42 00:02:22,840 --> 00:02:24,580 >> Do, kion faras la pseŭda kodo aspekti? 43 00:02:24,580 --> 00:02:28,980 Nu, dum ni ankoraŭ rigardas tra la listo kaj ankoraŭ havas 44 00:02:28,980 --> 00:02:33,540 elementoj enrigardi, ni prenu la mezo el la listo kaj kompari ke 45 00:02:33,540 --> 00:02:36,020 meza valoro al nia kudrilo. 46 00:02:36,020 --> 00:02:38,380 Se ili estas egalaj, tiam tio signifas ke ni jam trovis la kudrilon, kaj ni povas 47 00:02:38,380 --> 00:02:40,160 return true. 48 00:02:40,160 --> 00:02:43,940 >> Alie, se la kudrilo estas malpli ol la meza valoro, do tio signifas ke ni 49 00:02:43,940 --> 00:02:48,350 povas forĵeti la dekstra duono kaj justa serĉu la maldekstra flanko de la tabelo. 50 00:02:48,350 --> 00:02:51,860 Alie ni esploru la dekstra flanko de la tabelo. 51 00:02:51,860 --> 00:02:55,470 Kaj fine, se vi ne havas neniu pli elementoj forlasis por serĉi sed vi 52 00:02:55,470 --> 00:02:58,030 ne trovis viajn kudrilo tamen, tiam vi reiros falsaj. 53 00:02:58,030 --> 00:03:02,960 Ĉar la kudrilo definitive ne estas en la fojnamaso. 54 00:03:02,960 --> 00:03:06,200 >> Nun, unu neta afero pri tiu pseŭda kodo en duuma serĉo estas ke ĝi ne povas 55 00:03:06,200 --> 00:03:11,000 esti interpretita kiel ĉu ripeta aŭ rekursiaj efektivigo. 56 00:03:11,000 --> 00:03:14,900 Do ĝi estus rekursie se vi nomas la serĉo funkcion ene de la serĉo 57 00:03:14,900 --> 00:03:18,400 funkcii sur ĉu la duonon de la tabelo. 58 00:03:18,400 --> 00:03:20,750 Ni devos kovri rekursio iom poste en la kurso. 59 00:03:20,750 --> 00:03:23,210 Sed sciu, ke tio estas eblo se vi ŝatus provi. 60 00:03:23,210 --> 00:03:24,460