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 kini awal minggu tiga. 4 00:00:16,470 --> 00:00:19,960 >> Jadi sampai sekarang, kita kena telah menulis program dalam C 5 00:00:19,960 --> 00:00:23,210 yang kelihatan sedikit sesuatu seperti ini di sini. 6 00:00:23,210 --> 00:00:25,470 Jadi kami mempunyai beberapa tajam termasuk di bahagian atas. 7 00:00:25,470 --> 00:00:28,490 Kami ada int, utama, tidak sah, dan maka sesuatu yang boleh dilakukan di tengah-tengah, 8 00:00:28,490 --> 00:00:30,590 beberapa sedikit kod dalam fungsi itu. 9 00:00:30,590 --> 00:00:34,170 Tetapi penting adalah hakikat bahawa kita telah mengatakan tidak sah di sini. 10 00:00:34,170 --> 00:00:39,320 Jadi tidak sah, semua masa ini, dinyatakan oleh bahawa program ini, apabila berjalan, 11 00:00:39,320 --> 00:00:41,300 hanya boleh dijalankan melalui namanya. 12 00:00:41,300 --> 00:00:46,330 Anda tidak boleh menaip apa-apa perkataan lain atau nombor selepas nama program ini apabila 13 00:00:46,330 --> 00:00:46,830 menguruskannya. 14 00:00:46,830 --> 00:00:51,200 Maka, misalnya, jika program tersebut ialah disusun ke dalam fail yang dipanggil hello, 15 00:00:51,200 --> 00:00:53,480 anda boleh melakukan ./hello, tetapi yang ia. 16 00:00:53,480 --> 00:00:56,750 >> Satu-satunya cara yang anda boleh memberi input 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 Sebagai contoh, apa fungsi kita telah menggunakan setakat ini 19 00:00:59,790 --> 00:01:00,950 untuk mendapatkan input daripada pengguna? 20 00:01:00,950 --> 00:01:02,117 >> PENONTON: Dapatkan tali. 21 00:01:02,117 --> 00:01:04,700 DAVID MALAN: Untuk mendapatkan tali, atau mendapatkan int, atau anda telah melihat orang lain, 22 00:01:04,700 --> 00:01:07,630 walaupun anda tidak menggunakan mereka lagi, seperti mendapatkan lama, panjang dan sebagainya. 23 00:01:07,630 --> 00:01:09,380 Tetapi katalah kita sebenarnya ingin memulakan 24 00:01:09,380 --> 00:01:12,760 program bertulis yang lebih sedikit serba boleh, dan, terus-terang, lebih sedikit 25 00:01:12,760 --> 00:01:15,090 seperti arahan bahawa anda telah telah mendapatkan, mudah-mudahan, 26 00:01:15,090 --> 00:01:16,550 sedikit biasa dengan. 27 00:01:16,550 --> 00:01:18,560 Seperti ruang cd Dropbox. 28 00:01:18,560 --> 00:01:20,800 Ini, sememangnya, perubahan direktori anda, dengan anggapan 29 00:01:20,800 --> 00:01:23,590 anda berada dalam rumah John Harvard direktori, ke folder Dropbox anda. 30 00:01:23,590 --> 00:01:27,380 Sementara itu, arahan seperti ini mewujudkan direktori baru yang dipanggil pset2, 31 00:01:27,380 --> 00:01:30,290 seperti yang anda mungkin sudah atau tidak lama lagi bagi masalah akan menetapkan dua. 32 00:01:30,290 --> 00:01:33,970 Buat Hello, sudah tentu, adalah perintah yang membina program yang dikenali sebagai hello 33 00:01:33,970 --> 00:01:35,770 dari fail yang dipanggil hello dot c. 34 00:01:35,770 --> 00:01:39,140 Dan di setiap kes, kini, kami telah mempunyai 35 00:01:39,140 --> 00:01:43,620 menyediakan hujah pada apa yang dikenali sebagai baris arahan, cepat berkelip, 36 00:01:43,620 --> 00:01:48,540 jadi make yang tahu apa yang akan dibina, dan sebagainya mkdir yang tahu apa folder untuk mencipta, 37 00:01:48,540 --> 00:01:51,110 dan sebagainya cd yang tahu di mana anda mahu pergi. 38 00:01:51,110 --> 00:01:54,720 Tetapi sehingga kini, kita terus mengatakan itu, fungsi utama lalai anda, 39 00:01:54,720 --> 00:01:58,500 mempunyai ungkapan tidak sah di dalam kurungan mereka, 40 00:01:58,500 --> 00:02:01,250 yang bermakna bahawa ia tidak boleh mengambil apa-apa hujah. 41 00:02:01,250 --> 00:02:03,240 >> Jadi bermula hari ini, apa yang kita akan lakukan 42 00:02:03,240 --> 00:02:06,270 adalah, kita akan memulakan menyokong hal-hal seperti ini walaupun. 43 00:02:06,270 --> 00:02:08,990 Malah, dalam kes ini, yang anda tidak biasanya menaip secara manual, 44 00:02:08,990 --> 00:02:11,130 Membuat telah melakukan ini bagi kami, tidak ada 45 00:02:11,130 --> 00:02:15,840 satu tetapi satu, dua, tiga tambahan tali selepas program itu bernama 46 00:02:15,840 --> 00:02:16,850 dilafaz. 47 00:02:16,850 --> 00:02:18,240 Jadi bagaimana kita mencapainya? 48 00:02:18,240 --> 00:02:20,260 >> Nah, bermula hari ini, dalam kes-kes di mana kita mahu 49 00:02:20,260 --> 00:02:22,855 memberi input melalui yang dikenali sebagai baris arahan, 50 00:02:22,855 --> 00:02:24,980 kita akan mula menambah di sini apa yang ada di yellow-- 51 00:02:24,980 --> 00:02:30,520 menggantikan terbatal dengan int argc koma rentetan argv pendakap kurungan terbuka dekat. 52 00:02:30,520 --> 00:02:32,520 Sekarang ini adalah menarik untuk beberapa sebab. 53 00:02:32,520 --> 00:02:35,690 Satu, ia akan membiarkan kita menulis program yang sedikit lebih dinamik. 54 00:02:35,690 --> 00:02:37,570 Tetapi, lebih ia amat, ia akan membuka 55 00:02:37,570 --> 00:02:40,340 kini perbualan untuk apa yang benar-benar boleh tatasusunan 56 00:02:40,340 --> 00:02:43,300 digunakan, tali apa yang benar-benar adalah di bawah hud, 57 00:02:43,300 --> 00:02:47,320 sehingga minggu depan apabila kita mula menyelam dalam walaupun lebih mendalam tentang bagaimana mesin adalah 58 00:02:47,320 --> 00:02:48,590 membuat semua kerja barangan ini. 59 00:02:48,590 --> 00:02:51,920 Tetapi untuk sekarang, mari kita menarik, mungkin, gambar. 60 00:02:51,920 --> 00:02:54,950 >> Apabila anda menulis program dengan mengisytiharkan utama 61 00:02:54,950 --> 00:02:58,810 dengan cara ini, seperti yang utama mengambil dua hujah, int satu 62 00:02:58,810 --> 00:03:03,233 dan- jenis data hujah kedua? 63 00:03:03,233 --> 00:03:04,529 >> PENONTON: Array. 64 00:03:04,529 --> 00:03:05,320 DAVID MALAN: Array. 65 00:03:05,320 --> 00:03:09,170 Jadi ia kelihatan pada pandangan pertama seperti ia adalah satu tali, tetapi notis kurungan persegi. 66 00:03:09,170 --> 00:03:12,760 Ingat masa lalu kami memperkenalkan tanggapan array. 67 00:03:12,760 --> 00:03:16,210 Dan tatasusunan menggunakan kurungan persegi dalam beberapa konteks. 68 00:03:16,210 --> 00:03:19,160 Anda mungkin menggunakan kuasa dua kurungan untuk pergi ke dalam array 69 00:03:19,160 --> 00:03:22,710 dan mendapatkan unsur tertentu, seperti pendakap atau kurungan 0 1 atau kurungan 2. 70 00:03:22,710 --> 00:03:25,500 Tetapi kita lihat, jika secara ringkas, minggu lepas bahawa anda juga 71 00:03:25,500 --> 00:03:28,790 menggunakan kurungan persegi untuk mengisytiharkan saiz array, 72 00:03:28,790 --> 00:03:31,790 jika anda tahu terlebih dahulu berapa banyak ints atau berapa banyak tali atau apa sahaja yang anda 73 00:03:31,790 --> 00:03:32,630 sebenarnya mahu. 74 00:03:32,630 --> 00:03:34,790 Jadi ternyata di luar sana yang konteks ketiga di sini 75 00:03:34,790 --> 00:03:37,890 yang tidak mempunyai bilangan dalam daripada kurungan persegi. 76 00:03:37,890 --> 00:03:41,920 Apabila anda tentukan, kerana saya ada di sini, nama sesuatu seperti argv, 77 00:03:41,920 --> 00:03:44,550 yang hanya satu cara mewah daripada berkata vektor hujah, yang 78 00:03:44,550 --> 00:03:47,750 adalah satu lagi cara yang mewah daripada berkata pelbagai hujah, 79 00:03:47,750 --> 00:03:50,870 kurungan terbuka kurungan rapat hanya bermakna anda tidak semestinya 80 00:03:50,870 --> 00:03:52,960 tahu terlebih dahulu berapa besar array akan menjadi, 81 00:03:52,960 --> 00:03:55,070 tetapi anda tahu ia akan menjadi array. 82 00:03:55,070 --> 00:03:57,320 Jadi, jika anda tidak tahu bilangan tidak meletakkan ia di sana, 83 00:03:57,320 --> 00:04:01,160 untuk pendakap kurungan terbuka rapat bermakna argv tidak rentetan, 84 00:04:01,160 --> 00:04:03,124 tetapi pelbagai tali. 85 00:04:03,124 --> 00:04:05,040 Jadi sintaksis, jika anda berfikir kembali minggu lepas, 86 00:04:05,040 --> 00:04:09,460 ia sangat serupa dengan mengatakan sesuatu seperti int umur kurungan terbuka, 87 00:04:09,460 --> 00:04:10,984 dan kemudian sesuatu selepas itu. 88 00:04:10,984 --> 00:04:12,150 Jadi apakah ini kelihatan seperti? 89 00:04:12,150 --> 00:04:13,399 Mari kita benar-benar menarik gambar. 90 00:04:13,399 --> 00:04:18,756 Oleh itu, apabila anda menjalankan program ini dengan Utama setelah dua hujah yang ditakrifkan dalam 91 00:04:18,756 --> 00:04:21,339 dari orang-orang kurungan, anda dasarnya mempunyai sekurang-kurangnya dua ketulan 92 00:04:21,339 --> 00:04:23,560 memori diserahkan kepada anda di bawah hood. 93 00:04:23,560 --> 00:04:26,550 Satu, kerana saya akan menarik sebagai segi empat tepat ini, akan dipanggil argc. 94 00:04:26,550 --> 00:04:30,645 Dan hanya sebagai recap cepat, apa jenis data daripada argc? 95 00:04:30,645 --> 00:04:31,270 Jadi ia satu int. 96 00:04:31,270 --> 00:04:33,480 Jadi bilangan yang akan pergi dalam giliran argc-- 97 00:04:33,480 --> 00:04:35,660 bahawa bermaksud kiraan hujah. 98 00:04:35,660 --> 00:04:38,887 Sementara itu, saya telah disediakan argv sebagai array. 99 00:04:38,887 --> 00:04:40,970 Dan saya tidak tahu berapa lama ia akan menjadi, 100 00:04:40,970 --> 00:04:42,470 jadi untuk tujuan hari ini dot dot dot. 101 00:04:42,470 --> 00:04:43,636 Ia mungkin akan mendapat beberapa panjang. 102 00:04:43,636 --> 00:04:45,640 Tetapi saya digambarkan di sini sekurang-kurangnya empat segi empat tepat. 103 00:04:45,640 --> 00:04:50,970 Jadi argv sebahagian memori yang menyimpan tali tali tali dot dot dot, 104 00:04:50,970 --> 00:04:53,950 dan argc hanya salah satu sebahagian ingatan 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, apabila saya mempunyai tali dalam pelbagai ini, yang dipanggil 107 00:04:59,200 --> 00:05:03,290 argv, saya ingin mendapatkan pada mereka secara individu, sama seperti minggu lepas, 108 00:05:03,290 --> 00:05:05,670 kita akan menggunakan notasi seperti argv kurungan 0 109 00:05:05,670 --> 00:05:07,650 untuk mendapatkan perkara pertama array. 110 00:05:07,650 --> 00:05:10,440 Argv kurungan 1 untuk mendapatkan Perkara kedua, dan sebagainya. 111 00:05:10,440 --> 00:05:14,597 Kunci di sini kerana kami masih 0 indexed-- kami masih mengira dari 0. 112 00:05:14,597 --> 00:05:16,430 Jadi sekarang mari kita sebenarnya meletakkan sesuatu dalam hal ini. 113 00:05:16,430 --> 00:05:21,670 Jika saya untuk menyusun program yang dikenali sebagai hello dari fail yang dipanggil hello dot c, 114 00:05:21,670 --> 00:05:24,340 dan kemudian saya menjalankan program yang dengan titik mengurangkan hello, 115 00:05:24,340 --> 00:05:28,380 apakah komputer, komputer riba saya saya, kelihatan seperti di bawah hood 116 00:05:28,380 --> 00:05:31,300 masa ini saya jalankan dot mengurangkan khabar dan tekan Enter? 117 00:05:31,300 --> 00:05:33,500 Nah, ini mungkin apa yang kita boleh menggambarkan 118 00:05:33,500 --> 00:05:37,010 sebagai kandungan komputer anda memori, atau ingatan RAM-- Random Access. 119 00:05:37,010 --> 00:05:40,330 Dalam erti kata lain, komputer, entah bagaimana ajaib untuk anda, 120 00:05:40,330 --> 00:05:45,360 meletakkan nombor 1 dalam argc, AKA argcount, dan ia meletakkan literal tali 121 00:05:45,360 --> 00:05:48,200 ./hello dalam argv kurungan 0. 122 00:05:48,200 --> 00:05:51,750 Saya tidak tahu, terus-terang, apa yang dalam argv kurungan 1 atau 2 atau 3, 123 00:05:51,750 --> 00:05:55,550 kerana jika pengguna tidak mempunyai ditaip apa-apa selain ./hello, 124 00:05:55,550 --> 00:05:58,550 kita akan menganggap bahawa ini nilai-nilai sampah kemungkinan besar, 125 00:05:58,550 --> 00:05:59,700 jadi untuk bercakap. 126 00:05:59,700 --> 00:06:02,650 Mereka ketulan memori wujud, tetapi ia tidak terpulang kepada kita 127 00:06:02,650 --> 00:06:05,710 untuk melihat mereka, kerana argcount hanya satu. 128 00:06:05,710 --> 00:06:07,870 >> Sekarang, sementara itu, jika saya menulis menjalankan program yang lain, 129 00:06:07,870 --> 00:06:12,250 cd, yang lebih baik perintah, dalam ruang cd prompt-- berkelip anda 130 00:06:12,250 --> 00:06:17,200 Dropbox-- apabila saya berjalan itu, dengan berkesan, apabila program cd itu berlari, argc, 131 00:06:17,200 --> 00:06:22,270 di dalam memori komputer saya, adalah untuk briefest yang paling kedua nombor 2. 132 00:06:22,270 --> 00:06:25,936 Dan kemudian argv kurungan o mempunyai cd, argv kurungan 1 mempunyai Dropbox, 133 00:06:25,936 --> 00:06:28,560 dan kemudian tentu arahan selesai, jadi kesemua memori ini 134 00:06:28,560 --> 00:06:30,420 pada dasarnya hilang dan digunakan untuk sesuatu yang lain. 135 00:06:30,420 --> 00:06:32,270 Dan itulah sebabnya saya katakan hanya berpecah kedua. 136 00:06:32,270 --> 00:06:35,720 >> Sementara itu, jika kita melakukan mkdir pset2, gambar kelihatan hampir sama, 137 00:06:35,720 --> 00:06:37,900 tetapi dengan tali yang berbeza di dalam argv. 138 00:06:37,900 --> 00:06:42,570 Jika saya lakukan dilafaz dash hello hello dot c, idea sama. 139 00:06:42,570 --> 00:06:47,060 Lebih banyak barangan diisi untuk argv dan argc, sudah tentu, adalah 4. 140 00:06:47,060 --> 00:06:49,150 Jadi dalam erti kata lain, walaupun pelbagai ini 141 00:06:49,150 --> 00:06:52,950 mungkin dot dot dot, beberapa panjang berubah-ubah, jadi untuk bercakap, 142 00:06:52,950 --> 00:06:56,720 anda sentiasa tahu di mana akhir itu adalah, kerana argc akan memberitahu anda 143 00:06:56,720 --> 00:07:00,120 apa-bila anda perlu berhenti mencari unsur-unsur dalam argv. 144 00:07:00,120 --> 00:07:03,660 Anda hanya boleh melihat empat dalam jumlah dalam kes ini. 145 00:07:03,660 --> 00:07:06,600 >> Jadi mari kita kini kita lihat, mungkin, satu program yang mudah. 146 00:07:06,600 --> 00:07:09,070 Satu yang hanya berkata hello kepada seseorang seperti Zamyla. 147 00:07:09,070 --> 00:07:12,620 Jadi saya menuntut saya akan menulis satu program yang hanya dalam masa yang melalui yang saya boleh lakukan 148 00:07:12,620 --> 00:07:16,670 ./hello ruang Zamyla, dan kemudian saya mahu program saya mencetak sesuatu 149 00:07:16,670 --> 00:07:18,520 super mudah seperti "hello, Zamyla." 150 00:07:18,520 --> 00:07:20,100 Sekarang pada masa lalu kita telah menggunakan getstring. 151 00:07:20,100 --> 00:07:22,850 Jadi pada masa lalu, walaupun anda baru kepada pengaturcaraan, 152 00:07:22,850 --> 00:07:27,180 kemungkinan adalah anda boleh menyiapkan satu program yang menggunakan getstring 153 00:07:27,180 --> 00:07:29,390 dan kemudian menggunakan printf untuk mengatakan hi untuk Zamyla. 154 00:07:29,390 --> 00:07:31,290 Tetapi mari kita tidak menggunakan getstring masa ini. 155 00:07:31,290 --> 00:07:37,510 Biar saya bukannya pergi ke Appliant dan boleh dilakukan termasuk standard saya O dot h. 156 00:07:37,510 --> 00:07:41,160 Biar saya juga termasuk CS50 dot h. 157 00:07:41,160 --> 00:07:44,730 Sekarang int utama, dan sekarang saya tidak akan melakukan tidak sah hari ini. 158 00:07:44,730 --> 00:07:51,200 Sebaliknya, saya akan melakukan int argc rentetan argv kurungan terbuka kurungan rapat, 159 00:07:51,200 --> 00:07:52,640 tidak menyatakan nombor. 160 00:07:52,640 --> 00:07:54,644 Dan kini di sini saya dipanggil-lakukan. 161 00:07:54,644 --> 00:07:57,560 Apa yang saya akan lakukan sekarang ialah, saya akan lakukan sedikit lonjakan iman, 162 00:07:57,560 --> 00:08:00,560 Saya akan menganggap bahawa pengguna ini akan menggunakan program ini dengan betul, 163 00:08:00,560 --> 00:08:04,980 dan saya hanya akan melakukan printf hello,% sn. 164 00:08:04,980 --> 00:08:06,630 Jadi perkara baru di sana. 165 00:08:06,630 --> 00:08:11,470 Tetapi saya ingin kini meletakkan apa sahaja perkataan jenis pengguna selepas nama program. 166 00:08:11,470 --> 00:08:16,970 Jadi jika saya lakukan ruang ./hello Zamyla, saya mahu entah bagaimana pengaturcaraan akses 167 00:08:16,970 --> 00:08:20,870 quote unquote "Zamyla." jadi saya boleh pergi ke dalam vektor hujah saya, 168 00:08:20,870 --> 00:08:25,980 array saya tali, dan jika arahan, sekali lagi, adalah ruang ./hello Zamyla, 169 00:08:25,980 --> 00:08:29,340 apa nombor saya mahu untuk dimasukkan ke dalam argv di sini? 170 00:08:29,340 --> 00:08:29,840 PENONTON: 1. 171 00:08:29,840 --> 00:08:32,355 DAVID MALAN: 1, kerana kurungan 0 ternyata 172 00:08:32,355 --> 00:08:34,230 akan menjadi Nama program ini, seperti yang kita lihat. 173 00:08:34,230 --> 00:08:37,789 Jadi kurungan 1 adalah perkataan pertama yang saya, pengguna, sudah menaip. 174 00:08:37,789 --> 00:08:39,559 Saya akan pergi ke depan dan menyelamatkan ini. 175 00:08:39,559 --> 00:08:42,830 Saya akan pergi ke folder saya di mana saya telah diletakkan fail ini. 176 00:08:42,830 --> 00:08:44,920 Saya akan melakukan membuat hello 3. 177 00:08:44,920 --> 00:08:46,230 OK Pert IO ini. 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 Saya terkejut diri saya hanya untuk masa 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 >> PENONTON: Nama. 183 00:08:59,220 --> 00:09:01,767 >> DAVID MALAN: Fail ini sebenarnya dipanggil hello3.c. 184 00:09:01,767 --> 00:09:03,850 Dan saya melakukannya hanya untuk konsisten, kerana kita sudah 185 00:09:03,850 --> 00:09:06,550 mempunyai hello.c dalam lalu dalam kod dalam talian. 186 00:09:06,550 --> 00:09:11,550 Jadi mari kita menetapkan ./hello ini kurungan dash 3 Zamyla. 187 00:09:11,550 --> 00:09:12,370 Enter. 188 00:09:12,370 --> 00:09:14,030 Dan sekarang kita mempunyai hello, Zamyla. 189 00:09:14,030 --> 00:09:17,650 Sementara itu, saya boleh menukar ini kepada menjadi Rob, atau benar-benar apa-apa perkataan yang lain. 190 00:09:17,650 --> 00:09:19,230 >> Tetapi mari kita mempertimbangkan kes sudut. 191 00:09:19,230 --> 00:09:24,360 Apa yang mungkin anda harapkan akan berlaku jika Saya tidak menaip nama sesiapa pun pada semua? 192 00:09:24,360 --> 00:09:25,270 >> PENONTON: Ralat. 193 00:09:25,270 --> 00:09:27,300 >> DAVID MALAN: Ralat sejenis, 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 pelindung sedikit daripada kita 198 00:09:33,870 --> 00:09:38,131 di sini, dan secara literal mencetak Tanda kurung terbuka batal, tetapi perkara yang lebih teruk boleh berlaku. 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 perlu buat, mari kita pergi dalam di sini dan mula poking sekitar. 201 00:09:42,800 --> 00:09:43,300 Betul? 202 00:09:43,300 --> 00:09:46,410 Jika saya tahu bahawa gambar di dalam ingatan pada asasnya ini, 203 00:09:46,410 --> 00:09:52,660 argv kurungan 1 mempunyai Zamyla, argv kurungan 0 mempunyai ./hello, atau ./hello-3. 204 00:09:52,660 --> 00:09:55,400 Apa yang ada dalam kurungan 2? 205 00:09:55,400 --> 00:09:58,210 Jadi saya boleh menjawab bahawa menyoal diri saya, bukan? 206 00:09:58,210 --> 00:10:00,460 Saya hanya boleh menukar 1 kepada 2. 207 00:10:00,460 --> 00:10:07,270 Saya kini boleh susun semula hello 3, ./hello3 Mari mengezum masuk dan tekan Enter. 208 00:10:07,270 --> 00:10:08,270 Whoops. 209 00:10:08,270 --> 00:10:10,660 Tiada tanda quote. 210 00:10:10,660 --> 00:10:12,540 Menarik. 211 00:10:12,540 --> 00:10:15,530 Jadi itulah jenis sejuk untuk lihat apa lagi yang di sini. 212 00:10:15,530 --> 00:10:17,130 >> Jadi apa lagi yang berada di dalam komputer riba saya? 213 00:10:17,130 --> 00:10:20,390 Mari kita simpannya dengan kurungan 3. 214 00:10:20,390 --> 00:10:25,190 Buat hello3, ./hello-3. 215 00:10:25,190 --> 00:10:26,500 Ingin tahu. 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 mendalam ke dalam ingatan komputer saya. 218 00:10:34,340 --> 00:10:35,930 50 dalam indeks. 219 00:10:35,930 --> 00:10:41,950 Oleh itu, hello 3 ./hello-3. 220 00:10:41,950 --> 00:10:42,680 Ingin tahu. 221 00:10:42,680 --> 00:10:44,660 Baiklah, sekarang saya hanya akan mendapat melulu. 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 biarlah saya susun semula. 225 00:10:49,520 --> 00:10:51,460 Buat 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 Kini sebahagian daripada anda, mungkin terdapat menjadi bola lampu terkeluar. 229 00:10:59,250 --> 00:11:01,900 Berapa ramai daripada anda mempunyai lihat mesej ini? 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 berbeza perkara yang boleh menyebabkan ini, 233 00:11:07,250 --> 00:11:09,730 dan jelas anda berada dalam baik company-- kita perlu jelas 234 00:11:09,730 --> 00:11:11,900 disebabkan apa yang dipanggil suatu 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 bahawa saya tidak sepatutnya. 237 00:11:17,060 --> 00:11:19,970 Di mana segmen yang hanya bermakna sebahagian yang ingatan bahawa saya tidak sepatutnya. 238 00:11:19,970 --> 00:11:25,530 Sekarang komputer menjamin bahawa jika saya menjalankan ./helloZamyla yang saya boleh menyentuh argv 239 00:11:25,530 --> 00:11:27,760 menjadi kurungan 0 dan argv kurungan 1. 240 00:11:27,760 --> 00:11:32,730 Tetapi argc adalah nilai 2, itu bererti saya hanya allowed-- ia semacam penghormatan 241 00:11:32,730 --> 00:11:35,180 system-- menyentuh 0 kurungan dan kurungan 1. 242 00:11:35,180 --> 00:11:37,990 Jika saya pergi mana-mana lebih jauh, ada benar-benar akan menjadi memori di sana. 243 00:11:37,990 --> 00:11:40,660 RAM saya wujud secara fizikal dalam komputer. 244 00:11:40,660 --> 00:11:42,080 Tetapi yang mengetahui apa yang ada? 245 00:11:42,080 --> 00:11:44,450 Sesungguhnya, saya menjalankan beberapa program pada satu masa. 246 00:11:44,450 --> 00:11:46,910 Saya mungkin mempunyai seen-- jika saya tidak melakukan ini pada Appliant 247 00:11:46,910 --> 00:11:49,937 tetapi pada Mac atau PC-- saya mungkin mempunyai melihat kandungan e-mel. 248 00:11:49,937 --> 00:11:52,270 Saya mungkin telah dilihat sekelip mesej saya telah dihantar baru-baru ini. 249 00:11:52,270 --> 00:11:55,390 Apa-apa sahaja yang mungkin yang terlintas di dalam ingatan 250 00:11:55,390 --> 00:11:59,180 boleh dilihat melalui ini sewenang-wenangnya notasi braket persegi. 251 00:11:59,180 --> 00:12:02,850 Atau, lebih buruk lagi, anda mungkin mempunyai didapati salah satu kata laluan saya 252 00:12:02,850 --> 00:12:05,859 yang saya baru-baru ini akan ditaip dalam, bahawa program telah disimpan di dalam memori supaya 253 00:12:05,859 --> 00:12:07,900 untuk mengesahkan saya, dan maka hanya jenis meninggalkannya 254 00:12:07,900 --> 00:12:09,910 dalam RAM sehingga saya berhenti program itu. 255 00:12:09,910 --> 00:12:12,860 >> Dan sesungguhnya, ini adalah salah satu bahaya dan satu kuasa yang 256 00:12:12,860 --> 00:12:15,980 menggunakan bahasa seperti C. Anda mempunyai akses penuh 257 00:12:15,980 --> 00:12:18,860 kepada seluruh kandungan memori program ini, 258 00:12:18,860 --> 00:12:21,340 dan apa yang jahat boleh walaupun lakukan di cases-- 259 00:12:21,340 --> 00:12:23,807 terutamanya apabila kita mendapatkan untuk pengaturcaraan web 260 00:12:23,807 --> 00:12:26,890 ke arah akhir semester, kita akan semula topic-- ini mencucuk di sekitar, 261 00:12:26,890 --> 00:12:31,660 berpotensi, seseorang dalam komputer memori dan mencari perkara-perkara yang ingin tahu 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 lebih teruk lagi, kata laluan yang dia atau dia boleh gunakan untuk melakukan perkara-perkara yang tidak baik. 264 00:12:36,900 --> 00:12:40,240 >> Jadi jelas saya tidak sepatutnya melakukan ini, kerana perkara-perkara pelik mula berlaku. 265 00:12:40,240 --> 00:12:42,310 Sesungguhnya, ini adalah program terhempas. 266 00:12:42,310 --> 00:12:44,580 Ini akan menjadi setaraf Mac OS atau Windows 267 00:12:44,580 --> 00:12:46,770 tetingkap program hanya menghilang. 268 00:12:46,770 --> 00:12:48,300 Ralat yang tidak dijangka telah berlaku. 269 00:12:48,300 --> 00:12:50,840 Dalam persekitaran baris arahan yang kita melihat sesuatu seperti ini. 270 00:12:50,840 --> 00:12:54,480 Tetapi itulah sebabnya, adalah saya menyentuh memori yang bukan milik saya. 271 00:12:54,480 --> 00:12:57,090 >> Jadi mari kita mempertahankan terhadap ini sedikit dengan cara yang berbeza 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, rangka yang kita lihat earlier-- 274 00:13:01,000 --> 00:13:02,480 dan saya telah menekankan int masa ini. 275 00:13:02,480 --> 00:13:05,900 Dan semua utama masa ini mempunyai sesungguhnya kembali nilai. 276 00:13:05,900 --> 00:13:09,120 Walaupun di kebanyakan kuliah kami contoh kita tidak pernah pernah digunakan 277 00:13:09,120 --> 00:13:10,990 kembali apa-apa dalam utama. 278 00:13:10,990 --> 00:13:13,710 Kami hanya menulis printf rapat pendakap kerinting dan itu sahaja. 279 00:13:13,710 --> 00:13:16,500 Tetapi secara percuma, apa yang penyusun lakukan untuk anda, 280 00:13:16,500 --> 00:13:19,510 berkesan, kembali 0 untuk anda. 281 00:13:19,510 --> 00:13:22,950 Menghidupkan out-- dan ia sedikit counterintuitive-- bahawa 0 adalah baik. 282 00:13:22,950 --> 00:13:24,690 Ia tidak bermakna palsu semata-mata. 283 00:13:24,690 --> 00:13:29,080 0 adalah baik, dan apa-apa yang tidak 0- nilai, dunia telah membuat keputusan, 284 00:13:29,080 --> 00:13:30,619 boleh menandakan ralat. 285 00:13:30,619 --> 00:13:32,910 Jadi jika anda pernah merosakkan sesuatu sehingga pada komputer anda, 286 00:13:32,910 --> 00:13:36,600 atau program yang baru sahaja meninggal dunia pada anda dan anda telah mendapat beberapa tingkap salah 287 00:13:36,600 --> 00:13:40,360 pada skrin anda, kesilapan berkata negatif 49 atau kesilapan 23-- 288 00:13:40,360 --> 00:13:44,170 beberapa value-- seolah-olah sewenang-wenangnya itu kerana seorang programmer telah berkod keras 289 00:13:44,170 --> 00:13:49,370 nilai negatif seperti 49 atau positif 23 untuk mewakili mana-mana nombor, berani berkata, 290 00:13:49,370 --> 00:13:53,340 daripada 4 bilion perkara yang mungkin yang mungkin berlaku dalam program. 291 00:13:53,340 --> 00:13:55,700 >> Jadi bagaimana saya mungkin mengambil kesempatan ini sendiri? 292 00:13:55,700 --> 00:13:58,970 Baiklah, biar saya membuka program yang saya tulis terlebih dahulu, 293 00:13:58,970 --> 00:14:01,450 dan mencucuk di sekitar talian yang dipanggil hello 4. 294 00:14:01,450 --> 00:14:05,650 Dan ia hampir sama, kecuali yang mendapat sedikit kesilapan semakan. 295 00:14:05,650 --> 00:14:09,660 Dalam kes ini, saya sekali lagi diisytiharkan utama sebagai mengambil dua hujah, 296 00:14:09,660 --> 00:14:13,180 tetapi kali ini, pada baris 17, notis Saya melakukan sedikit cek kewarasan. 297 00:14:13,180 --> 00:14:17,100 Saya memastikan bahawa argc sama sama 2. 298 00:14:17,100 --> 00:14:18,960 Kerana jika ia adalah, bahawa bermakna saya boleh dengan selamat 299 00:14:18,960 --> 00:14:21,420 menyentuh bukan sahaja kurungan 0, tetapi kurungan 1. 300 00:14:21,420 --> 00:14:24,330 Dan saya pergi ke hadapan dan mencetak, dalam kes ini, Zamyla atau Rob 301 00:14:24,330 --> 00:14:26,020 atau apa sahaja perkataan yang saya menaip. 302 00:14:26,020 --> 00:14:28,020 Dan kini hanya untuk mendapatkan sedikit lebih tepat, 303 00:14:28,020 --> 00:14:31,910 Saya akan kembali dengan jelas 0 untuk menandakan semuanya berjalan dengan lancar. 304 00:14:31,910 --> 00:14:33,300 Tiada apa-apa yang buruk berlaku. 305 00:14:33,300 --> 00:14:38,590 >> Tetapi oleh konvensyen, saya akan kembali 1, atau apa-apa terus terang-0 bukan nilai, 306 00:14:38,590 --> 00:14:40,160 jika sesuatu yang salah. 307 00:14:40,160 --> 00:14:43,270 Kini pengguna tidak akan benar-benar melihat apa yang berlaku. 308 00:14:43,270 --> 00:14:50,410 Malah jika saya pergi ke direktori ini, kita zum dalam dan jangan membuat hello 4, 309 00:14:50,410 --> 00:14:54,210 ./hello-4 Zamyla berkelakuan seperti yang saya harapkan. 310 00:14:54,210 --> 00:14:58,570 Tetapi jika saya bukan tidak menaip apa-apa, apa-apa seolah-olah berlaku, 311 00:14:58,570 --> 00:14:59,680 tetapi ia tidak crash. 312 00:14:59,680 --> 00:15:04,660 Dan jika saya bukan melakukan sesuatu seperti Rob adalah proctor yang 313 00:15:04,660 --> 00:15:07,550 dalam perkongsian Thayer-- maklumat sewenang-wenangnya. 314 00:15:07,550 --> 00:15:13,680 Tetapi notis, argv 1, 2, 3, 4, dan 5 kini perlu wujud dalam ingatan. 315 00:15:13,680 --> 00:15:16,540 Itu juga tidak apa yang program saya menjangka, 316 00:15:16,540 --> 00:15:20,300 kerana saya telah diperiksa sama ada argc sama setaraf 2 atau tidak. 317 00:15:20,300 --> 00:15:22,140 Jadi saya kini mempertahankan terhadap ini. 318 00:15:22,140 --> 00:15:25,290 >> Sekarang, sebagai diketepikan, kita yang programmer-- atau sebaliknya kita users-- yang 319 00:15:25,290 --> 00:15:29,670 tidak pernah melihat bahawa 0 atau 1 tetapi menggunakan alat dipanggil Debugger-, atau alat-alat lain, 320 00:15:29,670 --> 00:15:32,250 seperti yang kita akan lihat sebelum panjang, anda pengaturcara 321 00:15:32,250 --> 00:15:36,590 benar-benar dapat melihat apa yang mungkin menjadi yang salah di dalam program anda. 322 00:15:36,590 --> 00:15:39,170 >> Jadi, mana-mana soalan di argc? 323 00:15:39,170 --> 00:15:40,873 Yeah. 324 00:15:40,873 --> 00:15:45,292 >> PENONTON: saya lihat di mana mereka tidak mempunyai watak, [didengar] 325 00:15:45,292 --> 00:15:49,669 hanya berkata rentetan bintang d, seperti watak asterisk koma. 326 00:15:49,669 --> 00:15:50,710 Adakah mereka sama di sini? 327 00:15:50,710 --> 00:15:51,626 >> DAVID MALAN: Mereka. 328 00:15:51,626 --> 00:15:55,080 Jadi persoalannya ialah, anda perlu program kadang-kadang dilihat 329 00:15:55,080 --> 00:15:57,270 seperti ini yang tidak katakan tali argv kurungan 330 00:15:57,270 --> 00:16:01,015 tetapi sebaliknya mengatakan sesuatu seperti char argv bintang kurungan. 331 00:16:01,015 --> 00:16:03,140 Dan ada juga 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 Buat masa ini, kita mempunyai jenis roda latihan 334 00:16:06,240 --> 00:16:09,737 di dalam bentuk rentetan dalam CS50 perpustakaan, tetapi dalam hanya lebih seminggu 335 00:16:09,737 --> 00:16:12,570 atau supaya kita akan mengeluarkan yang halangan sama sekali dan benar-benar 336 00:16:12,570 --> 00:16:16,820 melihat apa yang char dan bintang , dan bagaimana mereka berkaitan dengan memori 337 00:16:16,820 --> 00:16:18,140 perwakilan amnya. 338 00:16:18,140 --> 00:16:19,540 Oleh itu, kita akan kembali kepada itu. 339 00:16:19,540 --> 00:16:21,540 >> Soalan-soalan lain di argv atau argc kita? 340 00:16:21,540 --> 00:16:22,397 Yeah. 341 00:16:22,397 --> 00:16:24,438 PENONTON: Mengapa ia kembali ralat [didengar]? 342 00:16:24,438 --> 00:16:27,147 343 00:16:27,147 --> 00:16:29,230 DAVID MALAN: Kenapa ia tidak kembali kesilapan only-- oh! 344 00:16:29,230 --> 00:16:31,813 Dalam kes sebelum ini, apabila kita telah futzing sekitar dengan ingatan, 345 00:16:31,813 --> 00:16:35,110 mengapa ia hanya kembali kesilapan apabila saya benar-benar ditaip satu jumlah yang besar? 346 00:16:35,110 --> 00:16:36,620 Jawapan ringkasnya adalah, kita hanya mendapat bertuah. 347 00:16:36,620 --> 00:16:39,240 Secara umumnya, komputer memperuntukkan ingatan dalam ketulan, 348 00:16:39,240 --> 00:16:42,900 dan ia memberikan saya sebahagian yang cukup besar yang Saya terlepas, tanpa disedari, 349 00:16:42,900 --> 00:16:46,280 pendakap menyentuh 2, kurungan 3, pendakap 50, tetapi sebaik sahaja saya menolak 350 00:16:46,280 --> 00:16:49,080 nasib saya, saya pergi di luar sempadan sebahagian memori 351 00:16:49,080 --> 00:16:50,520 sistem operasi telah memberikan saya. 352 00:16:50,520 --> 00:16:52,720 Dan itu apabila ia diapit ke bawah dan berkata, tidak. 353 00:16:52,720 --> 00:16:54,580 Ralat Segmentasi. 354 00:16:54,580 --> 00:16:55,692 Yeah. 355 00:16:55,692 --> 00:16:58,890 >> PENONTON: Bagaimana komputer tahu nilai argc? 356 00:16:58,890 --> 00:17:02,390 >> DAVID MALAN: Bagaimana komputer tahu nilai argc? 357 00:17:02,390 --> 00:17:07,920 Apabila anda menjalankan program, program itu, dengan sifat yang cepat berkelip, 358 00:17:07,920 --> 00:17:11,359 diserahkan yang pelbagai perkataan yang telah ditaip 359 00:17:11,359 --> 00:17:13,300 di segera, itu adalah ditaip pada segera itu. 360 00:17:13,300 --> 00:17:16,569 Dan jadi ia adalah operasi anda sistem yang pada dasarnya 361 00:17:16,569 --> 00:17:20,329 populates hujah utama untuk anda. 362 00:17:20,329 --> 00:17:22,829 Jadi, salah satu perkhidmatan yang anda dapat, jenis diam-diam 363 00:17:22,829 --> 00:17:24,869 di bawah hud sistem operasi. 364 00:17:24,869 --> 00:17:27,118 Soalan-soalan lain? 365 00:17:27,118 --> 00:17:27,618 Yeah. 366 00:17:27,618 --> 00:17:29,787 >> PENONTON: Apakah dump teras bermakna? 367 00:17:29,787 --> 00:17:31,370 DAVID MALAN: Apakah dump teras bermakna? 368 00:17:31,370 --> 00:17:32,950 Jadi itu adalah satu soalan yang baik. 369 00:17:32,950 --> 00:17:35,312 Dan biarlah saya pergi semula ke direktori ini di sini. 370 00:17:35,312 --> 00:17:37,270 Dan anda akan melihat bahawa Saya mempunyai fail baru di sana. 371 00:17:37,270 --> 00:17:41,670 Ia memang dipanggil teras, dan ia sebenarnya biasanya fail yang baik bersaiz. 372 00:17:41,670 --> 00:17:45,300 Yang pada asasnya gambar kandungan memori program saya 373 00:17:45,300 --> 00:17:46,902 atau RAM apabila ia terhempas. 374 00:17:46,902 --> 00:17:49,110 Dan ini akan menjadi berguna, berpotensi, diagnostically, 375 00:17:49,110 --> 00:17:52,850 sekali kita bercakap dalam syarahan masa depan dan seksyen mengenai debugging, 376 00:17:52,850 --> 00:17:55,730 kerana anda sebenarnya boleh melakukan bersamaan bedah siasat digital 377 00:17:55,730 --> 00:18:00,300 pada fail yang membantu untuk memikirkan apa yang anda lakukan salah dalam program anda. 378 00:18:00,300 --> 00:18:01,220 Yeah. 379 00:18:01,220 --> 00:18:04,450 >> PENONTON: Apakah argc arahan dalam sendiri, atau boleh anda nama itu apa-apa? 380 00:18:04,450 --> 00:18:05,575 >> DAVID MALAN: Soalan yang baik. 381 00:18:05,575 --> 00:18:08,040 Adalah argc perintah itu sendiri, atau anda boleh menamakan ia apa-apa? 382 00:18:08,040 --> 00:18:09,290 Ia pasti tidak perintah. 383 00:18:09,290 --> 00:18:13,500 Ia hanya pembolehubah ini menamakan atau nama hujah ini, 384 00:18:13,500 --> 00:18:15,481 dan sebagainya benar-benar kita boleh memanggil foo ini, 385 00:18:15,481 --> 00:18:18,480 kita boleh memanggil bar ini, yang cenderung menjadi go-kepada kata-kata yang komputer yang 386 00:18:18,480 --> 00:18:19,860 ahli sains pergi ke. 387 00:18:19,860 --> 00:18:22,820 Tetapi oleh konvensyen, kami menggunakan argc dan argv. 388 00:18:22,820 --> 00:18:25,360 Tetapi itu hanya manusia konvensyen, tidak lebih. 389 00:18:25,360 --> 00:18:25,860 Baiklah. 390 00:18:25,860 --> 00:18:28,140 Jadi ternyata, saya telah memberitahu sedikit lie-- putih 391 00:18:28,140 --> 00:18:31,264 dan terus-terang, pada masa akan datang, anda akan melihat kita telah bercakap bohong putih yang lain. 392 00:18:31,264 --> 00:18:33,510 Tetapi untuk sekarang, kita akan untuk mengupas kembali salah satu. 393 00:18:33,510 --> 00:18:37,310 Dalam kes ini di sini apabila saya sebelum ini berlari program seperti ./hello atau ./hello-3 394 00:18:37,310 --> 00:18:42,780 Zamyla, kami mempunyai kandungan saya memori komputer mencari secara kasar seperti 395 00:18:42,780 --> 00:18:43,280 ini. 396 00:18:43,280 --> 00:18:45,070 Tetapi ingat apa rentetan adalah. 397 00:18:45,070 --> 00:18:49,279 Apa yang kita katakan seminggu yang lalu apa yang rentetan sebenarnya adalah di bawah hud? 398 00:18:49,279 --> 00:18:50,320 PENONTON: Array daripada aksara. 399 00:18:50,320 --> 00:18:52,111 DAVID MALAN: Ia merupakan satu pelbagai aksara, bukan? 400 00:18:52,111 --> 00:18:55,760 Oleh itu, kita mungkin mempunyai pelbagai tali, tetapi, sebaliknya, rentetan 401 00:18:55,760 --> 00:18:57,150 adalah pelbagai watak. 402 00:18:57,150 --> 00:19:00,010 Jadi jika saya benar-benar mahu menjadi dubur apabila saya menarik gambar ini, 403 00:19:00,010 --> 00:19:03,290 Saya benar-benar perlu melukis ia sedikit lebih seperti ini, 404 00:19:03,290 --> 00:19:08,000 di mana di setiap indeks array argv saya, 405 00:19:08,000 --> 00:19:11,432 ada sendiri rentetan keseluruhan yang itu sendiri adalah dalam array. 406 00:19:11,432 --> 00:19:13,140 Dan sekarang yang dusta putih kami memberitahu hari ini 407 00:19:13,140 --> 00:19:15,181 adalah bahawa gambar yang tidak kelihatan agak seperti ini. 408 00:19:15,181 --> 00:19:19,110 Malah, kuasa dua adalah sedikit biasanya di luar segi empat tepat besar 409 00:19:19,110 --> 00:19:19,610 di sana. 410 00:19:19,610 --> 00:19:21,280 Tetapi kita akan kembali kepada yang lama lagi. 411 00:19:21,280 --> 00:19:25,440 Tetapi ini adalah ./hello garis sendeng terbalik 0, bahawa menjadi watak khas yang 412 00:19:25,440 --> 00:19:28,310 demarcates akhir rentetan, dan kami mempunyai satu sama lain selepas 413 00:19:28,310 --> 00:19:29,360 Nama Zamyla ini. 414 00:19:29,360 --> 00:19:30,900 Jadi apa maknanya? 415 00:19:30,900 --> 00:19:33,410 >> Baiklah, biar saya pergi ke depan dan membuka dua contoh lain 416 00:19:33,410 --> 00:19:35,220 yang boleh didapati dalam talian. 417 00:19:35,220 --> 00:19:40,590 Satu dipanggil argv1.c dan yang lain adalah argv2. 418 00:19:40,590 --> 00:19:44,260 Ia adalah satu program super mudah yang adalah berbeza daripada program terdahulu 419 00:19:44,260 --> 00:19:47,260 kerana kini saya menggunakan argc dan argv di sini. 420 00:19:47,260 --> 00:19:54,300 Dan sekarang saya mengintegrasikan dengan gelung selaras 18, dari i = 0 pada sehingga argc. 421 00:19:54,300 --> 00:19:56,850 Dan apa yang saya akan lakukan dengan baris kod ini di sini? 422 00:19:56,850 --> 00:19:58,270 Dalam bahasa Inggeris. 423 00:19:58,270 --> 00:20:00,510 Ini jelas menunjukkan penggunaan argc. 424 00:20:00,510 --> 00:20:03,670 Tetapi dalam bahasa Inggeris, apakah ia lakukan sekiranya saya menjalankan program ini? 425 00:20:03,670 --> 00:20:04,366 Yeah? 426 00:20:04,366 --> 00:20:07,386 >> PENONTON: Ia akan mencetak anda skrin seberapa banyak kali yang anda mahu. 427 00:20:07,386 --> 00:20:08,260 DAVID MALAN: Tepat sekali. 428 00:20:08,260 --> 00:20:10,480 Jadi apa sahaja kata-kata saya taip pada segera, ia 429 00:20:10,480 --> 00:20:13,120 akan muntah mereka pada saya satu bagi setiap baris. 430 00:20:13,120 --> 00:20:14,370 Jadi mari kita pergi ke depan dan melakukan ini. 431 00:20:14,370 --> 00:20:17,862 Biar saya 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, marilah kita memastikan ia mudah. 434 00:20:21,770 --> 00:20:23,834 Mari kita berbuat apa-apa pada mulanya. 435 00:20:23,834 --> 00:20:26,750 Ia melakukan mencetak satu perkara, dan itu memang nama program ini, 436 00:20:26,750 --> 00:20:28,240 kerana itulah dalam kurungan 0. 437 00:20:28,240 --> 00:20:33,290 Jika saya kini mengatakan foo, ia akan berbuat kedua-dua, dan jika saya katakan bar foo, 438 00:20:33,290 --> 00:20:35,580 ia akan mengatakan tiga perkara. 439 00:20:35,580 --> 00:20:37,740 Sekarang ini agak menarik, mungkin. 440 00:20:37,740 --> 00:20:41,450 Tetapi ingat bahawa argv adalah pelbagai tali, 441 00:20:41,450 --> 00:20:45,960 tetapi rentetan adalah pelbagai aksara, supaya kita boleh mengambil perkara sehingga takuk 442 00:20:45,960 --> 00:20:48,560 dan memohon supaya asas logik dan membuat kod yang 443 00:20:48,560 --> 00:20:51,160 kelihatan sedikit lebih samar, diakui. 444 00:20:51,160 --> 00:20:53,540 Tetapi dengan mempunyai bersarang gelung, sesuatu yang serupa 445 00:20:53,540 --> 00:20:57,030 dengan apa yang anda mungkin ingat dari Mario, contohnya, jika anda melakukannya dengan cara ini. 446 00:20:57,030 --> 00:21:00,380 >> Jadi sekarang perhatikan pada baris 19, saya lagi iterating lebih hujah-hujah saya, 447 00:21:00,380 --> 00:21:02,410 dari 0 ke atas sehingga argc. 448 00:21:02,410 --> 00:21:05,510 Dan kini dalam talian 21-- Saya pinjaman helah dari week-- lalu 449 00:21:05,510 --> 00:21:11,090 Saya memeriksa apakah panjang argv kurungan i. 450 00:21:11,090 --> 00:21:12,920 Saya menyimpan jawapan yang di n. 451 00:21:12,920 --> 00:21:18,230 Dan kemudian saya mengintegrasikan dari j pada sehingga n, di mana j adalah dimulakan 0. 452 00:21:18,230 --> 00:21:19,460 Jadi, konvensyen untuk pengiraan. 453 00:21:19,460 --> 00:21:22,335 Sebaik sahaja anda telah menggunakan i, jika anda mempunyai gelung bersarang, anda tidak boleh menggunakan i lagi, 454 00:21:22,335 --> 00:21:25,770 jika tidak, anda akan memukul berkali-kali, berpotensi, nilai di luar gelung dalam. 455 00:21:25,770 --> 00:21:27,200 Jadi saya menggunakan j oleh konvensyen. 456 00:21:27,200 --> 00:21:28,020 Kami mungkin menggunakan k. 457 00:21:28,020 --> 00:21:31,080 Jika anda mempunyai lebih daripada k, anda mungkin mempunyai terlalu banyak sarang, biasanya. 458 00:21:31,080 --> 00:21:33,800 Tetapi sekarang, saya perasan printf garis sedikit berbeza. 459 00:21:33,800 --> 00:21:37,520 Saya tidak mencetak% s, saya mencetak% c, yang, sememangnya, 460 00:21:37,520 --> 00:21:39,460 adalah pemegang tempat untuk char a. 461 00:21:39,460 --> 00:21:40,770 >> Dan kini melihat sintaks ini. 462 00:21:40,770 --> 00:21:41,270 Baru. 463 00:21:41,270 --> 00:21:42,630 Kami tidak dilihat sebelum ini. 464 00:21:42,630 --> 00:21:47,290 Tetapi secara logik, ini hanya bermaksud mendapatkan tali-i dalam argv 465 00:21:47,290 --> 00:21:50,067 dan mendapatkan ke-j yang apa? 466 00:21:50,067 --> 00:21:50,900 PENONTON: Watak. 467 00:21:50,900 --> 00:21:52,800 DAVID MALAN: Watak dalam rentetan itu. 468 00:21:52,800 --> 00:21:57,100 Jadi dengan menggunakan kurungan persegi diikuti dengan kurungan persegi, 469 00:21:57,100 --> 00:22:00,390 ini adalah menyelam pertama ke dalam tali argv ini, 470 00:22:00,390 --> 00:22:02,225 dan kemudian yang kedua kurungan persegi dengan j 471 00:22:02,225 --> 00:22:06,580 adalah terjun ke dalam watak-watak bahawa rentetan tertentu dalam argv. 472 00:22:06,580 --> 00:22:09,562 Dan kemudian, hanya untuk langkah yang baik, Saya mencetak garis baru di sini. 473 00:22:09,562 --> 00:22:12,020 Jadi sekarang biarlah saya pergi ke hadapan dan membuka tetingkap yang lebih besar sedikit 474 00:22:12,020 --> 00:22:13,600 supaya kita boleh melihat ini dalam tindakan. 475 00:22:13,600 --> 00:22:15,700 Biar saya pergi ke dalam folder itu. 476 00:22:15,700 --> 00:22:22,550 Dan kini melakukan 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 ia adalah sukar sedikit untuk membaca secara menegak, 479 00:22:24,860 --> 00:22:27,920 tetapi itu memang nama program, diikuti oleh garis kosong. 480 00:22:27,920 --> 00:22:30,210 Sekarang, saya akan pergi ke hadapan dan melakukan foo. 481 00:22:30,210 --> 00:22:33,210 Begitu sukar untuk dibaca, tetapi ia sesungguhnya mencetak satu aksara setiap baris. 482 00:22:33,210 --> 00:22:36,780 Dan jika saya lakukan bar, kini ia mencetak talian mereka demi baris. 483 00:22:36,780 --> 00:22:40,140 Jadi bisa dibesarkan di sini tidak begitu banyak bahawa, wow, melihat silap mata ini baru kemas 484 00:22:40,140 --> 00:22:44,750 di mana anda boleh mendapatkan di kandungan aksara tertentu pelbagai ini, 485 00:22:44,750 --> 00:22:48,380 tetapi bagaimana kita mengambil asas ini idea-idea seperti pengindeksan ke dalam array, 486 00:22:48,380 --> 00:22:51,620 dan kemudian mengindeks ke dalam array yang berada di pelbagai itu, 487 00:22:51,620 --> 00:22:56,180 dan hanya menggunakan idea-idea yang sama kepada contoh sedikit lebih canggih. 488 00:22:56,180 --> 00:22:59,560 Tetapi asas-asas benar-benar tidak mempunyai berubah, bahkan sejak minggu lepas. 489 00:22:59,560 --> 00:23:02,350 >> Ini adalah jenis yang tepat pada masanya, dalam itu, masih ingat, pada minggu sifar 490 00:23:02,350 --> 00:23:04,110 kami bermain dengan buku telefon seperti ini. 491 00:23:04,110 --> 00:23:06,670 Dan walaupun ini jelas keping fizikal kertas, 492 00:23:06,670 --> 00:23:09,150 anda boleh jenis memikirkan buku telefon sebagai array. 493 00:23:09,150 --> 00:23:12,770 Sudah tentu, jika anda adalah untuk reimplement ini keping keping kertas 494 00:23:12,770 --> 00:23:15,260 dalam suatu komputer, mungkin anda akan menggunakan sesuatu 495 00:23:15,260 --> 00:23:20,270 seperti array untuk menyimpan semua orang-orang nama dan nombor dari A sepanjang jalan 496 00:23:20,270 --> 00:23:23,800 melalui Z. Jadi ini adalah bagus, kerana ia membolehkan kita peluang, 497 00:23:23,800 --> 00:23:28,310 mungkin, untuk mempertimbangkan bagaimana anda mungkin sebenarnya melaksanakan sesuatu seperti itu. 498 00:23:28,310 --> 00:23:31,250 Seperti siri pintu di sini. 499 00:23:31,250 --> 00:23:36,380 Jadi jika saya could-- kita perlu satu sukarelawan untuk datang sehingga. 500 00:23:36,380 --> 00:23:36,980 Mari kita lihat. 501 00:23:36,980 --> 00:23:40,650 Satu wajah yang tidak dikenali mungkin, muka yang tidak dikenali mungkin. 502 00:23:40,650 --> 00:23:42,090 Bagaimana pula dalam oren? 503 00:23:42,090 --> 00:23:42,680 Di sini. 504 00:23:42,680 --> 00:23:45,870 Baju oren, datang ke atas. 505 00:23:45,870 --> 00:23:52,230 >> Mari kita pergi ke hadapan sekarang dan langkah pintu-pintu ini ke yang sebelah, 506 00:23:52,230 --> 00:23:54,020 bergerak ini daripada cara untuk seketika. 507 00:23:54,020 --> 00:23:56,600 508 00:23:56,600 --> 00:23:57,760 Apa 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 Daud. 512 00:23:58,680 --> 00:23:59,451 Nice untuk bertemu dengan kamu. 513 00:23:59,451 --> 00:23:59,950 Baiklah. 514 00:23:59,950 --> 00:24:04,500 Jadi kita mempunyai belakang enam pintu digital pada screen-- yang 515 00:24:04,500 --> 00:24:07,810 atau, sebaliknya, tujuh pintu di screen-- sejumlah besar nombor. 516 00:24:07,810 --> 00:24:10,099 Dan saya memberitahu anda apa-apa dalam advance-- bersetuju? 517 00:24:10,099 --> 00:24:11,140 Ajay: Tiada apa-apa terlebih dahulu. 518 00:24:11,140 --> 00:24:14,730 DAVID MALAN: Apa yang saya mahu anda lakukan sekarang ialah untuk mencari bagi saya, dan bagi kami, 519 00:24:14,730 --> 00:24:20,920 benar-benar, bilangan 50, satu langkah pada satu masa. 520 00:24:20,920 --> 00:24:21,830 >> Ajay: Nombor 50? 521 00:24:21,830 --> 00:24:22,580 >> DAVID MALAN: Bilangan 50. 522 00:24:22,580 --> 00:24:24,746 Dan anda boleh mendedahkan apa yang di belakang setiap pintu-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 Celaka. [Ketawa] 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 mempunyai hadiah yang indah hadiah untuk anda di sini. 529 00:24:44,090 --> 00:24:46,520 Pick anda filem kita dibincangkan minggu lepas. 530 00:24:46,520 --> 00:24:47,362 >> Ajay: Oh, manusia. 531 00:24:47,362 --> 00:24:49,050 Oh, saya tidak 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 berpegang hanya satu masa. 535 00:24:53,790 --> 00:24:57,430 How-- mari kita membuat ini yang moment-- boleh diajar 536 00:24:57,430 --> 00:25:00,412 bagaimana anda pergi tentang mencari bilangan 50? 537 00:25:00,412 --> 00:25:01,370 Ajay: Saya memilih secara rawak. 538 00:25:01,370 --> 00:25:03,420 DAVID MALAN: Jadi anda memilih secara rawak dan mendapat bertuah. 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 Cemerlang. 542 00:25:05,050 --> 00:25:08,470 Jadi sekarang, anda tidak mempunyai mendapat bernasib baik, apa lagi 543 00:25:08,470 --> 00:25:10,210 yang mungkin telah berlaku di sebalik pintu-pintu ini? 544 00:25:10,210 --> 00:25:12,930 Jadi, jika saya pergi ke depan dan mendedahkan nombor-nombor ini di sini, 545 00:25:12,930 --> 00:25:15,180 mereka benar-benar berada dalam susunan rawak. 546 00:25:15,180 --> 00:25:17,750 Dan yang terbaik anda boleh mempunyai dilakukan, terus-terang, adalah dengan, akhirnya, 547 00:25:17,750 --> 00:25:19,410 dalam kes paling teruk, memeriksa mereka semua. 548 00:25:19,410 --> 00:25:23,000 Jadi, anda mendapat super-bertuah, yang tidak apa yang kita akan memanggil algoritma. 549 00:25:23,000 --> 00:25:24,730 Ya, mengucapkan tahniah kepada. 550 00:25:24,730 --> 00:25:27,010 Tetapi sekarang let's-- humor saya, jika anda boleh. 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 nombor dalam jelas apa yang seolah-olah susunan rawak, 553 00:25:31,460 --> 00:25:32,280 dan mereka. 554 00:25:32,280 --> 00:25:35,160 Tetapi sekarang jika saya bukan tuntutan bahawa di sebalik pintu-pintu ini 555 00:25:35,160 --> 00:25:39,070 adalah nombor yang disusun. 556 00:25:39,070 --> 00:25:41,780 Matlamatnya sekarang ialah juga mencari kami bilangan 50. 557 00:25:41,780 --> 00:25:45,910 Tetapi melakukannya algorithmically, dan memberitahu kami bagaimana anda akan mengenainya. 558 00:25:45,910 --> 00:25:48,020 Dan jika anda merasa, anda menyimpan filem. 559 00:25:48,020 --> 00:25:49,520 Anda tidak menemuinya, anda memberikan kembali. 560 00:25:49,520 --> 00:25:52,720 561 00:25:52,720 --> 00:25:58,112 Ajay: Jadi saya akan menyemak hujung pertama, untuk menentukan jika there's-- 562 00:25:58,112 --> 00:26:02,048 [Ketawa dan tepukan] 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 terdahulu Ajay ini, 567 00:26:21,700 --> 00:26:25,450 Sean, yang tidak cukup sebagai bertuah. 568 00:26:25,450 --> 00:26:28,670 OK, jadi tugas anda di sini, Sean, adalah yang berikut. 569 00:26:28,670 --> 00:26:32,970 Saya telah tersembunyi di balik ini pintu nombor tujuh, 570 00:26:32,970 --> 00:26:37,200 tetapi terletak jauh di beberapa pintu-pintu ini dan juga adalah nombor bukan negatif lain. 571 00:26:37,200 --> 00:26:40,730 Dan matlamat anda adalah untuk memikirkan ini baris atas nombor sebagai hanya array. 572 00:26:40,730 --> 00:26:43,590 Kami mudah dihubungi urutan keping kertas dengan nombor di belakang mereka. 573 00:26:43,590 --> 00:26:47,640 Dan matlamat anda adalah, hanya menggunakan bahagian atas array di sini, saya mendapati nombor tujuh. 574 00:26:47,640 --> 00:26:51,200 Dan kami kemudian akan mengkritik bagaimana anda pergi tentang melakukannya. 575 00:26:51,200 --> 00:26:52,920 Cari kami nombor tujuh, sila. 576 00:26:52,920 --> 00:27:02,570 577 00:27:02,570 --> 00:27:03,070 No. 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 Ia bukan satu soalan helah. 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 ketika ini skor anda tidak begitu baik, jadi anda juga mungkin menyimpan berterusan. 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 Teruskan. 590 00:27:39,802 --> 00:27:42,510 Terus terang, saya tidak boleh membantu tetapi tertanya-tanya apa yang anda bahkan berfikir tentang. 591 00:27:42,510 --> 00:27:44,990 >> SEAN: boleh saya ambil 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 telah mendapat tiga kiri. 594 00:27:47,281 --> 00:27:48,310 Jadi saya mencari 7. 595 00:27:48,310 --> 00:27:54,758 596 00:27:54,758 --> 00:27:59,141 >> [PENONTON menjerit CADANGAN] 597 00:27:59,141 --> 00:28:22,210 598 00:28:22,210 --> 00:28:26,130 Jadi kedua-dua mereka yang sungguh hebat atas sebab-sebab yang sangat berbeza. 599 00:28:26,130 --> 00:28:29,150 Jadi ini adalah di mana kita berhenti seketika lalu, 600 00:28:29,150 --> 00:28:32,530 dan wawasan yang utama di sini pintu-pintu ini telah mempunyai nombor 601 00:28:32,530 --> 00:28:37,390 di belakang mereka yang telah disusun, yang sesuai Fleet yang mana adalah bahawa anda boleh lakukan 602 00:28:37,390 --> 00:28:39,670 asasnya yang lebih baik dalam example-- kedua ini 603 00:28:39,670 --> 00:28:42,380 dan, sememangnya, itu adalah Sean percubaan pertama dengan nombor rawak 604 00:28:42,380 --> 00:28:45,460 seperti before-- tetapi sebaik sebagai nombor-nombor ini disusun, 605 00:28:45,460 --> 00:28:47,980 sama seperti buku telefon, apa yang boleh anda jelas lakukan? 606 00:28:47,980 --> 00:28:50,090 Atau bagaimana anda boleh memanfaatkan pengetahuan itu? 607 00:28:50,090 --> 00:28:51,530 Yeah. 608 00:28:51,530 --> 00:28:54,910 >> PENONTON: Anda pergi separuh jalan [didengar]. 609 00:28:54,910 --> 00:28:55,660 DAVID MALAN: Yeah. 610 00:28:55,660 --> 00:28:56,160 Tepat sekali. 611 00:28:56,160 --> 00:28:59,680 Jadi naluri awal Ajay adalah untuk memeriksa hujung, seperti yang saya ingat, 612 00:28:59,680 --> 00:29:02,320 dan kemudian kita semacam siap contoh dengan cepat. 613 00:29:02,320 --> 00:29:05,220 Tetapi jika kita mula melakukan ini lebih teratur sepanjang garis, 614 00:29:05,220 --> 00:29:07,860 tetapi bermula mungkin dalam pertengahan, kerana mereka disusun, 615 00:29:07,860 --> 00:29:10,900 selepas kami mendedahkan nombor 16, oleh itu kita know-- 616 00:29:10,900 --> 00:29:14,850 dan mari kita buat betul-betul bahawa- kami oleh itu tahu bahawa 50, dalam kes hari ini, 617 00:29:14,850 --> 00:29:16,080 telah mendapat untuk menjadi ke kanan. 618 00:29:16,080 --> 00:29:18,735 Jadi, seperti pada minggu sifar apabila kita mengoyakkan buku telefon pada separuh 619 00:29:18,735 --> 00:29:21,490 dan melemparkan separuh daripada masalah diri, idea yang sama di sini. 620 00:29:21,490 --> 00:29:23,680 Kita boleh membuang separuh ini masalah dari sini. 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 apabila anda tahu bahawa 50 mesti ke kanan, jika ia di mana-mana, 623 00:29:28,710 --> 00:29:31,390 adalah cuba di sana, di tengah-tengah pintu yang tinggal. 624 00:29:31,390 --> 00:29:33,450 Sudah tentu, 50 adalah lebih tinggi daripada 42, jadi kita boleh 625 00:29:33,450 --> 00:29:36,060 membuang baki ini perempat daripada masalah yang jauh, 626 00:29:36,060 --> 00:29:38,510 dan, akhirnya, mengenal pasti sesuatu seperti 50. 627 00:29:38,510 --> 00:29:41,050 Tetapi sama seperti dengan buku telefon, nombor-nombor 628 00:29:41,050 --> 00:29:44,560 telah diberikan kepada kita sudah perintah disusun, yang meninggalkan kita 629 00:29:44,560 --> 00:29:47,450 dengan soalan, bagaimana anda mendapatkan benda-benda ke dalam perintah disusun? 630 00:29:47,450 --> 00:29:49,640 Dan, terus terang, pada apa kos? 631 00:29:49,640 --> 00:29:51,390 Ia satu perkara untuk menjadi diserahkan buku telefon 632 00:29:51,390 --> 00:29:54,810 dan kemudian menarik perhatian rakan-rakan anda dengan mencari nombor telefon benar-benar cepat, betul? 633 00:29:54,810 --> 00:29:58,520 Mengoyak 32 muka surat keluar untuk mencari orang daripada 4 bilion laman, 634 00:29:58,520 --> 00:30:00,470 yang kami katakan adalah satu contoh yang melampau. 635 00:30:00,470 --> 00:30:03,320 Tetapi berapa banyak masa ia mengambil Verizon untuk menyusun buku telefon? 636 00:30:03,320 --> 00:30:06,170 Berapakah masa yang diambil kami untuk menyusun tujuh nombor? 637 00:30:06,170 --> 00:30:10,110 Itu satu soalan yang kita perlu setakat ini benar-benar diabaikan. 638 00:30:10,110 --> 00:30:12,330 >> Jadi mari kita menjawab soalan ini sekarang. 639 00:30:12,330 --> 00:30:15,920 Dan kita semua daripada filem sekarang, tetapi kita mempunyai beberapa bola tekanan. 640 00:30:15,920 --> 00:30:19,480 Jika, berkata, lapan sukarelawan tidak keberatan menyertai kami di sini? 641 00:30:19,480 --> 00:30:24,100 Mari kita pergi ke hadapan dan melakukan, bagaimana pula empat di antara kamu, tiga daripada anda di sini? 642 00:30:24,100 --> 00:30:25,290 Dapatkan beberapa muka-muka baru. 643 00:30:25,290 --> 00:30:27,220 Dan empat daripada anda di sana? 644 00:30:27,220 --> 00:30:30,760 Dan now-- jangan berat sebelah here-- dan nombor lapan di sini pada akhir. 645 00:30:30,760 --> 00:30:32,060 Marilah naik. 646 00:30:32,060 --> 00:30:32,560 Baiklah. 647 00:30:32,560 --> 00:30:37,480 Jadi apa yang kita ada di sini untuk setiap kamu adalah nombor. 648 00:30:37,480 --> 00:30:40,055 Jika anda ingin pergi ke hadapan, mengambil nombor ini. 649 00:30:40,055 --> 00:30:40,763 Apa 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, okay. 652 00:30:43,100 --> 00:30:44,297 Anda nombor 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 Daud. 656 00:30:46,820 --> 00:30:47,530 Anda nombor 2. 657 00:30:47,530 --> 00:30:49,100 Dan pergi ke depan, kerana saya menyerahkan anda lembaran kertas, 658 00:30:49,100 --> 00:30:52,130 beratur diri kamu di hadapan muzik berdiri dalam perintah itu sama seperti di 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, ia adalah baik untuk melihat anda. 661 00:30:53,970 --> 00:30:54,520 Nombor 3. 662 00:30:54,520 --> 00:30:55,310 >> JACOB: Yakub. 663 00:30:55,310 --> 00:30:56,760 >> DAVID MALAN: Yakub, nombor 4. 664 00:30:56,760 --> 00:30:57,549 Selamat Datang. 665 00:30:57,549 --> 00:30:58,090 GERAN: Grant. 666 00:30:58,090 --> 00:30:58,881 DAVID MALAN: Grant. 667 00:30:58,881 --> 00:31:00,348 Nombor 5. 668 00:31:00,348 --> 00:31:01,200 >> Alanna: Alanna. 669 00:31:01,200 --> 00:31:02,766 >> DAVID MALAN: Alanna, nombor 6. 670 00:31:02,766 --> 00:31:03,589 >> Frances: Frances. 671 00:31:03,589 --> 00:31:04,880 DAVID MALAN: Frances, nombor 7. 672 00:31:04,880 --> 00:31:05,200 Dan? 673 00:31:05,200 --> 00:31:05,830 >> Gosip: Rachel. 674 00:31:05,830 --> 00:31:06,815 >> DAVID MALAN: Rachel, nombor 8. 675 00:31:06,815 --> 00:31:07,100 Baiklah. 676 00:31:07,100 --> 00:31:08,766 Teruskan dan mendapatkan diri anda dalam usaha ini. 677 00:31:08,766 --> 00:31:11,440 Biar saya meletakkan satu baki muzik 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 Teruskan dan hanya meletakkan nombor anda di mana penonton boleh melihat mereka pada, 681 00:31:18,710 --> 00:31:20,340 muzik berdiri menghadap ke luar. 682 00:31:20,340 --> 00:31:27,240 Dan mudah-mudahan, kita yang pertama kewarasan cek here-- 4, 2, 6. 683 00:31:27,240 --> 00:31:27,890 Oh-oh. 684 00:31:27,890 --> 00:31:29,070 Tunggu satu minit. 685 00:31:29,070 --> 00:31:31,140 Kami tidak mempunyai 8. 686 00:31:31,140 --> 00:31:35,180 Saya perlu untuk mengusir kamu dari contoh yang entah bagaimana. 687 00:31:35,180 --> 00:31:35,680 No. 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 boleh melakukan ini. 691 00:31:38,880 --> 00:31:39,440 Berdirilah. 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 Betul. 695 00:31:46,800 --> 00:31:47,360 Baiklah. 696 00:31:47,360 --> 00:31:50,260 Jadi, kita mempunyai 8, 1, 3 7, 5. 697 00:31:50,260 --> 00:31:50,760 OK. 698 00:31:50,760 --> 00:31:51,360 Cemerlang. 699 00:31:51,360 --> 00:31:54,400 >> Jadi soalan yang di tangan adalah, pada apa kos, dan melalui apa kaedah, 700 00:31:54,400 --> 00:31:58,580 boleh kita sebenarnya menyusun nombor-nombor ini di sini supaya kita jenis boleh bekerja ke belakang, 701 00:31:58,580 --> 00:32:02,759 akhirnya, dan decide-- ia benar-benar mengagumkan, ia benar-benar cekap, 702 00:32:02,759 --> 00:32:04,550 yang saya boleh membahagi dan menakluk sebuah buku telefon? 703 00:32:04,550 --> 00:32:06,716 Adakah ia benar-benar berkesan yang Saya boleh membahagi dan menakluk 704 00:32:06,716 --> 00:32:08,600 mereka keping digital kertas di papan, 705 00:32:08,600 --> 00:32:14,500 jika mungkin ia akan kos kita kekayaan dalam masa atau tenaga atau CPU kitaran 706 00:32:14,500 --> 00:32:17,340 untuk benar-benar mendapatkan data kami ke dalam beberapa perintah disusun? 707 00:32:17,340 --> 00:32:18,930 Jadi mari kita bertanya soalan itu. 708 00:32:18,930 --> 00:32:22,077 >> Off oleh itu, nombor-nombor ini adalah cukup banyak dalam susunan rawak, 709 00:32:22,077 --> 00:32:24,160 dan saya akan mencadangkan satu algoritma, atau proses 710 00:32:24,160 --> 00:32:25,970 yang kita boleh menyusun orang-orang ini. 711 00:32:25,970 --> 00:32:28,100 Saya akan menghampiri ini cukup naif. 712 00:32:28,100 --> 00:32:30,730 Dan saya akan mengiktiraf bahawa itu jenis yang banyak bagi saya 713 00:32:30,730 --> 00:32:32,890 untuk membalut fikiran saya sekitar data keseluruhan set sekaligus. 714 00:32:32,890 --> 00:32:33,640 Tetapi anda tahu apa? 715 00:32:33,640 --> 00:32:37,450 Saya akan membuat beberapa pembaikan kecil amat mudah. 716 00:32:37,450 --> 00:32:41,152 4 dan 2 berada di luar perintah, jika matlamat adalah untuk pergi dari 1 pada sehingga 8. 717 00:32:41,152 --> 00:32:41,860 Jadi, anda tahu apa? 718 00:32:41,860 --> 00:32:43,776 Saya akan mempunyai anda guys swap, jika anda menghidupkan 719 00:32:43,776 --> 00:32:46,380 fizikal kedudukan dan kepingan anda kertas. 720 00:32:46,380 --> 00:32:47,894 Kini 4 dan 6, ini adalah teratur. 721 00:32:47,894 --> 00:32:49,060 Saya akan biarkan orang-orang yang berkenaan. 722 00:32:49,060 --> 00:32:50,227 6 dan 8, mereka adalah teratur. 723 00:32:50,227 --> 00:32:51,185 Akan meninggalkan mereka menjadi. 724 00:32:51,185 --> 00:32:52,170 8 and1, keluar perintah. 725 00:32:52,170 --> 00:32:54,790 Jika kamu berdua tidak keberatan pertukaran. 726 00:32:54,790 --> 00:32:57,300 Sekarang 8 dan 3, jika anda semua boleh menukar. 727 00:32:57,300 --> 00:32:59,320 8 dan 7, jika anda semua boleh menukar. 728 00:32:59,320 --> 00:33:01,790 Dan 8 dan 5, jika anda semua boleh menukar. 729 00:33:01,790 --> 00:33:03,980 >> Sekarang, saya dilakukan? 730 00:33:03,980 --> 00:33:05,200 Tidak, jelas tidak. 731 00:33:05,200 --> 00:33:07,880 Tetapi saya telah membuat keadaan yang lebih baik, bukan? 732 00:33:07,880 --> 00:33:09,430 Apakah nama anda sekali lagi, nombor 8? 733 00:33:09,430 --> 00:33:10,055 >> Gosip: Rachel. 734 00:33:10,055 --> 00:33:12,850 DAVID MALAN: Jadi Rachel mempunyai berkesan dipam sehingga cukup jauh, 735 00:33:12,850 --> 00:33:15,660 sehingga ke akhir array saya nombor di sini. 736 00:33:15,660 --> 00:33:17,310 Dan masalah yang jenis diselesaikan. 737 00:33:17,310 --> 00:33:21,670 Kini, jelas, 2 masih perlu bergerak sedikit, dan 4 dan 6 dan 1. 738 00:33:21,670 --> 00:33:24,420 Tetapi saya seolah-olah telah mendapat sedikit lebih dekat dengan penyelesaian. 739 00:33:24,420 --> 00:33:26,790 Jadi mari kita memohon yang 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, nope. 748 00:33:36,590 --> 00:33:37,790 Mari kita swap. 749 00:33:37,790 --> 00:33:38,470 Dan kini 7 dan 8. 750 00:33:38,470 --> 00:33:39,862 Dan apa nama anda 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 dalam walaupun yang lebih baik kedudukan, kerana sekarang 7 dan 8 754 00:33:44,230 --> 00:33:46,440 dengan betul dipam sehingga bahagian 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, swap mari ini. 757 00:33:48,720 --> 00:33:50,410 4 dan 3, swap mari ini. 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, swap mari ini. 760 00:33:53,340 --> 00:33:54,590 Dan kini orang-orang lelaki yang baik. 761 00:33:54,590 --> 00:33:55,780 Kita sudah hampir. 762 00:33:55,780 --> 00:33:57,706 2 dan 1, rosak, jadi menukar. 763 00:33:57,706 --> 00:33:59,080 Dan sekarang mari saya melakukan pemeriksaan 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 selesai. 766 00:34:05,060 --> 00:34:09,310 >> Tetapi pada apa kos yang saya lakukan menyusun nombor-nombor ini di sini? 767 00:34:09,310 --> 00:34:13,960 Nah, berapa banyak langkah-langkah yang saya lakukan berpotensi mengambil apabila sorting orang ini? 768 00:34:13,960 --> 00:34:15,710 Nah, kita akan kembali kepada soalan itu. 769 00:34:15,710 --> 00:34:18,030 Tetapi, terus terang, jika anda mendapat yang bosan sedikit, itu 770 00:34:18,030 --> 00:34:22,270 jenis mendedahkan bahawa ini tidak mungkin algoritma yang paling berkesan. 771 00:34:22,270 --> 00:34:25,230 Dan sesungguhnya, terus-terang, saya berpeluh semua lebih berjalan belakang dan sebagainya. 772 00:34:25,230 --> 00:34:26,639 Yang tidak berasa terutamanya cekap. 773 00:34:26,639 --> 00:34:27,805 Jadi mari kita cuba sesuatu yang lain. 774 00:34:27,805 --> 00:34:31,870 Jika anda semua boleh menetapkan semula dirimu kepada lapan nilai. 775 00:34:31,870 --> 00:34:32,969 Kerja yang baik. 776 00:34:32,969 --> 00:34:36,570 >> Mari kita lihat secara digital, hanya seketika sebelum kita mencuba sesuatu yang lain, 777 00:34:36,570 --> 00:34:38,179 apa yang hanya berlaku. 778 00:34:38,179 --> 00:34:41,330 Di sini, anda akan melihat visualisasi daripada lapan manusia 779 00:34:41,330 --> 00:34:44,719 mana biru dan merah bar mewakili nombor. 780 00:34:44,719 --> 00:34:46,670 Yang lebih tinggi bar, yang lebih besar nombor. 781 00:34:46,670 --> 00:34:48,510 Pendek bar, yang lebih kecil nombor. 782 00:34:48,510 --> 00:34:51,560 Dan apa yang anda akan melihat di dalam susunan rawak lebih lapan daripada mereka. 783 00:34:51,560 --> 00:34:55,830 Anda akan melihat bar ini mendapat disusun mengikut algoritma yang sama, 784 00:34:55,830 --> 00:34:59,890 atau set arahan, yang kami akan memanggil seterusnya semacam gelembung. 785 00:34:59,890 --> 00:35:04,000 Jadi notis, setiap saat atau lebih, dua bar yang menyalakan merah, 786 00:35:04,000 --> 00:35:05,590 sedang berbanding dengan komputer. 787 00:35:05,590 --> 00:35:08,630 Kemudian jika bar dan besar bar kecil berada di luar perintah, 788 00:35:08,630 --> 00:35:11,220 mereka sedang ditukar untuk saya. 789 00:35:11,220 --> 00:35:15,120 >> Sekarang ini adalah sangat membosankan menonton ini, sudah tentu, 790 00:35:15,120 --> 00:35:18,630 buat masa yang lama, tetapi notis yang takeaway-- bar besar bergerak ke kanan, 791 00:35:18,630 --> 00:35:20,460 bar bergerak sedikit ke kiri. 792 00:35:20,460 --> 00:35:23,380 Mari kita membatalkan proses ini dan mempercepatkan ini sehingga 793 00:35:23,380 --> 00:35:27,330 menjadi lebih cepat, jadi kami boleh mendapatkan rasa peringkat tinggi apa, 794 00:35:27,330 --> 00:35:29,970 memang, jenis gelembung lakukan. 795 00:35:29,970 --> 00:35:33,150 Malah, ia menggelegak sehingga sebelah kanan senarai, 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 adalah menggelegak cara mereka ke sebelah kiri, 798 00:35:40,020 --> 00:35:42,950 walaupun pada kadar yang lebih cepat daripada kita sebelum ini lakukan. 799 00:35:42,950 --> 00:35:45,850 Jadi, sukar untuk melihat dengan manusia, tetapi visual itulah sesungguhnya apa 800 00:35:45,850 --> 00:35:46,540 sedang berlaku. 801 00:35:46,540 --> 00:35:49,110 >> Tetapi mari kita cuba satu asas pendekatan yang berbeza sekarang. 802 00:35:49,110 --> 00:35:52,387 Mari kita cuba yang berbeza algoritma mana kami mempunyai anda 803 00:35:52,387 --> 00:35:59,640 lelaki ini bermula pada asal jawatan, 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 saya akan melakukan sesuatu walaupun mudah, betul? 806 00:36:02,910 --> 00:36:06,710 Apabila ditinjau kembali, pertukaran dari segi pasangan lagi dan sekali lagi, hampir sedikit pandai. 807 00:36:06,710 --> 00:36:10,460 Mari kita melakukan perkara-perkara yang lebih naif, di mana sekiranya saya ingin menyusun orang ini, 808 00:36:10,460 --> 00:36:12,560 biar saya terus mencari untuk elemen yang paling kecil. 809 00:36:12,560 --> 00:36:14,570 Jadi sekarang, 4 adalah jumlah paling kecil yang saya lihat. 810 00:36:14,570 --> 00:36:15,695 Saya akan ingat bahawa. 811 00:36:15,695 --> 00:36:17,750 Tidak, 2 adalah lebih baik, dan ingat bahawa. 812 00:36:17,750 --> 00:36:20,730 1 adalah 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 One-- apa nama anda 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, teruskan. 819 00:36:25,460 --> 00:36:27,043 Saya akan menarik anda keluar dari barisan itu. 820 00:36:27,043 --> 00:36:28,400 Jika anda boleh datang ke sini. 821 00:36:28,400 --> 00:36:30,790 Dan saya perlu memberi ruang untuk beliau. 822 00:36:30,790 --> 00:36:32,040 Kami mempunyai titik keputusan di sini. 823 00:36:32,040 --> 00:36:36,000 Bagaimana kita boleh membuat ruang untuk Artie sini pada awal di mana nombor 1 milik? 824 00:36:36,000 --> 00:36:36,770 >> PENONTON: Shift. 825 00:36:36,770 --> 00:36:38,950 >> DAVID MALAN: OK, kita boleh mengalihkan semua orang. 826 00:36:38,950 --> 00:36:40,860 Tetapi mencadangkan pengoptimuman. 827 00:36:40,860 --> 00:36:43,410 Yang terasa sedikit menjengkelkan bagi saya untuk meminta empat orang 828 00:36:43,410 --> 00:36:44,620 untuk bergerak sepanjang jalan ke bawah. 829 00:36:44,620 --> 00:36:45,520 Apa lagi yang saya boleh buat? 830 00:36:45,520 --> 00:36:46,360 >> PENONTON: Matikan mereka. 831 00:36:46,360 --> 00:36:46,850 >> DAVID MALAN: Matikan mereka. 832 00:36:46,850 --> 00:36:47,900 Dan apa nama anda lagi? 833 00:36:47,900 --> 00:36:48,441 >> JACOB: Yakub. 834 00:36:48,441 --> 00:36:50,330 DAVID MALAN: Yakub, bergerak. 835 00:36:50,330 --> 00:36:54,440 Jauh lebih efisien hanya untuk Lokasi swap Yakub dengan Artie, 836 00:36:54,440 --> 00:36:56,710 yang bertentangan dengan memaksa keempat-empat orang ini, 837 00:36:56,710 --> 00:36:58,734 terima kasih banyak, untuk kedudukan yang betul. 838 00:36:58,734 --> 00:37:01,150 Apa yang baik tentang Artie sekarang, dia dalam kedudukan yang betul beliau. 839 00:37:01,150 --> 00:37:02,060 Mari kita buat ini lagi. 840 00:37:02,060 --> 00:37:03,730 2, itu jumlah yang paling kecil yang saya lihat. 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 adalah pasti yang paling kecil. 844 00:37:07,467 --> 00:37:08,550 Tidak perlu melakukan apa-apa kerja. 845 00:37:08,550 --> 00:37:09,320 Mari kita buat sekali lagi. 846 00:37:09,320 --> 00:37:10,070 6. 847 00:37:10,070 --> 00:37:10,640 Kecil? 848 00:37:10,640 --> 00:37:11,140 8. 849 00:37:11,140 --> 00:37:11,590 Nope. 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 Biar saya ingat 4. 853 00:37:13,420 --> 00:37:13,950 3. 854 00:37:13,950 --> 00:37:15,110 Biar saya ingat 3. 855 00:37:15,110 --> 00:37:16,080 7, 5. 856 00:37:16,080 --> 00:37:18,490 Bilangan paling kecil saya telah dilihat pada pas ini ialah 3. 857 00:37:18,490 --> 00:37:20,340 Jika anda ingin datang pada keluar. 858 00:37:20,340 --> 00:37:21,986 Di mana kita akan meletakkan anda? 859 00:37:21,986 --> 00:37:22,860 Dan apa nama anda? 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 mempunyai untuk mengusir kamu. 862 00:37:25,780 --> 00:37:28,670 Tetapi yang lebih cekap, hanya menukar dua orang, 863 00:37:28,670 --> 00:37:31,850 daripada memiliki beberapa orang sebenarnya meminggir lebih. 864 00:37:31,850 --> 00:37:32,850 Sekarang mari kita buat ini lagi. 865 00:37:32,850 --> 00:37:34,980 Saya akan memilih 4, jadi datang pada keluar. 866 00:37:34,980 --> 00:37:36,540 Dan siapa yang akan bergerak? 867 00:37:36,540 --> 00:37:37,750 Nombor 8, sudah tentu. 868 00:37:37,750 --> 00:37:40,260 Jika saya kini mencari nombor 5, datang pada keluar. 869 00:37:40,260 --> 00:37:42,104 Nombor 8 yang akan dapat diusir lagi. 870 00:37:42,104 --> 00:37:43,770 Saya kini akan mendapatkan nombor 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 kita lakukan hanya sekarang ialah sesuatu yang dinamakan jenis pemilihan, 874 00:37:48,590 --> 00:37:52,560 dan jika kita menggambarkan ini, ia akan berasa sedikit berbeza. 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 menukar ini supaya- datang, Firefox. 877 00:38:02,920 --> 00:38:07,610 Mari kita menukar ini kepada jenis pemilihan. 878 00:38:07,610 --> 00:38:11,830 Dan mari kita mempercepatkan proses seperti sebelum ini, dan mula visualisasi sekarang. 879 00:38:11,830 --> 00:38:13,990 Dan algoritma ini mempunyai rasa yang berbeza dengannya. 880 00:38:13,990 --> 00:38:16,480 Pada setiap lelaran, terus-terang, ia lebih mudah. 881 00:38:16,480 --> 00:38:18,385 Saya hanya memilih elemen yang paling kecil. 882 00:38:18,385 --> 00:38:21,510 Sekarang, terus-terang, saya mendapat bertuah kecil yang masa, kerana ia disusun pantas. 883 00:38:21,510 --> 00:38:22,660 Unsur-unsur tidak rawak. 884 00:38:22,660 --> 00:38:25,520 Ia bukan seperti yang kita akan akhirnya lihat, pada asasnya lebih cepat. 885 00:38:25,520 --> 00:38:29,400 Tetapi mari kita melihat ketiga dan terakhir mendekati di sini tentang apa yang sedang berlaku. 886 00:38:29,400 --> 00:38:36,230 Jadi mari kita pergi ke depan dan menetapkan semula kalian satu masa akhir berada dalam perintah ini di sini. 887 00:38:36,230 --> 00:38:38,450 >> Dan sekarang, saya akan menjadi sedikit lebih pandai, 888 00:38:38,450 --> 00:38:40,220 hanya untuk mengisi algoritma kami. 889 00:38:40,220 --> 00:38:41,230 Saya akan melakukan ini. 890 00:38:41,230 --> 00:38:43,140 Saya akan tidak pergi belakang dan sebagainya begitu banyak. 891 00:38:43,140 --> 00:38:44,900 Terus terang, saya bosan semua menyeberangi ini. 892 00:38:44,900 --> 00:38:47,691 Saya hanya akan mengambil apa yang saya diberikan pada awal senarai, 893 00:38:47,691 --> 00:38:49,460 dan saya akan menyusun yang ketika itu dan di sana. 894 00:38:49,460 --> 00:38:50,140 Jadi di sini kita. 895 00:38:50,140 --> 00:38:51,030 Nombor 4. 896 00:38:51,030 --> 00:38:53,680 Saya akan memasukkan nombor 4 dalam senarai yang disusun. 897 00:38:53,680 --> 00:38:54,180 Selesai. 898 00:38:54,180 --> 00:38:58,300 Saya menuntut sekarang, dan hanya untuk membuat ini lebih jelas, ini sebahagian daripada senarai saya disusun. 899 00:38:58,300 --> 00:39:02,610 Ia adalah jenis tuntutan bodoh, tetapi sesungguhnya 4 disusun dalam senarai saiz satu. 900 00:39:02,610 --> 00:39:04,210 Sekarang, saya akan mengambil nombor 2. 901 00:39:04,210 --> 00:39:07,670 Nombor 2 saya kini akan memasukkan ke dalam tempat yang betul. 902 00:39:07,670 --> 00:39:08,680 Oleh itu, bagaimana 2 milik? 903 00:39:08,680 --> 00:39:09,824 Jelas sekali, di sini. 904 00:39:09,824 --> 00:39:11,490 Oleh itu, pergilah ke hadapan dan bergerak ke belakang, jika anda boleh. 905 00:39:11,490 --> 00:39:14,406 Dan mengapa tidak kalian hanya mengambil muzik anda berdiri dengan anda kali ini. 906 00:39:14,406 --> 00:39:17,020 Dan mari kita secara paksa memasukkan anda hingga awal senarai. 907 00:39:17,020 --> 00:39:17,936 Kerja lebih-lebih lagi sedikit. 908 00:39:17,936 --> 00:39:20,890 Saya terpaksa berpindah Yakub sekitar, dan apa yang nama anda? 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 Tetapi sekurang-kurangnya saya tidak kembali dan sebagainya. 912 00:39:24,350 --> 00:39:25,739 Saya hanya mengambil perkara-perkara seperti yang saya pergi. 913 00:39:25,739 --> 00:39:27,530 Saya hanya memasukkan mereka di tempat yang betul. 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 mahu bergerak lebih sedikit. 916 00:39:31,510 --> 00:39:32,870 Nombor 8, juga cukup mudah. 917 00:39:32,870 --> 00:39:33,741 Di sana. 918 00:39:33,741 --> 00:39:34,240 Celaka. 919 00:39:34,240 --> 00:39:37,590 Nombor 1 kita tidak boleh hanya swap dengan Amin di sini, 920 00:39:37,590 --> 00:39:39,340 kerana perkara yang berlaku kepada keadaan kucar-kacir sehingga perintah itu. 921 00:39:39,340 --> 00:39:40,660 Oleh itu, kita perlu menjadi sedikit lebih bijak. 922 00:39:40,660 --> 00:39:42,770 Jadi, Artie, jika anda boleh menyandarkan seketika. 923 00:39:42,770 --> 00:39:46,550 Mari kita pergi ke depan dan beralih sekarang, tidak seperti algoritma kami sebelum ini, 924 00:39:46,550 --> 00:39:50,910 untuk memberi ruang kepada Artie di sini pada awal. 925 00:39:50,910 --> 00:39:54,690 Jadi, pada akhir hari, saya jenis melakukan apa yang saya mahu mengelak sebelum. 926 00:39:54,690 --> 00:39:57,770 Dan algoritma saya adalah jenis daripada diubah, dari segi intelek, 927 00:39:57,770 --> 00:39:59,070 dari apa yang asalnya adalah. 928 00:39:59,070 --> 00:40:01,240 Saya hanya melakukan peralihan pada masa yang berbeza. 929 00:40:01,240 --> 00:40:02,291 Kini saya di 3. 930 00:40:02,291 --> 00:40:02,790 Oh, celaka. 931 00:40:02,790 --> 00:40:04,039 Kita perlu melakukan lebih banyak kerja lagi. 932 00:40:04,039 --> 00:40:05,060 Jadi mari kita menolak anda keluar. 933 00:40:05,060 --> 00:40:09,360 Mari kita beralih 8, 6, 4-- oh oh-- dan 3 akan pergi di sana. 934 00:40:09,360 --> 00:40:11,490 Jadi pada simpanan sedikit-kurangnya kali ini. 935 00:40:11,490 --> 00:40:13,100 7, tidak terlalu banyak kerja yang perlu dilakukan. 936 00:40:13,100 --> 00:40:15,370 Jadi, jika anda mahu pop kembali, mari kita memasukkan anda. 937 00:40:15,370 --> 00:40:17,440 Dan akhir sekali, 5, jika anda mahu pop kembali, kami 938 00:40:17,440 --> 00:40:22,610 perlu beralih anda, anda, anda, sehingga lima adalah di tempat. 939 00:40:22,610 --> 00:40:25,670 >> Jadi sekarang untuk melihat ini pada peringkat tinggi secara grafik, 940 00:40:25,670 --> 00:40:31,080 mari kita buat algoritma ini visualisasi satu masa tambahan. 941 00:40:31,080 --> 00:40:33,580 Oleh itu, kita ini hendaklah memanggil jenis sisipan. 942 00:40:33,580 --> 00:40:37,700 Kami akan berjalan seperti cepat, dan mula di sini. 943 00:40:37,700 --> 00:40:39,580 Dan ia juga mempunyai rasa yang berbeza. 944 00:40:39,580 --> 00:40:42,180 Ia semacam mendapat yang lebih baik dan yang lebih baik, tetapi ia tidak pernah sempurna 945 00:40:42,180 --> 00:40:44,630 sehingga saya masuk dan lancar dalam jurang. 946 00:40:44,630 --> 00:40:47,860 Kerana, sekali lagi, saya hanya mengambil apa yang Saya diberikan dari kiri ke kanan. 947 00:40:47,860 --> 00:40:50,350 Jadi saya tidak mendapat bernasib baik segala sesuatu yang sempurna. 948 00:40:50,350 --> 00:40:54,190 Itulah sebabnya kita mempunyai ini sedikit mispositions bahawa kami tetap dari masa ke masa. 949 00:40:54,190 --> 00:40:58,890 >> Jadi semua algoritma ini seolah-olah berjalan pada paces sedikit berbeza. 950 00:40:58,890 --> 00:41:02,030 Malah, yang anda akan katakan adalah yang terbaik atau yang paling cepat setakat ini? 951 00:41:02,030 --> 00:41:03,450 Semacam gelembung, yang pertama? 952 00:41:03,450 --> 00:41:05,000 Pemilihan jenis, yang kedua? 953 00:41:05,000 --> 00:41:08,450 Semacam Insertion, ketiga? 954 00:41:08,450 --> 00:41:10,710 Saya mendengar beberapa macam pilihan. 955 00:41:10,710 --> 00:41:13,280 Pemikiran yang lain? 956 00:41:13,280 --> 00:41:16,880 >> Jadi ternyata bahawa semua algoritma ini 957 00:41:16,880 --> 00:41:22,400 pada dasarnya hanya secekap setiap other-- atau sebaliknya, sama seperti 958 00:41:22,400 --> 00:41:25,980 cekap kerana satu sama lain, kerana kita boleh melakukannya pada dasarnya 959 00:41:25,980 --> 00:41:28,120 lebih baik daripada ketiga-tiga 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 apabila saya menyatakan seperti yang cekap atau sebagai tidak cekap, 962 00:41:32,580 --> 00:41:35,040 itu sekurang-kurangnya untuk nilai super-besar n. 963 00:41:35,040 --> 00:41:38,450 Apabila kita mempunyai lapan orang di sini, atau mungkin 50 atau lebih bar pada skrin, 964 00:41:38,450 --> 00:41:41,645 anda benar-benar akan melihat perbezaan di kalangan tiga algoritma. 965 00:41:41,645 --> 00:41:44,020 Tetapi n, bilangan orang, atau bilangan nombor, 966 00:41:44,020 --> 00:41:46,350 atau jumlah orang di dalam telefon buku, atau jumlah halaman web 967 00:41:46,350 --> 00:41:48,230 dalam pangkalan data Google mendapat lebih besar dan lebih besar, 968 00:41:48,230 --> 00:41:51,650 kita akan melihat bahawa ketiga-tiga algoritma sebenarnya cukup miskin. 969 00:41:51,650 --> 00:41:54,060 Dan yang boleh kita lakukan pada dasarnya yang lebih baik daripada 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 bunyi seperti dalam konteks beberapa yang lain 972 00:41:59,520 --> 00:42:03,550 dan juga dengan cara ini visualisasi sini 973 00:42:03,550 --> 00:42:06,860 yang akan memperkenalkan kami kepada beberapa algoritma. 974 00:42:06,860 --> 00:42:10,330 Mari kita pergi ke depan dan mengucapkan tahniah kepada peserta kami di sini, yang semuanya 975 00:42:10,330 --> 00:42:11,690 disusun diri mereka dengan 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 boleh menyimpan nombor anda juga. 978 00:42:16,540 --> 00:42:19,460 979 00:42:19,460 --> 00:42:22,520 Dan apa yang anda akan lihat, atau sebaliknya dengar, sekarang, 980 00:42:22,520 --> 00:42:25,710 ialah seperti yang kita meletakkan bunyi kepada setiap bar ini 981 00:42:25,710 --> 00:42:28,660 dan mengaitkannya dengan perisian, frekuensi yang berbeza bunyi, 982 00:42:28,660 --> 00:42:33,970 anda boleh membalut fikiran lebih audioly anda seluruh apa yang setiap perkara-perkara ini 983 00:42:33,970 --> 00:42:34,470 kelihatan seperti. 984 00:42:34,470 --> 00:42:39,325 Di mana yang pertama adalah jenis sisipan 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 jenis 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 >> Pemilihan jenis. 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 dinamakan jenis merge. 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 >> Jenis 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 sahaja untuk CS50. 1000 00:44:09,430 --> 00:44:13,360 Kami akan melihat anda pada hari Rabu. 1001 00:44:13,360 --> 00:44:16,671 >> Pencerita: Dan sekarang, "Deep Fikiran, "oleh Daven Farnham. 1002 00:44:16,671 --> 00:44:19,910 1003 00:44:19,910 --> 00:44:21,590 Mengapa untuk gelung? 1004 00:44:21,590 --> 00:44:23,200 Mengapa tidak membuat ia lebih baik? 1005 00:44:23,200 --> 00:44:25,970 Saya membuat gelung lima. 1006 00:44:25,970 --> 00:44:28,720 >> [Ketawa]