1 00:00:00,000 --> 00:00:08,532 >> [MUZIKO Ludanta] 2 00:00:08,532 --> 00:00:12,060 >> ZAMYLA CHAN: La unua afero, vi eble avizo pri trovaĵo estas ke ni jam 3 00:00:12,060 --> 00:00:13,450 esti skribita kodo por ni. 4 00:00:13,450 --> 00:00:15,160 Tio nomiĝas distribuo kodo. 5 00:00:15,160 --> 00:00:18,000 Do ni ne simple skribi nian propran kodigi de nulo plu. 6 00:00:18,000 --> 00:00:22,800 Pli ĝuste, ni plenigante en la malplenaj en kelkaj pre-ekzistanta kodo. 7 00:00:22,800 --> 00:00:27,790 >> La find.c programo stimulanta por nombroj plenigi la fojnamaso, esploras la 8 00:00:27,790 --> 00:00:32,189 fojnamaso por uzanto donita kudrilo, kaj ĝi faras tion per la alvoko varo kaj 9 00:00:32,189 --> 00:00:35,590 search, funkcioj difinitaj en helpers.c. 10 00:00:35,590 --> 00:00:37,670 Do find.c estas skribita jam. 11 00:00:37,670 --> 00:00:40,770 Via tasko estas skribi helpantoj. 12 00:00:40,770 --> 00:00:41,870 >> Do, kion ni faras? 13 00:00:41,870 --> 00:00:44,210 Ni efektivigo du funkcioj. 14 00:00:44,210 --> 00:00:49,030 Search, kiuj revenas vera se valoro troviĝas en la fojnamaso, revenante 15 00:00:49,030 --> 00:00:51,370 malvera se la valoro estas ne en la fojnamaso. 16 00:00:51,370 --> 00:00:57,990 Kaj tiam ni ankaŭ efektivigo speco kiuj ordigas la tabelo nomata valoroj. 17 00:00:57,990 --> 00:00:59,960 >> Do ni pritrakti serĉo. 18 00:00:59,960 --> 00:01:04,560 Serĉu aktuale implementado kiel lineara serĉo, sed vi povas fari multe 19 00:01:04,560 --> 00:01:05,550 pli bone ol tio. 20 00:01:05,550 --> 00:01:09,910 Lineara serĉo implementado en O de n tempon, kio estas sufiĉe malrapidaj. 21 00:01:09,910 --> 00:01:13,850 Kvankam, ĝi povas serĉi neniu listo donita al gxi. 22 00:01:13,850 --> 00:01:20,130 Via laboro estas efektivigi duuma serĉo, kiu kuras tempo O de log n. 23 00:01:20,130 --> 00:01:21,130 Tio estas sufiĉe rapida. 24 00:01:21,130 --> 00:01:23,170 >> Sed tie estas estipulación. 25 00:01:23,170 --> 00:01:27,600 Duuma serĉo povas nur serĉi per antaŭ-ordo listoj. 26 00:01:27,600 --> 00:01:30,370 Kial estas tiel? 27 00:01:30,370 --> 00:01:32,620 >> Bone ni rigardu ekzemplon. 28 00:01:32,620 --> 00:01:36,280 Donita aro de valoroj, la fojnamaso, Ni tuj rigardos 29 00:01:36,280 --> 00:01:37,130 por kudrilo. 30 00:01:37,130 --> 00:01:40,460 Kaj en ĉi tiu ekzemplo, la entjera tri. 31 00:01:40,460 --> 00:01:44,130 La vojo kiu duuma serĉo laboras estas, ke ni komparu la meza valoro de 32 00:01:44,130 --> 00:01:48,370 la tabelo al la kudrilon, multe ŝatas kiel Ni malfermis phonebook al la mezo 33 00:01:48,370 --> 00:01:50,660 paĝo en semajno nulo. 34 00:01:50,660 --> 00:01:54,650 >> Do post komparante la meza valoro al la kudrilon, vi povas forĵeti nek la 35 00:01:54,650 --> 00:01:58,530 maldekstra aŭ la dekstra duono de la tabelo por premita viajn limojn. 36 00:01:58,530 --> 00:02:03,390 En ĉi tiu kazo, ekde tri, nia kudrilo, estas malpli ol 10, la meza valoro, la 37 00:02:03,390 --> 00:02:05,990 dekstra baro povas malaltiĝi. 38 00:02:05,990 --> 00:02:08,400 Sed provu fari viajn limojn kiel firme kiel eble. 39 00:02:08,400 --> 00:02:11,630 Se la meza valoro ne estas la kudrilon, tiam vi scias ke vi ne bezonas 40 00:02:11,630 --> 00:02:13,010 inkluzivi ĝin en via serĉo. 41 00:02:13,010 --> 00:02:17,310 Do vi pravas binditaj povas streĉi la search limojn nur ete pli, 42 00:02:17,310 --> 00:02:21,770 kaj tiel plu kaj tiel plu ĝis vi trovos vian kudrilo. 43 00:02:21,770 --> 00:02:23,480 >> Do kion signifas la _pseudocode_ aspekti? 44 00:02:23,480 --> 00:02:28,420 Nu, dum ni ankoraŭ rigardas tra la listo kaj ankoraŭ havas elementojn por 45 00:02:28,420 --> 00:02:33,690 enrigardi, ni prenu la mezo de la listo, kaj kompari ke meza valoro al 46 00:02:33,690 --> 00:02:34,950 nia kudrilo. 47 00:02:34,950 --> 00:02:37,310 Se ili estas egalaj, tiam tio signifas ke ni jam trovis la kudrilon kaj ni povas 48 00:02:37,310 --> 00:02:38,990 return true. 49 00:02:38,990 --> 00:02:42,870 >> Alie, se la kudrilo estas malpli ol la meza valoro, do tio signifas ke ni 50 00:02:42,870 --> 00:02:47,280 povas forĵeti la dekstra duono, kaj nur serĉu la maldekstra flanko de la tabelo. 51 00:02:47,280 --> 00:02:51,090 Alie ni esploru la dekstra flanko de la tabelo. 52 00:02:51,090 --> 00:02:54,410 Kaj fine, se vi ne havas neniu pli elementoj forlasis por serĉi sed vi 53 00:02:54,410 --> 00:02:58,050 ne trovis viajn kudrilo tamen, tiam vi redoni malvera ĉar la kudrilo 54 00:02:58,050 --> 00:03:01,890 definitive ne estas en la fojnamaso. 55 00:03:01,890 --> 00:03:05,270 >> Nun neta afero pri ĉi _pseudocode_ en duuma serĉo estas ke ĝi povas esti 56 00:03:05,270 --> 00:03:09,940 interpretita kiel ĉu ripeta aŭ rekursiaj efektivigo. 57 00:03:09,940 --> 00:03:13,810 Do ĝi estus rekursie se vi nomas la serĉo funkcion ene de la serĉo 58 00:03:13,810 --> 00:03:17,350 funkcii sur ĉu la duonon de la tabelo. 59 00:03:17,350 --> 00:03:21,030 Ni devos kovri rekursio iom poste en la Certe, sed vi scias ke ŝi estas 60 00:03:21,030 --> 00:03:24,190 opcion se vi ŝatus provi. 61 00:03:24,190 --> 00:03:26,030 >> Nun ni rigardu varo. 62 00:03:26,030 --> 00:03:30,750 Ordigi prenas tabelo kaj la entjero n, kiu estas la grandeco de la tabelo. 63 00:03:30,750 --> 00:03:34,030 Nun ekzistas diversaj malsamaj tipoj de varoj, kaj vi povas rigardi iun 64 00:03:34,030 --> 00:03:36,370 shorts por donu kaj klarigoj. 65 00:03:36,370 --> 00:03:39,580 La reveno tipo por nia speco funkcio estas malplena. 66 00:03:39,580 --> 00:03:43,580 Do tio signifas ke ni ne tuj reveni ajna tabelo de varo. 67 00:03:43,580 --> 00:03:48,140 Ni efektive tuj ŝanĝos la tre tabelo kiu pasis al ni. 68 00:03:48,140 --> 00:03:52,290 >> Kaj tio estas ebla ĉar arrays estas preteriris referenco en C. Nun ni 69 00:03:52,290 --> 00:03:55,290 vidi pli pri tio poste, sed la esenca diferenco inter forpaso 70 00:03:55,290 --> 00:03:59,340 en iu kiel entjero kaj forpaso en tabelo, estas, ke kiam vi 71 00:03:59,340 --> 00:04:03,490 Iam en entjero, C estas ĝuste tuj fari kopion de tiu entjero migru 72 00:04:03,490 --> 00:04:04,450 ĝin al la funkcio. 73 00:04:04,450 --> 00:04:08,530 La originala variablo ne estos ŝanĝitaj Tuj la funkcio estas finita. 74 00:04:08,530 --> 00:04:12,480 Kun tabelo, aliflanke, estas Ne tuj fari kopion, kaj vi ricevos 75 00:04:12,480 --> 00:04:17,910 reale esti redaktado de la tre batalarangxis sin. 76 00:04:17,910 --> 00:04:21,269 >> Do unu tipo de varo estas la elekto varo. 77 00:04:21,269 --> 00:04:24,750 La selektado speco funkcias per startanta je la komenco, kaj tiam vi ankaŭ persisti 78 00:04:24,750 --> 00:04:26,820 super kaj trovu la plej malgranda ero. 79 00:04:26,820 --> 00:04:30,710 Kaj tiam vi interŝanĝas, ke malgranda ero kun la unua. 80 00:04:30,710 --> 00:04:34,360 Kaj tiam vi movas al la dua ero , Trovu la sekva pli malgranda 81 00:04:34,360 --> 00:04:38,320 elemento, kaj do interŝanĝas ke kun la dua ero en la tabelo ĉar 82 00:04:38,320 --> 00:04:41,100 La unua ero jam ordo. 83 00:04:41,100 --> 00:04:45,370 Kaj tiel do vi daŭrigas por ĉiu elemento en la identigi la plej malgranda 84 00:04:45,370 --> 00:04:47,690 valoro kaj interŝanĝi ĝin. 85 00:04:47,690 --> 00:04:53,460 >> Por mi egalas 0, la unua elemento al n minus 1, vi tuj kompari 86 00:04:53,460 --> 00:04:57,820 ĉiun sekvanta valoro post tio kaj trovu la indekso de la minimuman valoron. 87 00:04:57,820 --> 00:05:02,520 Kiam vi trovos la minimuman valoron indekso, vi povas interŝanĝi ke valoro de tabelo 88 00:05:02,520 --> 00:05:05,930 minimumo kaj batalarangxis I. 89 00:05:05,930 --> 00:05:09,760 >> Alia tipo de varo kiun vi povas apliki estas bobelo varo. 90 00:05:09,760 --> 00:05:14,380 Do bobelo speco ripetas super la listo komparante najbaraj elementoj kaj 91 00:05:14,380 --> 00:05:17,720 interŝanĝi la elementoj kiuj estas en la malĝusta ordo. 92 00:05:17,720 --> 00:05:22,380 Kaj tiamaniere, la plej granda ero volo veziko ĝis la fino. 93 00:05:22,380 --> 00:05:28,070 Kaj la listo estas ordigita unufoje ne plu eroj estis ŝanĝitaj. 94 00:05:28,070 --> 00:05:31,920 >> Do tiuj estas du ekzemploj de la varo algoritmoj kiuj povas apliki por 95 00:05:31,920 --> 00:05:33,230 la trovaĵo programo. 96 00:05:33,230 --> 00:05:37,350 Kiam vi finos varon, kaj vi havas farita serĉo, vi finis. 97 00:05:37,350 --> 00:05:39,720 Mia nomo estas Zamyla, kaj ĉi tiu estas CS50. 98 00:05:39,720 --> 00:05:46,987 >> [MUZIKO Ludanta]