1 00:00:00,000 --> 00:00:08,532 >> [MUZIK Bermain] 2 00:00:08,532 --> 00:00:12,060 >> ZAMYLA CHAN: Perkara pertama yang anda mungkin notis mengenai find ialah kita sudah 3 00:00:12,060 --> 00:00:13,450 telah kod bertulis untuk kita. 4 00:00:13,450 --> 00:00:15,160 Ini dipanggil kod pengedaran. 5 00:00:15,160 --> 00:00:18,000 Oleh itu, kita tidak hanya menulis kita sendiri kod dari awal lagi. 6 00:00:18,000 --> 00:00:22,800 Sebaliknya, kami mengisi lompang dalam beberapa kod yang sedia ada. 7 00:00:22,800 --> 00:00:27,790 >> Program find.c menggesa untuk nombor untuk mengisi sisa rumput kering itu, mencari yang 8 00:00:27,790 --> 00:00:32,189 sisa rumput kering jarum pengguna dikemukakan, dan ia melakukan ini dengan memanggil menyusun dan 9 00:00:32,189 --> 00:00:35,590 carian, fungsi yang ditakrif dalam helpers.c. 10 00:00:35,590 --> 00:00:37,670 Jadi find.c ditulis sudah. 11 00:00:37,670 --> 00:00:40,770 Tugas anda adalah untuk menulis pembantu. 12 00:00:40,770 --> 00:00:41,870 >> Jadi apa yang kita lakukan? 13 00:00:41,870 --> 00:00:44,210 Kami melaksanakan dua fungsi. 14 00:00:44,210 --> 00:00:49,030 Cari, yang mengembalikan benar jika nilai terdapat dalam sisa rumput kering, kembali 15 00:00:49,030 --> 00:00:51,370 palsu jika nilai adalah tidak dalam sisa rumput kering itu. 16 00:00:51,370 --> 00:00:57,990 Dan maka kita juga melaksanakan jenis yang mengisih tatasusunan dipanggil nilai-nilai. 17 00:00:57,990 --> 00:00:59,960 >> Jadi mari kita menangani carian. 18 00:00:59,960 --> 00:01:04,560 Cari kini dilaksanakan sebagai carian linear, tetapi anda boleh melakukan banyak 19 00:01:04,560 --> 00:01:05,550 lebih baik daripada itu. 20 00:01:05,550 --> 00:01:09,910 Carian Linear dilaksanakan di O n masa, yang agak perlahan. 21 00:01:09,910 --> 00:01:13,850 Walaupun, ia boleh mencari mana-mana senarai yang diberikan kepadanya. 22 00:01:13,850 --> 00:01:20,130 Tugas anda adalah untuk melaksanakan carian binari, yang telah menjalankan masa O log n. 23 00:01:20,130 --> 00:01:21,130 Itu agak cepat. 24 00:01:21,130 --> 00:01:23,170 >> Tetapi ada ketetapan yang. 25 00:01:23,170 --> 00:01:27,600 Carian binari hanya boleh mencari melalui senarai pra-disusun. 26 00:01:27,600 --> 00:01:30,370 Mengapa? 27 00:01:30,370 --> 00:01:32,620 >> Nah mari kita lihat satu contoh. 28 00:01:32,620 --> 00:01:36,280 Memandangkan pelbagai nilai, sisa rumput kering itu, kita akan mencari 29 00:01:36,280 --> 00:01:37,130 untuk jarum. 30 00:01:37,130 --> 00:01:40,460 Dan dalam contoh ini, integer tiga. 31 00:01:40,460 --> 00:01:44,130 Cara bahawa carian binari berfungsi ialah kita bandingkan nilai pertengahan 32 00:01:44,130 --> 00:01:48,370 array untuk jarum, sama seperti bagaimana kami membuka buku telefon ke tengah 33 00:01:48,370 --> 00:01:50,660 halaman pada minggu sifar. 34 00:01:50,660 --> 00:01:54,650 >> Jadi selepas membandingkan nilai tengah untuk jarum, anda boleh membuang sama ada 35 00:01:54,650 --> 00:01:58,530 kiri atau separuh betul array dengan mengetatkan batas anda. 36 00:01:58,530 --> 00:02:03,390 Dalam kes ini, sejak tiga, jarum kita, adalah kurang daripada 10, nilai menengah, 37 00:02:03,390 --> 00:02:05,990 betul terikat boleh berkurangan. 38 00:02:05,990 --> 00:02:08,400 Tetapi cuba untuk membuat batas anda sebagai ketat yang mungkin. 39 00:02:08,400 --> 00:02:11,630 Jika nilai tengah bukan jarum, maka anda tahu bahawa anda tidak perlu 40 00:02:11,630 --> 00:02:13,010 termasuk dalam carian anda. 41 00:02:13,010 --> 00:02:17,310 Jadi anda betul terikat boleh mengetatkan batas carian hanya sedikit kecil lebih, 42 00:02:17,310 --> 00:02:21,770 dan sebagainya dan sebagainya sehingga anda mencari jarum anda. 43 00:02:21,770 --> 00:02:23,480 >> Jadi apakah kod pseudo yang kelihatan seperti? 44 00:02:23,480 --> 00:02:28,420 Nah sementara kita masih mencari melalui senarai dan masih mempunyai elemen untuk 45 00:02:28,420 --> 00:02:33,690 melihat, kami mengambil pertengahan senarai, dan bandingkan bahawa nilai menengah untuk 46 00:02:33,690 --> 00:02:34,950 jarum kami. 47 00:02:34,950 --> 00:02:37,310 Jika mereka sama, maka ini bermakna kita telah didapati jarum dan kita boleh 48 00:02:37,310 --> 00:02:38,990 kembali benar. 49 00:02:38,990 --> 00:02:42,870 >> Jika tidak, jika jarum adalah kurang daripada nilai tengah, maka itu bermakna kita 50 00:02:42,870 --> 00:02:47,280 boleh membuang separuh yang betul, dan hanya mencari sebelah kiri array. 51 00:02:47,280 --> 00:02:51,090 Jika tidak, kami akan mencari kanan array. 52 00:02:51,090 --> 00:02:54,410 Dan pada akhirnya, jika anda tidak mempunyai apa-apa lebih banyak unsur kiri untuk mencari tetapi anda 53 00:02:54,410 --> 00:02:58,050 tidak menemui jarum anda lagi, maka anda pulangan palsu kerana jarum 54 00:02:58,050 --> 00:03:01,890 pasti tidak dalam sisa rumput kering itu. 55 00:03:01,890 --> 00:03:05,270 >> Sekarang satu perkara yang kemas mengenai kod pseudo ini dalam carian binari adalah bahawa ia boleh menjadi 56 00:03:05,270 --> 00:03:09,940 ditafsirkan sebagai sama ada lelaran atau pelaksanaan rekursif. 57 00:03:09,940 --> 00:03:13,810 Jadi ia akan menjadi rekursif jika anda dipanggil fungsi carian dalam carian 58 00:03:13,810 --> 00:03:17,350 berfungsi pada sama ada separuh daripada array. 59 00:03:17,350 --> 00:03:21,030 Kami akan meliputi rekursi sedikit kemudian di Sudah tentu, tetapi tahu bahawa ia adalah satu 60 00:03:21,030 --> 00:03:24,190 pilihan jika anda ingin mencuba. 61 00:03:24,190 --> 00:03:26,030 >> Sekarang mari kita lihat jenis. 62 00:03:26,030 --> 00:03:30,750 Disusun mengambil pelbagai dan integer n, yang merupakan saiz array. 63 00:03:30,750 --> 00:03:34,030 Sekarang terdapat pelbagai jenis pelbagai, dan anda boleh lihat beberapa 64 00:03:34,030 --> 00:03:36,370 seluar pendek untuk demo dan penerangan. 65 00:03:36,370 --> 00:03:39,580 Jenis balasan kami fungsi jenis adalah tidak sah. 66 00:03:39,580 --> 00:03:43,580 Ini bermakna bahawa kita tidak akan untuk mengembalikan mana-mana pelbagai dari jenis. 67 00:03:43,580 --> 00:03:48,140 Kami benar-benar akan menukar sangat array yang telah diluluskan ke dalam kita. 68 00:03:48,140 --> 00:03:52,290 >> Dan itu mungkin kerana tatasusunan adalah diluluskan dengan merujuk dalam C. Sekarang kita akan 69 00:03:52,290 --> 00:03:55,290 melihat lebih lanjut mengenai ini kemudian, tetapi Perbezaan penting antara yang berlalu 70 00:03:55,290 --> 00:03:59,340 dalam sesuatu seperti integer dan lulus dalam array, ialah apabila anda 71 00:03:59,340 --> 00:04:03,490 lulus dalam integer, C hanya akan membuat salinan integer itu dan lulus 72 00:04:03,490 --> 00:04:04,450 kepada majlis itu. 73 00:04:04,450 --> 00:04:08,530 Pembolehubah asal tidak akan berubah sekali fungsi selesai. 74 00:04:08,530 --> 00:04:12,480 Dengan array, di sisi lain, ia tidak akan membuat salinan, dan anda akan 75 00:04:12,480 --> 00:04:17,910 sebenarnya menyunting sangat pelbagai sendiri. 76 00:04:17,910 --> 00:04:21,269 >> Jadi satu jenis jenis adalah jenis pilihan. 77 00:04:21,269 --> 00:04:24,750 Jenis pilihan berfungsi dengan bermula mulanya, dan kemudian anda melelar 78 00:04:24,750 --> 00:04:26,820 lebih dan mencari elemen yang paling kecil. 79 00:04:26,820 --> 00:04:30,710 Dan kemudian anda swap yang paling kecil elemen dengan yang pertama. 80 00:04:30,710 --> 00:04:34,360 Dan kemudian anda bergerak ke elemen kedua , Cari yang paling kecil seterusnya 81 00:04:34,360 --> 00:04:38,320 unsur, dan kemudian menukar bahawa dengan Elemen kedua dalam tatasusunan kerana 82 00:04:38,320 --> 00:04:41,100 elemen pertama telah disusun. 83 00:04:41,100 --> 00:04:45,370 Dan demikian maka anda terus untuk setiap unsur dalam mengenal pasti yang paling kecil 84 00:04:45,370 --> 00:04:47,690 nilai dan bertukar-tukar ia keluar. 85 00:04:47,690 --> 00:04:53,460 >> Aku sama dengan 0, elemen yang pertama n tolak 1, anda akan membandingkan 86 00:04:53,460 --> 00:04:57,820 setiap nilai akan datang selepas itu dan mendapati indeks nilai minimum. 87 00:04:57,820 --> 00:05:02,520 Sebaik sahaja anda mencari indeks nilai minimum, anda boleh menukar bahawa nilai array 88 00:05:02,520 --> 00:05:05,930 minimum dan mudah I. 89 00:05:05,930 --> 00:05:09,760 >> Satu lagi jenis jenis yang anda boleh melaksanakan adalah jenis gelembung. 90 00:05:09,760 --> 00:05:14,380 Jadi iterates isih gelembung ke senarai membandingkan unsur yang bersebelahan dan 91 00:05:14,380 --> 00:05:17,720 bertukar-tukar unsur-unsur yang adalah dalam perintah itu salah. 92 00:05:17,720 --> 00:05:22,380 Dan cara ini, unsur terbesar akan gelembung ke akhir. 93 00:05:22,380 --> 00:05:28,070 Dan senarai itu disusun sekali tidak lebih elemen telah ditukar. 94 00:05:28,070 --> 00:05:31,920 >> Jadi mereka adalah dua contoh jenis algoritma yang anda boleh melaksanakan untuk 95 00:05:31,920 --> 00:05:33,230 program find. 96 00:05:33,230 --> 00:05:37,350 Sebaik sahaja anda selesai jenis, dan anda telah carian dilakukan, anda selesai. 97 00:05:37,350 --> 00:05:39,720 Nama saya Zamyla, dan ini adalah CS50. 98 00:05:39,720 --> 00:05:46,987 >> [MUZIK Bermain]