1 00:00:00,000 --> 00:00:03,000 [Powered by Google Translate] [Seksyen 3] [Kurang Selesa] 2 00:00:03,000 --> 00:00:05,000 >> [Nate Hardison] [Universiti Harvard] 3 00:00:05,000 --> 00:00:08,000 >> [Ini adalah CS50.] [CS50.TV] 4 00:00:08,000 --> 00:00:10,000 >> Baiklah, mari kita mulakan. 5 00:00:10,000 --> 00:00:13,000 Selamat datang ke 4 Minggu CS50. 6 00:00:13,000 --> 00:00:19,000 Jika anda semua membuka pelayar web dan membuka pset 3, 7 00:00:19,000 --> 00:00:23,000 Kacau dengan CS50, kita akan mula pergi 8 00:00:23,000 --> 00:00:26,000 melalui seksyen soalan di sana. 9 00:00:26,000 --> 00:00:32,000 Sama seperti minggu lepas, kita akan bekerja di CS50 kawasan, 10 00:00:32,000 --> 00:00:35,000 jika anda juga akan tarik itu juga, 11 00:00:35,000 --> 00:00:43,000 dan jika anda pergi ke hadapan dan lawati pautan ini bahawa saya telah bangun di sini di atas. 12 00:00:43,000 --> 00:00:45,000 Ia adalah masa untuk memulakan. 13 00:00:45,000 --> 00:00:51,000 Kami telah mendapat program hi sedikit kami di sini. Tiada apa-apa gila. 14 00:00:51,000 --> 00:00:55,000 Salah satu perkara pertama yang saya mahu lakukan dengan anda semua hari ini adalah pergi ke beberapa penyelesaian 15 00:00:55,000 --> 00:00:58,000 Set Masalah 1, jenis penyelesaian contoh, 16 00:00:58,000 --> 00:01:03,000 hanya supaya anda boleh mendapatkan rasa untuk apa jenis kakitangan kod menulis, 17 00:01:03,000 --> 00:01:07,000 apa jenis pelajar kod lain menulis, 18 00:01:07,000 --> 00:01:10,000 dan anda mengambil melihat pada ia kerana saya tahu ia pelik 19 00:01:10,000 --> 00:01:14,000 apabila anda mengemukakan penyelesaian untuk set masalah dan mendapatkan komen 20 00:01:14,000 --> 00:01:18,000 versi anda sendiri, tetapi kadang-kadang ia membantu untuk melihat bagaimana orang lain melakukannya, 21 00:01:18,000 --> 00:01:22,000 terutama orang-orang yang baik cari. 22 00:01:22,000 --> 00:01:27,000 Bagi sebahagian besar, saya benar-benar kagum dengan penyelesaian yang anda semua yang dihasilkan. 23 00:01:27,000 --> 00:01:31,000 Saya belum lagi mula melihat 2s Set Masalah anda, tetapi jika mereka apa-apa seperti yang pertama, 24 00:01:31,000 --> 00:01:34,000 ia bermakna apa-apa tetapi perkara-perkara yang baik. 25 00:01:34,000 --> 00:01:40,000 >> Jika anda melihat semakan saya, mari kita mulakan sepanjang jalan di Ulangkaji 1, 26 00:01:40,000 --> 00:01:47,000 dan kita akan mengambil melihat cepat pada penyelesaian Mario. 27 00:01:47,000 --> 00:01:54,000 Jika anda tarik sehingga ini, program-program yang kita akan membentangkan betul. 28 00:01:54,000 --> 00:01:56,000 Tidak ada isu-isu ketepatan dengan masalah-masalah ini, tetapi sebaliknya, 29 00:01:56,000 --> 00:01:59,000 kita mahu bercakap sedikit tentang isu-isu reka bentuk yang berbeza 30 00:01:59,000 --> 00:02:03,000 yang sedang digunakan di sini. 31 00:02:03,000 --> 00:02:08,000 Salah satu perkara yang menarik tentang penyelesaian 32 00:02:08,000 --> 00:02:11,000 adalah bahawa ia digunakan ini membina baru dipanggil paun menentukan, 33 00:02:11,000 --> 00:02:15,000 kadang-kadang juga dirujuk sebagai hash menentukan. 34 00:02:15,000 --> 00:02:18,000 Biar saya mengezum masuk di sini. 35 00:02:18,000 --> 00:02:24,000 A # define membolehkan anda untuk memberi nama kepada nombor-nombor dalam program anda. 36 00:02:24,000 --> 00:02:28,000 Dalam kes ini, ketinggian maksimum piramid di Mario 37 00:02:28,000 --> 00:02:34,000 adalah 23 dan bukannya meletakkan 23 saya kod- 38 00:02:34,000 --> 00:02:37,000 kita akan merujuk kepada sebagai pengekodan keras 23 - 39 00:02:37,000 --> 00:02:43,000 bukannya ini memberikan MAX_HEIGHT nama ke nombor tersebut, 40 00:02:43,000 --> 00:02:48,000 supaya turun di sini dalam gelung saya do sementara 41 00:02:48,000 --> 00:02:51,000 anda sebenarnya boleh merujuk kepada MAX_HEIGHT 42 00:02:51,000 --> 00:02:55,000 bukannya meletakkan nombor 23 masuk 43 00:02:55,000 --> 00:02:57,000 [Pelajar] Apakah kelebihan berbuat demikian? 44 00:02:57,000 --> 00:02:59,000 Itulah persoalan yang besar. 45 00:02:59,000 --> 00:03:03,000 Satu adalah kebolehbacaan. 46 00:03:03,000 --> 00:03:08,000 Satu kelebihan menggunakan # define adalah kebolehbacaan. 47 00:03:08,000 --> 00:03:11,000 Apabila saya membaca kod ini, saya boleh melihat apa yang berlaku. 48 00:03:11,000 --> 00:03:15,000 >> Saya dapat melihat dalam keadaan ini di sini bahawa kita sedang menguji 49 00:03:15,000 --> 00:03:19,000 untuk ketinggian menjadi <0, yang kita boleh juga ditakrifkan 50 00:03:19,000 --> 00:03:22,000 untuk menjadi ketinggian minimum atau ketinggian min. 51 00:03:22,000 --> 00:03:25,000 Kelebihan lain adalah bahawa saya boleh membaca seluruh barisan untuk melihat 52 00:03:25,000 --> 00:03:30,000 bahawa kita juga memeriksa untuk memastikan bahawa ketinggian tidak lebih daripada ketinggian maksimum, 53 00:03:30,000 --> 00:03:35,000 kerana kita akan terus manakala ketinggian adalah lebih besar daripada ketinggian maksimum. 54 00:03:35,000 --> 00:03:40,000 Kelebihan lain adalah jika saya mengezum keluar sedikit di sini- 55 00:03:40,000 --> 00:03:49,000 jika saya menjalankan program ini dan saya berjalan ia, katakan, dengan 23 sekarang, 56 00:03:49,000 --> 00:03:52,000 ia akan mencetak semua 23 baris seperti itu. 57 00:03:52,000 --> 00:03:54,000 Tetapi katakan saya mahu menukar ketinggian maks, 58 00:03:54,000 --> 00:03:57,000 dan sekarang saya mahu untuk menghadkan ketinggian maksimum piramid 59 00:03:57,000 --> 00:04:06,000 untuk menjadi hanya mengatakan orang, yang 'funky'. 60 00:04:06,000 --> 00:04:14,000 # Include , # define MAX_HEIGHT, 61 00:04:14,000 --> 00:04:18,000 dan mari kita mengatakan bahawa kita mahu untuk menetapkan ia sama dengan 10. 62 00:04:18,000 --> 00:04:22,000 Sekarang pada ketika ini, semua yang saya terpaksa lakukan ialah menukar ia di lokasi yang satu ini. 63 00:04:22,000 --> 00:04:27,000 Saya boleh susun semula kod, dan sekarang jika saya cuba dan menaip 12, 64 00:04:27,000 --> 00:04:30,000 ia akan meminta saya lagi. 65 00:04:30,000 --> 00:04:33,000 Dalam kes ini, kita hanya menggunakan MAX_HEIGHT sekali. 66 00:04:33,000 --> 00:04:37,000 Ia tidak begitu besar mudah untuk pergi dalam 67 00:04:37,000 --> 00:04:40,000 dan mengubahnya dalam gelung manakala jika anda perlu. 68 00:04:40,000 --> 00:04:44,000 Tetapi dalam program-program yang mana anda hendak rujukan nombor ajaib yang sama 69 00:04:44,000 --> 00:04:47,000 berulang-ulang kali, ini # menentukan mekanisme adalah benar-benar berguna 70 00:04:47,000 --> 00:04:52,000 kerana anda hanya menukar satu masa di atas fail-ia biasanya di mana anda meletakkan mereka- 71 00:04:52,000 --> 00:04:57,000 dan perubahan menitis melalui seluruh fail. 72 00:04:57,000 --> 00:05:02,000 >> Perkara lain yang saya mahu ambil perhatian dalam tugasan ini yang saya fikir kelihatan benar-benar bagus, 73 00:05:02,000 --> 00:05:05,000 satu adalah penamaan pembolehubah. 74 00:05:05,000 --> 00:05:14,000 Anda lihat di sini bahawa kita telah mendapat pembolehubah integer dipanggil berturut-turut dan ketinggian dipanggil. 75 00:05:14,000 --> 00:05:20,000 Ruang, Hash, ia membantu membuat kod sedikit lebih mudah dibaca, 76 00:05:20,000 --> 00:05:25,000 membuat ia sedikit lebih mudah difahami apa sebenarnya berlaku di. 77 00:05:25,000 --> 00:05:31,000 Ini adalah berbeza untuk menggunakan, berkata, huruf secara rawak 78 00:05:31,000 --> 00:05:35,000 atau hanya gobbledygook sama sekali. 79 00:05:35,000 --> 00:05:39,000 Satu perkara yang terakhir yang saya akan menunjukkan bahawa untuk gelung, 80 00:05:39,000 --> 00:05:45,000 sering pembolehubah ini iterator, kaunter-kaunter yang anda gunakan dalam anda untuk gelung, 81 00:05:45,000 --> 00:05:51,000 ia adalah standard dan konvensional untuk memulakan mereka sama ada dengan i dan kemudian j dan kemudian k 82 00:05:51,000 --> 00:05:54,000 dan pergi dari sana jika anda memerlukan lebih pembolehubah, 83 00:05:54,000 --> 00:05:56,000 dan ini hanyalah konvensyen. 84 00:05:56,000 --> 00:05:58,000 Terdapat banyak konvensyen. 85 00:05:58,000 --> 00:06:00,000 Ia bergantung kepada bahasa pengaturcaraan yang anda gunakan. 86 00:06:00,000 --> 00:06:04,000 Tetapi dalam C, kita biasanya bermula dengan i. 87 00:06:04,000 --> 00:06:08,000 Ia tidak masuk akal untuk digunakan, katakan, atau b 88 00:06:08,000 --> 00:06:13,000 bergantung kepada keadaan. 89 00:06:13,000 --> 00:06:15,000 Itulah yang satu ini. 90 00:06:15,000 --> 00:06:25,000 Jika anda kini tarik Semakan 2, anda akan melihat satu lagi Mario, 91 00:06:25,000 --> 00:06:29,000 dan satu ini adalah sama kepada orang lain bahawa kita hanya melihat, 92 00:06:29,000 --> 00:06:32,000 tetapi ia jenis sesuatu yang sejuk. 93 00:06:32,000 --> 00:06:38,000 Jika kita melihat seksyen ini di sini di dalam dalaman untuk gelung, 94 00:06:38,000 --> 00:06:44,000 mereka menggunakan beberapa sintaks gila mencari di sini betul-betul di garisan ini. 95 00:06:44,000 --> 00:06:47,000 Ini dipanggil pengendali pertigaan. 96 00:06:47,000 --> 00:06:53,000 Ia adalah kenyataan jika lain memeluwap menjadi satu baris. 97 00:06:53,000 --> 00:06:57,000 Keadaan ini bahagian di dalam kurungan. 98 00:06:57,000 --> 00:07:05,000 Ia adalah bersamaan dengan mengatakan jika ketinggian j <- i - 1. 99 00:07:05,000 --> 00:07:10,000 Dan kemudian apa kandungan bahawa jika blok akan menjadi ruang 100 00:07:10,000 --> 00:07:16,000 dan kemudian kandungan apa lagi akan ini #. 101 00:07:16,000 --> 00:07:20,000 Ia asasnya memberikan ruang kepada pembolehubah ini. 102 00:07:20,000 --> 00:07:24,000 Ia meletakkan ruang dalam kandungan pembolehubah blok, 103 00:07:24,000 --> 00:07:29,000 jika syarat ini dipenuhi, dan jika keadaan ini tidak dipenuhi, 104 00:07:29,000 --> 00:07:32,000 maka pembolehubah blok mendapat ini #. 105 00:07:32,000 --> 00:07:37,000 Dan kemudian, sudah tentu, bukan membina keseluruhan rentetan 106 00:07:37,000 --> 00:07:43,000 dan mencetak semua keluar pada akhir penyelesaian ini mencetak ia keluar satu aksara pada satu-satu masa. 107 00:07:43,000 --> 00:07:48,000 Agak sejuk. 108 00:07:48,000 --> 00:07:53,000 >> Satu lagi beberapa perkara untuk melihat. Kami akan bergerak tamak. 109 00:07:53,000 --> 00:07:58,000 Sekarang jika kita melihat pada tamak, penyelesaian ini pertama 110 00:07:58,000 --> 00:08:00,000 menggunakan ini # mentakrifkan agak sedikit. 111 00:08:00,000 --> 00:08:06,000 Kami telah mendapat satu pemalar ditakrifkan untuk setiap nombor yang berbeza dalam program ini. 112 00:08:06,000 --> 00:08:12,000 Kami telah mendapat satu sen bagi setiap dolar, satu untuk pihak, dimes, nikel, dan beberapa sen, 113 00:08:12,000 --> 00:08:15,000 dan kini jika kita tatal ke bawah dan membaca kod, 114 00:08:15,000 --> 00:08:22,000 kita boleh melihat standard do-gelung while percetakan segala-galanya. 115 00:08:22,000 --> 00:08:25,000 Jenis crux masalah ini telah menyedari bahawa 116 00:08:25,000 --> 00:08:29,000 anda diperlukan untuk menukar apungan bahawa anda membaca dari pengguna kepada integer 117 00:08:29,000 --> 00:08:32,000 tepat melakukan matematik, dan ini adalah kerana 118 00:08:32,000 --> 00:08:36,000 dengan nombor titik apung, seperti kita bercakap tentang dalam syarahannya secara ringkas, 119 00:08:36,000 --> 00:08:41,000 ia tidak mustahil dengan tepat mewakili setiap nilai tunggal pada garis nombor 120 00:08:41,000 --> 00:08:47,000 kerana terdapat nilai tak terhingga banyaknya antara 3 dan, katakan, 3.1 walaupun. 121 00:08:47,000 --> 00:08:54,000 Anda boleh mempunyai 3,01 dan 3,001 dan 3,0001, dan anda boleh terus pergi. 122 00:08:54,000 --> 00:09:00,000 Ia ternyata apabila anda sedang bekerja dengan wang, anda sering mahu menukar 123 00:09:00,000 --> 00:09:05,000 ke dalam format integer supaya anda tidak kehilangan beberapa sen dan yang jenis barangan. 124 00:09:05,000 --> 00:09:09,000 Berbuat demikian dan pembundaran adalah kunci. 125 00:09:09,000 --> 00:09:14,000 Penyelesaian ini digunakan sempurna mudah, algoritma besar, 126 00:09:14,000 --> 00:09:17,000 yang decremented beberapa sen baki, pertama oleh pihak-pihak, 127 00:09:17,000 --> 00:09:19,000 kemudian oleh dimes, maka oleh nikel, maka dengan beberapa sen, 128 00:09:19,000 --> 00:09:24,000 dan menambah bilangan syiling setiap kali. 129 00:09:24,000 --> 00:09:31,000 >> Satu lagi penyelesaian yang kita akan lihat, seperti yang saya zoom out dan pergi ke 4 Semakan, 130 00:09:31,000 --> 00:09:40,000 mempunyai satu permulaan yang sangat serupa tetapi div bukannya digunakan dan arena 131 00:09:40,000 --> 00:09:44,000 betul-betul di sini untuk mengira beberapa sen. 132 00:09:44,000 --> 00:09:50,000 Ini, bilangan kuarters adalah sama dengan bilangan sen dibahagikan dengan 25, 133 00:09:50,000 --> 00:09:53,000 dan sebab ini berfungsi adalah kerana kita sedang melakukan pembahagian integer, 134 00:09:53,000 --> 00:09:58,000 jadi ia membuang baki mana-mana. 135 00:09:58,000 --> 00:10:02,000 [Pelajar] Adakah kita mempunyai mengulas carian? 136 00:10:02,000 --> 00:10:05,000 Ia benar-benar bergantung. 137 00:10:05,000 --> 00:10:08,000 [Pelajar] Anda mengulas lebih daripada kod yang betul di sini. 138 00:10:08,000 --> 00:10:16,000 Ya, dan sebagainya terdapat sekumpulan falsafah yang berbeza-beza mengenai perkara ini. 139 00:10:16,000 --> 00:10:21,000 Falsafah peribadi saya adalah bahawa kod anda adalah benar-benar kebenaran, 140 00:10:21,000 --> 00:10:24,000 seperti kod anda adalah apa yang sebenarnya melaksanakan pada komputer, 141 00:10:24,000 --> 00:10:29,000 dan sebagainya kod anda harus dibaca mungkin tidak memerlukan sebagai banyak komen. 142 00:10:29,000 --> 00:10:33,000 Yang berkata, apabila anda melakukan perkara-perkara yang jenis sukar matematik 143 00:10:33,000 --> 00:10:38,000 atau algorithmically, ia adalah baik untuk mengulas mereka supaya anda boleh 144 00:10:38,000 --> 00:10:43,000 menambah satu dimensi tambahan, lapisan tambahan kepada sesiapa yang membaca kod anda. 145 00:10:43,000 --> 00:10:49,000 Dalam penyelesaian ini, sering mereka mengulas lebih banyak hanya kerana 146 00:10:49,000 --> 00:10:52,000 kita mahu menjadi mampu untuk mengedarkan mereka dan mempunyai orang memilih mereka sehingga 147 00:10:52,000 --> 00:10:56,000 dan membaca mereka cukup mudah. 148 00:10:56,000 --> 00:11:05,000 Tetapi pasti, saya akan bersetuju bahawa ini adalah berat. 149 00:11:05,000 --> 00:11:07,000 [Pelajar] Tetapi apabila dalam keraguan, pergi lebih berat? 150 00:11:07,000 --> 00:11:10,000 Apabila ragu-ragu, pergi berat. 151 00:11:10,000 --> 00:11:17,000 Sesetengah orang kadang-kadang akan mengatakan 0 pulangan atau sesuatu seperti itu. 152 00:11:17,000 --> 00:11:20,000 Saya berfikir bahawa adalah satu komen yang tidak masuk akal. 153 00:11:20,000 --> 00:11:22,000 Dengan jelas bahawa apa yang berlaku. 154 00:11:22,000 --> 00:11:25,000 Saya tidak perlu Bahasa Inggeris untuk memberitahu saya bahawa. 155 00:11:25,000 --> 00:11:28,000 Kadang-kadang orang akan menulis barangan seperti "kthxbai!" 156 00:11:28,000 --> 00:11:32,000 Itulah jenis comel tetapi juga tidak- 157 00:11:32,000 --> 00:11:35,000 yang tidak membuat perbezaan antara mata mengulas atau tidak. 158 00:11:35,000 --> 00:11:41,000 Mereka jenis komen hanya ha, ha. 159 00:11:41,000 --> 00:11:43,000 Sejuk. 160 00:11:43,000 --> 00:11:48,000 >> Pada ketika ini, mari kita mula bekerja pada Masalah Tetapkan seksyen 3 soalan. 161 00:11:48,000 --> 00:11:52,000 Jika anda semua tarik sehingga ini lagi, 162 00:11:52,000 --> 00:11:55,000 dengan minggu lepas, kita tidak akan menonton seluar dalam seksyen ini. 163 00:11:55,000 --> 00:12:00,000 Kami akan membiarkan anda semua lakukan bahawa pada masa anda sendiri dan bercakap tentang soalan-soalan. 164 00:12:00,000 --> 00:12:05,000 Tetapi sekarang dalam seksyen ini kita akan menghabiskan masa lebih sedikit 165 00:12:05,000 --> 00:12:11,000 bercakap tentang kurang asas pengekodan 166 00:12:11,000 --> 00:12:15,000 seperti yang kita lakukan pada minggu lepas, dan sebaliknya, kita akan memberi tumpuan lebih kepada 167 00:12:15,000 --> 00:12:22,000 sedikit lebih daripada teori, jadi bercakap tentang carian binari dan kemudian sorting. 168 00:12:22,000 --> 00:12:27,000 Dari orang-orang di antara kamu yang telah mengikuti bersama-sama dengan kuliah, 169 00:12:27,000 --> 00:12:30,000 seseorang boleh memberi saya recap apa perbezaan 170 00:12:30,000 --> 00:12:35,000 antara carian binari dan carian linear? 171 00:12:35,000 --> 00:12:37,000 Apa yang berlaku? Pasti. 172 00:12:37,000 --> 00:12:42,000 Searches carian Linear melalui setiap elemen dalam senarai yang diisih 173 00:12:42,000 --> 00:12:45,000 satu demi satu demi satu demi satu demi satu, 174 00:12:45,000 --> 00:12:50,000 dan carian binari membahagikan senarai kepada 2 kumpulan, 175 00:12:50,000 --> 00:12:57,000 cek jika nilai kunci yang anda sedang mencari adalah lebih besar atau kurang daripada nilai titik tengah 176 00:12:57,000 --> 00:13:00,000 bahawa anda hanya ditemui, dan jika ia adalah kurang daripada, ia pergi dengan senarai lebih rendah 177 00:13:00,000 --> 00:13:03,000 dan kemudian membahagikan bahawa sekali lagi, tidak fungsi yang sama 178 00:13:03,000 --> 00:13:07,000 semua jalan ke bawah sehingga ia mendapati titik tengah untuk menjadi sama dengan nilai sendiri. 179 00:13:07,000 --> 00:13:10,000 Betul. 180 00:13:10,000 --> 00:13:12,000 >> Mengapa kita mengambil berat? 181 00:13:12,000 --> 00:13:20,000 Mengapa kita bercakap tentang carian dedua berbanding carian linear? 182 00:13:20,000 --> 00:13:22,000 Yeah. 183 00:13:22,000 --> 00:13:24,000 Binari adalah jauh lebih cepat, jadi jika anda menggandakan saiz masalah 184 00:13:24,000 --> 00:13:27,000 ia mengambil satu lagi langkah bukannya dua kali ganda. 185 00:13:27,000 --> 00:13:29,000 Tepat sekali. 186 00:13:29,000 --> 00:13:31,000 Itulah jawapan yang hebat. 187 00:13:31,000 --> 00:13:36,000 Carian Linear amat memeriksa satu elemen pada satu masa, 188 00:13:36,000 --> 00:13:39,000 dan seperti yang kita lihat pada hari pertama kuliah 189 00:13:39,000 --> 00:13:42,000 apabila David pergi melalui contoh buku telefon beliau 190 00:13:42,000 --> 00:13:45,000 dan mengoyakkan keluar satu halaman buku telefon pada satu masa 191 00:13:45,000 --> 00:13:47,000 dan disimpan melakukan yang lebih dan lebih dan lebih lagi, 192 00:13:47,000 --> 00:13:51,000 ia akan membawanya masa yang benar-benar panjang untuk mencari sesiapa di dalam buku telefon, 193 00:13:51,000 --> 00:13:55,000 kecuali, tentunya, dia sedang mencari seseorang pada permulaan sangat abjad. 194 00:13:55,000 --> 00:14:00,000 Dengan carian binari, anda boleh pergi jauh lebih cepat, 195 00:14:00,000 --> 00:14:05,000 dan ia bukan hanya dua kali sebagai cepat atau 3 kali sebagai cepat atau 4 kali lebih cepat. 196 00:14:05,000 --> 00:14:13,000 Tetapi masalahnya mendapat lebih kecil dan lebih kecil dan lebih kecil lebih cepat. 197 00:14:13,000 --> 00:14:17,000 Untuk menggambarkan ini, kami akan mula bercakap tentang apa yang berlaku di 198 00:14:17,000 --> 00:14:21,000 apabila kita menulis carian dedua. 199 00:14:21,000 --> 00:14:27,000 Masalah di tangan adalah bahawa jika saya mempunyai pelbagai nombor, 200 00:14:27,000 --> 00:14:40,000 berkata, 1, 2, 3, 5, 7, 23, 45, 78, 12323, 201 00:14:40,000 --> 00:14:47,000 dan kemudian 9 dengan satu tan 0s selepas ia, 202 00:14:47,000 --> 00:14:52,000 kita mahu menjadi dapat memikirkan benar-benar cepat apa yang ada dalam 203 00:14:52,000 --> 00:14:57,000 ini pelbagai nombor. 204 00:14:57,000 --> 00:15:00,000 Saya tahu ini kelihatan bodoh sedikit dan sedikit tersusun, 205 00:15:00,000 --> 00:15:02,000 kerana sekarang ia adalah. 206 00:15:02,000 --> 00:15:05,000 Kami mempunyai pelbagai yang tidak mempunyai elemen yang sangat banyak di dalamnya, 207 00:15:05,000 --> 00:15:08,000 dan jika saya bertanya kepada salah seorang di antara kamu untuk memikirkan sama ada atau tidak 208 00:15:08,000 --> 00:15:11,000 23 adalah dalam pelbagai, anda boleh berbuat demikian cukup cepat 209 00:15:11,000 --> 00:15:16,000 hanya dengan sambil mengerling ke arah ini dan memberitahu saya ya atau tidak. 210 00:15:16,000 --> 00:15:20,000 Analog untuk dipertimbangkan bayangkan jika ini ialah, katakan, 211 00:15:20,000 --> 00:15:27,000 spreadsheet Excel dengan 10,000 baris, 20,000 baris. 212 00:15:27,000 --> 00:15:31,000 Sudah tentu, anda boleh melakukan arahan F atau F kawalan dan melihat sesuatu. 213 00:15:31,000 --> 00:15:33,000 Anda juga boleh menggunakan penapis dan barangan carian, 214 00:15:33,000 --> 00:15:37,000 tetapi jika anda terpaksa untuk melihat melalui garisan fail yang oleh baris demi baris, 215 00:15:37,000 --> 00:15:40,000 ia akan membawa anda masa yang lama untuk mencari ia. 216 00:15:40,000 --> 00:15:42,000 Ia adalah jenis seperti dalam contoh buku telefon, terlalu, di mana 217 00:15:42,000 --> 00:15:44,000 tiada siapa yang kelihatan melalui halaman satu buku telefon pada satu masa. 218 00:15:44,000 --> 00:15:47,000 Biasanya, mereka tidak membuka ke tengah, 219 00:15:47,000 --> 00:15:50,000 atau dalam kes banyak buku telefon dan kamus di mana 220 00:15:50,000 --> 00:15:54,000 anda sebenarnya ia telah dimasukkan pada huruf pertama, 221 00:15:54,000 --> 00:16:01,000 anda flip kepada surat yang pertama dan membuka dan mula melalui sana. 222 00:16:01,000 --> 00:16:03,000 >> Ingatkan saya nama anda sekali lagi. >> Sam. 223 00:16:03,000 --> 00:16:05,000 Sam. 224 00:16:05,000 --> 00:16:11,000 Seperti Sam berkata, bahawa proses carian linear akan menjadi benar-benar perlahan, 225 00:16:11,000 --> 00:16:15,000 dan bukannya dengan carian binari, cara kerja-kerja ini adalah bahawa 226 00:16:15,000 --> 00:16:21,000 setiap kali kita pergi melalui lelaran algoritma mencari kami, 227 00:16:21,000 --> 00:16:27,000 kita akan membahagikan senarai pada separuh, pada dasarnya, 228 00:16:27,000 --> 00:16:33,000 kepada dua yang lebih kecil senarai. 229 00:16:33,000 --> 00:16:39,000 Dan kemudian pada lelaran seterusnya gelung, kita akan membahagikan lagi 230 00:16:39,000 --> 00:16:44,000 ke dalam senarai kecil yang lain. 231 00:16:44,000 --> 00:16:48,000 Seperti yang anda boleh lihat, masalah terus semakin kecil dan lebih kecil 232 00:16:48,000 --> 00:16:55,000 kerana kita terus separuh membuang senarai setiap kali tunggal. 233 00:16:55,000 --> 00:16:59,000 Bagaimanakah ini berfungsi buang? 234 00:16:59,000 --> 00:17:05,000 Hanya sebagai peringatan, apa yang kita hendak lakukan jika kita komputer 235 00:17:05,000 --> 00:17:11,000 dan kita telah, katakan, mencari nombor 5 dalam senarai ini 236 00:17:11,000 --> 00:17:15,000 adalah bahawa kita akan memilih beberapa di tengah-tengah. 237 00:17:15,000 --> 00:17:26,000 Di tengah-tengah senarai ini, kerana terdapat 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 nombor, 238 00:17:26,000 --> 00:17:32,000 kita akan memilih nombor sama ada pada kedudukan ke-4 atau pada kedudukan ke-5, 239 00:17:32,000 --> 00:17:38,000 dan kita akan memanggil bahawa pertengahan senarai kami. 240 00:17:38,000 --> 00:17:42,000 Pilih nombor di tengah-tengah. 241 00:17:42,000 --> 00:17:51,000 Kemudian, seperti Sam berkata, kita akan menguji untuk melihat jika nombor yang sama 242 00:17:51,000 --> 00:17:59,000 kepada nombor yang kita mahu mendapatkan atau nombor kami kehendaki. 243 00:17:59,000 --> 00:18:06,000 Jika ia adalah sama, maka kita dapati ia. Kita menang. 244 00:18:06,000 --> 00:18:12,000 Jika ia tidak sama, maka terdapat beberapa kes. 245 00:18:12,000 --> 00:18:15,000 Kedua-dua kes adalah sama ada nombor telah menjadi lebih besar daripada bilangan kita melihat, 246 00:18:15,000 --> 00:18:19,000 atau ia adalah kurang daripada. 247 00:18:19,000 --> 00:18:25,000 Jika ia adalah lebih besar, kita bergerak ke kanan. 248 00:18:25,000 --> 00:18:33,000 Dan jika ia kurang, kita bergerak ke kiri. 249 00:18:33,000 --> 00:18:41,000 Dan kemudian kita mengulangi keseluruhan proses sekali lagi 250 00:18:41,000 --> 00:18:48,000 sama ada separuh yang betul atau separuh kiri senarai. 251 00:18:48,000 --> 00:18:51,000 >> Masalah pertama dalam seksyen hari ini adalah untuk mengetahui 252 00:18:51,000 --> 00:18:55,000 bagaimana kita sebenarnya boleh mula untuk menyatakan ini dalam kod C. 253 00:18:55,000 --> 00:18:58,000 Kami telah mendapat pseudokod di sini. 254 00:18:58,000 --> 00:19:04,000 Apa yang kita akan mula lakukan adalah saya akan tarik sehingga jenama-baru ruang, 255 00:19:04,000 --> 00:19:09,000 menyelamatkan semakan ini supaya kita mempunyai nota ini untuk masa lain, 256 00:19:09,000 --> 00:19:20,000 kami akan memadam semua ini, dan kemudian salin dan tampal daripada set masalah 257 00:19:20,000 --> 00:19:26,000 maklumat ini ke dalam ruang kami, dan diharapkan ini tidak pecah. 258 00:19:26,000 --> 00:19:28,000 Sempurna. 259 00:19:28,000 --> 00:19:33,000 Jika kalian semua berbuat demikian, copy dan paste kod ini ke dalam ruang baru anda, 260 00:19:33,000 --> 00:19:43,000 ke dalam satu kosong. 261 00:19:43,000 --> 00:19:47,000 Mari kita cuba Daniel. Jika anda menyusun dan menjalankan program ini, ia berfungsi? 262 00:19:47,000 --> 00:19:49,000 >> No Apa yang ia katakan? 263 00:19:49,000 --> 00:19:53,000 Ia berkata kawalan sampai akhir fungsi bukan tidak sah. 264 00:19:53,000 --> 00:19:55,000 Ya, jadi biarlah saya cuba berjalan ia. 265 00:19:55,000 --> 00:19:59,000 Pernahkah anda semua dilihat sebelum ini? Adakah anda tahu apa ini bermakna? 266 00:19:59,000 --> 00:20:01,000 Baiklah, mari kita membedah ini sedikit. 267 00:20:01,000 --> 00:20:10,000 Ia berkata pada file.c on line 9, lajur 1 kita mempunyai ralat, sama seperti anda berkata, 268 00:20:10,000 --> 00:20:16,000 dan ia mengatakan bahawa ia berpunca daripada amaran ralat dan amaran pulangan jenis. 269 00:20:16,000 --> 00:20:18,000 Ia kelihatan seperti sesuatu yang sedang berlaku dengan jenis pulangan, yang tidak masuk akal. 270 00:20:18,000 --> 00:20:21,000 Kami telah mendapat fungsi bukan tidak sah, yang bermakna bahawa kita telah mendapat fungsi 271 00:20:21,000 --> 00:20:24,000 yang tidak akan kembali tidak sah. 272 00:20:24,000 --> 00:20:27,000 Fungsi tidak sah adalah salah satu yang kelihatan seperti ini: 273 00:20:27,000 --> 00:20:35,000 terbatal foo (), dan ia adalah tidak sah kerana jenis pulangan adalah tidak sah, 274 00:20:35,000 --> 00:20:38,000 yang bermaksud bahawa jika kita mempunyai sesuatu di sini 275 00:20:38,000 --> 00:20:45,000 seperti 1 pulangan, kita akan mendapat kesilapan pengkompil ini. 276 00:20:45,000 --> 00:20:49,000 Walau bagaimanapun, kita mempunyai fungsi bukan tidak sah. 277 00:20:49,000 --> 00:20:51,000 Fungsi bukan terbatal kami dalam kes ini adalah fungsi carian kami 278 00:20:51,000 --> 00:20:56,000 kerana ia mempunyai sejenis pulangan bool. 279 00:20:56,000 --> 00:20:59,000 Apabila ia mengatakan bahawa kawalan sampai ke penghujung fungsi bukan tidak sah, 280 00:20:59,000 --> 00:21:02,000 ia adalah kerana carian tidak mempunyai sebarang pernyataan kembali. 281 00:21:02,000 --> 00:21:04,000 Ia tidak kembali apa-apa jenis bool. 282 00:21:04,000 --> 00:21:09,000 >> Kita boleh menetapkan bahawa, dan apa yang anda semua berfikir 283 00:21:09,000 --> 00:21:13,000 carian harus kembali secara lalai? 284 00:21:13,000 --> 00:21:16,000 Apa yang sepatutnya menjadi nilai lalai pulangan carian? 285 00:21:16,000 --> 00:21:19,000 Kerana itulah apa yang kita boleh meletakkan pada akhir. 286 00:21:19,000 --> 00:21:21,000 Charlotte, adakah anda mempunyai apa-apa? 287 00:21:21,000 --> 00:21:23,000 Benar atau palsu? >> Benar atau palsu. 288 00:21:23,000 --> 00:21:26,000 Yang mana satu? 289 00:21:26,000 --> 00:21:28,000 Palsu. Saya tidak tahu. 290 00:21:28,000 --> 00:21:30,000 Palsu? Mari kita cuba. 291 00:21:30,000 --> 00:21:32,000 Mengapa anda akan mengatakan penyata palsu? Itulah gerak hati besar. 292 00:21:32,000 --> 00:21:35,000 [Charlotte] Saya tidak tahu. 293 00:21:35,000 --> 00:21:39,000 Kami akan kembali palsu dalam kes ini kerana ini akan menjadi lalai kami 294 00:21:39,000 --> 00:21:44,000 jika bagi sebab-sebab tertentu senarai adalah kosong atau jarum 295 00:21:44,000 --> 00:21:46,000 yang kita cari tidak wujud. 296 00:21:46,000 --> 00:21:50,000 Kemudian pada akhir sangat, jika kita tidak kembali benar awal dalam fungsi ini, 297 00:21:50,000 --> 00:21:55,000 kita sentiasa tahu bahawa fungsi ini akan mengatakan ndak, ia bukan dalam array. 298 00:21:55,000 --> 00:21:58,000 Ia bukan dalam sisa rumput kering. 299 00:21:58,000 --> 00:22:03,000 Sekarang jika kita menyusun dan menjalankan ia biarlah saya menjimatkan ini supaya kita boleh tarik sehingga ia. 300 00:22:03,000 --> 00:22:08,000 Sekarang jika kita menyusun dan menjalankan program kami, ia membina. 301 00:22:08,000 --> 00:22:12,000 Kami mendapat prompt kecil kami. 302 00:22:12,000 --> 00:22:20,000 Jika saya mencecah 4-uh-oh. 303 00:22:20,000 --> 00:22:25,000 Ia tidak mencetak apa-apa. Ia kelihatan seperti segala-galanya berakhir okay. 304 00:22:25,000 --> 00:22:35,000 Kami telah mendapat untuk mengisi masuk 305 00:22:35,000 --> 00:22:39,000 Kita bercakap tentang algoritma pseudokod sedikit lalu. 306 00:22:39,000 --> 00:22:44,000 Biar saya lihat, menyimpan ini, 307 00:22:44,000 --> 00:22:49,000 dan saya akan tarik algoritma yang kembali lagi. 308 00:22:49,000 --> 00:22:51,000 Mari kita memukul lelaki ini. Nope. 309 00:22:51,000 --> 00:22:58,000 Sana ia. 310 00:22:58,000 --> 00:23:03,000 Bagaimana kita melakukan ini? 311 00:23:03,000 --> 00:23:11,000 Apa yang akan menjadi strategi yang baik untuk bermula dari kod ini? 312 00:23:11,000 --> 00:23:16,000 Anda perlu memilih nombor di tengah-tengah. 313 00:23:16,000 --> 00:23:23,000 Bagaimana kita memilih nombor di tengah-tengah pelbagai? 314 00:23:23,000 --> 00:23:25,000 Apa-apa cadangan? 315 00:23:25,000 --> 00:23:27,000 [Pelajar] Strlen dibahagikan dengan 2. 316 00:23:27,000 --> 00:23:32,000 Strlen dibahagikan dengan 2. Itulah satu besar. 317 00:23:32,000 --> 00:23:35,000 Strlen kerja-kerja dengan pelbagai khas array. 318 00:23:35,000 --> 00:23:38,000 Apakah jenis tatasusunan? 319 00:23:38,000 --> 00:23:44,000 Rentetan tatasusunan, tatasusunan watak. 320 00:23:44,000 --> 00:23:48,000 Ia adalah yang jenis yang sama konsep bahawa kami ingin memohon, 321 00:23:48,000 --> 00:23:52,000 tetapi kita tidak boleh menggunakan strlen kerana kita tidak mempunyai pelbagai watak. 322 00:23:52,000 --> 00:23:55,000 Kami mempunyai pelbagai ints. 323 00:23:55,000 --> 00:23:58,000 Tetapi apakah strlen mendapatkan untuk kita? 324 00:23:58,000 --> 00:24:01,000 Adakah anda tahu apa ia mendapat untuk kita? 325 00:24:01,000 --> 00:24:03,000 [Pelajar] Strlen mendapat kita panjang. 326 00:24:03,000 --> 00:24:05,000 Tepat sekali, ia mendapat kita panjang. 327 00:24:05,000 --> 00:24:09,000 Strlen mendapat panjang pelbagai untuk kita. 328 00:24:09,000 --> 00:24:14,000 >> Bagaimana kita mendapatkan bahawa dalam program pencarian binari kami? 329 00:24:14,000 --> 00:24:18,000 Bagaimana anda akan mendapat panjang array? 330 00:24:18,000 --> 00:24:20,000 [Pelajar] Strlen? 331 00:24:20,000 --> 00:24:25,000 Anda boleh mendapatkan panjang pelbagai rentetan diformat dengan betul C dengan strlen. 332 00:24:25,000 --> 00:24:31,000 Masalahnya, walaupun, adalah bahawa kita tidak mempunyai pelbagai rentetan. 333 00:24:31,000 --> 00:24:36,000 Jika kita melihat kembali pada kod ini, kita mempunyai pelbagai integer. 334 00:24:36,000 --> 00:24:38,000 Bagaimana kita tahu berapa lama ia? 335 00:24:38,000 --> 00:24:44,000 [Pelajar] Adakah terdapat salah satu yang bersamaan dengan titik akhir, seperti l int atau sesuatu? 336 00:24:44,000 --> 00:24:49,000 Ia ternyata terdapat sebenarnya tidak, dan sebagainya dengan cara, ini adalah 337 00:24:49,000 --> 00:24:52,000 salah satu daripada perkara-perkara yang hanya baik untuk mengetahui tentang C, 338 00:24:52,000 --> 00:24:57,000 bahawa tidak ada cara untuk mendapatkan panjang array 339 00:24:57,000 --> 00:24:59,000 jika semua saya memberi anda adalah array. 340 00:24:59,000 --> 00:25:02,000 Sebab ia berfungsi dengan tali, sebab strlen kerja, 341 00:25:02,000 --> 00:25:06,000 adalah kerana jika rentetan diformat dengan betul, 342 00:25:06,000 --> 00:25:12,000 ia akan mempunyai yang \ khas 0 watak pada akhir sangat. 343 00:25:12,000 --> 00:25:16,000 >> Anda juga boleh bayangkan jika anda mempunyai rentetan yang tidak wajar diformat 344 00:25:16,000 --> 00:25:20,000 dan tiada \ 0 watak di sana, maka segala-galanya tidak berfungsi. 345 00:25:20,000 --> 00:25:22,000 [Pelajar] Bolehkah anda menambah \ 0? 346 00:25:22,000 --> 00:25:24,000 Kita boleh dalam kes ini. 347 00:25:24,000 --> 00:25:29,000 Kita boleh menambah beberapa jenis \ 0 348 00:25:29,000 --> 00:25:33,000 atau beberapa jenis menandakan watak dan kemudian gunakan. 349 00:25:33,000 --> 00:25:36,000 Tetapi itu tidak cukup akan bekerja 350 00:25:36,000 --> 00:25:40,000 kerana 0 \ adalah untuk jenis char, 351 00:25:40,000 --> 00:25:43,000 dan di sini kita telah mendapat ints. 352 00:25:43,000 --> 00:25:46,000 Satu perkara lagi ialah jika kita menggunakan nilai istimewa 353 00:25:46,000 --> 00:25:49,000 seperti -1 hingga menandakan akhir array 354 00:25:49,000 --> 00:25:54,000 maka kita tidak boleh menyimpan -1 dalam tatasusunan integer kami. 355 00:25:54,000 --> 00:25:56,000 Kami ingin terjebak. 356 00:25:56,000 --> 00:26:00,000 Ia ternyata bahawa satu-satunya cara untuk mendapatkan panjang 357 00:26:00,000 --> 00:26:03,000 pelbagai dalam C sebenarnya adalah untuk ingat 358 00:26:03,000 --> 00:26:08,000 apabila anda membinanya dan kemudian lulus ia wujud dengan pelbagai 359 00:26:08,000 --> 00:26:14,000 supaya apabila saya mempunyai fungsi yang akan melakukan beberapa pekerjaan 360 00:26:14,000 --> 00:26:18,000 pada pelbagai integer atau terapung atau beregu atau apa yang telah anda, 361 00:26:18,000 --> 00:26:22,000 Saya juga perlu untuk memberi fungsi panjang pelbagai, 362 00:26:22,000 --> 00:26:26,000 dan itulah apa yang kita lakukan di sini dalam fungsi carian. 363 00:26:26,000 --> 00:26:30,000 Jika anda melihat, apa yang kita lakukan apabila kita lulus dalam pelbagai kami di sini, 364 00:26:30,000 --> 00:26:36,000 kita juga lulus dalam panjang, saiz. 365 00:26:36,000 --> 00:26:41,000 Ia hanya berlaku bahawa kita telah dipanggil pembolehubah ini di sini, 366 00:26:41,000 --> 00:26:43,000 parameter ini atau hujah. 367 00:26:43,000 --> 00:26:46,000 Ini dipanggil senarai hujah atau senarai parameter fungsi, 368 00:26:46,000 --> 00:26:51,000 dan ini juga dipanggil hujah atau parameter. 369 00:26:51,000 --> 00:26:53,000 Orang menggunakan istilah yang berbeza pada masa yang berlainan. 370 00:26:53,000 --> 00:26:55,000 Saya kadang-kadang pertukaran mereka sendiri. 371 00:26:55,000 --> 00:27:00,000 Ia hanya kebetulan bahawa ini pemboleh ubah di sini dinamakan sama 372 00:27:00,000 --> 00:27:03,000 ini # menentukan di sini. 373 00:27:03,000 --> 00:27:06,000 Tetapi mereka tidak perkara yang sama. 374 00:27:06,000 --> 00:27:11,000 Permodalan does matter. 375 00:27:11,000 --> 00:27:14,000 >> Jika anda melihat apa yang berlaku di sini, kita mengaku 376 00:27:14,000 --> 00:27:18,000 pelbagai int kami, yang kami telah dipanggil nombor. 377 00:27:18,000 --> 00:27:23,000 Kami telah diberikan ia saiz kami, yang sepadan dengan kami # menentukan di atas. 378 00:27:23,000 --> 00:27:27,000 Ia akan menjadi 8. 379 00:27:27,000 --> 00:27:35,000 Dan kemudian apabila kita kemudian memanggil fungsi carian kami turun bawah, 380 00:27:35,000 --> 00:27:40,000 kita lulus dalam bilangan yang kita mahu untuk mencari, yang kita telah digesa, 381 00:27:40,000 --> 00:27:43,000 mendapat dari pengguna. 382 00:27:43,000 --> 00:27:46,000 Kami lulus dalam array, nombor ini, 383 00:27:46,000 --> 00:27:51,000 dan kemudian kita juga perlu lulus dalam saiz array, 384 00:27:51,000 --> 00:27:57,000 dan kemudian nilai sebanyak 8 saiz mendapat disimpan 385 00:27:57,000 --> 00:28:01,000 atau diluluskan untuk saiz ini ubah integer dipanggil. 386 00:28:01,000 --> 00:28:08,000 Kami mempunyai saiz array. 387 00:28:08,000 --> 00:28:11,000 Sekarang jika kita kembali kepada apa yang kita telah bercakap tentang awal, 388 00:28:11,000 --> 00:28:14,000 Saya fikir Missy dibesarkan titik bahawa apa yang kita perlu lakukan ialah mendapatkan panjang array 389 00:28:14,000 --> 00:28:20,000 dan dibahagikan dengan 2, dan yang akan memberi kita titik tengah. 390 00:28:20,000 --> 00:28:22,000 Mari kita lihat. 391 00:28:22,000 --> 00:28:25,000 Bolehkah saya mempunyai seseorang menulis ini dan simpan dalam ruang mereka? 392 00:28:25,000 --> 00:28:27,000 Bagaimana pula Leila? 393 00:28:27,000 --> 00:28:31,000 Bolehkah saya mempunyai anda menulis dalam ini? 394 00:28:31,000 --> 00:28:35,000 Tulis baris pertama di mana anda mengambil panjang array dan mendapatkan titik tengah 395 00:28:35,000 --> 00:28:41,000 dan menyimpan ia dalam pembolehubah baru. 396 00:28:41,000 --> 00:28:44,000 Saya akan memberikan anda beberapa saat. Adakah anda bersedia? 397 00:28:44,000 --> 00:28:46,000 [Pelajar didengar] 398 00:28:46,000 --> 00:28:50,000 Pasti, saya mungkin telah anda mengira titik tengah 399 00:28:50,000 --> 00:28:55,000 pelbagai sisa rumput kering di dalam fungsi carian 400 00:28:55,000 --> 00:29:03,000 menggunakan panjang pelbagai sisa rumput kering, yang merupakan pembolehubah saiz? 401 00:29:03,000 --> 00:29:08,000 Tiada apa-apa yang rumit di sini. 402 00:29:08,000 --> 00:29:12,000 [Leila] Hanya saiz / 2 dan hanya- 403 00:29:12,000 --> 00:29:17,000 Dan simpan, dan tekan butang Simpan sehingga di sini di atas, 404 00:29:17,000 --> 00:29:19,000 dan kita akan tarik sehingga ia. 405 00:29:19,000 --> 00:29:22,000 Sempurna. 406 00:29:22,000 --> 00:29:28,000 Terdapat kita pergi. Menggerunkan. 407 00:29:28,000 --> 00:29:30,000 >> Sebagai adalah, ini akan menyusun? 408 00:29:30,000 --> 00:29:32,000 [Leila] Tidak, ia perlu lebih tinggi. 409 00:29:32,000 --> 00:29:34,000 [Nate] Yeah, jadi apa yang kita perlu lakukan? 410 00:29:34,000 --> 00:29:36,000 [Leila] Seperti titik tengah int atau sesuatu. 411 00:29:36,000 --> 00:29:41,000 Menggerunkan. Ya, mari kita berbuat demikian, titik tengah int = saiz. 412 00:29:41,000 --> 00:29:44,000 Ini akan menyusun? 413 00:29:44,000 --> 00:29:47,000 Mari kita padamkan komen ini dan mendapatkan ia keluar dari jalan. 414 00:29:47,000 --> 00:29:50,000 Apa yang tidak akan menyusun tentang perkara ini? 415 00:29:50,000 --> 00:29:52,000 Kami tidak melakukan apa-apa dengan integer, 416 00:29:52,000 --> 00:29:55,000 jadi kita perlu untuk mencetak atau sesuatu seperti itu. 417 00:29:55,000 --> 00:29:58,000 Ya, sebenarnya. 418 00:29:58,000 --> 00:30:00,000 Kami akan mendapatkan pemboleh ubah yang tidak digunakan. 419 00:30:00,000 --> 00:30:02,000 Apa lagi yang tidak akan bekerja mengenai perkara ini? 420 00:30:02,000 --> 00:30:06,000 Saya fikir anda berkata sesuatu, Sam. Bertitik. 421 00:30:06,000 --> 00:30:08,000 Ya, saya hilang mereka koma bertitik. 422 00:30:08,000 --> 00:30:14,000 Ia akan menjadi satu perkara yang berterusan sepanjang penggal. 423 00:30:14,000 --> 00:30:17,000 Perkara terakhir yang saya akan lakukan adalah saya akan meletakkan sedikit ruang putih di sebelah sama ada 424 00:30:17,000 --> 00:30:23,000 pengendali ini di sini, kerana itu biasanya bagaimana kita lakukan 425 00:30:23,000 --> 00:30:26,000 mengikut kepada panduan gaya kami. 426 00:30:26,000 --> 00:30:29,000 Kami telah mendapat titik tengah pelbagai kami. 427 00:30:29,000 --> 00:30:32,000 Sekarang jika kita ingat kembali kepada algoritma kami, 428 00:30:32,000 --> 00:30:37,000 apakah langkah kedua yang kita terpaksa lakukan apabila kita mempunyai titik tengah? 429 00:30:37,000 --> 00:30:42,000 [Pelajar] Jika ia adalah lebih besar [didengar]. 430 00:30:42,000 --> 00:30:48,000 Ya, jadi kita perlu melakukan beberapa jenis perbandingan, dan apa yang kita membandingkan di sini? 431 00:30:48,000 --> 00:30:53,000 Anda berkata jika ia adalah lebih besar daripada. Apakah ia dalam ayat itu merujuk kepada? 432 00:30:53,000 --> 00:30:57,000 Bilangan yang datang, jika itu lebih besar daripada titik tengah, kemudian pergi sehingga array? 433 00:30:57,000 --> 00:31:05,000 Tepat sekali, jadi bilangan yang datang sehingga apabila kita 434 00:31:05,000 --> 00:31:10,000 Jarum, jadi kita membandingkan dengan jarum, 435 00:31:10,000 --> 00:31:12,000 dan apa yang kita membandingkan terhadap jarum? 436 00:31:12,000 --> 00:31:15,000 Kerana jarum adalah apa yang kita cari. 437 00:31:15,000 --> 00:31:18,000 Kami membandingkan ia untuk sampai ke titik tengah. 438 00:31:18,000 --> 00:31:21,000 >> Tetapi adakah ia masuk akal untuk memeriksa untuk melihat 439 00:31:21,000 --> 00:31:27,000 jika jarum = titik tengah? 440 00:31:27,000 --> 00:31:32,000 Adakah yang masuk akal? 441 00:31:32,000 --> 00:31:35,000 Adakah sesiapa yang tidak bersetuju? 442 00:31:35,000 --> 00:31:40,000 Mari kita mencubanya, jika (jarum == titik tengah). 443 00:31:40,000 --> 00:31:42,000 [Pelajar] printf Adakah anda mendapati ia. 444 00:31:42,000 --> 00:31:51,000 [Nate] printf ("Kami mendapati ia \ n"); 445 00:31:51,000 --> 00:31:56,000 Sebaliknya: saya akan mula melakukan sesuatu yang berbeza di sini. 446 00:31:56,000 --> 00:32:00,000 Saya akan mula meletakkan pendakap sekitar jika penyata sepanjang masa 447 00:32:00,000 --> 00:32:05,000 hanya kerana jika kita menambah barangan lebih, maka 448 00:32:05,000 --> 00:32:07,000 kita tidak mendapat penyusun. 449 00:32:07,000 --> 00:32:09,000 Ya, Sam. Anda telah mendapat satu titik. 450 00:32:09,000 --> 00:32:12,000 Masalahnya ialah bahawa titik tengah mewakili kedudukan dalam array, 451 00:32:12,000 --> 00:32:15,000 tetapi anda boleh mendapatkan ia untuk mewakili nilai dalam kedudukan yang array. 452 00:32:15,000 --> 00:32:17,000 Itulah titik yang hebat. 453 00:32:17,000 --> 00:32:19,000 Adakah semua orang mendengar apa yang Sam berkata? 454 00:32:19,000 --> 00:32:22,000 Beliau berkata bahawa titik tengah seperti 455 00:32:22,000 --> 00:32:28,000 mewakili hanya satu kedudukan dalam array, tetapi ia bukan elemen sebenar dalam array. 456 00:32:28,000 --> 00:32:30,000 Jika anda berfikir tentang kod sebagai ditulis sekarang, 457 00:32:30,000 --> 00:32:35,000 jika kita melihat array ini turun sini, yang mempunyai 8 elemen di dalamnya, 458 00:32:35,000 --> 00:32:39,000 apakah nilai titik tengah akan menjadi dalam fungsi ini? 459 00:32:39,000 --> 00:32:41,000 [Pelajar] 4. 460 00:32:41,000 --> 00:32:45,000 [Nate] 4. 461 00:32:45,000 --> 00:32:51,000 Jika kita mencari bilangan 4 - 462 00:32:51,000 --> 00:32:54,000 dan kita hanya boleh menjalankan kod ini dan meletakkan wajah sedih sedikit di sini 463 00:32:54,000 --> 00:32:58,000 kerana kita tidak mendapati ia jika kita menjalankan kod ini 464 00:32:58,000 --> 00:33:04,000 seperti sekarang, memuat naik, bangunan, izinkan saya tatal ke bawah, 465 00:33:04,000 --> 00:33:09,000 dan jika kita mencari nombor 4, 466 00:33:09,000 --> 00:33:18,000 kita mendapati ia, tetapi kita tidak mendapat ini printf ya. 467 00:33:18,000 --> 00:33:23,000 Salah satu sebab adalah bahawa kita tidak kembali benar, 468 00:33:23,000 --> 00:33:26,000 tetapi adakah kita benar-benar mencari nombor 4? 469 00:33:26,000 --> 00:33:28,000 Dan Sam mengatakan tidak. 470 00:33:28,000 --> 00:33:31,000 Apa yang kita dapati? 471 00:33:31,000 --> 00:33:35,000 Kami benar-benar mendapati titik tengah, yang jika kita lihat pada array turun sini, 472 00:33:35,000 --> 00:33:38,000 ia akan menjadi unsur pada indeks 4 yang kita sedang melihat, 473 00:33:38,000 --> 00:33:42,000 yang ialah 23. 474 00:33:42,000 --> 00:33:46,000 >> Bagaimana kita sebenarnya mendapat elemen yang di titik tengah 475 00:33:46,000 --> 00:33:48,000 dan bukan hanya titik tengah itu sendiri? 476 00:33:48,000 --> 00:33:52,000 [Pelajar] Kami akan masukkan char atau sesuatu? 477 00:33:52,000 --> 00:33:55,000 Apa yang akan yang melakukan, hanya keluar dari rasa ingin tahu? 478 00:33:55,000 --> 00:33:57,000 Bolehkah anda menghuraikan lebih sedikit? 479 00:33:57,000 --> 00:34:02,000 Anda perlu mengubah kedudukan ke nombor, 480 00:34:02,000 --> 00:34:05,000 jadi anda telah mendapat untuk membuat beberapa sambungan Saya fikir ia adalah char, tetapi ia tidak mungkin. 481 00:34:05,000 --> 00:34:07,000 Ya, itu adalah satu titik yang baik. 482 00:34:07,000 --> 00:34:12,000 Kami telah melakukan banyak ini kedudukan menukar ke aksara, watak-watak ini, 483 00:34:12,000 --> 00:34:14,000 dalam dua masalah pertama set. 484 00:34:14,000 --> 00:34:18,000 Ia ternyata bahawa di sini, ini adalah hampir sama dengan 485 00:34:18,000 --> 00:34:24,000 mengakses watak engan dalam rentetan, jika yang masuk akal. 486 00:34:24,000 --> 00:34:30,000 Di sini kita mahu untuk mengakses elemen titik tengah. 487 00:34:30,000 --> 00:34:34,000 Bagaimana kita melakukannya? 488 00:34:34,000 --> 00:34:39,000 Kevin, adakah anda mempunyai sebarang cadangan bagaimana kita boleh berbuat demikian? 489 00:34:39,000 --> 00:34:44,000 Anda boleh melakukan sisa rumput kering, kurungan terbuka, pertengahan, ditutup kurungan. 490 00:34:44,000 --> 00:34:46,000 Anda boleh menulis untuk kita? 491 00:34:46,000 --> 00:34:51,000 Simpan ia di sini, dan kami akan tarik sehingga itu. 492 00:34:51,000 --> 00:34:56,000 Kami sedang mencari di baris ini 9, 493 00:34:56,000 --> 00:34:59,000 dan kita menyedari bahawa kita tidak mahu untuk membandingkan jarum untuk titik tengah, 494 00:34:59,000 --> 00:35:03,000 tetapi sebaliknya, kita mahu membandingkan jarum 495 00:35:03,000 --> 00:35:07,000 kepada elemen di titik tengah kedudukan dalam pelbagai sisa rumput kering kami. 496 00:35:07,000 --> 00:35:10,000 Sejuk. 497 00:35:10,000 --> 00:35:12,000 Terdapat kita pergi. 498 00:35:12,000 --> 00:35:15,000 Ya, yang kelihatan agak baik, jika (jarum == sisa rumput kering [titik]). 499 00:35:15,000 --> 00:35:18,000 Kami mendapati ia. 500 00:35:18,000 --> 00:35:22,000 Sekarang jika kita menjalankan belakang kod we'll sehingga sedikit bit 501 00:35:22,000 --> 00:35:26,000 ia menyusun, ia berjalan, dan sekarang jika kita mencari 4, 502 00:35:26,000 --> 00:35:30,000 kita tidak mendapati ia kerana sekarang kita sebenarnya mendapat nombor 23. 503 00:35:30,000 --> 00:35:33,000 Kami mendapat nilai 23, dan itulah apa yang kita membandingkan dengan jarum kami. 504 00:35:33,000 --> 00:35:35,000 Tetapi itu adalah baik. Itu adalah satu langkah ke arah yang betul. 505 00:35:35,000 --> 00:35:37,000 >> Itulah apa yang kita cuba lakukan. 506 00:35:37,000 --> 00:35:40,000 Kami tidak cuba untuk membandingkan jarum terhadap kedudukan dalam array 507 00:35:40,000 --> 00:35:44,000 tetapi terhadap unsur-unsur sebenar dalam array. 508 00:35:44,000 --> 00:35:49,000 Jika kita melihat kembali di langkah seterusnya dalam algoritma kami, 509 00:35:49,000 --> 00:35:51,000 apakah langkah seterusnya? 510 00:35:51,000 --> 00:35:57,000 Leila telah disebutkan secara ringkas. 511 00:35:57,000 --> 00:36:00,000 [Pelajar] Periksa untuk melihat jika ia adalah lebih besar daripada atau kurang daripada dan kemudian membuat keputusan yang mana cara untuk bergerak. 512 00:36:00,000 --> 00:36:03,000 [Nate] Yeah, jadi bagaimana kita akan berbuat demikian? 513 00:36:03,000 --> 00:36:07,000 Anda boleh meletakkan di beberapa-I'll menyelamatkan semakan ini, 514 00:36:07,000 --> 00:36:13,000 dan kemudian jika anda dimasukkan ke dalam beberapa baris yang akan berbuat demikian. 515 00:36:13,000 --> 00:36:15,000 Ya, Charlotte. >> Saya mempunyai satu soalan. 516 00:36:15,000 --> 00:36:19,000 Sekiranya ia tidak menjadi titik tengah - 1 kerana perkara pertama adalah 517 00:36:19,000 --> 00:36:26,000 0 diindeks, jadi jika kita meletakkan 4, itu bukan sebenarnya watak yang kita sedang mencari? 518 00:36:26,000 --> 00:36:30,000 Ya, dan masalah lain dengan yang 519 00:36:30,000 --> 00:36:35,000 itulah tangkapan yang besar, kerana apa yang sedang berlaku akhirnya berlaku mungkin 520 00:36:35,000 --> 00:36:42,000 jika kita terus bergerak dan kita tidak pernah menyesuaikan mulanya? 521 00:36:42,000 --> 00:36:46,000 Saya rasa apa yang kita mungkin akhirnya melakukan cuba untuk mengakses 522 00:36:46,000 --> 00:36:49,000 elemen di kedudukan ke-8 array, 523 00:36:49,000 --> 00:36:53,000 yang dalam kes ini tidak wujud. 524 00:36:53,000 --> 00:36:56,000 Kami akan mahu melakukan beberapa jenis perakaunan hakikat 525 00:36:56,000 --> 00:36:59,000 bahawa kita mempunyai beberapa pengindeksan sifar. 526 00:36:59,000 --> 00:37:05,000 [Charlotte] Maaf, saya maksudkan titik tengah - 1 dalam kurungan persegi. 527 00:37:05,000 --> 00:37:08,000 Kita boleh berbuat demikian. 528 00:37:08,000 --> 00:37:10,000 Kita akan kembali kepada isu ini dalam hanya sedikit. 529 00:37:10,000 --> 00:37:13,000 Sebaik sahaja kita mula untuk mendapatkan gelung sebenar, 530 00:37:13,000 --> 00:37:16,000 itulah apabila kita benar-benar akan melihat ini mula bermain. 531 00:37:16,000 --> 00:37:21,000 Buat masa ini, kita boleh melakukan ini, tetapi anda benar-benar betul. 532 00:37:21,000 --> 00:37:28,000 Itu pengindeksan sifar akan mempunyai kesan bahawa kita perlu mengambil kira. 533 00:37:28,000 --> 00:37:30,000 Mari kita lihat. 534 00:37:30,000 --> 00:37:34,000 >> Bagaimana adalah lebih besar daripada dan kurang daripada? 535 00:37:34,000 --> 00:37:36,000 [Pelajar] saya mendapat bagaimana untuk melakukan lebih daripada dan kurang daripada bahagian. 536 00:37:36,000 --> 00:37:41,000 Saya hanya tidak pasti apa untuk mencetak jika anda mendapati bahawa ia adalah kurang daripada titik tengah sisa rumput kering atau lebih besar daripada. 537 00:37:41,000 --> 00:37:43,000 Di sini saya boleh menyimpan apa I've- 538 00:37:43,000 --> 00:37:47,000 [Nate] Ya, jika anda menyimpan apa yang anda telah mendapat, dan kita akan tarik sehingga ia. 539 00:37:47,000 --> 00:37:49,000 Terdapat kita pergi. 540 00:37:49,000 --> 00:37:51,000 [Pelajar] Dan saya meletakkan tanda tanya untuk apa yang saya tidak tahu. 541 00:37:51,000 --> 00:37:54,000 [Nate] Itu kelihatan hebat. 542 00:37:54,000 --> 00:37:58,000 Di sini kita telah mendapat tanda tanya kerana kita masih tidak tahu 543 00:37:58,000 --> 00:38:06,000 apa yang kita akan agak melakukannya lagi. 544 00:38:06,000 --> 00:38:12,000 Apa yang kita mahu untuk melakukan oops, kami telah mendapat beberapa pendakap semua funky kepada kami. 545 00:38:12,000 --> 00:38:15,000 Kami akan membetulkan pendakap ini. 546 00:38:15,000 --> 00:38:19,000 Terdapat kita pergi. 547 00:38:19,000 --> 00:38:22,000 Dan jadi apa yang kita mahu lakukan, mengikut algoritma kami, 548 00:38:22,000 --> 00:38:27,000 jika kita tidak mencari jarum? 549 00:38:27,000 --> 00:38:32,000 Katakanlah (wahai Muhammad) dalam kes itu bahawa jarum adalah kurang daripada apa yang kita sedang melihat. Kevin. 550 00:38:32,000 --> 00:38:34,000 Hanya melihat separuh kiri. 551 00:38:34,000 --> 00:38:40,000 Betul, jadi kami akan meletakkan komen di sini yang mengatakan "melihat kiri separuh." 552 00:38:40,000 --> 00:38:46,000 Dan jika jarum adalah lebih besar daripada sisa rumput kering di titik tengah, apa yang kita mahu lakukan? 553 00:38:46,000 --> 00:38:48,000 [Pelajar] Kemudian anda melihat separuh betul. 554 00:38:48,000 --> 00:38:53,000 Lihatlah separuh betul, "melihat pada separuh betul." 555 00:38:53,000 --> 00:38:58,000 Tidak terlalu lusuh. 556 00:38:58,000 --> 00:39:05,000 Okay, jadi pada ketika ini, perkara-perkara yang kelihatan cukup baik. 557 00:39:05,000 --> 00:39:13,000 Masalah dengan kod seperti yang ditulis adalah apa? 558 00:39:13,000 --> 00:39:15,000 [Pelajar] Anda tidak mempunyai titik hujung bahagian. 559 00:39:15,000 --> 00:39:18,000 Betul, kita tidak mempunyai titik hujung bahagian. 560 00:39:18,000 --> 00:39:20,000 Kami juga hanya akan pergi melalui ini sekali. 561 00:39:20,000 --> 00:39:23,000 Kami hanya akan melihat pada satu titik tengah. 562 00:39:23,000 --> 00:39:27,000 Sama ada elemen berkenaan ada, atau ia tidak. 563 00:39:27,000 --> 00:39:34,000 Dalam usaha untuk melengkapkan ini, kita akan perlu untuk melakukan beberapa jenis pengulangan. 564 00:39:34,000 --> 00:39:39,000 Kita perlu untuk terus mengulangi sehingga kita dapati bahawa 565 00:39:39,000 --> 00:39:43,000 sama ada unsur adalah di sana kerana kita telah mengecil dan akhirnya mendapati ia, 566 00:39:43,000 --> 00:39:46,000 atau ia tidak di sana kerana kita telah melihat melalui semua perkara 567 00:39:46,000 --> 00:39:52,000 di bahagian sesuai array dan mendapati bahawa tiada apa-apa di sana. 568 00:39:52,000 --> 00:39:56,000 >> Apabila kita telah mendapat pengulangan ini berlaku, apa yang kita akan gunakan? 569 00:39:56,000 --> 00:39:58,000 [Pelajar] gelung. 570 00:39:58,000 --> 00:40:00,000 Beberapa jenis gelung. Ya. 571 00:40:00,000 --> 00:40:03,000 [Pelajar] Bolehkah kita melakukan gelung do sementara dan ia berbuat demikian dan kemudian manakala 572 00:40:03,000 --> 00:40:10,000 jarum tidak tidak sama: saya pasti di mana saya akan dengan itu. 573 00:40:10,000 --> 00:40:18,000 Tetapi semacam berbuat demikian selagi ia tidak sama dengan nilai yang input pengguna. 574 00:40:18,000 --> 00:40:21,000 Ya, jadi mari kita lihat, bagaimana ini mungkin menulis sendiri? 575 00:40:21,000 --> 00:40:23,000 Anda berkata mari kita menggunakan gelung do sementara. 576 00:40:23,000 --> 00:40:26,000 Di manakah melakukan permulaan? 577 00:40:26,000 --> 00:40:33,000 [Pelajar] Hak selepas saiz / 2. 578 00:40:33,000 --> 00:40:42,000 [Nate] Okay, dan apa yang kita akan lakukan? 579 00:40:42,000 --> 00:40:44,000 Kami akan mengisi pada masa kemudian. 580 00:40:44,000 --> 00:40:46,000 Apa yang kita akan lakukan? 581 00:40:46,000 --> 00:40:49,000 [Pelajar] Tidakkah kita mahu melakukan semua barangan yang kita ada dalam bahagian jika? 582 00:40:49,000 --> 00:40:52,000 [Nate] Adakah semua barangan ini, hebat. 583 00:40:52,000 --> 00:40:55,000 Salin dan tampal. 584 00:40:55,000 --> 00:40:59,000 Oh, manusia. 585 00:40:59,000 --> 00:41:03,000 Mari kita lihat jika kerja-kerja ini, jika kita boleh tab lebih ini. 586 00:41:03,000 --> 00:41:08,000 Cantik. 587 00:41:08,000 --> 00:41:16,000 Okay, dan kita menyimpan ini supaya anda semua mempunyai ia. 588 00:41:16,000 --> 00:41:21,000 Semua hak, dan kami akan untuk melakukan ini manakala 589 00:41:21,000 --> 00:41:25,000 apakah keadaan semasa anda selepas? 590 00:41:25,000 --> 00:41:31,000 [Pelajar] Walaupun jarum tidak sama, jadi seperti tanda seru. 591 00:41:31,000 --> 00:41:37,000 Tetapi saya tidak pasti dengan tepat apa yang belum. 592 00:41:37,000 --> 00:41:39,000 [Nate] Yeah, ini adalah salah satu cara untuk melakukannya. 593 00:41:39,000 --> 00:41:41,000 Sam, adakah anda mempunyai komen? 594 00:41:41,000 --> 00:41:43,000 [Sam] saya teringat apabila saya melihat video, 595 00:41:43,000 --> 00:41:48,000 Saya mengambil screenshot salah satu seperti apabila kita melakukan pseudokod untuk ia, 596 00:41:48,000 --> 00:41:52,000 terdapat beberapa hubungan antara max dan min. 597 00:41:52,000 --> 00:41:58,000 Saya rasa ia adalah sesuatu seperti jika maks pernah kurang daripada min. 598 00:41:58,000 --> 00:42:00,000 Mendapat ia. 599 00:42:00,000 --> 00:42:04,000 [Sam] Atau suka jika maks tidak kurang daripada min atau sesuatu seperti itu, 600 00:42:04,000 --> 00:42:06,000 kerana yang akan bermakna bahawa anda telah diperiksa segala-galanya. 601 00:42:06,000 --> 00:42:13,000 >> Ya, jadi apakah ia bunyi seperti max dan min telah merujuk kepada? 602 00:42:13,000 --> 00:42:16,000 [Sam] Nilai bahawa-integer yang akan berubah 603 00:42:16,000 --> 00:42:18,000 berbanding di mana kita meletakkan titik tengah. 604 00:42:18,000 --> 00:42:20,000 Tepat sekali. 605 00:42:20,000 --> 00:42:24,000 [Sam] Pada ketika itu, ia akan [didengar] mengira max dan min. 606 00:42:24,000 --> 00:42:29,000 Titik tengah ini maks dan idea min. 607 00:42:29,000 --> 00:42:35,000 Adakah yang masuk akal kepada orang? 608 00:42:35,000 --> 00:42:39,000 Jika kita mula melihat bagaimana kita pergi untuk melakukan lelaran ini, 609 00:42:39,000 --> 00:42:43,000 anda benar-benar betul bahawa kita mahu menggunakan beberapa jenis gelung do-manakala. 610 00:42:43,000 --> 00:42:49,000 Tetapi saya rasa jika kita ingat apa yang berlaku di tempat array ini 611 00:42:49,000 --> 00:42:53,000 dan apa yang sebenarnya berlaku: saya akan menulis di sini- 612 00:42:53,000 --> 00:42:58,000 pada lelaran pertama carian binari, kita mempunyai 613 00:42:58,000 --> 00:43:05,000 Saya akan menggunakan b dan e untuk menandakan permulaan. 614 00:43:05,000 --> 00:43:10,000 Dan kemudian akhir array kami. 615 00:43:10,000 --> 00:43:14,000 Kita tahu bahawa permulaan adalah pada 4 hak di sini, 616 00:43:14,000 --> 00:43:18,000 dan kita tahu bahawa akhir adalah di 108. 617 00:43:18,000 --> 00:43:23,000 Katakanlah kita sedang mencari bilangan 15. 618 00:43:23,000 --> 00:43:27,000 Kali pertama kita melakukan ini, seperti yang kita lihat sebelum ini, 619 00:43:27,000 --> 00:43:30,000 titik tengah sama ada akan menjadi 16 atau 23 620 00:43:30,000 --> 00:43:34,000 bergantung kepada bagaimana kita mengira perkara keluar. 621 00:43:34,000 --> 00:43:37,000 Sejak membahagikan sama rata di tengah-tengah akan memberi kita ruang ini 622 00:43:37,000 --> 00:43:42,000 antara 16 dan 23, kita tidak boleh sama rata membahagikan ia 623 00:43:42,000 --> 00:43:47,000 atau membahagi dan mendapatkan pada titik tengah yang benar. 624 00:43:47,000 --> 00:43:49,000 Kami akan melihat pada 16. 625 00:43:49,000 --> 00:43:55,000 Kami akan sedar "Hei, 16> 15 yang kita cari." 626 00:43:55,000 --> 00:43:59,000 Untuk kemudian melihat separuh kiri array 627 00:43:59,000 --> 00:44:03,000 apa yang kita akan berakhir lakukan adalah membuang 628 00:44:03,000 --> 00:44:07,000 keseluruhan bahagian atas ini 629 00:44:07,000 --> 00:44:16,000 dan berkata, "Okay, sekarang titik akhir kita akan berada di sini." 630 00:44:16,000 --> 00:44:22,000 Lelaran seterusnya gelung kita, kita sedang melihat pelbagai ini, 631 00:44:22,000 --> 00:44:25,000 berkesan setelah dibuang bahagian ini kerana sekarang 632 00:44:25,000 --> 00:44:30,000 jika kita mengambil titik tengah untuk menjadi perbezaan antara awal dan akhir, 633 00:44:30,000 --> 00:44:34,000 kita dapati titik tengah kami untuk menjadi 8, 634 00:44:34,000 --> 00:44:40,000 yang kemudiannya kami boleh menguji 8 untuk melihat di mana ia adalah berhubung dengan bilangan kita sedang mencari, 635 00:44:40,000 --> 00:44:44,000 15, mendapati bahawa 15 adalah lebih besar, 636 00:44:44,000 --> 00:44:49,000 jadi kita perlu bergerak ke bahagian kanan senarai, 637 00:44:49,000 --> 00:44:51,000 yang kita tahu kerana kita manusia, dan kita dapat melihat ia. 638 00:44:51,000 --> 00:44:54,000 Kita tahu bahawa bahagian yang betul akan menjadi di mana kita dapati, 639 00:44:54,000 --> 00:45:01,000 tetapi komputer tidak tahu bahawa, supaya apa yang kita akan lakukan ialah kita akan sebenarnya 640 00:45:01,000 --> 00:45:04,000 telah ini naik, dan kini awal dan akhir 641 00:45:04,000 --> 00:45:11,000 adalah tempat yang sama, jadi titik tengah menjadi nombor sahaja dalam senarai pada ketika itu, 642 00:45:11,000 --> 00:45:16,000 yang adalah 15, dan kami telah mendapati ia. 643 00:45:16,000 --> 00:45:21,000 Adakah yang menumpahkan cahaya di mana ini maks keseluruhan dan notasi min akan, 644 00:45:21,000 --> 00:45:24,000 mengesan titik hujung array untuk memikirkan 645 00:45:24,000 --> 00:45:35,000 bagaimana untuk merapatkan perkara ke? 646 00:45:35,000 --> 00:45:42,000 >> Apa yang akan berlaku jika ini tidak sama hingga 15 sekarang? 647 00:45:42,000 --> 00:45:52,000 Apa yang jika kita telah mencari selama 15 dan, sebaliknya, nombor ini juga 16? 648 00:45:52,000 --> 00:45:54,000 Kita akan berkata, "Oh, ia adalah lebih besar. 649 00:45:54,000 --> 00:45:57,000 Kami mahu kembali ke kiri. " 650 00:45:57,000 --> 00:46:01,000 Dan kita akan bergerak e kami ke kanan, 651 00:46:01,000 --> 00:46:06,000 di mana titik kita mempunyai titik akhir yang akan bercanggah. 652 00:46:06,000 --> 00:46:09,000 Ia tidak akan dapat mencari unsur-unsur apa-apa lagi 653 00:46:09,000 --> 00:46:13,000 kerana sekarang kita mempunyai titik akhir dan titik permulaan kami, 654 00:46:13,000 --> 00:46:16,000 max dan min kita, kini dibalik. 655 00:46:16,000 --> 00:46:23,000 Kami mencari melalui pelbagai keseluruhan. Kami tidak dapat mencari apa-apa. 656 00:46:23,000 --> 00:46:27,000 Itulah titik di mana kita akan mahu untuk mengatakan, "Baiklah, kita akan berhenti algoritma ini. 657 00:46:27,000 --> 00:46:34,000 Kami tidak menemui apa-apa. Kita tahu ia bukan di sini. " 658 00:46:34,000 --> 00:46:36,000 Bagaimana ini berlaku? 659 00:46:36,000 --> 00:46:40,000 [Pelajar] Bagaimana sebenarnya komputer menukar akhir? 660 00:46:40,000 --> 00:46:45,000 Bagaimanakah akhirnya berakhir sebelum permulaan? 661 00:46:45,000 --> 00:46:48,000 Akhir berakhir sebelum permulaan 662 00:46:48,000 --> 00:46:54,000 kerana matematik yang kita akan lakukan setiap kali kita lakukan ini. 663 00:46:54,000 --> 00:47:00,000 Cara kita swap ialah jika anda melihat pada masa yang pertama kita lakukan ini swap 664 00:47:00,000 --> 00:47:03,000 di mana kita mempunyai permulaan pada 4 dan akhir 665 00:47:03,000 --> 00:47:13,000 sepanjang jalan di 108 dan titik tengah kami, berkata, pada 16 - 666 00:47:13,000 --> 00:47:20,000 Saya akan untuk menetapkan semula kembali ini 15-jika kita sedang mencari untuk 15, 667 00:47:20,000 --> 00:47:25,000 kita tahu bahawa apa yang kita lakukan apabila kita diperiksa 16 dan melihat bahawa ia adalah lebih besar 668 00:47:25,000 --> 00:47:28,000 dan mahu untuk membuang keseluruhan bahagian kanan senarai, 669 00:47:28,000 --> 00:47:36,000 kita lihat bahawa apa yang kita mahu lakukan adalah bergerak e di sini. 670 00:47:36,000 --> 00:47:44,000 Berkesan, e sudah berpindah ke satu sebelum titik tengah. 671 00:47:44,000 --> 00:47:48,000 Begitu juga, apabila kita melakukan ini lelaran algoritma 672 00:47:48,000 --> 00:47:51,000 dan titik tengah adalah pada 8, 673 00:47:51,000 --> 00:47:55,000 kita mendapati bahawa 8 <15, jadi kita mahu bergerak b 674 00:47:55,000 --> 00:48:00,000 salah lalu titik tengah. 675 00:48:00,000 --> 00:48:07,000 Sekarang, permulaan dan akhir kedua-duanya bersama-sama di 15. 676 00:48:07,000 --> 00:48:10,000 >> Jika kita hendak berlaku untuk mencari beberapa nilai lain, bukan 15, 677 00:48:10,000 --> 00:48:14,000 atau jika 15 ini telah sebaliknya menjadi 16, 678 00:48:14,000 --> 00:48:20,000 kita akan mendapati bahawa e kita mahu untuk bergerak satu sebelum titik tengah. 679 00:48:20,000 --> 00:48:33,000 Sekarang e akan ada dibalik kurang daripada b. 680 00:48:33,000 --> 00:48:39,000 Mari kita berjalan melalui bagaimana kita sebenarnya akhirnya kod algoritma ini. 681 00:48:39,000 --> 00:48:44,000 Kita tahu bahawa kita mahu mempunyai pengiraan titik tengah. 682 00:48:44,000 --> 00:48:48,000 Kita juga tahu bahawa kita mahu untuk mengesan awal dan akhir array 683 00:48:48,000 --> 00:48:51,000 array semasa kita supaya kita boleh memikirkan 684 00:48:51,000 --> 00:48:56,000 di mana ini separuh kiri senarai dan mana separuh kanan senarai. 685 00:48:56,000 --> 00:49:03,000 Kami berbuat demikian dengan sama ada bermula dan berakhir, 686 00:49:03,000 --> 00:49:07,000 atau kita boleh memanggil mereka min dan maks. 687 00:49:07,000 --> 00:49:10,000 Saya akan menggunakan bermula dan berakhir masa ini. 688 00:49:10,000 --> 00:49:15,000 Apabila kita bermula, jika kita melihat kembali pada contoh kita ke sini, 689 00:49:15,000 --> 00:49:20,000 permulaan kami telah bersedia untuk permulaan sangat array, sebagai semula jadi. 690 00:49:20,000 --> 00:49:25,000 Apakah indeks ini? Apa yang kita harus bermula? 691 00:49:25,000 --> 00:49:27,000 Daniel. 692 00:49:27,000 --> 00:49:30,000 [Daniel] Haystack [0]. 693 00:49:30,000 --> 00:49:37,000 [Nate] Yeah, jadi kita boleh menetapkan sama dengan sisa rumput kering [0]. 694 00:49:37,000 --> 00:49:40,000 Masalahnya, walaupun, adalah bahawa ini memberikan kita tidak kedudukan elemen pertama. 695 00:49:40,000 --> 00:49:45,000 Ia memberikan kita indeks elemen pertama atau nilai sebenar pada kedudukan yang pertama. 696 00:49:45,000 --> 00:49:47,000 [Pelajar] Itu akan menukar kepada 0,20? 697 00:49:47,000 --> 00:49:52,000 [Nate] Apakah ini akan lakukan-baik, ia tidak akan melakukan apa-apa penukaran yang. 698 00:49:52,000 --> 00:49:56,000 Apa yang ia akan lakukan ialah ia akan menyimpan 4 a dalam memulakan, 699 00:49:56,000 --> 00:49:59,000 dan kemudian ia akan menjadi sukar untuk membuat perbandingan terhadap bermula 700 00:49:59,000 --> 00:50:03,000 kerana bermula akan memegang nilai 4, 701 00:50:03,000 --> 00:50:06,000 yang merupakan permulaan pelbagai kami, 702 00:50:06,000 --> 00:50:08,000 tetapi kita mahu menjejaki indeks dalam pelbagai 703 00:50:08,000 --> 00:50:11,000 berbanding nilai. 704 00:50:11,000 --> 00:50:17,000 Kita sebenarnya akan gunakan 0, seperti itu. 705 00:50:17,000 --> 00:50:20,000 Bagi akhir array Charlotte membawa ini sehingga sedikit lebih awal. 706 00:50:20,000 --> 00:50:23,000 Ini adalah di mana kita akan mengambil kira pengindeksan sifar. 707 00:50:23,000 --> 00:50:25,000 >> Charlotte, apa yang akhir array? 708 00:50:25,000 --> 00:50:28,000 Apakah indeks akhir? 709 00:50:28,000 --> 00:50:30,000 [Charlotte] Saiz - 1. 710 00:50:30,000 --> 00:50:32,000 Ya, dan saiz yang harus kita gunakan? 711 00:50:32,000 --> 00:50:35,000 Sekiranya kita menggunakan saiz modal atau saiz huruf kecil? 712 00:50:35,000 --> 00:50:37,000 Saiz modal. 713 00:50:37,000 --> 00:50:42,000 Dalam kes ini, kita boleh menggunakan saiz modal. 714 00:50:42,000 --> 00:50:45,000 Jika kita mahu fungsi ini untuk mudah alih 715 00:50:45,000 --> 00:50:48,000 dan menggunakan fungsi ini dalam program-program lain, 716 00:50:48,000 --> 00:50:50,000 kita sebenarnya boleh menggunakan saiz huruf kecil. 717 00:50:50,000 --> 00:50:52,000 Ia adalah denda juga. 718 00:50:52,000 --> 00:51:01,000 Tetapi Charlotte adalah benar-benar hak yang kita mahu mempunyai saiz - 1. 719 00:51:01,000 --> 00:51:03,000 Di titik 720 00:51:03,000 --> 00:51:05,000 [Pelajar] Bagaimana ia bahawa anda boleh menggunakan saiz huruf besar? 721 00:51:05,000 --> 00:51:07,000 Bagaimana ia bahawa kita boleh menggunakan saiz huruf besar? 722 00:51:07,000 --> 00:51:13,000 Ia ternyata bahawa ini # mentakrifkan benar-benar, 723 00:51:13,000 --> 00:51:19,000 di bawah hood, teks seperti mencari dan menggantikan, jika yang masuk akal. 724 00:51:19,000 --> 00:51:24,000 Apabila anda menyusun kod anda, fasa prapemprosesan 725 00:51:24,000 --> 00:51:27,000 pengkompil pergi melalui fail, 726 00:51:27,000 --> 00:51:31,000 dan ia kelihatan di mana-mana yang anda telah ditulis saiz modal, 727 00:51:31,000 --> 00:51:39,000 dan ia menggantikan teks yang benar-benar dengan 8, seperti itu. 728 00:51:39,000 --> 00:51:42,000 Dalam erti kata itu, ini adalah sangat berbeza daripada pemboleh ubah. 729 00:51:42,000 --> 00:51:45,000 Ia tidak mengambil mana-mana ruang dalam ingatan. 730 00:51:45,000 --> 00:51:52,000 Ia menggantikan teks mudah helah. 731 00:51:52,000 --> 00:51:57,000 Dalam kes ini, kita akan menggunakan saiz. 732 00:51:57,000 --> 00:52:01,000 Dari sini kita tidak mahu melakukan beberapa jenis pengulangan, 733 00:52:01,000 --> 00:52:03,000 dan kita berada di landasan yang betul dengan gelung do sementara. 734 00:52:03,000 --> 00:52:08,000 Kami mahu melakukan sesuatu sehingga keadaan tidak memegang lagi, 735 00:52:08,000 --> 00:52:12,000 dan seperti yang kita lihat sebelum ini, kita lihat bahawa keadaan itu 736 00:52:12,000 --> 00:52:19,000 sememangnya bahawa kita tidak mahu akhir 737 00:52:19,000 --> 00:52:24,000 menjadi kurang daripada mula. 738 00:52:24,000 --> 00:52:26,000 >> Ini adalah keadaan kita berhenti. 739 00:52:26,000 --> 00:52:35,000 Jika ini berlaku, kita mahu untuk berhenti dan mengisytiharkan seperti, "Hei, kita telah tidak dijumpai apa-apa." 740 00:52:35,000 --> 00:52:43,000 Untuk menyatakan ini, kita tidak mahu menggunakan beberapa jenis gelung. 741 00:52:43,000 --> 00:52:49,000 Dalam kes ini, ia akan menjadi satu gelung do-manakala, untuk gelung, gelung sementara? 742 00:52:49,000 --> 00:52:51,000 Kami mempunyai gelung do sementara di sini. 743 00:52:51,000 --> 00:52:53,000 Adakah anda lelaki seperti pendekatan itu? 744 00:52:53,000 --> 00:52:59,000 Adakah anda fikir kita harus cuba pendekatan yang berbeza? 745 00:52:59,000 --> 00:53:01,000 Kevin, mana-mana pemikiran? 746 00:53:01,000 --> 00:53:06,000 Kita boleh mempunyai gelung sementara kerana kita tahu maksimum 747 00:53:06,000 --> 00:53:11,000 akan menjadi lebih besar daripada min di anyways permulaan. 748 00:53:11,000 --> 00:53:14,000 Ya, jadi tidak ada pengawalan yang perlu berlaku. 749 00:53:14,000 --> 00:53:17,000 Mereka gelung do-sementara adalah besar apabila anda perlu untuk memulakan sesuatu 750 00:53:17,000 --> 00:53:21,000 sebelum kemudian mengujinya, sedangkan sini 751 00:53:21,000 --> 00:53:26,000 kita tahu bahawa kita tidak akan menyimpan reinitializing kedua bermula dan berakhir 752 00:53:26,000 --> 00:53:28,000 setiap pusingan gelung. 753 00:53:28,000 --> 00:53:32,000 Kita tahu bahawa kita mahu untuk memulakan mereka, kemudian memeriksa keadaan kami. 754 00:53:32,000 --> 00:53:38,000 Dalam kes ini, saya sebenarnya akan pergi dengan gelung sementara mudah. 755 00:53:38,000 --> 00:53:44,000 Ia ternyata bahawa gelung do-sementara yang digunakan agak jarang. 756 00:53:44,000 --> 00:53:49,000 Banyak tempat tidak mengajar adakah manakala gelung. 757 00:53:49,000 --> 00:53:53,000 Mereka baik untuk mengendalikan input pengguna, jadi kita telah melihat banyak daripada mereka setakat ini. 758 00:53:53,000 --> 00:53:59,000 Tetapi biasa bagi dan manakala gelung banyak lebih biasa. 759 00:53:59,000 --> 00:54:03,000 Ia ternyata bahawa keadaan ini seperti yang ditulis 760 00:54:03,000 --> 00:54:09,000 tidak benar-benar akan melakukan kita lebih baik, dan mengapa? 761 00:54:09,000 --> 00:54:11,000 Saya minta maaf, saya tidak tahu nama anda. 762 00:54:11,000 --> 00:54:13,000 Saya Jerry. >> Maaf? 763 00:54:13,000 --> 00:54:15,000 Ia adalah B-O-R-U-I. 764 00:54:15,000 --> 00:54:18,000 Oh, okay. 765 00:54:18,000 --> 00:54:23,000 Saya tidak melihat anda dalam senarai saya. 766 00:54:23,000 --> 00:54:26,000 Oh, ia adalah kerana-oh, yang tidak masuk akal. 767 00:54:26,000 --> 00:54:31,000 Adakah anda mempunyai idea mengapa ini gelung sementara mungkin tidak berfungsi seperti yang sepatutnya, 768 00:54:31,000 --> 00:54:38,000 seperti yang ditulis dengan keadaan? 769 00:54:38,000 --> 00:54:43,000 [Jerry] Anda amat bermakna seperti yang anda mahu semua barangan selepas ia ke? 770 00:54:43,000 --> 00:54:46,000 Ya, jadi itulah salah. 771 00:54:46,000 --> 00:54:49,000 Kami mungkin perlu meletakkan semua barangan ini ke dalam gelung sementara, yang benar-benar benar. 772 00:54:49,000 --> 00:54:55,000 Perkara lain yang sedikit lebih bermasalah, walaupun, adalah bahawa keadaan ini tidak berfungsi. 773 00:54:55,000 --> 00:54:57,000 [Pelajar] Anda perlu untuk flip ia. 774 00:54:57,000 --> 00:55:04,000 Betul, jadi keadaan ini akan tidak pernah menjadi kenyataan mulanya cara kita bercakap tentang ia. 775 00:55:04,000 --> 00:55:08,000 Kami mahu melakukan sesuatu sehingga 00:55:13,000 tetapi kita mahu melakukan sesuatu sementara 777 00:55:13,000 --> 00:55:21,000 memulakan akhir ≤. 778 00:55:21,000 --> 00:55:24,000 >> Ada bahawa pembalikan logik sana. 779 00:55:24,000 --> 00:55:27,000 Saya bersalah membuat kesilapan sepanjang masa. 780 00:55:27,000 --> 00:55:31,000 [Pelajar] Mengapa ia perlu kurang daripada atau sama dengan? 781 00:55:31,000 --> 00:55:33,000 Kerana adakah anda ingat kes yang kita dapat 782 00:55:33,000 --> 00:55:36,000 di mana terdapat hanya satu elemen, dan kita telah turun, 783 00:55:36,000 --> 00:55:43,000 dan kita telah melihat hanya 15 dalam pelbagai kami? 784 00:55:43,000 --> 00:55:47,000 Dan permulaan dan akhir kami adalah unsur yang sama. 785 00:55:47,000 --> 00:55:50,000 Kami mahu memastikan bahawa kita mengendalikan kes itu. 786 00:55:50,000 --> 00:55:54,000 Jika kita lakukan lurus kurang daripada, 787 00:55:54,000 --> 00:55:58,000 kita hanya akan dapat untuk mendapatkan ke pelbagai 2-elemen. 788 00:55:58,000 --> 00:56:06,000 Sebaik sahaja kami mendapat turun kepada elemen yang lepas, jika itu adalah elemen kita, kita tidak akan mendapati ia. 789 00:56:06,000 --> 00:56:10,000 Sekarang di sini, kita boleh lakukan betul-betul seperti anda berkata. 790 00:56:10,000 --> 00:56:15,000 Kita boleh mula plopping barangan kanan ke tengah-tengah gelung sementara kami. 791 00:56:15,000 --> 00:56:20,000 Kita boleh mencebur di titik tengah kami. 792 00:56:20,000 --> 00:56:24,000 Kita boleh mengambil semua ini jika penyata, 793 00:56:24,000 --> 00:56:30,000 tarik mereka keluar gelung do sementara ini, 794 00:56:30,000 --> 00:56:34,000 mencebur mereka dalam, 795 00:56:34,000 --> 00:56:39,000 membersihkan perkara sehingga sedikit, 796 00:56:39,000 --> 00:56:48,000 dan saya akan pergi ke hadapan dan menyelamatkan semakan ini. 797 00:56:48,000 --> 00:56:53,000 Dan pada ketika ini, kita semakin hampir. 798 00:56:53,000 --> 00:56:55,000 Sam. 799 00:56:55,000 --> 00:56:58,000 Saya rasa anda juga perlu mempunyai titik tengah int size = - 1/2. 800 00:56:58,000 --> 00:57:01,000 Ada, saiz - 1/2. 801 00:57:01,000 --> 00:57:05,000 Adakah terdapat apa-apa lagi yang kita perlu untuk menukar tentang baris itu? 802 00:57:05,000 --> 00:57:10,000 Itu adalah tangkapan yang baik. 803 00:57:10,000 --> 00:57:14,000 >> Apakah saiz lakukan? Adakah kita pernah menukar saiz? 804 00:57:14,000 --> 00:57:17,000 Untuk memastikan garis seperti ini, kita perlu untuk menukar saiz. 805 00:57:17,000 --> 00:57:21,000 Kita perlu menukar saiz setiap kali kita pergi di sekitar untuk gelung. 806 00:57:21,000 --> 00:57:25,000 Tetapi ingat apabila kita telah melalui contoh kita hanya sedikit lebih awal, 807 00:57:25,000 --> 00:57:30,000 dan kita mempunyai permulaan pada 4 808 00:57:30,000 --> 00:57:33,000 dan akhir semua cara lebih di 108? 809 00:57:33,000 --> 00:57:35,000 Bagaimana kita mengira titik tengah? 810 00:57:35,000 --> 00:57:38,000 Adakah kita menggunakan saiz? 811 00:57:38,000 --> 00:57:40,000 Atau kita telah menggunakan bermula dan berakhir sebaliknya? 812 00:57:40,000 --> 00:57:42,000 Ia adalah perbezaan antara akhir dan permulaan. 813 00:57:42,000 --> 00:57:50,000 Tepat sekali, dan bagaimana sebenarnya perlu saya menulis bahawa, Charlotte? 814 00:57:50,000 --> 00:57:52,000 Hanya berakhir - bermula. 815 00:57:52,000 --> 00:57:55,000 Anda tidak perlu untuk melakukan - 1 816 00:57:55,000 --> 00:57:58,000 kerana - 1 telah dimasukkan di akhir dan bermula sudah. 817 00:57:58,000 --> 00:58:00,000 [Nate] Great, anda benar-benar betul. 818 00:58:00,000 --> 00:58:03,000 Kami tidak mempunyai untuk melakukan - 1 kerana - 1 telah dimasukkan 819 00:58:03,000 --> 00:58:08,000 dan menyumbang untuk apabila kita memulakan pembolehubah akhir. 820 00:58:08,000 --> 00:58:11,000 >> Adakah terdapat apa-apa lagi yang perlu saya lakukan syntactically mempunyai garis ini masuk akal? 821 00:58:11,000 --> 00:58:13,000 [Pelajar] Plus bermula. >> Plus bermula? 822 00:58:13,000 --> 00:58:15,000 [Pelajar] Pada akhir. 823 00:58:15,000 --> 00:58:20,000 Kerana ia hanya dikira setengah panjang. 824 00:58:20,000 --> 00:58:26,000 Anda perlu menambah bermula. 825 00:58:26,000 --> 00:58:31,000 [Nate] Apakah ini akan mengira untuk kita? 826 00:58:31,000 --> 00:58:35,000 Jika kita berfikir tentang akhir pada lelaran ini sangat pertama gelung, 827 00:58:35,000 --> 00:58:40,000 akhir akan menjadi indeks kedudukan 7. 828 00:58:40,000 --> 00:58:43,000 Mulakan adalah dalam kedudukan 0. 829 00:58:43,000 --> 00:58:47,000 Ingat, kita sedang mencari sama ada 830 00:58:47,000 --> 00:58:52,000 kedudukan 3 atau kedudukan 4. 831 00:58:52,000 --> 00:58:56,000 Jika kita melihat matematik ini, hanya untuk membuat ia sedikit lebih ketara, 832 00:58:56,000 --> 00:59:02,000 meletakkan beberapa nombor di sini, kita mempunyai 7, 0, 833 00:59:02,000 --> 00:59:10,000 jadi 7-0, dan kemudian / 2 834 00:59:10,000 --> 00:59:19,000 adalah 3 dalam pembahagian integer, yang. 835 00:59:19,000 --> 00:59:26,000 Kemudian kita perlu kemudian menambah kembali kami mula? 836 00:59:26,000 --> 00:59:28,000 Kami tidak dalam kes ini. 837 00:59:28,000 --> 00:59:31,000 Pada lelaran pertama, ia akan didenda kerana bermula adalah 0. 838 00:59:31,000 --> 00:59:36,000 Tetapi sebagai kemajuan kita, yang kita lakukan benar-benar semua hanya perlu 839 00:59:36,000 --> 00:59:42,000 akhir memulakan / 2. 840 00:59:42,000 --> 00:59:46,000 Ada satu muslihat lain di sini, dan itulah iaitu salah satu keutamaan. 841 00:59:46,000 --> 00:59:49,000 [Pelajar] Adakah kita perlukan kurungan? 842 00:59:49,000 --> 00:59:53,000 [Nate] Tepat sekali, dan itu kerana jika kita tidak meletakkan kurungan ini, 843 00:59:53,000 --> 00:59:58,000 maka baris ini akan ditafsirkan dan bukannya 844 00:59:58,000 --> 01:00:09,000 (akhir) - (mula / 2), yang kita pasti tidak mahu. 845 01:00:09,000 --> 01:00:11,000 Watch out bagi mereka peraturan keutamaan. 846 01:00:11,000 --> 01:00:15,000 [Pelajar] Mengapa ia tidak berakhir + bermula? 847 01:00:15,000 --> 01:00:17,000 Mengapa ia tidak berakhir + bermula? 848 01:00:17,000 --> 01:00:19,000 [Pelajar] Mengapa ia tidak? 849 01:00:19,000 --> 01:00:24,000 Mengapa ia akan menjadi +? 850 01:00:24,000 --> 01:00:26,000 Saya rasa anda betul. 851 01:00:26,000 --> 01:00:28,000 [Pelajar] Kerana ia adalah purata? 852 01:00:28,000 --> 01:00:31,000 [Nate] Akhir + memulakan, anda benar-benar betul. 853 01:00:31,000 --> 01:00:34,000 Wow, saya benar-benar goofed. Anda betul. 854 01:00:34,000 --> 01:00:39,000 Jika kita telah melakukan tolak, kita mahu menambah mula kembali masuk 855 01:00:39,000 --> 01:00:43,000 Dalam kes ini, anda sangat betul bahawa kita mahu mengambil purata dua, 856 01:00:43,000 --> 01:00:45,000 jadi kita tidak mahu untuk menambah mereka, berbanding tolak mereka. 857 01:00:45,000 --> 01:00:49,000 [Pelajar] Ia juga akan berfungsi jika anda lakukan akhir - mula / 2 + bermula. 858 01:00:49,000 --> 01:00:55,000 Ia akan jika kita lakukan saya percaya begitu. 859 01:00:55,000 --> 01:01:00,000 >> Sebagai contoh, jika kita telah melihat bermula, 860 01:01:00,000 --> 01:01:04,000 dan kita beralih ke sini 861 01:01:04,000 --> 01:01:08,000 kepada 15. 862 01:01:08,000 --> 01:01:12,000 Kini mula berada pada kedudukan 2. 863 01:01:12,000 --> 01:01:15,000 Akhir adalah pada 7 kedudukan. 864 01:01:15,000 --> 01:01:21,000 Jika kita tolak mereka, kita akan mendapat 5. 865 01:01:21,000 --> 01:01:24,000 Bahagikan dengan 2, kita akan mendapat 2. 866 01:01:24,000 --> 01:01:27,000 Dan kemudian kita campurkan 2 kembali dalam, 867 01:01:27,000 --> 01:01:30,000 dan yang mendapat kita kepada kedudukan ke-4, 868 01:01:30,000 --> 01:01:33,000 yang betul di sini, yang adalah titik tengah. 869 01:01:33,000 --> 01:01:36,000 [Pelajar] Adakah kita perlu untuk menjaga pembalut? 870 01:01:36,000 --> 01:01:39,000 Rasa apa yang kita perlu untuk menjaga membungkus? 871 01:01:39,000 --> 01:01:43,000 Jika jumlah wang atau perbezaan antara 872 01:01:43,000 --> 01:01:45,000 bergantung kepada bagaimana kita melakukannya bukan nombor genap. 873 01:01:45,000 --> 01:01:49,000 Kemudian komputer mendapat keliru sama ada apabila ia adalah 2.5; 874 01:01:49,000 --> 01:01:52,000 adakah anda bergerak ke kiri atau ke kanan untuk menentukan yang merupakan titik tengah? 875 01:01:52,000 --> 01:01:54,000 Mendapat ia. 876 01:01:54,000 --> 01:01:56,000 Ia ternyata bahawa dengan pembahagian integer, 877 01:01:56,000 --> 01:01:59,000 kita tidak pernah mendapat nombor-nombor titik apung. 878 01:01:59,000 --> 01:02:01,000 Kami tidak pernah mendapat perpuluhan. 879 01:02:01,000 --> 01:02:04,000 Ia benar-benar dibuang. 880 01:02:04,000 --> 01:02:08,000 Jika anda mempunyai komputer membahagikan dua pembolehubah int, 881 01:02:08,000 --> 01:02:11,000 dan satu adalah 7, dan yang lain adalah 2, 882 01:02:11,000 --> 01:02:13,000 anda tidak akan mendapat 3.5 hasilnya. 883 01:02:13,000 --> 01:02:16,000 Ia akan mendapat 3. 884 01:02:16,000 --> 01:02:19,000 Selebihnya akan dibuang, jadi ia berkesan pembulatan 885 01:02:19,000 --> 01:02:24,000 bukan bulat tetapi lantai, jika anda semua sudah biasa dengan dalam matematik, 886 01:02:24,000 --> 01:02:27,000 di mana anda benar-benar membuang perpuluhan, 887 01:02:27,000 --> 01:02:31,000 dan sebagainya anda dasarnya Memangkas ia ke yang terdekat 888 01:02:31,000 --> 01:02:33,000 kedudukan keseluruhan, kepada nombor bulat terdekat. 889 01:02:33,000 --> 01:02:38,000 [Pelajar] Tetapi itulah bermasalah kerana jika anda mempunyai pelbagai 7 elemen 890 01:02:38,000 --> 01:02:43,000 kemudian yang secara automatik mengambil elemen 3 daripada titik tengah bukan 4. 891 01:02:43,000 --> 01:02:46,000 Bagaimana kita berurusan dengan itu? 892 01:02:46,000 --> 01:02:49,000 Ia bermasalah kerana jika kita mempunyai pelbagai 7, 893 01:02:49,000 --> 01:02:54,000 ia akan mengambil ke-3 bukan 4. 894 01:02:54,000 --> 01:02:56,000 Anda boleh menjelaskan lebih sedikit? 895 01:02:56,000 --> 01:02:59,000 [Pelajar] Kerana jika anda mempunyai 7 elemen maka elemen 4 896 01:02:59,000 --> 01:03:04,000 akan menjadi titik tengah, betul-betul? 897 01:03:04,000 --> 01:03:07,000 Ingat komen anda tentang menjadi sifar diindeks, walaupun. 898 01:03:07,000 --> 01:03:10,000 [Pelajar] Yeah, jadi di posisi 3. Itu akan menjadi titik tengah. 899 01:03:10,000 --> 01:03:12,000 Yeah. 900 01:03:12,000 --> 01:03:16,000 Oh, okay. Saya melihat apa yang anda maksudkan. 901 01:03:16,000 --> 01:03:19,000 Ia adalah jenis pelik, seperti yang kita dapat digunakan untuk tanggapan ini keseluruhan 902 01:03:19,000 --> 01:03:22,000 menyingkirkan perpuluhan. 903 01:03:22,000 --> 01:03:26,000 Itulah titik yang hebat. 904 01:03:26,000 --> 01:03:30,000 Mari kita selesaikan ini. 905 01:03:30,000 --> 01:03:32,000 Kami telah dikira titik tengah kami. 906 01:03:32,000 --> 01:03:37,000 >> Kami menguji untuk melihat jika jarum kami adalah sama dengan nilai tengah. 907 01:03:37,000 --> 01:03:41,000 Kami mencetak bahawa kita mendapati ia, tetapi benar-benar, apa yang kita mahu lakukan dalam situasi ini? 908 01:03:41,000 --> 01:03:46,000 Kami telah mendapati ia, jadi kita mahu membiarkan pemanggil tahu bahawa kita mendapati ia. 909 01:03:46,000 --> 01:03:49,000 Kami telah mendapat fungsi yang fungsi boolean ditaip. 910 01:03:49,000 --> 01:03:54,000 Cara kita isyarat kepada pemanggil fungsi kita bahawa kita sudah bersedia untuk pergi 911 01:03:54,000 --> 01:03:58,000 kita katakan, "Hei, ini adalah benar." 912 01:03:58,000 --> 01:04:00,000 Bagaimana kita akan berbuat demikian, Kevin? 913 01:04:00,000 --> 01:04:02,000 Anda mengangguk-angguk kepala anda. >> [Kevin] Tambah penyata yang benar. 914 01:04:02,000 --> 01:04:06,000 [Nate] Tepat sekali, pulangan benar. 915 01:04:06,000 --> 01:04:12,000 Sekarang, jika ia tidak sama, bagaimana kita akan melihat pada separuh kiri? 916 01:04:12,000 --> 01:04:16,000 Apa-apa idea? 917 01:04:16,000 --> 01:04:18,000 Stella, apa-apa idea? 918 01:04:18,000 --> 01:04:21,000 Anda perlu menetapkan kedudukan baru untuk akhir. 919 01:04:21,000 --> 01:04:23,000 Yeah. 920 01:04:23,000 --> 01:04:29,000 Jadi yang perlu kita lakukan kedudukan titik tengah akhir. 921 01:04:29,000 --> 01:04:33,000 Besar. 922 01:04:33,000 --> 01:04:36,000 Kita perlu menetapkan posisi baru untuk akhir 923 01:04:36,000 --> 01:04:38,000 untuk melihat separuh kiri. 924 01:04:38,000 --> 01:04:41,000 Ini adalah apa yang kita bercakap tentang sebelum mana 925 01:04:41,000 --> 01:04:44,000 Saya sentiasa akan kembali ke contoh ini. 926 01:04:44,000 --> 01:04:50,000 Saya telah bermula di sini, dan kemudian saya mempunyai akhir semua cara di sini. 927 01:04:50,000 --> 01:04:53,000 >> Sekali lagi, jika kita sedang mencari selama 15, dan titik tengah kami adalah pada 16, 928 01:04:53,000 --> 01:04:56,000 dan kita menyedari, "Alamak, 16 adalah lebih besar. 929 01:04:56,000 --> 01:04:59,000 Kami mahu bergerak ke separuh kiri. " 930 01:04:59,000 --> 01:05:02,000 Kami kemudian akan bergerak akhir kepada 15, 931 01:05:02,000 --> 01:05:06,000 dan kita berbuat demikian dengan mengambil salah satu dari titik tengah 932 01:05:06,000 --> 01:05:09,000 dan menetapkan bahawa sebagai akhir baru kami. 933 01:05:09,000 --> 01:05:12,000 Begitu juga, jika kita mahu melihat separuh betul, bagaimana kita akan berbuat demikian? 934 01:05:12,000 --> 01:05:14,000 Adakah anda mempunyai idea? 935 01:05:14,000 --> 01:05:22,000 [Pelajar] Anda hanya menetapkan mula titik + 1. 936 01:05:22,000 --> 01:05:24,000 [Nate] Great. 937 01:05:24,000 --> 01:05:29,000 Dan sekarang dalam kes yang kita tidak mencari apa-apa, 938 01:05:29,000 --> 01:05:32,000 adakah itu mendapat penjagaan yang diambil untuk kita? 939 01:05:32,000 --> 01:05:36,000 Daniel, adakah itu dijaga untuk kita? 940 01:05:36,000 --> 01:05:38,000 [Daniel] No 941 01:05:38,000 --> 01:05:40,000 [Nate] Jika kita membuat ia melalui pelbagai keseluruhan dan kami tidak menjumpai apa-apa, 942 01:05:40,000 --> 01:05:42,000 mana yang akan dijaga, atau kita harus menjaga ia? 943 01:05:42,000 --> 01:05:44,000 [Daniel] keadaan sementara. 944 01:05:44,000 --> 01:05:48,000 [Nate] Ya, keadaan sementara, tepat. 945 01:05:48,000 --> 01:05:51,000 Ia akan menjaga melalui pelbagai keseluruhan jika kita tidak menjumpai apa-apa. 946 01:05:51,000 --> 01:05:53,000 Ini gelung sementara akan berakhir. 947 01:05:53,000 --> 01:05:56,000 Kami tidak akan mengalami keadaan ini, 948 01:05:56,000 --> 01:06:03,000 dan kita boleh kembali palsu. 949 01:06:03,000 --> 01:06:10,000 Kami juga boleh meninggalkan ini jika di sini seperti ini 950 01:06:10,000 --> 01:06:14,000 kerana jika ini jika pernyataan itu adalah benar, 951 01:06:14,000 --> 01:06:16,000 dan fungsi kami akan kembali, 952 01:06:16,000 --> 01:06:21,000 dan supaya kami akan asasnya membatalkan fungsi ini pada ketika ini 953 01:06:21,000 --> 01:06:24,000 apabila kita kembali benar. 954 01:06:24,000 --> 01:06:28,000 Tetapi apa yang berlaku dengan struktur ini di sini? 955 01:06:28,000 --> 01:06:34,000 Ini akan berfungsi sepenuhnya, atau terdapat beberapa kecacatan logik di sana? 956 01:06:34,000 --> 01:06:37,000 >> Terdapat beberapa kesilapan logik di sana, dengan cara ia ditubuhkan. 957 01:06:37,000 --> 01:06:40,000 Apakah ia mungkin? 958 01:06:40,000 --> 01:06:43,000 [Pelajar] Mengapa anda perlu - dan + 1s? 959 01:06:43,000 --> 01:06:47,000 Yang menetapkan pelbagai kami sehingga menjadi separuh baru kami kiri dan separuh kanan. 960 01:06:47,000 --> 01:06:51,000 [Pelajar] Tetapi mengapa tidak boleh anda lakukan ia tanpa - 1s dan + 1s? 961 01:06:51,000 --> 01:06:53,000 [Nate] Kita boleh menetapkan ia sama dengan titik tengah? 962 01:06:53,000 --> 01:07:04,000 Apa yang mungkin bermasalah tentang itu? 963 01:07:04,000 --> 01:07:08,000 [Pelajar] Saya rasa ia adalah tidak cekap kerana anda memeriksa nilai yang sudah diperiksa. 964 01:07:08,000 --> 01:07:11,000 [Nate] Tepat sekali, jadi Sam benar-benar betul. 965 01:07:11,000 --> 01:07:15,000 Jika anda menetapkan akhir dan mula sama dengan titik tengah 966 01:07:15,000 --> 01:07:18,000 bukan - 1 dan + 1 reflectively, 967 01:07:18,000 --> 01:07:22,000 pada satu ketika di masa depan kita akan berakhir sehingga memeriksa titik tengah lagi. 968 01:07:22,000 --> 01:07:26,000 [Pelajar] Saya memulakan pset yang, dan kemudian saya mempunyai sesuatu seperti itu 969 01:07:26,000 --> 01:07:30,000 di mana saya terlupa 1 +, dan ia mendapat terperangkap dalam gelung tak terhingga. 970 01:07:30,000 --> 01:07:34,000 Betul, kerana pada satu ketika anda tidak akan mendapat bermula dan berakhir 971 01:07:34,000 --> 01:07:39,000 sebenarnya bertindih. 972 01:07:39,000 --> 01:07:41,000 Sejuk. 973 01:07:41,000 --> 01:07:44,000 Ada satu lagi kecacatan logik, dan itu adalah bahawa ini pasti harus 974 01:07:44,000 --> 01:07:48,000 lain jika. 975 01:07:48,000 --> 01:07:55,000 Mengapa yang mungkin? 976 01:07:55,000 --> 01:07:59,000 >> Sebabnya ialah jika ia tidak lain jika-adakah anda melihat ia, Kevin? 977 01:07:59,000 --> 01:08:02,000 [Kevin] Ya, kerana anda menukar titik akhir. 978 01:08:02,000 --> 01:08:05,000 [Nate] Tepat sekali. 979 01:08:05,000 --> 01:08:07,000 Kami mengubah titik akhir, 980 01:08:07,000 --> 01:08:12,000 dan jika ia ditulis seperti ini-we'll membuat ruang antara- 981 01:08:12,000 --> 01:08:14,000 ia akan menyemak kes ini. 982 01:08:14,000 --> 01:08:18,000 Kes ini, jika ia berjaya, akan membatalkan fungsi. 983 01:08:18,000 --> 01:08:21,000 Kemudian ia akan menyemak kes ini seterusnya, 984 01:08:21,000 --> 01:08:24,000 dan jika ini berjaya, ia akan melaraskan titik akhir, 985 01:08:24,000 --> 01:08:28,000 dan kemudian ia akan terus dan memeriksa kes ini. 986 01:08:28,000 --> 01:08:31,000 Tetapi pada masa ini, kita tidak mahu ia terus menyemak. 987 01:08:31,000 --> 01:08:35,000 Mujurlah, kita tidak menetapkan semula titik tengah di sini, 988 01:08:35,000 --> 01:08:39,000 dan kita tahu bahawa kes ini tidak akan berjaya. 989 01:08:39,000 --> 01:08:44,000 Tetapi kita pasti mahu meletakkan lain jika di sana 990 01:08:44,000 --> 01:08:48,000 walaupun yang mungkin dalam kes ini 991 01:08:48,000 --> 01:08:52,000 kerana kita tidak menyesuaikan titik tengah, yang akan membuat perbezaan? 992 01:08:52,000 --> 01:08:54,000 Tidak, kerana kes-kes ini adalah semua eksklusif. 993 01:08:54,000 --> 01:08:58,000 Sekali lagi, buruk saya. 994 01:08:58,000 --> 01:09:01,000 Kami tidak, saya fikir, perlu lain ini jika. 995 01:09:01,000 --> 01:09:05,000 Kita boleh mencubanya dan jalankan ia dan lihat apa yang berlaku. 996 01:09:05,000 --> 01:09:08,000 Bangunan, ralat berlaku. 997 01:09:08,000 --> 01:09:12,000 Ia mungkin kerana saya meninggalkan ini dan b e di sini. 998 01:09:12,000 --> 01:09:14,000 Adakah saya mempunyai apa-apa lagi sehingga mereka di atas? 999 01:09:14,000 --> 01:09:16,000 Ia tidak kelihatan seperti ia. 1000 01:09:16,000 --> 01:09:20,000 Kami zum keluar, membina, 1001 01:09:20,000 --> 01:09:24,000 sana ia pergi, jadi sekarang jika kita mencari 15, 1002 01:09:24,000 --> 01:09:28,000 ya. 1003 01:09:28,000 --> 01:09:30,000 Biar saya zum masuk 1004 01:09:30,000 --> 01:09:33,000 15, ya. Kita boleh berjalan lagi. 1005 01:09:33,000 --> 01:09:36,000 Memuat naik kod sumber, bangunan, berlari. 1006 01:09:36,000 --> 01:09:41,000 Kita boleh mencari sesuatu seperti 13, 1007 01:09:41,000 --> 01:09:45,000 dan kita tidak mendapat apa-apa yang mencetak, jadi ia tidak mencari untuk kita. 1008 01:09:45,000 --> 01:09:51,000 Itu yang besar, kerana ia bukan dalam senarai kami. 1009 01:09:51,000 --> 01:09:53,000 >> Kita kini berada di luar masa. 1010 01:09:53,000 --> 01:09:55,000 Itu akan menjadi untuk minggu ini. 1011 01:09:55,000 --> 01:10:00,000 Terima kasih kerana menyertai, dan melihat anda kemudian. 1012 01:10:00,000 --> 01:10:02,000 >> [CS50.TV]