1 00:00:00,000 --> 00:00:10,982 2 00:00:10,982 --> 00:00:11,940 DAVID Malan: Baiklah. 3 00:00:11,940 --> 00:00:16,470 Jadi ini adalah CS50, dan ini adalah sekarang awal minggu ketiga. 4 00:00:16,470 --> 00:00:19,960 >> Jadi sampai sekarang, kami telah telah menulis program di C 5 00:00:19,960 --> 00:00:23,210 yang terlihat sedikit sesuatu seperti ini di sini. 6 00:00:23,210 --> 00:00:25,470 Jadi kita punya beberapa tajam termasuk di bagian atas. 7 00:00:25,470 --> 00:00:28,490 Kami punya int, utama, batal, dan maka sesuatu untuk dilakukan di tengah, 8 00:00:28,490 --> 00:00:30,590 beberapa sedikit kode di dalam fungsi tersebut. 9 00:00:30,590 --> 00:00:34,170 Tapi kunci telah menjadi fakta bahwa kami telah mengatakan kekosongan di sini. 10 00:00:34,170 --> 00:00:39,320 Jadi batal, sepanjang waktu ini, menspesifikasikan bahwa program ini, ketika dijalankan, 11 00:00:39,320 --> 00:00:41,300 hanya bisa dijalankan melalui namanya. 12 00:00:41,300 --> 00:00:46,330 Anda tidak dapat mengetikkan kata-kata atau angka setelah nama program ketika 13 00:00:46,330 --> 00:00:46,830 menjalankannya. 14 00:00:46,830 --> 00:00:51,200 Jadi, misalnya, jika program yang dikompilasi ke sebuah file yang bernama halo, 15 00:00:51,200 --> 00:00:53,480 Anda bisa melakukan ./hello, tapi hanya itu. 16 00:00:53,480 --> 00:00:56,750 >> Satu-satunya cara yang Anda bisa memberikan masukan kepada program ini 17 00:00:56,750 --> 00:00:57,960 adalah dengan memanggil fungsi. 18 00:00:57,960 --> 00:00:59,790 Misalnya, fungsi apa kita telah menggunakan sejauh ini 19 00:00:59,790 --> 00:01:00,950 untuk mendapatkan input dari user? 20 00:01:00,950 --> 00:01:02,117 >> AUDIENCE: Dapatkan tali. 21 00:01:02,117 --> 00:01:04,700 DAVID Malan: Untuk mendapatkan tali, atau mendapatkan int, atau Anda pernah melihat orang lain, 22 00:01:04,700 --> 00:01:07,630 bahkan jika Anda belum pernah menggunakan mereka belum, seperti mendapatkan panjang, panjang dan sejenisnya. 23 00:01:07,630 --> 00:01:09,380 Tapi misalkan kita benar-benar ingin memulai 24 00:01:09,380 --> 00:01:12,760 menulis program yang sedikit lebih serbaguna, dan, terus terang, sedikit lebih 25 00:01:12,760 --> 00:01:15,090 seperti perintah yang Anda sudah telah mendapatkan, mudah-mudahan, 26 00:01:15,090 --> 00:01:16,550 sedikit terbiasa. 27 00:01:16,550 --> 00:01:18,560 Seperti cd ruang Dropbox. 28 00:01:18,560 --> 00:01:20,800 Ini, tentu saja, perubahan direktori Anda, dengan asumsi 29 00:01:20,800 --> 00:01:23,590 Anda berada di rumah John Harvard direktori, ke folder Dropbox Anda. 30 00:01:23,590 --> 00:01:27,380 Sementara itu, perintah seperti ini menciptakan direktori baru bernama pset2, 31 00:01:27,380 --> 00:01:30,290 Anda mungkin sudah atau akan segera untuk masalah mengatur dua. 32 00:01:30,290 --> 00:01:33,970 Membuat Hello, tentu saja, adalah perintah yang membangun sebuah program yang disebut halo 33 00:01:33,970 --> 00:01:35,770 dari sebuah file yang bernama halo dot c. 34 00:01:35,770 --> 00:01:39,140 Dan di masing-masing kasus, sekarang, kami sudah 35 00:01:39,140 --> 00:01:43,620 memberikan argumen pada apa yang disebut baris perintah, prompt berkedip, 36 00:01:43,620 --> 00:01:48,540 sehingga membuat yang tahu apa yang harus membangun, dan sebagainya mkdir yang tahu apa folder untuk membuat, 37 00:01:48,540 --> 00:01:51,110 dan begitu cd yang tahu di mana Anda ingin pergi. 38 00:01:51,110 --> 00:01:54,720 Tapi sampai sekarang, kami selalu mengatakan yang utama, fungsi default Anda, 39 00:01:54,720 --> 00:01:58,500 memiliki ekspresi kosong dalam kurung tersebut, 40 00:01:58,500 --> 00:02:01,250 yang berarti bahwa tidak bisa mengambil argumen. 41 00:02:01,250 --> 00:02:03,240 >> Jadi mulai hari ini, apa yang kita lakukan 42 00:02:03,240 --> 00:02:06,270 adalah, kita akan mulai hal pendukung seperti ini bahkan. 43 00:02:06,270 --> 00:02:08,990 Bahkan, dalam hal ini, yang Anda tidak biasanya mengetik secara manual, 44 00:02:08,990 --> 00:02:11,130 Membuat telah melakukan hal ini bagi kita, tidak ada 45 00:02:11,130 --> 00:02:15,840 satu tapi satu, dua, tiga tambahan string setelah program bernama 46 00:02:15,840 --> 00:02:16,850 dentang. 47 00:02:16,850 --> 00:02:18,240 Jadi bagaimana kita mencapai hal ini? 48 00:02:18,240 --> 00:02:20,260 >> Nah, mulai hari ini, dalam kasus di mana kita ingin 49 00:02:20,260 --> 00:02:22,855 untuk memberikan masukan melalui disebut baris perintah, 50 00:02:22,855 --> 00:02:24,980 kita akan mulai menambahkan di sini apa yang ada di yellow-- 51 00:02:24,980 --> 00:02:30,520 menggantikan kekosongan dengan int argc koma String argv braket terbuka braket dekat. 52 00:02:30,520 --> 00:02:32,520 Sekarang ini adalah menarik untuk beberapa alasan. 53 00:02:32,520 --> 00:02:35,690 Satu, itu akan membiarkan kita menulis program yang sedikit lebih dinamis. 54 00:02:35,690 --> 00:02:37,570 Tapi, lebih compellingly, itu akan membuka 55 00:02:37,570 --> 00:02:40,340 sekarang percakapan untuk array apa yang bisa benar-benar 56 00:02:40,340 --> 00:02:43,300 digunakan, tali apa benar-benar di bawah tenda, 57 00:02:43,300 --> 00:02:47,320 sampai minggu depan ketika kita mulai menyelam bahkan lebih dalam bagaimana mesin adalah 58 00:02:47,320 --> 00:02:48,590 membuat semua pekerjaan hal ini. 59 00:02:48,590 --> 00:02:51,920 Tapi untuk saat ini, mari kita menggambar, mungkin, gambar. 60 00:02:51,920 --> 00:02:54,950 >> Ketika Anda menulis sebuah program dengan main dinyatakan 61 00:02:54,950 --> 00:02:58,810 dengan cara ini, seperti yang utama membutuhkan dua argumen, int 62 00:02:58,810 --> 00:03:03,233 dan-- apa tipe data adalah argumen kedua? 63 00:03:03,233 --> 00:03:04,529 >> AUDIENCE: Array. 64 00:03:04,529 --> 00:03:05,320 DAVID Malan: Array. 65 00:03:05,320 --> 00:03:09,170 Sehingga terlihat sekilas seperti itu string, tapi perhatikan tanda kurung siku. 66 00:03:09,170 --> 00:03:12,760 Ingat terakhir kali kami memperkenalkan gagasan array. 67 00:03:12,760 --> 00:03:16,210 Dan array menggunakan tanda kurung siku dalam beberapa konteks. 68 00:03:16,210 --> 00:03:19,160 Anda mungkin menggunakan alun-alun kurung untuk pergi ke array 69 00:03:19,160 --> 00:03:22,710 dan mendapatkan elemen tertentu, seperti braket 0 atau 1 atau bracket bracket 2. 70 00:03:22,710 --> 00:03:25,500 Tapi kami melihat, jika sebentar, pekan lalu bahwa Anda juga 71 00:03:25,500 --> 00:03:28,790 menggunakan ini tanda kurung siku untuk menyatakan ukuran dari array, 72 00:03:28,790 --> 00:03:31,790 jika Anda tahu sebelumnya berapa banyak int atau berapa banyak string atau apa pun yang Anda 73 00:03:31,790 --> 00:03:32,630 benar-benar ingin. 74 00:03:32,630 --> 00:03:34,790 Jadi ternyata ada dunia konteks ketiga di sini 75 00:03:34,790 --> 00:03:37,890 yang tidak memiliki nomor di dalam dari tanda kurung. 76 00:03:37,890 --> 00:03:41,920 Bila Anda menetapkan, seperti yang saya miliki di sini, nama sesuatu seperti argv, 77 00:03:41,920 --> 00:03:44,550 yang hanya cara mewah mengatakan argumen vektor, yang 78 00:03:44,550 --> 00:03:47,750 adalah cara mewah lain mengatakan berbagai argumen, 79 00:03:47,750 --> 00:03:50,870 braket terbuka braket dekat hanya berarti bahwa Anda tidak selalu 80 00:03:50,870 --> 00:03:52,960 tahu sebelumnya seberapa besar array akan menjadi, 81 00:03:52,960 --> 00:03:55,070 tapi kau tahu itu akan menjadi sebuah array. 82 00:03:55,070 --> 00:03:57,320 Jadi, jika Anda tidak tahu nomor tidak meletakkannya di sana, 83 00:03:57,320 --> 00:04:01,160 untuk braket terbuka braket dekat berarti bahwa argv bukan string, 84 00:04:01,160 --> 00:04:03,124 tapi sebuah array dari string. 85 00:04:03,124 --> 00:04:05,040 Jadi sintaksis, jika Anda berpikir kembali minggu lalu, 86 00:04:05,040 --> 00:04:09,460 itu sangat mirip dengan mengatakan sesuatu seperti int usia braket terbuka, 87 00:04:09,460 --> 00:04:10,984 dan kemudian sesuatu setelahnya. 88 00:04:10,984 --> 00:04:12,150 Jadi, apa ini terlihat seperti? 89 00:04:12,150 --> 00:04:13,399 Mari kita benar-benar menggambar. 90 00:04:13,399 --> 00:04:18,756 Jadi, ketika Anda menjalankan program ini dengan Main setelah dua argumen didefinisikan di dalam 91 00:04:18,756 --> 00:04:21,339 mereka kurung, Anda dasarnya memiliki minimal dua potongan 92 00:04:21,339 --> 00:04:23,560 memori diberikan kepada Anda di bawah tenda. 93 00:04:23,560 --> 00:04:26,550 Satu, karena aku akan menarik sebagai persegi panjang ini, akan disebut argc. 94 00:04:26,550 --> 00:04:30,645 Dan hanya sebagai rekap cepat, apa jenis data argc? 95 00:04:30,645 --> 00:04:31,270 Jadi itu adalah int. 96 00:04:31,270 --> 00:04:33,480 Jadi nomor akan untuk pergi secara bergiliran argc-- 97 00:04:33,480 --> 00:04:35,660 bahwa singkatan hitungan argumen. 98 00:04:35,660 --> 00:04:38,887 Sementara itu, saya sudah ditarik argv sebagai array. 99 00:04:38,887 --> 00:04:40,970 Dan aku tidak benar-benar tahu berapa lama itu akan menjadi, 100 00:04:40,970 --> 00:04:42,470 jadi untuk keperluan hari ini dot dot dot. 101 00:04:42,470 --> 00:04:43,636 Mungkin mendapatkan beberapa panjang. 102 00:04:43,636 --> 00:04:45,640 Tapi aku sudah digambarkan di sini setidaknya empat persegi panjang. 103 00:04:45,640 --> 00:04:50,970 Jadi argv sepotong memori yang menyimpan String string string dot dot dot, 104 00:04:50,970 --> 00:04:53,950 dan argc adalah salah satu potongan memori untuk integer. 105 00:04:53,950 --> 00:04:55,710 >> Jadi sekarang, mari kita menjadi sedikit lebih tepat. 106 00:04:55,710 --> 00:04:59,200 Jika, ketika saya memiliki string dalam array ini, disebut 107 00:04:59,200 --> 00:05:03,290 argv, saya ingin mendapatkan mereka individual, seperti minggu lalu, 108 00:05:03,290 --> 00:05:05,670 kita akan menggunakan notasi seperti argv braket 0 109 00:05:05,670 --> 00:05:07,650 untuk mendapatkan hal pertama array. 110 00:05:07,650 --> 00:05:10,440 Argv braket 1 untuk mendapatkan Hal kedua, dan sebagainya. 111 00:05:10,440 --> 00:05:14,597 Kuncinya di sini adalah kita masih 0 indexed-- kami masih menghitung dari 0. 112 00:05:14,597 --> 00:05:16,430 Jadi sekarang mari kita benar-benar memasukkan sesuatu ke dalam ini. 113 00:05:16,430 --> 00:05:21,670 Jika saya harus mengkompilasi sebuah program yang disebut Halo dari sebuah file yang bernama halo dot c, 114 00:05:21,670 --> 00:05:24,340 dan kemudian saya menjalankan program yang dengan dot slash halo, 115 00:05:24,340 --> 00:05:28,380 apa komputer saya, laptop saya, terlihat seperti di bawah tenda 116 00:05:28,380 --> 00:05:31,300 saat saya menjalankan dot slash Halo dan tekan Enter? 117 00:05:31,300 --> 00:05:33,500 Nah, ini mungkin apa yang bisa kita jelaskan 118 00:05:33,500 --> 00:05:37,010 sebagai isi komputer Anda memori, atau Memory RAM-- Random Access. 119 00:05:37,010 --> 00:05:40,330 Dengan kata lain, komputer, entah bagaimana untuk Anda ajaib, 120 00:05:40,330 --> 00:05:45,360 menempatkan nomor 1 di argc, AKA argcount, dan menempatkan harfiah string 121 00:05:45,360 --> 00:05:48,200 ./hello di argv braket 0. 122 00:05:48,200 --> 00:05:51,750 Aku tidak tahu, terus terang, apa yang di argv braket 1 atau 2 atau 3, 123 00:05:51,750 --> 00:05:55,550 karena jika pengguna belum mengetik apa-apa selain ./hello, 124 00:05:55,550 --> 00:05:58,550 kita akan berasumsi bahwa ini adalah nilai-nilai sampah yang paling mungkin, 125 00:05:58,550 --> 00:05:59,700 sehingga untuk berbicara. 126 00:05:59,700 --> 00:06:02,650 Mereka potongan memori ada, tapi itu tidak sampai kepada kami 127 00:06:02,650 --> 00:06:05,710 untuk melihat mereka, karena argcount hanya satu. 128 00:06:05,710 --> 00:06:07,870 >> Sekarang, sementara itu, jika saya menulis menjalankan program lain, 129 00:06:07,870 --> 00:06:12,250 cd, yang lebih tepat perintah, dalam berkedip ruang cd prompt-- Anda 130 00:06:12,250 --> 00:06:17,200 Dropbox-- ketika saya menjalankan itu, efektif, ketika program cd dijalankan, argc, 131 00:06:17,200 --> 00:06:22,270 dalam memori komputer saya, adalah untuk paling singkat kedua nomor 2. 132 00:06:22,270 --> 00:06:25,936 Dan kemudian argv braket o memiliki cd, argv braket 1 memiliki Dropbox, 133 00:06:25,936 --> 00:06:28,560 dan kemudian tentu saja perintah selesai, sehingga semua memori ini 134 00:06:28,560 --> 00:06:30,420 dasarnya hilang dan digunakan untuk sesuatu yang lain. 135 00:06:30,420 --> 00:06:32,270 Dan itulah mengapa saya mengatakan hanya sepersekian detik. 136 00:06:32,270 --> 00:06:35,720 >> Sementara itu, jika kita melakukan mkdir pset2, gambar terlihat hampir sama, 137 00:06:35,720 --> 00:06:37,900 tapi dengan string yang berbeda di dalam argv. 138 00:06:37,900 --> 00:06:42,570 Jika saya melakukan dentang dasbor halo halo dot c, ide yang sama. 139 00:06:42,570 --> 00:06:47,060 Barang lebih banyak diisi untuk argv, dan argc, tentu saja, adalah 4. 140 00:06:47,060 --> 00:06:49,150 Jadi dengan kata lain, meskipun array ini 141 00:06:49,150 --> 00:06:52,950 mungkin dot dot dot, beberapa panjang variabel, sehingga untuk berbicara, 142 00:06:52,950 --> 00:06:56,720 Anda selalu tahu di mana akhir itu adalah, karena argc akan memberitahu Anda 143 00:06:56,720 --> 00:07:00,120 pada titik apa Anda harus berhenti melihat unsur-unsur dalam argv. 144 00:07:00,120 --> 00:07:03,660 Anda hanya dapat melihat empat total dalam hal ini. 145 00:07:03,660 --> 00:07:06,600 >> Jadi mari kita sekarang kita lihat, mungkin, sebuah program sederhana. 146 00:07:06,600 --> 00:07:09,070 Salah satu yang baru saja menyapa untuk seseorang seperti Zamyla. 147 00:07:09,070 --> 00:07:12,620 Jadi saya mengklaim saya akan menulis sebuah program hanya dalam beberapa saat melalui yang saya bisa lakukan 148 00:07:12,620 --> 00:07:16,670 ./hello ruang Zamyla, dan kemudian saya ingin program saya untuk mencetak sesuatu 149 00:07:16,670 --> 00:07:18,520 super sederhana seperti "halo, Zamyla." 150 00:07:18,520 --> 00:07:20,100 Sekarang di masa lalu kami telah digunakan GetString. 151 00:07:20,100 --> 00:07:22,850 Jadi di masa lalu, bahkan jika Anda baru untuk pemrograman, 152 00:07:22,850 --> 00:07:27,180 kemungkinan besar Anda bisa menyiapkan program yang menggunakan GetString 153 00:07:27,180 --> 00:07:29,390 dan kemudian menggunakan printf untuk menyapa Zamyla. 154 00:07:29,390 --> 00:07:31,290 Tapi mari kita tidak menggunakan getString saat ini. 155 00:07:31,290 --> 00:07:37,510 Biarkan aku malah pergi ke Appliant dan sertakan standar I O dot h. 156 00:07:37,510 --> 00:07:41,160 Biarkan aku juga mencakup CS50 dot h. 157 00:07:41,160 --> 00:07:44,730 Sekarang int utama, dan sekarang aku tidak akan melakukan batal hari ini. 158 00:07:44,730 --> 00:07:51,200 Sebaliknya, aku akan melakukan int argc String argv braket terbuka braket dekat, 159 00:07:51,200 --> 00:07:52,640 tidak menentukan nomor. 160 00:07:52,640 --> 00:07:54,644 Dan disebut sekarang di sini adalah saya dapat dilakukan. 161 00:07:54,644 --> 00:07:57,560 Apa yang akan saya lakukan sekarang adalah, aku akan melakukan sedikit lompatan iman, 162 00:07:57,560 --> 00:08:00,560 Aku akan menganggap bahwa pengguna akan menggunakan program ini dengan benar, 163 00:08:00,560 --> 00:08:04,980 dan aku hanya akan melakukan printf halo,% sn. 164 00:08:04,980 --> 00:08:06,630 Jadi tidak ada yang baru di sana. 165 00:08:06,630 --> 00:08:11,470 Tapi aku ingin sekarang menempatkan kata apapun jenis pengguna setelah nama program. 166 00:08:11,470 --> 00:08:16,970 Jadi jika saya melakukan ruang ./hello Zamyla, saya ingin entah bagaimana pemrograman akses 167 00:08:16,970 --> 00:08:20,870 mengutip tanda kutip "Zamyla." jadi saya bisa masuk ke vektor argumen saya, 168 00:08:20,870 --> 00:08:25,980 array saya string, dan jika perintah, lagi, adalah ruang ./hello Zamyla, 169 00:08:25,980 --> 00:08:29,340 nomor berapa yang saya inginkan untuk dimasukkan ke dalam argv sini? 170 00:08:29,340 --> 00:08:29,840 AUDIENCE: 1. 171 00:08:29,840 --> 00:08:32,355 DAVID Malan: 1, karena braket 0 ternyata 172 00:08:32,355 --> 00:08:34,230 akan menjadi nama program, seperti yang kita lihat. 173 00:08:34,230 --> 00:08:37,789 Jadi bracket 1 adalah kata pertama bahwa saya, pengguna, telah mengetik. 174 00:08:37,789 --> 00:08:39,559 Aku akan pergi ke depan dan menyimpan ini. 175 00:08:39,559 --> 00:08:42,830 Aku akan pergi ke folder saya di mana saya telah menempatkan file ini. 176 00:08:42,830 --> 00:08:44,920 Aku akan lakukan membuat halo 3. 177 00:08:44,920 --> 00:08:46,230 Comp IO OK. 178 00:08:46,230 --> 00:08:51,380 ./hello Zamyla Enter. 179 00:08:51,380 --> 00:08:54,480 Apa yang saya lakukan salah? 180 00:08:54,480 --> 00:08:57,270 Aku terperanjat diriku hanya sesaat di sana. 181 00:08:57,270 --> 00:08:58,230 Apa yang saya lakukan salah? 182 00:08:58,230 --> 00:08:59,220 >> AUDIENCE: Nama. 183 00:08:59,220 --> 00:09:01,767 >> DAVID Malan: File ini sebenarnya disebut hello3.c. 184 00:09:01,767 --> 00:09:03,850 Dan saya melakukan itu hanya untuk konsistensi, karena kita sudah 185 00:09:03,850 --> 00:09:06,550 memiliki hello.c dalam masa lalu dalam kode online. 186 00:09:06,550 --> 00:09:11,550 Jadi mari kita memperbaiki ./hello ini braket dasbor 3 Zamyla. 187 00:09:11,550 --> 00:09:12,370 Enter. 188 00:09:12,370 --> 00:09:14,030 Dan sekarang kita memiliki halo, Zamyla. 189 00:09:14,030 --> 00:09:17,650 Sementara itu, saya dapat mengubahnya ke menjadi Rob, atau benar-benar ada kata lain. 190 00:09:17,650 --> 00:09:19,230 >> Tapi mari kita mempertimbangkan kasus sudut. 191 00:09:19,230 --> 00:09:24,360 Apa yang Anda harapkan akan terjadi jika Saya tidak ketik nama siapa pun sama sekali? 192 00:09:24,360 --> 00:09:25,270 >> AUDIENCE: Error. 193 00:09:25,270 --> 00:09:27,300 >> DAVID Malan: Kesalahan dari beberapa macam, mungkin. 194 00:09:27,300 --> 00:09:28,200 Mari kita lihat. 195 00:09:28,200 --> 00:09:29,440 Enter. 196 00:09:29,440 --> 00:09:30,210 Null. 197 00:09:30,210 --> 00:09:33,870 Jadi printf sebenarnya menjadi sedikit pelindung dari kita 198 00:09:33,870 --> 00:09:38,131 di sini, dan benar-benar mencetak paren terbuka null, tetapi hal-hal yang lebih buruk bisa terjadi. 199 00:09:38,131 --> 00:09:40,130 Dan hanya untuk menunjukkan sesuatu yang Anda benar-benar 200 00:09:40,130 --> 00:09:42,800 tidak harus melakukan, mari kita pergi di di sini dan mulai mengaduk-aduk. 201 00:09:42,800 --> 00:09:43,300 Benar? 202 00:09:43,300 --> 00:09:46,410 Jika saya tahu bahwa gambar dalam memori pada dasarnya ini, 203 00:09:46,410 --> 00:09:52,660 argv braket 1 memiliki Zamyla, argv braket 0 memiliki ./hello, atau ./hello-3. 204 00:09:52,660 --> 00:09:55,400 Apa yang ada di braket 2? 205 00:09:55,400 --> 00:09:58,210 Jadi saya bisa menjawabnya pertanyaan sendiri, kan? 206 00:09:58,210 --> 00:10:00,460 Aku hanya dapat mengubah 1 ke 2. 207 00:10:00,460 --> 00:10:07,270 Saya sekarang bisa mengkompilasi ulang halo 3, ./hello3 Mari kita memperbesar dan tekan Enter. 208 00:10:07,270 --> 00:10:08,270 Whoops. 209 00:10:08,270 --> 00:10:10,660 Tidak ada tanda kutip. 210 00:10:10,660 --> 00:10:12,540 Menarik. 211 00:10:12,540 --> 00:10:15,530 Jadi itu agak dingin untuk lihat apa lagi yang di sini. 212 00:10:15,530 --> 00:10:17,130 >> Jadi apa lagi yang di dalam laptop saya? 213 00:10:17,130 --> 00:10:20,390 Mari kita simpan dengan braket 3. 214 00:10:20,390 --> 00:10:25,190 Membuat hello3, ./hello-3. 215 00:10:25,190 --> 00:10:26,500 Penasaran. 216 00:10:26,500 --> 00:10:30,560 Dan sekarang mari kita benar-benar bold-- 50. 217 00:10:30,560 --> 00:10:34,340 Jadi itu benar-benar menyelam dalam ke dalam memori komputer saya. 218 00:10:34,340 --> 00:10:35,930 50 indeks dalam. 219 00:10:35,930 --> 00:10:41,950 Jadi membuat halo 3 ./hello-3. 220 00:10:41,950 --> 00:10:42,680 Penasaran. 221 00:10:42,680 --> 00:10:44,660 Baiklah, sekarang aku hanya akan mendapatkan sembrono. 222 00:10:44,660 --> 00:10:47,331 Mari kita pergi ke 5.000. 223 00:10:47,331 --> 00:10:47,830 Baiklah. 224 00:10:47,830 --> 00:10:49,520 Jadi biarkan aku ulang. 225 00:10:49,520 --> 00:10:51,460 Membuat hello3, ./hello-3. 226 00:10:51,460 --> 00:10:55,780 227 00:10:55,780 --> 00:10:56,460 OK. 228 00:10:56,460 --> 00:10:59,250 Sekarang beberapa dari Anda, mungkin ada seperti bola lampu pergi. 229 00:10:59,250 --> 00:11:01,900 Berapa banyak dari Anda memiliki melihat pesan ini sebelumnya? 230 00:11:01,900 --> 00:11:03,440 OK. 231 00:11:03,440 --> 00:11:04,420 Jadi, mengapa? 232 00:11:04,420 --> 00:11:07,250 >> Odds are-- dan ada yang berbeda hal-hal yang dapat menyebabkan hal ini, 233 00:11:07,250 --> 00:11:09,730 dan jelas Anda berada di baik company-- kami jelas 234 00:11:09,730 --> 00:11:11,900 menyebabkan apa yang disebut kesalahan segmentasi. 235 00:11:11,900 --> 00:11:15,890 Dan cerita panjang pendek untuk hari ini, saya telah menyentuh segmen memori 236 00:11:15,890 --> 00:11:17,060 bahwa saya tidak seharusnya. 237 00:11:17,060 --> 00:11:19,970 Dimana segmen hanya berarti sepotong memori yang saya tidak seharusnya. 238 00:11:19,970 --> 00:11:25,530 Sekarang komputer menjamin bahwa jika saya menjalankan ./helloZamyla bahwa saya bisa menyentuh argv 239 00:11:25,530 --> 00:11:27,760 menjadi braket 0 dan argv braket 1. 240 00:11:27,760 --> 00:11:32,730 Tapi argc adalah nilai 2, yang berarti saya hanya allowed-- itu semacam kehormatan 241 00:11:32,730 --> 00:11:35,180 system-- menyentuh braket 0 dan braket 1. 242 00:11:35,180 --> 00:11:37,990 Jika saya pergi lebih jauh, ada benar-benar akan menjadi memori di sana. 243 00:11:37,990 --> 00:11:40,660 RAM saya ada secara fisik di komputer. 244 00:11:40,660 --> 00:11:42,080 Tapi siapa yang tahu apa yang ada? 245 00:11:42,080 --> 00:11:44,450 Memang, aku menjalankan beberapa program pada satu waktu. 246 00:11:44,450 --> 00:11:46,910 Saya mungkin memiliki seen-- jika saya tidak melakukan hal ini pada Appliant 247 00:11:46,910 --> 00:11:49,937 tetapi pada Mac saya atau PC-- saya mungkin memiliki melihat isi dari email. 248 00:11:49,937 --> 00:11:52,270 Aku mungkin telah melihat sekejap Pesan Saya baru saja dikirim. 249 00:11:52,270 --> 00:11:55,390 Apa pun yang mungkin berlama-lama di dalam memori 250 00:11:55,390 --> 00:11:59,180 bisa saja diakses dengan cara notasi braket ini sewenang-wenang persegi. 251 00:11:59,180 --> 00:12:02,850 Atau, lebih buruk lagi, Anda mungkin memiliki menemukan salah satu password saya 252 00:12:02,850 --> 00:12:05,859 bahwa saya baru-baru akan mengetik, bahwa Program telah disimpan dalam memori sehingga 253 00:12:05,859 --> 00:12:07,900 untuk mengotentikasi saya, dan maka hanya jenis meninggalkannya 254 00:12:07,900 --> 00:12:09,910 di RAM sampai aku keluar dari program itu. 255 00:12:09,910 --> 00:12:12,860 >> Dan memang, ini adalah salah satu bahaya dan satu kekuatan 256 00:12:12,860 --> 00:12:15,980 menggunakan bahasa seperti C. Anda memiliki akses tak terkekang 257 00:12:15,980 --> 00:12:18,860 untuk seluruh isi memori program, 258 00:12:18,860 --> 00:12:21,340 dan apa orang jahat bisa bahkan melakukan pada mereka cases-- 259 00:12:21,340 --> 00:12:23,807 terutama ketika kita sampai ke pemrograman web 260 00:12:23,807 --> 00:12:26,890 menjelang akhir semester, kita akan kembali topic-- ini menyodok sekitar, 261 00:12:26,890 --> 00:12:31,660 berpotensi, seseorang yang komputer memori dan menemukan hal-hal aneh seperti 262 00:12:31,660 --> 00:12:32,570 seperti yang kita lihat di sana. 263 00:12:32,570 --> 00:12:36,900 Atau bahkan lebih buruk lagi, password yang ia atau dia kemudian dapat digunakan untuk melakukan hal-hal buruk. 264 00:12:36,900 --> 00:12:40,240 >> Jadi jelas saya tidak seharusnya melakukan ini, karena hal-hal aneh mulai terjadi. 265 00:12:40,240 --> 00:12:42,310 Memang, ini adalah program yang menerjang. 266 00:12:42,310 --> 00:12:44,580 Ini akan menjadi setara Mac OS atau Windows 267 00:12:44,580 --> 00:12:46,770 sebuah jendela program hanya menghilang. 268 00:12:46,770 --> 00:12:48,300 Galat tak terduga terjadi. 269 00:12:48,300 --> 00:12:50,840 Dalam lingkungan baris perintah kita melihat sesuatu seperti ini. 270 00:12:50,840 --> 00:12:54,480 Tapi itulah sebabnya, yang aku hanya menyentuh memori yang bukan milik saya. 271 00:12:54,480 --> 00:12:57,090 >> Jadi mari kita membela melawan ini sedikit dengan cara yang berbeda 272 00:12:57,090 --> 00:12:59,010 dengan melihat program ini di sini. 273 00:12:59,010 --> 00:13:01,000 Jadi, sekali lagi, kerangka bahwa kita melihat earlier-- 274 00:13:01,000 --> 00:13:02,480 dan saya sudah disorot saat ini int. 275 00:13:02,480 --> 00:13:05,900 Dan selama ini utama memiliki memang kembali nilai. 276 00:13:05,900 --> 00:13:09,120 Meskipun di sebagian besar kuliah kami contoh kita tidak pernah digunakan 277 00:13:09,120 --> 00:13:10,990 kembali apa-apa di utama. 278 00:13:10,990 --> 00:13:13,710 Kami hanya menulis printf dekat penjepit keriting dan hanya itu. 279 00:13:13,710 --> 00:13:16,500 Tapi gratis, apa compiler telah melakukan untuk Anda, 280 00:13:16,500 --> 00:13:19,510 efektif, adalah kembali 0 untuk Anda. 281 00:13:19,510 --> 00:13:22,950 Ternyata out-- dan itu sedikit counterintuitive-- bahwa 0 adalah baik. 282 00:13:22,950 --> 00:13:24,690 Ini tidak berarti palsu per se. 283 00:13:24,690 --> 00:13:29,080 0 baik, dan setiap non-0 nilai, dunia telah memutuskan, 284 00:13:29,080 --> 00:13:30,619 dapat menandakan kesalahan. 285 00:13:30,619 --> 00:13:32,910 Jadi jika Anda pernah mengacaukan sesuatu pada komputer Anda, 286 00:13:32,910 --> 00:13:36,600 atau program baru saja meninggal pada Anda dan Anda sudah mendapatkan beberapa jendela yang keliru 287 00:13:36,600 --> 00:13:40,360 pada layar Anda, mengatakan kesalahan negatif 49 atau kesalahan 23-- 288 00:13:40,360 --> 00:13:44,170 beberapa value-- tampak sewenang-wenang yang karena programmer telah keras-kode 289 00:13:44,170 --> 00:13:49,370 nilai seperti negatif 49 atau positif 23 untuk mewakili sejumlah, berani mengatakan, 290 00:13:49,370 --> 00:13:53,340 dari 4 miliar hal yang mungkin yang mungkin salah dalam sebuah program. 291 00:13:53,340 --> 00:13:55,700 >> Jadi bagaimana mungkin saya mengambil keuntungan dari ini sendiri? 292 00:13:55,700 --> 00:13:58,970 Nah, biarkan aku membuka program yang saya tulis di muka, 293 00:13:58,970 --> 00:14:01,450 dan menyodok sekitar online yang disebut halo 4. 294 00:14:01,450 --> 00:14:05,650 Dan itu hampir identik, kecuali bahwa yang punya sedikit pengecekan error. 295 00:14:05,650 --> 00:14:09,660 Dalam hal ini, saya sudah kembali menyatakan utama sebagai mengambil dua argumen, 296 00:14:09,660 --> 00:14:13,180 tapi kali ini, on line 17, pemberitahuan Saya melakukan sedikit cek kewarasan. 297 00:14:13,180 --> 00:14:17,100 Saya memastikan bahwa argc sama sama 2. 298 00:14:17,100 --> 00:14:18,960 Karena jika demikian, itu berarti saya dapat dengan aman 299 00:14:18,960 --> 00:14:21,420 menyentuh tidak hanya braket 0, tapi braket 1. 300 00:14:21,420 --> 00:14:24,330 Dan aku pergi ke depan dan mencetak, dalam hal ini, Zamyla atau Rob 301 00:14:24,330 --> 00:14:26,020 atau kata apa pun yang saya mengetik. 302 00:14:26,020 --> 00:14:28,020 Dan sekarang hanya untuk mendapatkan sedikit lebih tepat, 303 00:14:28,020 --> 00:14:31,910 Aku akan kembali secara eksplisit 0 untuk menandakan semuanya baik-baik. 304 00:14:31,910 --> 00:14:33,300 Tidak ada hal buruk yang terjadi. 305 00:14:33,300 --> 00:14:38,590 >> Tapi dengan konvensi, saya akan kembali 1, atau terus terang non-0 nilai, 306 00:14:38,590 --> 00:14:40,160 jika ada yang tidak beres. 307 00:14:40,160 --> 00:14:43,270 Sekarang pengguna tidak akan benar-benar melihat apa yang terjadi. 308 00:14:43,270 --> 00:14:50,410 Memang jika saya pergi ke direktori ini, kita memperbesar dan jangan membuat halo 4, 309 00:14:50,410 --> 00:14:54,210 ./hello-4 Zamyla berperilaku seperti yang saya harapkan. 310 00:14:54,210 --> 00:14:58,570 Tapi kalau aku malah tidak mengetik apa-apa, sepertinya tidak ada yang terjadi, 311 00:14:58,570 --> 00:14:59,680 tetapi tidak crash. 312 00:14:59,680 --> 00:15:04,660 Dan jika saya bukan melakukan sesuatu seperti Rob adalah pengawas yang 313 00:15:04,660 --> 00:15:07,550 dalam berbagi Thayer-- Informasi sewenang-wenang. 314 00:15:07,550 --> 00:15:13,680 Tapi perhatikan, argv 1, 2, 3, 4, dan 5 sekarang harus ada dalam memori. 315 00:15:13,680 --> 00:15:16,540 Itu pun, tidak apa program saya mengharapkan, 316 00:15:16,540 --> 00:15:20,300 karena saya sudah memeriksa apakah argc sama sama dengan 2 atau tidak. 317 00:15:20,300 --> 00:15:22,140 Jadi aku kini membela terhadap ini. 318 00:15:22,140 --> 00:15:25,290 >> Sekarang, sebagai samping, kita yang programmer-- atau lebih tepatnya kita users-- yang 319 00:15:25,290 --> 00:15:29,670 tidak pernah melihat bahwa 0 atau 1 tapi menggunakan alat yang disebut Debugger, atau alat-alat lain, 320 00:15:29,670 --> 00:15:32,250 karena kami akan melihat sebelum panjang, Anda programmer 321 00:15:32,250 --> 00:15:36,590 benar-benar melihat apa yang mungkin menjadi terjadi di dalam program Anda. 322 00:15:36,590 --> 00:15:39,170 >> Jadi, pertanyaan tentang argc? 323 00:15:39,170 --> 00:15:40,873 Ya. 324 00:15:40,873 --> 00:15:45,292 >> AUDIENCE: Aku pernah melihat di mana mereka belum punya karakter, [Tak terdengar] 325 00:15:45,292 --> 00:15:49,669 hanya mengatakan tali bintang d, seperti karakter asterisk koma. 326 00:15:49,669 --> 00:15:50,710 Apakah mereka setara di sini? 327 00:15:50,710 --> 00:15:51,626 >> DAVID Malan: Mereka. 328 00:15:51,626 --> 00:15:55,080 Jadi pertanyaannya adalah, Anda memiliki program kadang-kadang terlihat 329 00:15:55,080 --> 00:15:57,270 seperti ini yang tidak mengatakan String argv braket 330 00:15:57,270 --> 00:16:01,015 tapi malah mengatakan sesuatu seperti char bintang argv braket. 331 00:16:01,015 --> 00:16:03,140 Dan bahkan ada yang lain varian yang mungkin Anda lihat. 332 00:16:03,140 --> 00:16:04,264 Mereka memang setara. 333 00:16:04,264 --> 00:16:06,240 Untuk saat ini, kami memiliki ini semacam roda pelatihan 334 00:16:06,240 --> 00:16:09,737 di dalam bentuk string dalam CS50 perpustakaan, tetapi hanya dalam waktu seminggu 335 00:16:09,737 --> 00:16:12,570 atau jadi kami akan menghapus bahwa obstruksi sama sekali dan benar-benar 336 00:16:12,570 --> 00:16:16,820 melihat apa char dan bintang , dan bagaimana mereka berhubungan dengan memori 337 00:16:16,820 --> 00:16:18,140 representasi yang lebih umum. 338 00:16:18,140 --> 00:16:19,540 Jadi kita akan kembali ke itu. 339 00:16:19,540 --> 00:16:21,540 >> Pertanyaan lain pada argv argc atau kita? 340 00:16:21,540 --> 00:16:22,397 Ya. 341 00:16:22,397 --> 00:16:24,438 AUDIENCE: Mengapa kembali kesalahan [Tak terdengar]? 342 00:16:24,438 --> 00:16:27,147 343 00:16:27,147 --> 00:16:29,230 DAVID Malan: Mengapa itu kembali kesalahan only-- oh! 344 00:16:29,230 --> 00:16:31,813 Dalam kasus sebelumnya, ketika kita yang futzing sekitar dengan memori, 345 00:16:31,813 --> 00:16:35,110 mengapa hanya kembali kesalahan ketika saya benar-benar mengetik jumlah yang besar? 346 00:16:35,110 --> 00:16:36,620 Jawaban singkatnya adalah, kita hanya beruntung. 347 00:16:36,620 --> 00:16:39,240 Secara umum, komputer mengalokasikan memori dalam potongan, 348 00:16:39,240 --> 00:16:42,900 dan itu memberi saya cukup bongkahan besar yang Aku berhasil lolos, tanpa diketahui, 349 00:16:42,900 --> 00:16:46,280 menyentuh braket 2, braket 3, braket 50, tapi begitu aku mendorong 350 00:16:46,280 --> 00:16:49,080 keberuntungan saya, saya melampaui batas-batas sepotong memori 351 00:16:49,080 --> 00:16:50,520 sistem operasi telah memberi saya. 352 00:16:50,520 --> 00:16:52,720 Dan saat itulah menjepit dan berkata, tidak. 353 00:16:52,720 --> 00:16:54,580 Kesalahan segmentasi. 354 00:16:54,580 --> 00:16:55,692 Ya. 355 00:16:55,692 --> 00:16:58,890 >> AUDIENCE: Bagaimana komputer tahu nilai argc? 356 00:16:58,890 --> 00:17:02,390 >> DAVID Malan: Bagaimana komputer mengetahui nilai argc? 357 00:17:02,390 --> 00:17:07,920 Ketika Anda menjalankan program, program yang, oleh sifat prompt berkedip, 358 00:17:07,920 --> 00:17:11,359 diserahkan array kata-kata yang diketik 359 00:17:11,359 --> 00:17:13,300 pada prompt, itu diketik pada prompt. 360 00:17:13,300 --> 00:17:16,569 Dan sehingga operasi sistem yang pada dasarnya 361 00:17:16,569 --> 00:17:20,329 Mempopulai argumen utama untuk Anda. 362 00:17:20,329 --> 00:17:22,829 Jadi itulah salah satu layanan yang Anda dapatkan, semacam diam-diam 363 00:17:22,829 --> 00:17:24,869 di bawah kap sebuah sistem operasi. 364 00:17:24,869 --> 00:17:27,118 Pertanyaan lain? 365 00:17:27,118 --> 00:17:27,618 Ya. 366 00:17:27,618 --> 00:17:29,787 >> AUDIENCE: Apa core dump artinya? 367 00:17:29,787 --> 00:17:31,370 DAVID Malan: Apa core dump artinya? 368 00:17:31,370 --> 00:17:32,950 Jadi itu adalah pertanyaan yang bagus. 369 00:17:32,950 --> 00:17:35,312 Dan biarkan aku kembali ke direktori ini di sini. 370 00:17:35,312 --> 00:17:37,270 Dan Anda akan melihat bahwa Aku punya file baru di sana. 371 00:17:37,270 --> 00:17:41,670 Ini memang disebut inti, dan itu sebenarnya file berukuran layak biasanya. 372 00:17:41,670 --> 00:17:45,300 Itu pada dasarnya adalah sebuah snapshot dari isi memori program saya 373 00:17:45,300 --> 00:17:46,902 atau RAM ketika jatuh. 374 00:17:46,902 --> 00:17:49,110 Dan ini akan berguna, berpotensi, diagnostik, 375 00:17:49,110 --> 00:17:52,850 setelah kami berbicara dalam kuliah masa depan dan bagian tentang debugging, 376 00:17:52,850 --> 00:17:55,730 karena Anda benar-benar dapat melakukan setara dengan otopsi digital 377 00:17:55,730 --> 00:18:00,300 pada file itu untuk membantu mencari tahu apa yang Anda lakukan salah dalam program Anda. 378 00:18:00,300 --> 00:18:01,220 Ya. 379 00:18:01,220 --> 00:18:04,450 >> AUDIENCE: Apakah argc perintah di sendiri, atau dapat Anda nama itu sesuatu? 380 00:18:04,450 --> 00:18:05,575 >> DAVID Malan: Pertanyaan yang bagus. 381 00:18:05,575 --> 00:18:08,040 Apakah argc perintah dalam dirinya sendiri, atau dapat Anda nama itu sesuatu? 382 00:18:08,040 --> 00:18:09,290 Hal ini jelas bukan perintah. 383 00:18:09,290 --> 00:18:13,500 Ini hanya variabel nama atau nama argumen ini, 384 00:18:13,500 --> 00:18:15,481 dan begitu benar-benar kita bisa menelepon foo ini, 385 00:18:15,481 --> 00:18:18,480 kita bisa menyebut bar ini, yang cenderung menjadi pergi-untuk kata-kata bahwa komputer 386 00:18:18,480 --> 00:18:19,860 ilmuwan pergi ke. 387 00:18:19,860 --> 00:18:22,820 Tapi dengan konvensi, kita menggunakan argc dan argv. 388 00:18:22,820 --> 00:18:25,360 Tapi itu hanya manusia konvensi, tidak lebih. 389 00:18:25,360 --> 00:18:25,860 Baiklah. 390 00:18:25,860 --> 00:18:28,140 Jadi ternyata, aku sudah menceritakan sedikit lie-- putih 391 00:18:28,140 --> 00:18:31,264 dan terus terang, di masa depan, Anda akan melihat kami telah berbohong putih lainnya. 392 00:18:31,264 --> 00:18:33,510 Tetapi untuk sekarang, kita akan untuk mengupas salah satunya. 393 00:18:33,510 --> 00:18:37,310 Dalam hal ini di sini ketika saya sebelumnya menjalankan program seperti ./hello atau ./hello-3 394 00:18:37,310 --> 00:18:42,780 Zamyla, kami memiliki isi saya memori komputer tampak kira-kira seperti 395 00:18:42,780 --> 00:18:43,280 ini. 396 00:18:43,280 --> 00:18:45,070 Tapi ingat apa string adalah. 397 00:18:45,070 --> 00:18:49,279 Apa yang kita katakan seminggu yang lalu apa string yang sebenarnya di bawah tenda? 398 00:18:49,279 --> 00:18:50,320 AUDIENCE: Array of chars. 399 00:18:50,320 --> 00:18:52,111 DAVID Malan: Ini adalah array dari karakter, kan? 400 00:18:52,111 --> 00:18:55,760 Jadi kita mungkin memiliki sebuah array string, namun, pada gilirannya, string 401 00:18:55,760 --> 00:18:57,150 adalah array dari karakter. 402 00:18:57,150 --> 00:19:00,010 Jadi jika saya benar-benar ingin menjadi anal ketika saya menggambar ini, 403 00:19:00,010 --> 00:19:03,290 Aku benar-benar harus menggambar sedikit lebih seperti ini, 404 00:19:03,290 --> 00:19:08,000 dimana di masing-masing indeks array argv saya, 405 00:19:08,000 --> 00:19:11,432 ada sendiri merupakan seluruh string itu sendiri adalah dalam array. 406 00:19:11,432 --> 00:19:13,140 Dan sekarang kebohongan putih kita mengatakan hari ini 407 00:19:13,140 --> 00:19:15,181 adalah bahwa gambar tidak terlihat cukup seperti ini. 408 00:19:15,181 --> 00:19:19,110 Bahkan, kotak kecil yang biasanya di luar persegi panjang besar 409 00:19:19,110 --> 00:19:19,610 ada. 410 00:19:19,610 --> 00:19:21,280 Tapi kita akan kembali ke sebelum lama. 411 00:19:21,280 --> 00:19:25,440 Tapi ini ./hello backslash 0, bahwa menjadi karakter khusus yang 412 00:19:25,440 --> 00:19:28,310 demarcates akhir string, dan kami punya satu lagi setelah 413 00:19:28,310 --> 00:19:29,360 Nama Zamyla ini. 414 00:19:29,360 --> 00:19:30,900 Jadi apa artinya ini? 415 00:19:30,900 --> 00:19:33,410 >> Nah, biarkan aku pergi ke depan dan membuka dua contoh lain 416 00:19:33,410 --> 00:19:35,220 yang tersedia secara online. 417 00:19:35,220 --> 00:19:40,590 Satu disebut argv1.c dan yang lainnya adalah argv2. 418 00:19:40,590 --> 00:19:44,260 Ini adalah program super sederhana yang berbeda dari program masa lalu 419 00:19:44,260 --> 00:19:47,260 dalam sekarang saya menggunakan argc dan argv di sini. 420 00:19:47,260 --> 00:19:54,300 Dan sekarang aku mengintegrasikan dengan untuk loop sejalan 18, dari i = 0 pada hingga argc. 421 00:19:54,300 --> 00:19:56,850 Dan apa yang akan saya lakukan dengan baris kode ini di sini? 422 00:19:56,850 --> 00:19:58,270 Dalam bahasa Inggris. 423 00:19:58,270 --> 00:20:00,510 Hal ini jelas menunjukkan penggunaan argc. 424 00:20:00,510 --> 00:20:03,670 Tapi dalam bahasa Inggris, apa ia lakukan jika saya menjalankan program ini? 425 00:20:03,670 --> 00:20:04,366 Ya? 426 00:20:04,366 --> 00:20:07,386 >> AUDIENCE: Ini akan mencetak Anda layar sebanyak yang Anda inginkan. 427 00:20:07,386 --> 00:20:08,260 DAVID Malan: Tepat. 428 00:20:08,260 --> 00:20:10,480 Kata Jadi apa pun yang saya ketik pada prompt, itu 429 00:20:10,480 --> 00:20:13,120 akan memuntahkan mereka pada saya satu per baris. 430 00:20:13,120 --> 00:20:14,370 Jadi mari kita pergi ke depan dan melakukannya. 431 00:20:14,370 --> 00:20:17,862 Biarkan aku pergi ke direktori saya dan melakukan membuat ./argv1 argv1. 432 00:20:17,862 --> 00:20:20,521 433 00:20:20,521 --> 00:20:21,770 Dan sekarang, mari kita tetap sederhana. 434 00:20:21,770 --> 00:20:23,834 Mari kita lakukan apa-apa pada awalnya. 435 00:20:23,834 --> 00:20:26,750 Hal itu mencetak satu hal, dan itu memang nama program, 436 00:20:26,750 --> 00:20:28,240 karena itulah dalam braket 0. 437 00:20:28,240 --> 00:20:33,290 Jika saya sekarang mengatakan foo, itu akan dilakukan kedua, dan jika saya mengatakan foo bar, 438 00:20:33,290 --> 00:20:35,580 itu akan mengatakan ketiga hal. 439 00:20:35,580 --> 00:20:37,740 Nah, itu agak menarik, mungkin. 440 00:20:37,740 --> 00:20:41,450 Tapi ingat argv yang adalah array dari string, 441 00:20:41,450 --> 00:20:45,960 tapi string adalah array dari karakter, sehingga kita bisa mengambil hal-hal takik 442 00:20:45,960 --> 00:20:48,560 dan menerapkan bahwa dasar logika dan membuat kode yang 443 00:20:48,560 --> 00:20:51,160 terlihat sedikit lebih samar, diakui. 444 00:20:51,160 --> 00:20:53,540 Tapi dengan memiliki bersarang lingkaran, sesuatu yang mirip 445 00:20:53,540 --> 00:20:57,030 dengan apa yang Anda ingat dari Mario, misalnya, jika Anda melakukannya dengan cara ini. 446 00:20:57,030 --> 00:21:00,380 >> Jadi sekarang melihat on line 19, aku lagi iterasi argumen saya, 447 00:21:00,380 --> 00:21:02,410 dari 0 pada hingga argc. 448 00:21:02,410 --> 00:21:05,510 Dan sekarang sejalan 21-- aku meminjam trik dari week-- lalu 449 00:21:05,510 --> 00:21:11,090 Saya memeriksa apa yang panjang argv braket i. 450 00:21:11,090 --> 00:21:12,920 Aku menyimpan jawabannya dalam n. 451 00:21:12,920 --> 00:21:18,230 Dan kemudian aku mengintegrasikan dari j sampai n, dimana j diinisialisasi ke 0. 452 00:21:18,230 --> 00:21:19,460 Jadi, konvensi untuk menghitung. 453 00:21:19,460 --> 00:21:22,335 Setelah Anda telah menggunakan i, jika Anda memiliki loop bersarang, Anda tidak dapat menggunakan i lagi, 454 00:21:22,335 --> 00:21:25,770 jika tidak Anda akan mengkritik, berpotensi, nilai luar loop batin. 455 00:21:25,770 --> 00:21:27,200 Jadi aku menggunakan j oleh konvensi. 456 00:21:27,200 --> 00:21:28,020 Kami mungkin menggunakan k. 457 00:21:28,020 --> 00:21:31,080 Jika Anda memiliki lebih dari k, Anda mungkin memiliki terlalu banyak bersarang, biasanya. 458 00:21:31,080 --> 00:21:33,800 Tapi sekarang, perhatikan printf saya garis sedikit berbeda. 459 00:21:33,800 --> 00:21:37,520 Saya tidak mencetak% s, aku mencetak% c, yang, tentu saja, 460 00:21:37,520 --> 00:21:39,460 adalah sebuah tempat untuk char. 461 00:21:39,460 --> 00:21:40,770 >> Dan sekarang melihat sintaks ini. 462 00:21:40,770 --> 00:21:41,270 New. 463 00:21:41,270 --> 00:21:42,630 Kami belum melihat itu sebelumnya. 464 00:21:42,630 --> 00:21:47,290 Tapi secara logis, ini hanya berarti mendapatkan string i di argv 465 00:21:47,290 --> 00:21:50,067 dan mendapatkan j apa? 466 00:21:50,067 --> 00:21:50,900 AUDIENCE: Karakter. 467 00:21:50,900 --> 00:21:52,800 DAVID Malan: Karakter dalam string tersebut. 468 00:21:52,800 --> 00:21:57,100 Jadi dengan menggunakan tanda kurung siku diikuti oleh tanda kurung siku, 469 00:21:57,100 --> 00:22:00,390 ini menyelam pertama ke string argv ini, 470 00:22:00,390 --> 00:22:02,225 dan kemudian yang kedua kurung persegi dengan j 471 00:22:02,225 --> 00:22:06,580 adalah menyelam ke dalam karakter string tertentu dalam argv. 472 00:22:06,580 --> 00:22:09,562 Dan kemudian, hanya untuk mengukur baik, Aku mencetak baris baru di sini. 473 00:22:09,562 --> 00:22:12,020 Jadi sekarang biarkan aku pergi ke depan dan membuka sebuah jendela yang sedikit lebih besar 474 00:22:12,020 --> 00:22:13,600 sehingga kita dapat melihat hal ini dalam aksi. 475 00:22:13,600 --> 00:22:15,700 Biarkan aku pergi ke folder itu. 476 00:22:15,700 --> 00:22:22,550 Dan sekarang lakukan membuat argv-2-- whoops-- membuat argv-2, ./argv 2. 477 00:22:22,550 --> 00:22:23,110 Enter. 478 00:22:23,110 --> 00:22:24,860 Dan itu sedikit sulit untuk membaca secara vertikal, 479 00:22:24,860 --> 00:22:27,920 tapi itu memang nama Program, diikuti oleh baris kosong. 480 00:22:27,920 --> 00:22:30,210 Sekarang biarkan aku pergi ke depan dan melakukan foo. 481 00:22:30,210 --> 00:22:33,210 Demikian pula sulit dibaca, tapi itu memang mencetak satu karakter per baris. 482 00:22:33,210 --> 00:22:36,780 Dan jika saya melakukan bar, sekarang mencetak baris tersebut demi baris. 483 00:22:36,780 --> 00:22:40,140 Jadi takeaway di sini tidak begitu banyak itu, wow, lihat trik baru ini rapi 484 00:22:40,140 --> 00:22:44,750 di mana Anda bisa mendapatkan di isi karakter spesifik array ini, 485 00:22:44,750 --> 00:22:48,380 melainkan bagaimana kita mengambil dasar ini ide seperti pengindeksan ke dalam array, 486 00:22:48,380 --> 00:22:51,620 dan kemudian mengindeks menjadi Array yang dalam array itu, 487 00:22:51,620 --> 00:22:56,180 dan hanya menerapkan ide yang sama untuk contoh sedikit lebih canggih. 488 00:22:56,180 --> 00:22:59,560 Tapi dasar-dasar yang benar-benar belum berubah, bahkan sejak pekan lalu. 489 00:22:59,560 --> 00:23:02,350 >> Sekarang ini adalah semacam tepat waktu, dalam hal itu, mengingat, dalam minggu nol 490 00:23:02,350 --> 00:23:04,110 kami bermain dengan buku telepon seperti ini. 491 00:23:04,110 --> 00:23:06,670 Dan meskipun ini jelas potongan fisik kertas, 492 00:23:06,670 --> 00:23:09,150 Anda dapat jenis memikirkan buku telepon sebagai array. 493 00:23:09,150 --> 00:23:12,770 Tentu saja, jika Anda adalah untuk reimplement potongan ini potongan-potongan kertas 494 00:23:12,770 --> 00:23:15,260 di komputer, mungkin Anda akan menggunakan sesuatu 495 00:23:15,260 --> 00:23:20,270 seperti array untuk menyimpan semua dari mereka nama dan nomor dari A sepanjang jalan 496 00:23:20,270 --> 00:23:23,800 melalui Z. Jadi ini bagus, karena memungkinkan kita kesempatan, 497 00:23:23,800 --> 00:23:28,310 mungkin, untuk mempertimbangkan bagaimana Anda mungkin benar-benar melaksanakan sesuatu seperti itu. 498 00:23:28,310 --> 00:23:31,250 Seperti dengan serangkaian pintu di sini. 499 00:23:31,250 --> 00:23:36,380 Jadi jika saya bisa-- kita perlu satu sukarela untuk datang ke atas. 500 00:23:36,380 --> 00:23:36,980 Mari kita lihat. 501 00:23:36,980 --> 00:23:40,650 Sebuah wajah asing mungkin, wajah asing mungkin. 502 00:23:40,650 --> 00:23:42,090 Bagaimana oranye? 503 00:23:42,090 --> 00:23:42,680 Di sini. 504 00:23:42,680 --> 00:23:45,870 Kemeja oranye, datang ke atas. 505 00:23:45,870 --> 00:23:52,230 >> Mari kita pergi ke depan sekarang dan bergerak pintu-pintu ini lebih ke samping, 506 00:23:52,230 --> 00:23:54,020 memindahkan ini keluar dari jalan sejenak. 507 00:23:54,020 --> 00:23:56,600 508 00:23:56,600 --> 00:23:57,760 Siapa nama Anda? 509 00:23:57,760 --> 00:23:58,580 >> AJAY: 510 00:23:58,580 --> 00:23:58,655 >> DAVID Malan: Ajay. 511 00:23:58,655 --> 00:23:58,680 David. 512 00:23:58,680 --> 00:23:59,451 Senang bertemu Anda. 513 00:23:59,451 --> 00:23:59,950 Baiklah. 514 00:23:59,950 --> 00:24:04,500 Jadi kita memiliki belakang enam ini pintu digital pada screen-- yang 515 00:24:04,500 --> 00:24:07,810 atau, lebih tepatnya, tujuh pintu di screen-- sejumlah angka. 516 00:24:07,810 --> 00:24:10,099 Dan aku sudah bilang apa-apa di advance-- setuju? 517 00:24:10,099 --> 00:24:11,140 AJAY: Tidak ada di muka. 518 00:24:11,140 --> 00:24:14,730 DAVID Malan: Yang saya ingin Anda lakukan sekarang adalah menemukan bagi saya, dan bagi kita, 519 00:24:14,730 --> 00:24:20,920 benar-benar, nomor 50, satu langkah pada satu waktu. 520 00:24:20,920 --> 00:24:21,830 >> AJAY: Nomor 50? 521 00:24:21,830 --> 00:24:22,580 >> DAVID Malan: Jumlah 50. 522 00:24:22,580 --> 00:24:24,746 Dan Anda dapat mengungkapkan apa yang di balik setiap pintu ini 523 00:24:24,746 --> 00:24:27,930 hanya dengan menyentuhnya dengan jari. 524 00:24:27,930 --> 00:24:31,364 Sialan. [Tertawa] 525 00:24:31,364 --> 00:24:34,560 >> [Tepuk Tangan] 526 00:24:34,560 --> 00:24:39,540 >> Sangat baik dilakukan. 527 00:24:39,540 --> 00:24:40,400 OK. 528 00:24:40,400 --> 00:24:44,090 Kami memiliki hadiah yang indah hadiah untuk Anda di sini. 529 00:24:44,090 --> 00:24:46,520 Memilih Anda film kita bahas minggu lalu. 530 00:24:46,520 --> 00:24:47,362 >> AJAY: Oh, man. 531 00:24:47,362 --> 00:24:49,050 Oh, aku belum pernah melihat Spaceballs. 532 00:24:49,050 --> 00:24:49,520 >> DAVID Malan: Spaceballs. 533 00:24:49,520 --> 00:24:50,140 Baiklah. 534 00:24:50,140 --> 00:24:53,790 Jadi tunggu saja satu saat. 535 00:24:53,790 --> 00:24:57,430 How-- mari kita membuat ini a moment-- mendidik 536 00:24:57,430 --> 00:25:00,412 bagaimana Anda pergi tentang menemukan nomor 50? 537 00:25:00,412 --> 00:25:01,370 AJAY: Aku memilih secara acak. 538 00:25:01,370 --> 00:25:03,420 DAVID Malan: Jadi Anda pilih acak dan beruntung. 539 00:25:03,420 --> 00:25:03,790 AJAY: Ya. 540 00:25:03,790 --> 00:25:04,456 DAVID Malan: OK. 541 00:25:04,456 --> 00:25:05,050 Sangat baik. 542 00:25:05,050 --> 00:25:08,470 Jadi sekarang, telah Anda tidak mendapatkan beruntung, apa lagi 543 00:25:08,470 --> 00:25:10,210 mungkin terjadi di balik pintu ini? 544 00:25:10,210 --> 00:25:12,930 Jadi jika saya pergi ke depan dan mengungkapkan angka-angka ini di sini, 545 00:25:12,930 --> 00:25:15,180 mereka benar-benar berada dalam urutan acak. 546 00:25:15,180 --> 00:25:17,750 Dan yang terbaik Anda bisa memiliki dilakukan, terus terang, adalah dengan, akhirnya, 547 00:25:17,750 --> 00:25:19,410 dalam kasus terburuk, memeriksa mereka semua. 548 00:25:19,410 --> 00:25:23,000 Jadi, Anda punya super beruntung, yang tidak apa yang kita sebut sebuah algoritma. 549 00:25:23,000 --> 00:25:24,730 Ya, selamat. 550 00:25:24,730 --> 00:25:27,010 Tapi sekarang let's-- humor saya, jika Anda bisa. 551 00:25:27,010 --> 00:25:28,310 Mari kita pergi ke tab ini di sini. 552 00:25:28,310 --> 00:25:31,460 Dan di sini adalah angka dalam jelas apa yang tampaknya menjadi urutan acak, 553 00:25:31,460 --> 00:25:32,280 dan mereka. 554 00:25:32,280 --> 00:25:35,160 Tapi sekarang kalau aku bukan klaim bahwa di balik pintu ini 555 00:25:35,160 --> 00:25:39,070 adalah angka yang diurutkan. 556 00:25:39,070 --> 00:25:41,780 Tujuannya sekarang adalah untuk juga menemukan kami nomor 50. 557 00:25:41,780 --> 00:25:45,910 Tapi melakukannya algoritmik, dan memberitahu kami bagaimana Anda akan hal itu. 558 00:25:45,910 --> 00:25:48,020 Dan jika Anda menemukannya, Anda tetap film. 559 00:25:48,020 --> 00:25:49,520 Anda tidak menemukannya, Anda mengembalikannya. 560 00:25:49,520 --> 00:25:52,720 561 00:25:52,720 --> 00:25:58,112 AJAY: Jadi aku akan memeriksa ujung pertama, untuk menentukan apakah there 562 00:25:58,112 --> 00:26:02,048 [Tertawa DAN Tepuk Tangan] 563 00:26:02,048 --> 00:26:04,451 564 00:26:04,451 --> 00:26:05,492 DAVID Malan: Di sini Anda pergi. 565 00:26:05,492 --> 00:26:17,080 566 00:26:17,080 --> 00:26:21,700 Mari kita lihat satu pendahulu Ajay ini, 567 00:26:21,700 --> 00:26:25,450 Sean, yang tidak cukup beruntung. 568 00:26:25,450 --> 00:26:28,670 OK, jadi tugas Anda di sini, Sean, adalah sebagai berikut. 569 00:26:28,670 --> 00:26:32,970 Saya telah tersembunyi di balik ini pintu nomor tujuh, 570 00:26:32,970 --> 00:26:37,200 tapi terselip di beberapa pintu ini juga adalah bilangan non-negatif lainnya. 571 00:26:37,200 --> 00:26:40,730 Dan tujuan Anda adalah untuk memikirkan ini baris atas nomor hanya sebagai array. 572 00:26:40,730 --> 00:26:43,590 Kami hanya urutan potongan kertas dengan angka di belakang mereka. 573 00:26:43,590 --> 00:26:47,640 Dan tujuan Anda adalah, hanya menggunakan bagian atas Array di sini, cari saya nomor tujuh. 574 00:26:47,640 --> 00:26:51,200 Dan kita kemudian akan kritik bagaimana Anda pergi tentang melakukannya. 575 00:26:51,200 --> 00:26:52,920 Temukan kami nomor tujuh, silakan. 576 00:26:52,920 --> 00:27:02,570 577 00:27:02,570 --> 00:27:03,070 Nomor 578 00:27:03,070 --> 00:27:06,760 579 00:27:06,760 --> 00:27:08,179 5, 19, 13. 580 00:27:08,179 --> 00:27:16,752 581 00:27:16,752 --> 00:27:17,835 Ini bukan pertanyaan jebakan. 582 00:27:17,835 --> 00:27:21,420 583 00:27:21,420 --> 00:27:21,920 1. 584 00:27:21,920 --> 00:27:26,715 585 00:27:26,715 --> 00:27:29,840 Pada titik ini skor Anda sangat tidak baik, sehingga Anda mungkin juga terus berjalan. 586 00:27:29,840 --> 00:27:32,870 587 00:27:32,870 --> 00:27:33,370 3. 588 00:27:33,370 --> 00:27:38,570 589 00:27:38,570 --> 00:27:39,802 Pergilah. 590 00:27:39,802 --> 00:27:42,510 Terus terang, saya tidak bisa tidak bertanya-tanya apa yang Anda bahkan berpikir tentang. 591 00:27:42,510 --> 00:27:44,990 >> SEAN: Saya dapat mengambil dari hanya baris atas. 592 00:27:44,990 --> 00:27:46,240 DAVID Malan: Hanya baris atas. 593 00:27:46,240 --> 00:27:47,281 Jadi, Anda punya tiga kiri. 594 00:27:47,281 --> 00:27:48,310 Jadi menemukan saya 7. 595 00:27:48,310 --> 00:27:54,758 596 00:27:54,758 --> 00:27:59,141 >> [AUDIENCE Teriak SARAN] 597 00:27:59,141 --> 00:28:22,210 598 00:28:22,210 --> 00:28:26,130 Jadi kedua dari mereka yang menakjubkan untuk alasan yang sangat berbeda. 599 00:28:26,130 --> 00:28:29,150 Jadi ini adalah di mana kita tinggalkan sejenak lalu, 600 00:28:29,150 --> 00:28:32,530 dan wawasan kunci di sini itu pintu-pintu ini memiliki angka 601 00:28:32,530 --> 00:28:37,390 belakang mereka yang diurutkan, ideal takeaway yang adalah bahwa Anda bisa melakukan 602 00:28:37,390 --> 00:28:39,670 fundamental yang lebih baik di example-- kedua ini 603 00:28:39,670 --> 00:28:42,380 dan, memang, itu adalah Sean upaya pertama dengan angka acak 604 00:28:42,380 --> 00:28:45,460 seperti before-- tetapi segera karena nomornya diurutkan, 605 00:28:45,460 --> 00:28:47,980 seperti buku telepon, apa yang dapat Anda lakukan jelas? 606 00:28:47,980 --> 00:28:50,090 Atau bagaimana Anda dapat memanfaatkan pengetahuan itu? 607 00:28:50,090 --> 00:28:51,530 Ya. 608 00:28:51,530 --> 00:28:54,910 >> AUDIENCE: Anda pergi setengah [Tak terdengar]. 609 00:28:54,910 --> 00:28:55,660 DAVID Malan: Ya. 610 00:28:55,660 --> 00:28:56,160 Tepat. 611 00:28:56,160 --> 00:28:59,680 Jadi naluri awal Ajay adalah untuk memeriksa ujungnya, seperti yang saya ingat, 612 00:28:59,680 --> 00:29:02,320 dan kemudian kita semacam selesai contoh cepat. 613 00:29:02,320 --> 00:29:05,220 Tetapi jika kita mulai melakukan hal ini lebih metodis sepanjang jalur tersebut, 614 00:29:05,220 --> 00:29:07,860 tapi mulai mungkin dalam tengah, karena mereka diurutkan, 615 00:29:07,860 --> 00:29:10,900 segera setelah kami mengungkapkan nomor 16, karena itu kita TAHU 616 00:29:10,900 --> 00:29:14,850 dan mari kita melakukan apa yang kita itu-- Oleh karena tahu bahwa 50, dalam kasus hari ini, 617 00:29:14,850 --> 00:29:16,080 harus menjadi ke kanan. 618 00:29:16,080 --> 00:29:18,735 Jadi sama seperti pada minggu nol ketika kami merobek buku telepon di setengah 619 00:29:18,735 --> 00:29:21,490 dan melemparkan setengah dari masalah pergi, ide yang sama di sini. 620 00:29:21,490 --> 00:29:23,680 Kita bisa membuang setengah ini masalah pergi. 621 00:29:23,680 --> 00:29:25,730 Dan mungkin apa yang Anda mungkin melakukan algorithmically, 622 00:29:25,730 --> 00:29:28,710 setelah Anda tahu bahwa 50 harus ke kanan, jika di mana saja, 623 00:29:28,710 --> 00:29:31,390 adalah mencoba ada, di tengah pintu yang tersisa. 624 00:29:31,390 --> 00:29:33,450 Tentu saja, 50 lebih tinggi dari 42, jadi kita bisa 625 00:29:33,450 --> 00:29:36,060 membuang sisa ini seperempat masalah pergi, 626 00:29:36,060 --> 00:29:38,510 dan, akhirnya, mengidentifikasi sesuatu seperti 50. 627 00:29:38,510 --> 00:29:41,050 Tapi sama seperti dengan buku telepon, angka-angka ini 628 00:29:41,050 --> 00:29:44,560 diberikan kepada kami sudah terurut, yang membuat kita 629 00:29:44,560 --> 00:29:47,450 dengan pertanyaan, bagaimana Anda mendapatkan hal-hal dalam rangka diurutkan? 630 00:29:47,450 --> 00:29:49,640 Dan, terus terang, berapa biayanya? 631 00:29:49,640 --> 00:29:51,390 Itu salah satu hal yang harus menyerahkan buku telepon 632 00:29:51,390 --> 00:29:54,810 dan kemudian kesan teman-teman Anda dengan mencari nomor telepon yang benar-benar cepat, kan? 633 00:29:54,810 --> 00:29:58,520 Merobek 32 halaman untuk menemukan orang dari 4 miliar halaman, 634 00:29:58,520 --> 00:30:00,470 kami katakan adalah salah satu contoh ekstrim. 635 00:30:00,470 --> 00:30:03,320 Tapi berapa lama waktu yang dibutuhkan Verizon untuk menyortir buku telepon? 636 00:30:03,320 --> 00:30:06,170 Berapa banyak waktu yang dibutuhkan kita untuk menyortir tujuh angka-angka ini? 637 00:30:06,170 --> 00:30:10,110 Itu adalah pertanyaan yang kami telah sejauh ini benar-benar diabaikan. 638 00:30:10,110 --> 00:30:12,330 >> Jadi mari kita menjawab pertanyaan ini sekarang. 639 00:30:12,330 --> 00:30:15,920 Dan kita semua dari film sekarang, tapi kami memiliki beberapa bola stres. 640 00:30:15,920 --> 00:30:19,480 Jika, mengatakan, delapan relawan tidak akan keberatan bergabung dengan kami di sini? 641 00:30:19,480 --> 00:30:24,100 Mari kita pergi ke depan dan melakukan, bagaimana kalian berempat, tiga dari Anda di sini? 642 00:30:24,100 --> 00:30:25,290 Dapatkan beberapa wajah baru. 643 00:30:25,290 --> 00:30:27,220 Dan kalian berempat sana? 644 00:30:27,220 --> 00:30:30,760 Dan sekarang-- jangan Bias di sini-dan nomor delapan di sini di akhir. 645 00:30:30,760 --> 00:30:32,060 Ayo up. 646 00:30:32,060 --> 00:30:32,560 Baiklah. 647 00:30:32,560 --> 00:30:37,480 Jadi apa yang kita miliki di sini untuk masing-masing adalah nomor. 648 00:30:37,480 --> 00:30:40,055 Jika Anda ingin pergi depan, mengambil nomor ini. 649 00:30:40,055 --> 00:30:40,763 Siapa nama Anda? 650 00:30:40,763 --> 00:30:41,950 >> Artie: Artie. 651 00:30:41,950 --> 00:30:43,100 >> DAVID Malan: Artie, oke. 652 00:30:43,100 --> 00:30:44,297 Kau nomor 1. 653 00:30:44,297 --> 00:30:45,310 >> AMIN: Amin. 654 00:30:45,310 --> 00:30:46,060 DAVID Malan: Amin. 655 00:30:46,060 --> 00:30:46,820 David. 656 00:30:46,820 --> 00:30:47,530 Kau nomor 2. 657 00:30:47,530 --> 00:30:49,100 Dan pergi ke depan, seperti yang saya tangan Anda lembar kertas, 658 00:30:49,100 --> 00:30:52,130 berbaris diri di depan musik berdiri di urutan yang sama seperti di atas sana. 659 00:30:52,130 --> 00:30:52,660 >> ANDY: Hi, Andy. 660 00:30:52,660 --> 00:30:53,970 >> DAVID Malan: Andy, itu bagus untuk melihat Anda. 661 00:30:53,970 --> 00:30:54,520 Nomor 3. 662 00:30:54,520 --> 00:30:55,310 >> JACOB: Jacob. 663 00:30:55,310 --> 00:30:56,760 >> DAVID Malan: Jacob, nomor 4. 664 00:30:56,760 --> 00:30:57,549 Welcome aboard. 665 00:30:57,549 --> 00:30:58,090 GRANT: Grant. 666 00:30:58,090 --> 00:30:58,881 DAVID Malan: Grant. 667 00:30:58,881 --> 00:31:00,348 Nomor 5. 668 00:31:00,348 --> 00:31:01,200 >> Alanna: Alanna. 669 00:31:01,200 --> 00:31:02,766 >> DAVID Malan: Alanna, nomor 6. 670 00:31:02,766 --> 00:31:03,589 >> FRANCES: Frances. 671 00:31:03,589 --> 00:31:04,880 DAVID Malan: Frances, nomor 7. 672 00:31:04,880 --> 00:31:05,200 Dan? 673 00:31:05,200 --> 00:31:05,830 >> RACHEL: Rachel. 674 00:31:05,830 --> 00:31:06,815 >> DAVID Malan: Rachel, nomor 8. 675 00:31:06,815 --> 00:31:07,100 Baiklah. 676 00:31:07,100 --> 00:31:08,766 Pergi ke depan dan mendapatkan diri Anda dalam urutan ini. 677 00:31:08,766 --> 00:31:11,440 Mari saya menempatkan satu yang tersisa musik berdiri di tempat. 678 00:31:11,440 --> 00:31:13,670 Di mana Anda perlu berdiri? 679 00:31:13,670 --> 00:31:14,170 OK. 680 00:31:14,170 --> 00:31:18,710 Pergi ke depan dan hanya menempatkan nomor Anda di mana penonton dapat melihat mereka di, 681 00:31:18,710 --> 00:31:20,340 musik berdiri menghadap ke luar. 682 00:31:20,340 --> 00:31:27,240 Dan mudah-mudahan, pertama kami kewarasan cek di sini-4, 2, 6. 683 00:31:27,240 --> 00:31:27,890 Oh-oh. 684 00:31:27,890 --> 00:31:29,070 Tunggu dulu. 685 00:31:29,070 --> 00:31:31,140 Kami tidak memiliki 8. 686 00:31:31,140 --> 00:31:35,180 Saya perlu untuk mengusir Anda dari contoh entah bagaimana. 687 00:31:35,180 --> 00:31:35,680 Nomor 688 00:31:35,680 --> 00:31:36,940 Tidak, itu OK. 689 00:31:36,940 --> 00:31:37,890 Mari kita lihat. 690 00:31:37,890 --> 00:31:38,880 Kita bisa melakukan ini. 691 00:31:38,880 --> 00:31:39,440 Stand by. 692 00:31:39,440 --> 00:31:43,970 693 00:31:43,970 --> 00:31:45,740 Di sana kami pergi. 694 00:31:45,740 --> 00:31:46,800 Benar. 695 00:31:46,800 --> 00:31:47,360 Baiklah. 696 00:31:47,360 --> 00:31:50,260 Jadi, sekarang kita memiliki 8, 1, 3 7, 5. 697 00:31:50,260 --> 00:31:50,760 OK. 698 00:31:50,760 --> 00:31:51,360 Sangat baik. 699 00:31:51,360 --> 00:31:54,400 >> Jadi pertanyaan di tangan, pada apa biaya, dan melalui metode apa, 700 00:31:54,400 --> 00:31:58,580 dapat kita benar-benar mengurutkan nomor ini di sini sehingga kita dapat jenis bekerja mundur, 701 00:31:58,580 --> 00:32:02,759 akhirnya, dan decide-- itu benar-benar mengesankan, apakah benar-benar efisien, 702 00:32:02,759 --> 00:32:04,550 bahwa saya dapat membagi dan menaklukkan buku telepon? 703 00:32:04,550 --> 00:32:06,716 Apakah benar-benar efisien Aku bisa membagi dan menaklukkan 704 00:32:06,716 --> 00:32:08,600 potongan-potongan digital kertas di papan tulis, 705 00:32:08,600 --> 00:32:14,500 apakah mungkin itu akan biaya kami keberuntungan dalam waktu atau energi atau CPU siklus 706 00:32:14,500 --> 00:32:17,340 untuk benar-benar mendapatkan data kami ke beberapa terurut? 707 00:32:17,340 --> 00:32:18,930 Jadi mari kita mengajukan pertanyaan itu. 708 00:32:18,930 --> 00:32:22,077 >> Jadi pertama, angka-angka ini di hampir secara acak, 709 00:32:22,077 --> 00:32:24,160 dan aku akan mengusulkan satu algoritma, atau proses 710 00:32:24,160 --> 00:32:25,970 dengan mana kita dapat memilah orang-orang ini. 711 00:32:25,970 --> 00:32:28,100 Aku akan mendekati ini cukup naif. 712 00:32:28,100 --> 00:32:30,730 Dan aku akan mengenali bahwa itu semacam banyak bagi saya 713 00:32:30,730 --> 00:32:32,890 untuk membungkus pikiran saya sekitar mengatur seluruh data sekaligus. 714 00:32:32,890 --> 00:32:33,640 Tapi kau tahu apa? 715 00:32:33,640 --> 00:32:37,450 Aku akan membuat beberapa perbaikan marjinal sangat sederhana. 716 00:32:37,450 --> 00:32:41,152 4 dan 2 adalah rusak, jika tujuannya adalah untuk pergi dari 1 hingga 8. 717 00:32:41,152 --> 00:32:41,860 Jadi, Anda tahu apa? 718 00:32:41,860 --> 00:32:43,776 Aku akan memiliki Anda orang menukar, jika Anda mengaktifkan 719 00:32:43,776 --> 00:32:46,380 secara fisik posisi dan potongan kertas Anda. 720 00:32:46,380 --> 00:32:47,894 Sekarang 4 dan 6, ini adalah dalam rangka. 721 00:32:47,894 --> 00:32:49,060 Aku akan meninggalkan orang-orang menjadi. 722 00:32:49,060 --> 00:32:50,227 6 dan 8, mereka berada di urutan. 723 00:32:50,227 --> 00:32:51,185 Akan meninggalkan mereka menjadi. 724 00:32:51,185 --> 00:32:52,170 8 and1, rusak. 725 00:32:52,170 --> 00:32:54,790 Jika Anda berdua tidak keberatan swapping. 726 00:32:54,790 --> 00:32:57,300 Sekarang 8 dan 3, jika kalian bisa bertukar. 727 00:32:57,300 --> 00:32:59,320 8 dan 7, jika kalian bisa bertukar. 728 00:32:59,320 --> 00:33:01,790 Dan 8 dan 5, jika kalian bisa bertukar. 729 00:33:01,790 --> 00:33:03,980 >> Sekarang, aku lakukan? 730 00:33:03,980 --> 00:33:05,200 Tidak, jelas tidak. 731 00:33:05,200 --> 00:33:07,880 Tapi aku telah membuat situasi yang lebih baik, kan? 732 00:33:07,880 --> 00:33:09,430 Siapa nama Anda lagi, angka 8? 733 00:33:09,430 --> 00:33:10,055 >> RACHEL: Rachel. 734 00:33:10,055 --> 00:33:12,850 DAVID Malan: Jadi Rachel memiliki efektif menggelegak cukup jauh, 735 00:33:12,850 --> 00:33:15,660 semua jalan ke akhir array saya nomor di sini. 736 00:33:15,660 --> 00:33:17,310 Jadi masalah yang semacam dipecahkan. 737 00:33:17,310 --> 00:33:21,670 Sekarang, jelas, 2 masih perlu bergerak sedikit, dan 4 dan 6 dan 1. 738 00:33:21,670 --> 00:33:24,420 Tapi aku tampaknya telah mendapat sedikit lebih dekat ke solusi. 739 00:33:24,420 --> 00:33:26,790 Jadi mari kita terapkan ini sama heuristik naif lagi. 740 00:33:26,790 --> 00:33:27,690 2 dan 4, OK. 741 00:33:27,690 --> 00:33:28,810 4 dan 6, OK. 742 00:33:28,810 --> 00:33:29,930 6 dan 1, mm-mm. 743 00:33:29,930 --> 00:33:32,230 Mari kita swap. 744 00:33:32,230 --> 00:33:33,200 6 dan 3, mm-mm. 745 00:33:33,200 --> 00:33:34,420 Mari kita swap. 746 00:33:34,420 --> 00:33:35,580 6 dan 7 adalah OK. 747 00:33:35,580 --> 00:33:36,590 7 dan 5, nggak. 748 00:33:36,590 --> 00:33:37,790 Mari kita swap. 749 00:33:37,790 --> 00:33:38,470 Dan sekarang 7 dan 8. 750 00:33:38,470 --> 00:33:39,862 Dan siapa namamu lagi? 751 00:33:39,862 --> 00:33:40,570 FRANCES: Frances. 752 00:33:40,570 --> 00:33:41,445 DAVID Malan: Frances. 753 00:33:41,445 --> 00:33:44,230 Jadi sekarang Frances adalah bahkan lebih baik posisi, karena sekarang 7 dan 8 754 00:33:44,230 --> 00:33:46,440 dengan benar menggelegak ke atas. 755 00:33:46,440 --> 00:33:47,510 Jadi 2 dan 4, OK. 756 00:33:47,510 --> 00:33:48,720 4 dan 1, tukar mari kita. 757 00:33:48,720 --> 00:33:50,410 4 dan 3, tukar mari kita. 758 00:33:50,410 --> 00:33:51,550 4 dan 6, Anda OK. 759 00:33:51,550 --> 00:33:53,340 6 dan 5, tukar mari kita. 760 00:33:53,340 --> 00:33:54,590 Dan sekarang orang-orang baik. 761 00:33:54,590 --> 00:33:55,780 Kita hampir sampai. 762 00:33:55,780 --> 00:33:57,706 2 dan 1, rusak, sehingga menukar. 763 00:33:57,706 --> 00:33:59,080 Dan sekarang biarkan aku melakukan cek kewarasan. 764 00:33:59,080 --> 00:34:03,080 2 dan 3, 3 dan 4, 4 dan 5, 5 dan 6, 6 dan 7, 8. 765 00:34:03,080 --> 00:34:05,060 OK, jadi kita sudah selesai. 766 00:34:05,060 --> 00:34:09,310 >> Tapi berapa biayanya yang saya mengurutkan nomor ini di sini? 767 00:34:09,310 --> 00:34:13,960 Nah, berapa banyak langkah yang saya berpotensi ambil ketika menyortir orang-orang ini? 768 00:34:13,960 --> 00:34:15,710 Yah, kita akan kembali ke pertanyaan itu. 769 00:34:15,710 --> 00:34:18,030 Tapi, terus terang, jika Anda punya sedikit bosan, itu 770 00:34:18,030 --> 00:34:22,270 jenis mengungkapkan bahwa ini bukan mungkin algoritma yang paling efisien. 771 00:34:22,270 --> 00:34:25,230 Dan memang, terus terang, aku berkeringat semua lebih berjalan bolak-balik. 772 00:34:25,230 --> 00:34:26,639 Itu tidak merasa sangat efisien. 773 00:34:26,639 --> 00:34:27,805 Jadi mari kita mencoba sesuatu yang lain. 774 00:34:27,805 --> 00:34:31,870 Jika kalian bisa me-reset dirimu delapan nilai-nilai ini. 775 00:34:31,870 --> 00:34:32,969 Good job. 776 00:34:32,969 --> 00:34:36,570 >> Mari kita lihat secara digital, hanya sesaat sebelum kita mencoba sesuatu yang lain, 777 00:34:36,570 --> 00:34:38,179 apa yang baru saja terjadi. 778 00:34:38,179 --> 00:34:41,330 Sampai di sini, Anda akan melihat visualisasi dari delapan manusia 779 00:34:41,330 --> 00:34:44,719 dimana biru dan merah bar mewakili angka. 780 00:34:44,719 --> 00:34:46,670 Lebih tinggi bar, semakin besar nomor. 781 00:34:46,670 --> 00:34:48,510 Semakin pendek bar, semakin kecil angkanya. 782 00:34:48,510 --> 00:34:51,560 Dan apa yang Anda akan melihat dalam secara acak lebih dari delapan dari mereka. 783 00:34:51,560 --> 00:34:55,830 Anda akan melihat bar ini mendapatkan diurutkan berdasarkan algoritma yang sama, 784 00:34:55,830 --> 00:34:59,890 atau set instruksi yang kami akan menelepon selanjutnya bubble sort. 785 00:34:59,890 --> 00:35:04,000 Jadi perhatikan, setiap detik atau lebih, dua bar yang menyalakan merah, 786 00:35:04,000 --> 00:35:05,590 sedang dibandingkan dengan komputer. 787 00:35:05,590 --> 00:35:08,630 Dan kemudian jika bar besar dan sedikit bar rusak, 788 00:35:08,630 --> 00:35:11,220 mereka sedang bertukar bagi saya. 789 00:35:11,220 --> 00:35:15,120 >> Sekarang ini sangat membosankan untuk menonton ini, tentu, 790 00:35:15,120 --> 00:35:18,630 untuk waktu yang lama, tetapi melihat takeaway-- bar besar bergerak ke kanan, 791 00:35:18,630 --> 00:35:20,460 sedikit bar bergerak ke kiri. 792 00:35:20,460 --> 00:35:23,380 Mari kita membatalkan proses ini dan mempercepat ini 793 00:35:23,380 --> 00:35:27,330 menjadi jauh lebih cepat, sehingga kita bisa mendapatkan rasa tingkat tinggi apa, 794 00:35:27,330 --> 00:35:29,970 memang, bubble sort lakukan. 795 00:35:29,970 --> 00:35:33,150 Memang, itu menggelegak hingga sisi kanan daftar, 796 00:35:33,150 --> 00:35:35,260 atau array, bar yang lebih besar. 797 00:35:35,260 --> 00:35:40,020 Dan sebaliknya, bar kecil yang menggelegak jalan mereka ke kiri, 798 00:35:40,020 --> 00:35:42,950 meskipun pada kecepatan yang lebih cepat dari sebelumnya kita lakukan. 799 00:35:42,950 --> 00:35:45,850 Jadi, sulit untuk melihat dengan manusia, tapi secara visual itu memang apa 800 00:35:45,850 --> 00:35:46,540 yang terjadi. 801 00:35:46,540 --> 00:35:49,110 >> Tapi mari kita coba fundamental pendekatan yang berbeda sekarang. 802 00:35:49,110 --> 00:35:52,387 Mari kita mencoba yang berbeda algoritma dimana kita memiliki Anda 803 00:35:52,387 --> 00:35:59,640 orang dimulai dalam ini asli posisi, yang perintah ini di sini. 804 00:35:59,640 --> 00:36:00,827 Dan mari kita pergi ke depan sekarang. 805 00:36:00,827 --> 00:36:02,910 Dan aku akan melakukan sesuatu bahkan lebih sederhana, kan? 806 00:36:02,910 --> 00:36:06,710 Dalam retrospeksi, swapping berpasangan lagi dan lagi, hampir sedikit pintar. 807 00:36:06,710 --> 00:36:10,460 Mari kita lakukan sesuatu yang lebih naif, di mana jika saya ingin menyortir orang-orang ini, 808 00:36:10,460 --> 00:36:12,560 biarkan aku terus mencari untuk elemen terkecil. 809 00:36:12,560 --> 00:36:14,570 Jadi sekarang, 4 adalah Jumlah terkecil yang pernah kulihat. 810 00:36:14,570 --> 00:36:15,695 Aku akan ingat itu. 811 00:36:15,695 --> 00:36:17,750 Tidak, 2 lebih baik, dan ingat bahwa. 812 00:36:17,750 --> 00:36:20,730 1 lebih kecil. 813 00:36:20,730 --> 00:36:21,970 3, 7, 5. 814 00:36:21,970 --> 00:36:22,470 OK. 815 00:36:22,470 --> 00:36:23,750 Satu-- siapa namamu lagi? 816 00:36:23,750 --> 00:36:24,400 >> Artie: Artie. 817 00:36:24,400 --> 00:36:24,610 >> DAVID Malan: Artie. 818 00:36:24,610 --> 00:36:25,460 Jadi, Artie, silakan. 819 00:36:25,460 --> 00:36:27,043 Aku akan menarik Anda keluar dari garis. 820 00:36:27,043 --> 00:36:28,400 Jika Anda bisa kembali ke sini. 821 00:36:28,400 --> 00:36:30,790 Dan saya harus membuat ruang untuk dia. 822 00:36:30,790 --> 00:36:32,040 Kami memiliki titik keputusan di sini. 823 00:36:32,040 --> 00:36:36,000 Bagaimana kita bisa membuat ruang untuk Artie sini pada awal di mana nomor 1 milik? 824 00:36:36,000 --> 00:36:36,770 >> AUDIENCE: Shift. 825 00:36:36,770 --> 00:36:38,950 >> DAVID Malan: OK, kita bisa menggeser semua orang. 826 00:36:38,950 --> 00:36:40,860 Tapi mengusulkan optimasi. 827 00:36:40,860 --> 00:36:43,410 Yang terasa sedikit mengganggu bagi saya untuk meminta empat orang 828 00:36:43,410 --> 00:36:44,620 untuk memindahkan semua jalan ke bawah. 829 00:36:44,620 --> 00:36:45,520 Apa lagi yang bisa saya lakukan? 830 00:36:45,520 --> 00:36:46,360 >> AUDIENCE: Beralih mereka. 831 00:36:46,360 --> 00:36:46,850 >> DAVID Malan: Beralih mereka. 832 00:36:46,850 --> 00:36:47,900 Dan siapa namamu lagi? 833 00:36:47,900 --> 00:36:48,441 >> JACOB: Jacob. 834 00:36:48,441 --> 00:36:50,330 DAVID Malan: Jacob, bergerak. 835 00:36:50,330 --> 00:36:54,440 Jauh lebih efisien hanya untuk memiliki Lokasi tukar Yakub dengan Artie, 836 00:36:54,440 --> 00:36:56,710 sebagai lawan memaksa keempat orang-orang ini, 837 00:36:56,710 --> 00:36:58,734 terima kasih banyak, untuk posisi yang benar mereka. 838 00:36:58,734 --> 00:37:01,150 Apa yang baik tentang Artie sekarang, dia dalam posisi yang benar nya. 839 00:37:01,150 --> 00:37:02,060 Mari kita lakukan ini lagi. 840 00:37:02,060 --> 00:37:03,730 2, itu jumlah terkecil yang pernah kulihat. 841 00:37:03,730 --> 00:37:05,690 3, 7, 5. 842 00:37:05,690 --> 00:37:06,190 OK. 843 00:37:06,190 --> 00:37:07,467 2 pasti terkecil. 844 00:37:07,467 --> 00:37:08,550 Tidak perlu melakukan pekerjaan apapun. 845 00:37:08,550 --> 00:37:09,320 Mari kita lakukan lagi. 846 00:37:09,320 --> 00:37:10,070 6. 847 00:37:10,070 --> 00:37:10,640 Terkecil? 848 00:37:10,640 --> 00:37:11,140 8. 849 00:37:11,140 --> 00:37:11,590 Tidak. 850 00:37:11,590 --> 00:37:11,720 4? 851 00:37:11,720 --> 00:37:12,220 Ooh. 852 00:37:12,220 --> 00:37:13,420 Biarkan aku ingat 4. 853 00:37:13,420 --> 00:37:13,950 3. 854 00:37:13,950 --> 00:37:15,110 Biarkan aku ingat 3. 855 00:37:15,110 --> 00:37:16,080 7, 5. 856 00:37:16,080 --> 00:37:18,490 Jumlah terkecil yang sudah terlihat pada lulus ini adalah 3. 857 00:37:18,490 --> 00:37:20,340 Jika Anda akan datang pada keluar. 858 00:37:20,340 --> 00:37:21,986 Dimana kita akan menempatkan Anda? 859 00:37:21,986 --> 00:37:22,860 Dan siapa namamu? 860 00:37:22,860 --> 00:37:23,530 >> Alanna: Alanna. 861 00:37:23,530 --> 00:37:25,780 >> DAVID Malan: Alanna, kami akan harus mengusir Anda. 862 00:37:25,780 --> 00:37:28,670 Tapi yang lebih efisien, hanya swap dua orang, 863 00:37:28,670 --> 00:37:31,850 daripada memiliki beberapa orang benar-benar menghindari lebih. 864 00:37:31,850 --> 00:37:32,850 Sekarang mari kita lakukan ini lagi. 865 00:37:32,850 --> 00:37:34,980 Aku akan memilih 4, jadi datang pada keluar. 866 00:37:34,980 --> 00:37:36,540 Dan siapa yang akan pindah? 867 00:37:36,540 --> 00:37:37,750 Nomor 8, tentu saja. 868 00:37:37,750 --> 00:37:40,260 Jika sekarang saya menemukan nomor 5, ayolah keluar. 869 00:37:40,260 --> 00:37:42,104 Nomor 8 akan mendapatkan diusir lagi. 870 00:37:42,104 --> 00:37:43,770 Saya sekarang akan menemukan nomor 6 di tempat. 871 00:37:43,770 --> 00:37:44,410 7 di tempat. 872 00:37:44,410 --> 00:37:45,080 8 di tempat. 873 00:37:45,080 --> 00:37:48,590 >> Apa yang baru saja kita lakukan saat ini adalah sesuatu yang disebut selection sort, 874 00:37:48,590 --> 00:37:52,560 dan jika kita memvisualisasikan ini, itu akan merasa sedikit berbeda. 875 00:37:52,560 --> 00:37:56,800 Mari kita pergi ke depan dan dari ini menu di sini, visualization-- ini 876 00:37:56,800 --> 00:38:02,920 mari kita mengubah ini untuk-- ayolah, Firefox. 877 00:38:02,920 --> 00:38:07,610 Mari kita mengubahnya ke selection sort. 878 00:38:07,610 --> 00:38:11,830 Dan mari kita mempercepatnya seperti sebelumnya, dan mulai visualisasi sekarang. 879 00:38:11,830 --> 00:38:13,990 Dan algoritma ini memiliki nuansa yang berbeda untuk itu. 880 00:38:13,990 --> 00:38:16,480 Pada setiap iterasi, terus terang, itu bahkan lebih mudah. 881 00:38:16,480 --> 00:38:18,385 Aku hanya memilih elemen terkecil. 882 00:38:18,385 --> 00:38:21,510 Sekarang, terus terang, saya punya sedikit beruntung bahwa waktu, dalam hal ini diurutkan super cepat. 883 00:38:21,510 --> 00:38:22,660 Unsur-unsur yang acak. 884 00:38:22,660 --> 00:38:25,520 Ini bukan, seperti yang kita akan akhirnya lihat, pada dasarnya lebih cepat. 885 00:38:25,520 --> 00:38:29,400 Tapi mari kita melihat ketiga dan terakhir pendekatan di sini untuk apa yang terjadi. 886 00:38:29,400 --> 00:38:36,230 Jadi mari kita pergi ke depan dan me-reset kalian terakhir kali berada dalam urutan ini di sini. 887 00:38:36,230 --> 00:38:38,450 >> Dan sekarang, aku akan menjadi sedikit lebih pintar, 888 00:38:38,450 --> 00:38:40,220 hanya untuk melengkapi algoritma kami. 889 00:38:40,220 --> 00:38:41,230 Aku akan melakukan hal ini. 890 00:38:41,230 --> 00:38:43,140 Aku akan tidak pergi bolak-balik begitu banyak. 891 00:38:43,140 --> 00:38:44,900 Terus terang, saya bosan semua melintasi ini. 892 00:38:44,900 --> 00:38:47,691 Aku hanya akan mengambil apa yang saya diberikan pada awal daftar, 893 00:38:47,691 --> 00:38:49,460 dan aku akan memilah yang itu juga. 894 00:38:49,460 --> 00:38:50,140 Jadi di sini kita. 895 00:38:50,140 --> 00:38:51,030 Nomor 4. 896 00:38:51,030 --> 00:38:53,680 Aku akan memasukkan nomor 4 ke dalam daftar diurutkan. 897 00:38:53,680 --> 00:38:54,180 Selesai. 898 00:38:54,180 --> 00:38:58,300 Saya mengklaim sekarang, dan hanya untuk membuat ini lebih jelas, ini bagian dari daftar saya diurutkan. 899 00:38:58,300 --> 00:39:02,610 Ini semacam klaim bodoh, tapi memang 4 diurutkan dalam daftar ukuran satu. 900 00:39:02,610 --> 00:39:04,210 Sekarang, aku akan mengambil nomor 2. 901 00:39:04,210 --> 00:39:07,670 Nomor 2 Aku sekarang akan masukkan ke tempat yang tepat. 902 00:39:07,670 --> 00:39:08,680 Jadi bagaimana 2 milik? 903 00:39:08,680 --> 00:39:09,824 Jelas, di sini. 904 00:39:09,824 --> 00:39:11,490 Jadi pergi ke depan dan bergerak kembali, jika Anda bisa. 905 00:39:11,490 --> 00:39:14,406 Dan kenapa tidak kalian hanya mengambil musik Anda berdiri dengan Anda saat ini. 906 00:39:14,406 --> 00:39:17,020 Dan mari kita paksa memasukkan Anda ke awal daftar. 907 00:39:17,020 --> 00:39:17,936 Jadi sedikit lebih banyak pekerjaan. 908 00:39:17,936 --> 00:39:20,890 Aku harus bergerak Yakub sekitar, dan siapa namamu? 909 00:39:20,890 --> 00:39:21,420 >> AMIN: Amin. 910 00:39:21,420 --> 00:39:22,270 >> DAVID Malan: Amin. 911 00:39:22,270 --> 00:39:24,350 Tapi setidaknya aku tidak bolak-balik. 912 00:39:24,350 --> 00:39:25,739 Aku hanya mengambil hal-hal seperti yang saya pergi. 913 00:39:25,739 --> 00:39:27,530 Aku hanya memasukkan mereka di tempat yang tepat. 914 00:39:27,530 --> 00:39:29,220 6, ini sebenarnya cukup mudah. 915 00:39:29,220 --> 00:39:31,510 Mari kita memasukkan Anda di sana, jika Anda hanya ingin pindah sedikit. 916 00:39:31,510 --> 00:39:32,870 Nomor 8, juga cukup mudah. 917 00:39:32,870 --> 00:39:33,741 Tepat di sana. 918 00:39:33,741 --> 00:39:34,240 Sialan. 919 00:39:34,240 --> 00:39:37,590 Nomor 1 kita tidak bisa hanya menukar dengan Amin di sini, 920 00:39:37,590 --> 00:39:39,340 karena itu akan untuk mengacaukan pesanan. 921 00:39:39,340 --> 00:39:40,660 Jadi kita harus sedikit lebih pintar. 922 00:39:40,660 --> 00:39:42,770 Jadi, Artie, jika Anda bisa cadangan sejenak. 923 00:39:42,770 --> 00:39:46,550 Mari kita pergi ke depan dan menggeser sekarang, tidak seperti algoritma kami sebelumnya, 924 00:39:46,550 --> 00:39:50,910 untuk memberikan ruang bagi Artie di sini di awal. 925 00:39:50,910 --> 00:39:54,690 Jadi pada akhir hari, aku agak melakukan apa yang saya ingin menghindari sebelumnya. 926 00:39:54,690 --> 00:39:57,770 Jadi algoritma saya adalah semacam dari terbalik, intelektual, 927 00:39:57,770 --> 00:39:59,070 dari apa yang awalnya. 928 00:39:59,070 --> 00:40:01,240 Aku hanya melakukan pergeseran pada titik yang berbeda. 929 00:40:01,240 --> 00:40:02,291 Sekarang aku di 3. 930 00:40:02,291 --> 00:40:02,790 Oh, sialan. 931 00:40:02,790 --> 00:40:04,039 Kita harus melakukan lebih banyak pekerjaan lagi. 932 00:40:04,039 --> 00:40:05,060 Jadi mari kita mendorong Anda keluar. 933 00:40:05,060 --> 00:40:09,360 Mari kita bergerak 8, 6, 4-- oh oh-- dan 3 akan pergi di sana. 934 00:40:09,360 --> 00:40:11,490 Jadi pada sedikit tabungan setidaknya saat ini. 935 00:40:11,490 --> 00:40:13,100 7, tidak terlalu banyak pekerjaan yang harus dilakukan. 936 00:40:13,100 --> 00:40:15,370 Jadi jika Anda ingin pop kembali, mari kita masukkan Anda. 937 00:40:15,370 --> 00:40:17,440 Dan terakhir, 5, jika Anda ingin pop kembali, kami 938 00:40:17,440 --> 00:40:22,610 perlu menggeser Anda, Anda, Anda, sampai lima di tempat. 939 00:40:22,610 --> 00:40:25,670 >> Jadi sekarang untuk melihat ini pada tingkat tinggi grafis, 940 00:40:25,670 --> 00:40:31,080 mari kita lakukan algoritma ini visualisasi satu waktu tambahan. 941 00:40:31,080 --> 00:40:33,580 Jadi kita ini akan memanggil insertion sort. 942 00:40:33,580 --> 00:40:37,700 Kami akan menjalankannya seperti cepat, dan mulai di sini. 943 00:40:37,700 --> 00:40:39,580 Dan juga, memiliki rasa yang berbeda. 944 00:40:39,580 --> 00:40:42,180 Ini semacam menjadi lebih baik dan lebih baik, tapi itu tidak pernah sempurna 945 00:40:42,180 --> 00:40:44,630 sampai aku masuk dan halus dalam kesenjangan tersebut. 946 00:40:44,630 --> 00:40:47,860 Karena, sekali lagi, aku hanya mengambil apa Aku diberikan dari kiri ke kanan. 947 00:40:47,860 --> 00:40:50,350 Jadi saya tidak begitu beruntung bahwa segala sesuatunya sempurna. 948 00:40:50,350 --> 00:40:54,190 Itu sebabnya kami memiliki kecil ini mispositions bahwa kita tetap dari waktu ke waktu. 949 00:40:54,190 --> 00:40:58,890 >> Jadi semua algoritma ini tampaknya dijalankan pada langkah yang sedikit berbeda. 950 00:40:58,890 --> 00:41:02,030 Bahkan, mana yang akan Anda katakan adalah yang terbaik atau tercepat sejauh ini? 951 00:41:02,030 --> 00:41:03,450 Bubble sort, yang pertama? 952 00:41:03,450 --> 00:41:05,000 Seleksi semacam, kedua? 953 00:41:05,000 --> 00:41:08,450 Insertion sort, ketiga? 954 00:41:08,450 --> 00:41:10,710 Saya mendengar beberapa macam pilihan. 955 00:41:10,710 --> 00:41:13,280 Pikiran lain? 956 00:41:13,280 --> 00:41:16,880 >> Jadi ternyata bahwa semua algoritma ini 957 00:41:16,880 --> 00:41:22,400 pada dasarnya hanya seefisien setiap other-- atau, sebaliknya, sama seperti 958 00:41:22,400 --> 00:41:25,980 efisien karena satu sama lain, karena kita dapat melakukan fundamental 959 00:41:25,980 --> 00:41:28,120 lebih baik dari ketiga algoritma ini. 960 00:41:28,120 --> 00:41:29,990 Dan itu sedikit kebohongan putih, juga. 961 00:41:29,990 --> 00:41:32,580 ketika saya mengatakan sebagai efisien atau tidak efisien, 962 00:41:32,580 --> 00:41:35,040 itu setidaknya untuk nilai super besar n. 963 00:41:35,040 --> 00:41:38,450 Ketika kita memiliki delapan orang di sini, atau mungkin 50 atau jadi bar di layar, 964 00:41:38,450 --> 00:41:41,645 Anda benar-benar akan melihat perbedaan antara ketiga algoritma. 965 00:41:41,645 --> 00:41:44,020 Tapi seperti n, jumlah orang, atau jumlah angka, 966 00:41:44,020 --> 00:41:46,350 atau jumlah orang di telepon buku, atau jumlah halaman web 967 00:41:46,350 --> 00:41:48,230 dalam database Google akan lebih besar dan lebih besar, 968 00:41:48,230 --> 00:41:51,650 kita akan melihat bahwa ketiga ini algoritma sebenarnya sangat miskin. 969 00:41:51,650 --> 00:41:54,060 Dan kita bisa melakukan fundamental lebih baik dari itu. 970 00:41:54,060 --> 00:41:56,830 >> Mari kita lihat, akhirnya, apa algoritma ini mungkin 971 00:41:56,830 --> 00:41:59,520 terdengar seperti di konteks beberapa orang lain 972 00:41:59,520 --> 00:42:03,550 serta dengan cara ini visualisasi sini 973 00:42:03,550 --> 00:42:06,860 yang akan memperkenalkan kita kepada sejumlah algoritma. 974 00:42:06,860 --> 00:42:10,330 Mari kita pergi ke depan dan mengucapkan selamat peserta kami di sini, semuanya 975 00:42:10,330 --> 00:42:11,690 diurutkan sendiri sangat baik. 976 00:42:11,690 --> 00:42:15,124 Jika Anda ingin mengambil hadiah perpisahan. 977 00:42:15,124 --> 00:42:16,540 Anda dapat menyimpan nomor Anda. 978 00:42:16,540 --> 00:42:19,460 979 00:42:19,460 --> 00:42:22,520 Dan apa yang akan Anda lihat, atau lebih tepatnya mendengar, sekarang, 980 00:42:22,520 --> 00:42:25,710 adalah bahwa ketika kita menempatkan suara untuk masing-masing bar ini 981 00:42:25,710 --> 00:42:28,660 dan menghubungkannya dengan perangkat lunak, frekuensi yang berbeda dari suara, 982 00:42:28,660 --> 00:42:33,970 Anda dapat membungkus pikiran Anda lebih audioly sekitar apa setiap hal-hal ini 983 00:42:33,970 --> 00:42:34,470 terlihat seperti. 984 00:42:34,470 --> 00:42:39,325 Yang pertama adalah insertion sort 985 00:42:39,325 --> 00:42:44,275 >> [NADA] 986 00:42:44,275 --> 00:42:47,245 987 00:42:47,245 --> 00:42:49,720 >> Ini adalah semacam gelembung. 988 00:42:49,720 --> 00:42:54,175 >> [NADA] 989 00:42:54,175 --> 00:43:17,250 990 00:43:17,250 --> 00:43:18,222 >> Seleksi semacam. 991 00:43:18,222 --> 00:43:22,596 >> [NADA] 992 00:43:22,596 --> 00:43:33,570 993 00:43:33,570 --> 00:43:35,150 >> Sesuatu yang disebut merge sort. 994 00:43:35,150 --> 00:43:38,140 >> [NADA] 995 00:43:38,140 --> 00:43:49,510 996 00:43:49,510 --> 00:43:51,278 >> Semacam Gnome. 997 00:43:51,278 --> 00:43:56,390 >> [NADA] 998 00:43:56,390 --> 00:44:08,240 999 00:44:08,240 --> 00:44:09,430 >> Itu saja untuk CS50. 1000 00:44:09,430 --> 00:44:13,360 Kita akan melihat Anda pada hari Rabu. 1001 00:44:13,360 --> 00:44:16,671 >> Narator: Dan sekarang, "Jauh Pikiran, "oleh Daven Farnham. 1002 00:44:16,671 --> 00:44:19,910 1003 00:44:19,910 --> 00:44:21,590 Mengapa untuk loop? 1004 00:44:21,590 --> 00:44:23,200 Mengapa tidak membuatnya lebih baik? 1005 00:44:23,200 --> 00:44:25,970 Aku akan membuat lima lingkaran. 1006 00:44:25,970 --> 00:44:28,720 >> [Tertawa]