1 00:00:00,000 --> 00:00:00,030 2 00:00:00,030 --> 00:00:00,460 >> DAVID Malan: Baiklah. 3 00:00:00,460 --> 00:00:01,094 Kami kembali. 4 00:00:01,094 --> 00:00:04,260 Jadi di segmen ini pada pemrograman apa Saya pikir kami akan lakukan adalah campuran dari hal-hal. 5 00:00:04,260 --> 00:00:06,340 Satu, melakukan sedikit sesuatu tangan-on, 6 00:00:06,340 --> 00:00:08,690 meskipun menggunakan lebih playful pemrograman environment-- 7 00:00:08,690 --> 00:00:11,620 salah satu yang demonstratif dari persis jenis ide 8 00:00:11,620 --> 00:00:14,220 kita sudah bicarakan, tapi sedikit lebih formal. 9 00:00:14,220 --> 00:00:18,200 Dua, melihat beberapa cara yang lebih teknis 10 00:00:18,200 --> 00:00:21,520 bahwa programmer benar-benar akan memecahkan masalah seperti masalah mencari 11 00:00:21,520 --> 00:00:24,530 bahwa kita melihat sebelum dan juga lebih mendasar 12 00:00:24,530 --> 00:00:26,020 masalah yang menarik penyortiran. 13 00:00:26,020 --> 00:00:28,840 >> Kami hanya menduga dari bisa pergi bahwa buku telepon diurutkan, 14 00:00:28,840 --> 00:00:31,980 tapi itu saja sebenarnya semacam masalah yang sulit dengan berbagai cara 15 00:00:31,980 --> 00:00:32,479 untuk menyelesaikannya. 16 00:00:32,479 --> 00:00:34,366 Jadi kita akan menggunakan ini sebagai kelas masalah 17 00:00:34,366 --> 00:00:36,740 wakil dari hal-hal yang mungkin diselesaikan secara umum. 18 00:00:36,740 --> 00:00:38,980 Dan kemudian kita akan berbicara tentang dalam beberapa detail apa 19 00:00:38,980 --> 00:00:42,360 disebut Data structures-- cara pengujian seperti daftar terkait 20 00:00:42,360 --> 00:00:46,290 dan tabel hash dan pohon-pohon yang programmer benar-benar akan 21 00:00:46,290 --> 00:00:48,890 menggunakan dan umumnya menggunakan pada papan tulis untuk melukis 22 00:00:48,890 --> 00:00:51,840 gambar apa yang dia Visi untuk menerapkan 23 00:00:51,840 --> 00:00:52,980 beberapa bagian dari perangkat lunak. 24 00:00:52,980 --> 00:00:55,130 >> Jadi mari kita lakukan tangan-on bagian pertama. 25 00:00:55,130 --> 00:01:00,090 Jadi hanya mendapatkan tangan Anda kotor dengan lingkungan disebut scratch.mit.edu. 26 00:01:00,090 --> 00:01:02,636 Ini adalah alat yang kita gunakan di kelas sarjana kita. 27 00:01:02,636 --> 00:01:04,510 Meskipun dirancang untuk usia 12 tahun ke atas, 28 00:01:04,510 --> 00:01:07,570 kita menggunakannya untuk up bagian dari yang sedikit 29 00:01:07,570 --> 00:01:10,020 karena itu bagus, menyenangkan cara grafis belajar 30 00:01:10,020 --> 00:01:12,160 sedikit sesuatu tentang pemrograman. 31 00:01:12,160 --> 00:01:17,600 Jadi kepala ke URL itu, di mana Anda harus melihat halaman cukup seperti ini, 32 00:01:17,600 --> 00:01:23,330 dan pergi ke depan dan klik Bergabunglah Scratch di kanan atas 33 00:01:23,330 --> 00:01:28,300 dan memilih username dan kata sandi dan akhirnya mendapatkan diri Anda 34 00:01:28,300 --> 00:01:29,970 sebuah scratch.mit.edu account--. 35 00:01:29,970 --> 00:01:32,165 36 00:01:32,165 --> 00:01:34,665 Saya pikir saya akan menggunakan ini sebagai kesempatan pertama untuk menunjukkan ini. 37 00:01:34,665 --> 00:01:39,120 Sebuah pertanyaan muncul selama istirahat tentang apa kode benar-benar terlihat seperti. 38 00:01:39,120 --> 00:01:41,315 Dan kami berbicara selama istirahat tentang C, 39 00:01:41,315 --> 00:01:45,060 di particular-- khususnya tingkat yang lebih rendah dalam bahasa yang lebih tua. 40 00:01:45,060 --> 00:01:47,750 Dan saya hanya melakukan cepat Google mencari untuk menemukan kode C 41 00:01:47,750 --> 00:01:51,574 untuk pencarian biner, algoritma yang kita digunakan untuk mencari buku telepon sebelumnya. 42 00:01:51,574 --> 00:01:54,240 contoh khusus ini, tentu saja, tidak mencari buku telepon. 43 00:01:54,240 --> 00:01:57,840 Ini hanya mencari sejumlah besar nomor di memori komputer. 44 00:01:57,840 --> 00:02:01,000 Tetapi jika Anda ingin hanya mendapatkan visual rasa apa pemrograman yang sebenarnya 45 00:02:01,000 --> 00:02:05,370 bahasa seperti, terlihat sedikit sesuatu seperti ini. 46 00:02:05,370 --> 00:02:09,759 Jadi itu sekitar 20-plus, 30 atau lebih baris kode, 47 00:02:09,759 --> 00:02:12,640 tapi percakapan kami yang memiliki lebih dari istirahat 48 00:02:12,640 --> 00:02:16,000 adalah tentang bagaimana ini benar-benar akan berubah menjadi nol dan satu 49 00:02:16,000 --> 00:02:19,200 dan jika Anda tidak bisa hanya kembali bahwa memproses dan pergi dari nol dan satu 50 00:02:19,200 --> 00:02:20,210 kembali ke kode. 51 00:02:20,210 --> 00:02:22,620 >> Sayangnya, proses begitu transformatif 52 00:02:22,620 --> 00:02:24,890 bahwa itu jauh lebih mudah diucapkan daripada dilakukan. 53 00:02:24,890 --> 00:02:29,400 Aku pergi ke depan dan benar-benar berubah Program itu, Binary Search, 54 00:02:29,400 --> 00:02:32,700 menjadi nol dan satu dengan cara Program yang disebut Compiler The bahwa saya 55 00:02:32,700 --> 00:02:34,400 kebetulan memiliki sini tepat di Mac saya. 56 00:02:34,400 --> 00:02:37,850 Dan jika Anda melihat layar di sini, dengan fokus khusus 57 00:02:37,850 --> 00:02:43,520 pada ini enam kolom tengah saja, Anda akan melihat hanya nol dan satu. 58 00:02:43,520 --> 00:02:48,290 Dan mereka adalah nol dan orang-orang yang menulis persis bahwa program pencarian. 59 00:02:48,290 --> 00:02:53,720 >> Dan setiap potongan lima bit, setiap byte dari nol dan satu di sini, 60 00:02:53,720 --> 00:02:57,310 mewakili beberapa instruksi biasanya dalam komputer. 61 00:02:57,310 --> 00:03:00,730 Dan pada kenyataannya, jika Anda pernah mendengar slogan pemasaran "Intel dalam" - itu, 62 00:03:00,730 --> 00:03:04,610 Tentu saja, hanya berarti Anda memiliki Intel CPU atau otak di dalam komputer. 63 00:03:04,610 --> 00:03:08,000 Dan apa artinya menjadi CPU adalah bahwa Anda memiliki set instruksi, 64 00:03:08,000 --> 00:03:08,840 boleh dikatakan. 65 00:03:08,840 --> 00:03:11,620 >> Setiap CPU di dunia, banyak dari mereka dibuat oleh Intel hari ini, 66 00:03:11,620 --> 00:03:13,690 mengerti yang terbatas jumlah instruksi. 67 00:03:13,690 --> 00:03:18,690 Dan instruksi tersebut adalah tingkat sangat rendah sebagai menambahkan dua angka ini bersama-sama, 68 00:03:18,690 --> 00:03:22,560 kalikan dua angka ini bersama-sama, memindahkan sepotong data dari sini 69 00:03:22,560 --> 00:03:27,340 di sini dalam memori, menyimpan ini informasi dari sini ke sini dalam memori, 70 00:03:27,340 --> 00:03:32,200 dan begitu forth-- begitu sangat, sangat tingkat rendah, rincian hampir elektronik. 71 00:03:32,200 --> 00:03:34,780 Tapi dengan orang-matematika operasi ditambah 72 00:03:34,780 --> 00:03:37,410 dengan apa yang kita bahas sebelumnya, representasi data 73 00:03:37,410 --> 00:03:40,450 sebagai nol dan satu, bisa Anda membangun segalanya 74 00:03:40,450 --> 00:03:44,180 bahwa komputer dapat lakukan hari ini, apakah itu tekstual, grafis, musik, 75 00:03:44,180 --> 00:03:45,580 atau sebaliknya. 76 00:03:45,580 --> 00:03:49,450 >> Jadi ini sangat mudah untuk mendapatkan hilang dalam gulma dengan cepat. 77 00:03:49,450 --> 00:03:52,150 Dan ada banyak tantangan sintaksis 78 00:03:52,150 --> 00:03:56,630 dimana jika Anda membuat sederhana, terbodoh dari kesalahan ketik tidak ada program 79 00:03:56,630 --> 00:03:57,860 akan bekerja apapun. 80 00:03:57,860 --> 00:04:00,366 Dan bukannya menggunakan bahasa seperti C pagi ini, 81 00:04:00,366 --> 00:04:02,240 Saya pikir ini akan menjadi lebih menyenangkan untuk benar-benar melakukan 82 00:04:02,240 --> 00:04:04,840 sesuatu yang lebih visual, yang sementara dirancang untuk anak-anak 83 00:04:04,840 --> 00:04:08,079 sebenarnya merupakan manifestasi sempurna sebuah pemrograman yang sebenarnya 84 00:04:08,079 --> 00:04:10,370 language-- kebetulan menggunakan gambar, bukan teks 85 00:04:10,370 --> 00:04:11,710 untuk mewakili ide-ide mereka. 86 00:04:11,710 --> 00:04:15,470 >> Jadi, sekali Anda memang memiliki account di scratch.mit.edu, 87 00:04:15,470 --> 00:04:21,070 klik tombol Create di sebelah kiri atas situs. 88 00:04:21,070 --> 00:04:24,620 Dan Anda akan melihat lingkungan seperti satu Aku akan melihat di layar saya 89 00:04:24,620 --> 00:04:26,310 sini. 90 00:04:26,310 --> 00:04:29,350 Dan kita akan menghabiskan hanya sedikit sedikit waktu bermain di sini. 91 00:04:29,350 --> 00:04:34,080 Mari kita lihat apakah kita tidak bisa semua memecahkan beberapa masalah bersama-sama dengan cara berikut. 92 00:04:34,080 --> 00:04:39,420 >> Jadi apa yang Anda akan melihat dalam hal ini environment-- dan benar-benar hanya membiarkan 93 00:04:39,420 --> 00:04:40,050 saya berhenti sejenak. 94 00:04:40,050 --> 00:04:42,680 Apakah ada yang tidak di sini? 95 00:04:42,680 --> 00:04:45,070 Tidak disini? 96 00:04:45,070 --> 00:04:45,800 BAIK. 97 00:04:45,800 --> 00:04:49,030 Jadi biarkan aku menunjukkan beberapa karakteristik lingkungan ini. 98 00:04:49,030 --> 00:04:55,024 >> Jadi di kiri atas layar, kami memiliki panggung Scratch ini, sehingga untuk berbicara. 99 00:04:55,024 --> 00:04:57,440 Scratch tidak hanya nama bahasa pemrograman ini; 100 00:04:57,440 --> 00:05:00,356 itu juga nama kucing yang Anda lihat secara default ada di orange. 101 00:05:00,356 --> 00:05:02,160 Dia adalah di atas panggung, jadi seperti yang saya jelaskan 102 00:05:02,160 --> 00:05:05,770 penyu sebelumnya sebagai dalam persegi panjang lingkungan papan putih. 103 00:05:05,770 --> 00:05:09,800 dunia ini kucing terbatas seluruhnya untuk yang persegi panjang di bagian atas ada. 104 00:05:09,800 --> 00:05:12,210 >> Sementara itu, di sebelah kanan sisi sini, itu 105 00:05:12,210 --> 00:05:15,610 hanya daerah script, sebuah batu tulis kosong jika Anda mau. 106 00:05:15,610 --> 00:05:18,590 Ini adalah di mana kita akan menulis program kami hanya dalam beberapa saat. 107 00:05:18,590 --> 00:05:22,935 Dan blok bangunan yang akan kita gunakan untuk menulis ini program-- teka-teki 108 00:05:22,935 --> 00:05:25,310 potongan, jika Anda will-- adalah mereka di sini, di tengah, 109 00:05:25,310 --> 00:05:27,500 dan mereka dikategorikan oleh fungsi. 110 00:05:27,500 --> 00:05:31,000 Jadi, misalnya, saya akan pergi ke depan dan menunjukkan setidaknya salah satu dari ini. 111 00:05:31,000 --> 00:05:33,690 Aku akan pergi ke depan dan klik kategori Kontrol atas. 112 00:05:33,690 --> 00:05:35,720 >> Jadi ini adalah kategori di bagian atas. 113 00:05:35,720 --> 00:05:39,410 Aku akan klik kategori Control. 114 00:05:39,410 --> 00:05:44,020 Sebaliknya, aku akan mengklik Acara kategori, pertama satu di bagian atas. 115 00:05:44,020 --> 00:05:47,790 Dan jika Anda ingin mengikuti bahkan seperti yang kita lakukan ini, Anda cukup dipersilakan untuk. 116 00:05:47,790 --> 00:05:52,180 Aku akan klik dan tarik ini pertama, "ketika bendera hijau diklik." 117 00:05:52,180 --> 00:05:58,410 Dan kemudian aku akan menjatuhkannya hanya kira-kira di atas papan tulis kosong saya. 118 00:05:58,410 --> 00:06:01,450 >> Dan apa yang baik tentang Scratch adalah bahwa potongan puzzle ini, ketika 119 00:06:01,450 --> 00:06:04,560 saling bertautan dengan puzzle lainnya potongan, yang akan dilakukan secara harfiah 120 00:06:04,560 --> 00:06:06,460 apa yang potongan-potongan puzzle mengatakan untuk melakukan. 121 00:06:06,460 --> 00:06:09,710 Jadi, misalnya, Scratch tepat sekarang di tengah dunianya. 122 00:06:09,710 --> 00:06:14,660 Aku akan pergi ke depan dan memilih sekarang, katakanlah, kategori Gerak, 123 00:06:14,660 --> 00:06:18,000 jika Anda ingin melakukan same-- kategori Motion. 124 00:06:18,000 --> 00:06:20,430 Dan sekarang melihat saya memiliki keseluruhan sekelompok potongan puzzle sini 125 00:06:20,430 --> 00:06:23,370 itu, sekali lagi, jenis melakukan apa yang mereka katakan. 126 00:06:23,370 --> 00:06:28,110 Dan aku akan pergi ke depan dan tarik dan drop blok langkah yang tepat di sini. 127 00:06:28,110 --> 00:06:31,860 >> Dan melihat bahwa segera setelah Anda mendapatkan dekat dengan bagian bawah "bendera hijau 128 00:06:31,860 --> 00:06:34,580 diklik "tombol, pemberitahuan bagaimana garis putih muncul, 129 00:06:34,580 --> 00:06:36,950 seolah-olah itu hampir magnetik, ia ingin pergi ke sana. 130 00:06:36,950 --> 00:06:43,070 Hanya membiarkan pergi, dan itu akan snap bersama-sama dan bentuk akan cocok. 131 00:06:43,070 --> 00:06:46,620 mungkin dan sekarang Anda bisa hampir menebak di mana kita akan dengan ini. 132 00:06:46,620 --> 00:06:51,570 >> Jika Anda melihat tahap Scratch di sini dan melihat ke atas itu, 133 00:06:51,570 --> 00:06:55,142 Anda akan melihat lampu merah, sebuah tanda berhenti, dan bendera hijau. 134 00:06:55,142 --> 00:06:57,100 Dan aku akan pergi ke depan dan menonton screen-- saya 135 00:06:57,100 --> 00:06:58,460 untuk sesaat, jika Anda bisa. 136 00:06:58,460 --> 00:07:01,960 Aku akan mengklik hijau bendera sekarang, 137 00:07:01,960 --> 00:07:07,850 dan ia pindah apa yang tampaknya menjadi 10 langkah atau 10 piksel, 10 titik, di layar. 138 00:07:07,850 --> 00:07:13,390 >> Dan jadi tidak menarik, tapi biarkan aku mengusulkan 139 00:07:13,390 --> 00:07:17,440 tanpa mengajar ini, hanya menggunakan sendiri membiarkan intuition-- Anda sendiri 140 00:07:17,440 --> 00:07:22,560 saya mengusulkan bahwa Anda tahu bagaimana membuat Scratch berjalan langsung dari panggung. 141 00:07:22,560 --> 00:07:28,700 Minta dia membuat jalan bagi sisi kanan layar, semua jalan ke kanan. 142 00:07:28,700 --> 00:07:32,200 Biarkan saya memberi Anda beberapa saat atau lebih bergulat dengan itu. 143 00:07:32,200 --> 00:07:37,681 Anda mungkin ingin lihat di kategori lain dari blok. 144 00:07:37,681 --> 00:07:38,180 Baiklah. 145 00:07:38,180 --> 00:07:41,290 Jadi hanya untuk rekap, ketika kita memiliki bendera hijau diklik di sini 146 00:07:41,290 --> 00:07:44,850 dan memindahkan 10 langkah adalah hanya instruksi, setiap kali saya 147 00:07:44,850 --> 00:07:46,720 klik bendera hijau, apa yang terjadi? 148 00:07:46,720 --> 00:07:50,070 Nah, yang menjalankan program saya. 149 00:07:50,070 --> 00:07:52,450 Jadi saya bisa melakukan ini mungkin 10 kali secara manual, 150 00:07:52,450 --> 00:07:55,130 tapi ini terasa sedikit bit hackish, sehingga untuk berbicara, 151 00:07:55,130 --> 00:07:57,480 dimana aku tidak benar-benar pemecahan masalah. 152 00:07:57,480 --> 00:08:00,530 Aku hanya berusaha lagi dan lagi dan lagi dan lagi 153 00:08:00,530 --> 00:08:03,180 sampai aku semacam sengaja mencapai direktif 154 00:08:03,180 --> 00:08:05,560 bahwa saya ditetapkan untuk mencapai sebelumnya. 155 00:08:05,560 --> 00:08:08,200 >> Tapi kita tahu dari kami pseudocode sebelumnya bahwa ada 156 00:08:08,200 --> 00:08:11,870 gagasan ini dalam pemrograman looping, melakukan sesuatu lagi dan lagi. 157 00:08:11,870 --> 00:08:14,888 Dan aku melihat bahwa sekelompok Anda meraih apa potongan puzzle? 158 00:08:14,888 --> 00:08:17,870 159 00:08:17,870 --> 00:08:18,730 Ulangi sampai. 160 00:08:18,730 --> 00:08:21,400 Jadi kita bisa melakukan sesuatu seperti ulangi sampai. 161 00:08:21,400 --> 00:08:23,760 Dan apa yang Anda ulangi sampai tepat? 162 00:08:23,760 --> 00:08:27,720 163 00:08:27,720 --> 00:08:28,540 >> BAIK. 164 00:08:28,540 --> 00:08:31,974 Dan biarkan aku pergi dengan satu yang agak sederhana untuk sesaat. 165 00:08:31,974 --> 00:08:33,140 Biarkan aku pergi ke depan dan melakukan hal ini. 166 00:08:33,140 --> 00:08:35,559 Perhatikan bahwa, karena Anda mungkin memiliki ditemukan di bawah Control, 167 00:08:35,559 --> 00:08:38,409 ada blok berulang ini, yang tidak terlihat seperti itu begitu besar. 168 00:08:38,409 --> 00:08:41,039 Tidak ada banyak ruang di antara dua garis kuning. 169 00:08:41,039 --> 00:08:43,539 Tapi karena beberapa dari Anda mungkin memiliki perhatikan, jika Anda drag dan drop, 170 00:08:43,539 --> 00:08:45,150 perhatikan bagaimana tumbuh untuk mengisi bentuk. 171 00:08:45,150 --> 00:08:46,274 >> Dan Anda bahkan dapat menjejalkan lebih. 172 00:08:46,274 --> 00:08:48,670 Itu hanya akan terus berkembang jika Anda drag dan membawa lebih dari itu. 173 00:08:48,670 --> 00:08:51,110 Dan aku tidak tahu apa yang terbaik di sini, jadi mari 174 00:08:51,110 --> 00:08:54,760 saya setidaknya mengulang lima kali, untuk Misalnya, dan kemudian kembali ke panggung 175 00:08:54,760 --> 00:08:56,720 dan klik bendera hijau. 176 00:08:56,720 --> 00:08:59,110 Dan sekarang melihat itu tidak cukup ada. 177 00:08:59,110 --> 00:09:02,400 >> Sekarang beberapa dari Anda yang diusulkan, sebagai Victoria hanya tidak, ulangi 10 kali. 178 00:09:02,400 --> 00:09:05,140 Dan yang umumnya tidak mendapatkan dia sepanjang jalan, 179 00:09:05,140 --> 00:09:10,510 tapi tidak akan ada menjadi lebih kuat cara dari sewenang-wenang mencari tahu 180 00:09:10,510 --> 00:09:12,640 berapa banyak bergerak untuk membuat? 181 00:09:12,640 --> 00:09:17,680 Apa yang mungkin menjadi blok yang lebih baik dari ulangi 10 kali menjadi? 182 00:09:17,680 --> 00:09:20,380 >> Ya, jadi mengapa tidak melakukan sesuatu selamanya? 183 00:09:20,380 --> 00:09:24,390 Dan sekarang biarkan aku bergerak potongan puzzle ini dalam sana dan menyingkirkan satu ini. 184 00:09:24,390 --> 00:09:28,300 Sekarang perhatikan di mana pun Scratch dimulai, dia pergi ke tepi. 185 00:09:28,300 --> 00:09:30,700 Dan untungnya MIT, yang membuat Scratch, hanya 186 00:09:30,700 --> 00:09:33,190 memastikan bahwa ia tidak pernah menghilang sepenuhnya. 187 00:09:33,190 --> 00:09:35,360 Anda selalu bisa ambil ekornya. 188 00:09:35,360 --> 00:09:37,680 >> Dan hanya intuitif, mengapa dia terus bergerak? 189 00:09:37,680 --> 00:09:38,892 Apa yang terjadi disini? 190 00:09:38,892 --> 00:09:41,440 191 00:09:41,440 --> 00:09:43,824 Dia tampaknya telah berhenti, tetapi maka jika saya mengambil dan tarik 192 00:09:43,824 --> 00:09:45,240 ia terus ingin pergi ke sana. 193 00:09:45,240 --> 00:09:46,123 Mengapa demikian? 194 00:09:46,123 --> 00:09:51,610 195 00:09:51,610 --> 00:09:54,360 Sesungguhnya, komputer secara harfiah akan melakukan apa yang Anda katakan untuk dilakukan. 196 00:09:54,360 --> 00:09:58,380 Jadi jika Anda mengatakan itu sebelumnya melakukan berikut hal selamanya, bergerak 10 langkah, 197 00:09:58,380 --> 00:10:01,860 itu akan terus dan pergi sampai aku memukul tanda berhenti merah 198 00:10:01,860 --> 00:10:04,620 dan menghentikan program sama sekali. 199 00:10:04,620 --> 00:10:06,610 >> Jadi bahkan jika Anda tidak melakukan hal ini, bagaimana mungkin saya 200 00:10:06,610 --> 00:10:09,510 membuat Scratch bergerak lebih cepat di layar? 201 00:10:09,510 --> 00:10:12,060 202 00:10:12,060 --> 00:10:13,280 langkah lagi, kan? 203 00:10:13,280 --> 00:10:15,710 Jadi bukannya melakukan 10 pada suatu waktu, mengapa tidak kita 204 00:10:15,710 --> 00:10:20,100 pergi ke depan dan mengubahnya to-- apa yang akan Anda propose-- 50? 205 00:10:20,100 --> 00:10:24,410 Jadi sekarang aku akan mengklik hijau bendera, dan memang, dia pergi sangat cepat. 206 00:10:24,410 --> 00:10:27,180 >> Dan ini, tentu saja, hanya manifestasi dari animasi. 207 00:10:27,180 --> 00:10:28,060 Apa animasi? 208 00:10:28,060 --> 00:10:33,090 Itu hanya menunjukkan Anda seorang manusia sejumlah gambar masih benar-benar, 209 00:10:33,090 --> 00:10:34,160 benar-benar, benar-benar cepat. 210 00:10:34,160 --> 00:10:36,500 Dan jadi jika kita hanya mengatakan dia untuk pindah langkah lebih lanjut, 211 00:10:36,500 --> 00:10:39,750 kami hanya memiliki efek adalah untuk perubahan di mana dia berada di layar 212 00:10:39,750 --> 00:10:42,900 semua lebih cepat per satuan waktu. 213 00:10:42,900 --> 00:10:46,454 >> Sekarang tantangan berikutnya yang saya diusulkan adalah untuk memiliki dia bangkit dari tepi. 214 00:10:46,454 --> 00:10:49,120 Dan tanpa mengetahui apa puzzle potongan exist-- karena itu baik-baik saja 215 00:10:49,120 --> 00:10:53,030 jika Anda tidak mendapatkan ke tahap challenge-- apa 216 00:10:53,030 --> 00:10:54,280 Anda ingin melakukan intuitif? 217 00:10:54,280 --> 00:10:58,030 Bagaimana kita memiliki dia bangkit kembali dan sebagainya, antara kiri dan kanan? 218 00:10:58,030 --> 00:11:02,630 219 00:11:02,630 --> 00:11:03,810 >> Ya. 220 00:11:03,810 --> 00:11:05,680 Jadi kita perlu semacam kondisi, dan kami 221 00:11:05,680 --> 00:11:09,710 tampaknya memiliki conditional, sehingga untuk berbicara, di bawah kategori Control. 222 00:11:09,710 --> 00:11:14,110 Manakah dari blok ini kita mungkin ingin? 223 00:11:14,110 --> 00:11:15,200 Ya, mungkin "jika, kemudian." 224 00:11:15,200 --> 00:11:18,780 Jadi perhatikan bahwa di antara blok kuning kita miliki di sini, ada ini "jika" 225 00:11:18,780 --> 00:11:23,920 atau ini "jika, lain" blok yang akan memungkinkan kita untuk membuat keputusan untuk melakukan hal ini 226 00:11:23,920 --> 00:11:25,000 atau untuk melakukan itu. 227 00:11:25,000 --> 00:11:27,380 bahkan dan Anda dapat sarang mereka untuk melakukan beberapa hal. 228 00:11:27,380 --> 00:11:34,910 Atau jika Anda sudah tidak pergi di sini belum, pergi ke depan untuk kategori Sensing 229 00:11:34,910 --> 00:11:39,612 dan- mari kita lihat apakah itu di sini. 230 00:11:39,612 --> 00:11:43,050 231 00:11:43,050 --> 00:11:52,050 >> Jadi apa blok mungkin bisa membantu di sini untuk mendeteksi apakah dia dari panggung? 232 00:11:52,050 --> 00:11:56,740 Ya, melihat bahwa sebagian dari blok ini dapat parametrized, sehingga untuk berbicara. 233 00:11:56,740 --> 00:12:00,706 Mereka dapat semacam disesuaikan, tidak tidak seperti HTML kemarin dengan atribut, 234 00:12:00,706 --> 00:12:03,330 di mana atribut-atribut semacam menyesuaikan perilaku tag. 235 00:12:03,330 --> 00:12:08,880 Demikian pula di sini, bisa saya ambil menyentuh ini blok dan perubahan dan bertanya, 236 00:12:08,880 --> 00:12:11,500 yang Anda menyentuh mouse pointer seperti kursor 237 00:12:11,500 --> 00:12:13,250 atau Anda menyentuh tepi? 238 00:12:13,250 --> 00:12:15,210 >> Jadi biarkan aku pergi dan melakukan hal ini. 239 00:12:15,210 --> 00:12:18,130 Aku akan tampilannya keluar sejenak. 240 00:12:18,130 --> 00:12:21,320 Mari saya ambil potongan puzzle ini di sini, potongan puzzle ini ini, 241 00:12:21,320 --> 00:12:24,570 dan aku akan campur aduk mereka untuk sesaat. 242 00:12:24,570 --> 00:12:27,620 Aku akan pindah ini, mengubahnya ke tepi menyentuh, 243 00:12:27,620 --> 00:12:38,590 dan aku akan gerak melakukan hal ini. 244 00:12:38,590 --> 00:12:40,490 Jadi di sini adalah beberapa bahan. 245 00:12:40,490 --> 00:12:42,570 Saya pikir saya punya semua yang saya inginkan. 246 00:12:42,570 --> 00:12:47,710 >> Apakah seseorang ingin mengusulkan bagaimana saya dapat menghubungkan ini mungkin atas ke bawah 247 00:12:47,710 --> 00:12:52,020 dalam rangka memecahkan masalah memiliki Scratch bergerak dari kanan ke kiri ke kanan untuk 248 00:12:52,020 --> 00:12:57,020 kiri ke kanan ke kiri, masing-masing waktu hanya memantul dari dinding? 249 00:12:57,020 --> 00:12:58,050 Apa yang ingin saya lakukan? 250 00:12:58,050 --> 00:13:01,097 Yang blok harus saya terhubung ke "Bendera ketika hijau diklik pertama"? 251 00:13:01,097 --> 00:13:04,060 252 00:13:04,060 --> 00:13:06,200 >> OK, jadi mari kita mulai dengan "selamanya." 253 00:13:06,200 --> 00:13:07,170 Apa yang terjadi di dalam berikutnya? 254 00:13:07,170 --> 00:13:10,290 Orang lain. 255 00:13:10,290 --> 00:13:11,850 OK, bergerak langkah. 256 00:13:11,850 --> 00:13:12,350 Baiklah. 257 00:13:12,350 --> 00:13:14,470 Lalu apa? 258 00:13:14,470 --> 00:13:15,120 Jadi jika. 259 00:13:15,120 --> 00:13:17,720 Dan perhatikan, meskipun tampak terjepit bersama-sama erat, 260 00:13:17,720 --> 00:13:19,500 itu hanya akan tumbuh untuk mengisi. 261 00:13:19,500 --> 00:13:21,500 Itu hanya akan melompat di mana saya menginginkannya. 262 00:13:21,500 --> 00:13:25,920 >> Dan apa yang saya menempatkan antara jika dan kemudian? 263 00:13:25,920 --> 00:13:27,180 Mungkin "jika menyentuh tepi." 264 00:13:27,180 --> 00:13:31,800 Dan pemberitahuan, sekali lagi, itu terlalu besar untuk itu, tetapi akan tumbuh untuk mengisi. 265 00:13:31,800 --> 00:13:35,002 Dan kemudian putar 15 derajat? 266 00:13:35,002 --> 00:13:35,710 Berapa derajat? 267 00:13:35,710 --> 00:13:38,800 268 00:13:38,800 --> 00:13:41,196 Ya, jadi 180 akan berputar saya semua jalan di sekitar. 269 00:13:41,196 --> 00:13:42,570 Jadi mari kita lihat apakah saya punya hak ini. 270 00:13:42,570 --> 00:13:43,930 Mari saya zoom out. 271 00:13:43,930 --> 00:13:45,130 >> Mari saya tarik Scratch up. 272 00:13:45,130 --> 00:13:50,030 Jadi dia sedikit terdistorsi sekarang, tapi itu baik-baik saja. 273 00:13:50,030 --> 00:13:52,231 Bagaimana saya bisa mereset dia dengan mudah? 274 00:13:52,231 --> 00:13:59,879 275 00:13:59,879 --> 00:14:01,045 Aku akan menipu sedikit. 276 00:14:01,045 --> 00:14:04,074 277 00:14:04,074 --> 00:14:05,990 Jadi saya menambahkan lain blok, hanya harus jelas. 278 00:14:05,990 --> 00:14:08,424 Saya ingin dia menunjukkan 90 derajat ke kanan secara default, 279 00:14:08,424 --> 00:14:10,840 jadi aku hanya akan mengatakan kepadanya untuk melakukan itu pemrograman. 280 00:14:10,840 --> 00:14:11,632 Dan di sini kita pergi. 281 00:14:11,632 --> 00:14:14,740 282 00:14:14,740 --> 00:14:15,740 Kita tampaknya telah melakukannya. 283 00:14:15,740 --> 00:14:19,980 Ini sedikit aneh, karena dia berjalan terbalik. 284 00:14:19,980 --> 00:14:21,250 Mari kita sebut bahwa bug. 285 00:14:21,250 --> 00:14:22,120 Itu kesalahan. 286 00:14:22,120 --> 00:14:27,320 Sebuah bug adalah kesalahan dalam program, sebuah kesalahan logis bahwa saya, manusia, membuat. 287 00:14:27,320 --> 00:14:28,985 Mengapa dia akan terbalik? 288 00:14:28,985 --> 00:14:33,560 289 00:14:33,560 --> 00:14:35,250 Apakah MIT mengacaukan atau aku? 290 00:14:35,250 --> 00:14:38,840 291 00:14:38,840 --> 00:14:42,550 >> Ya, maksud saya, itu tidak MIT kesalahan. Mereka memberiku potongan puzzle 292 00:14:42,550 --> 00:14:44,970 yang mengatakan mengubah beberapa jumlah derajat. 293 00:14:44,970 --> 00:14:47,672 Dan di saran Victoria, Aku berubah 180 derajat, 294 00:14:47,672 --> 00:14:48,880 yang merupakan intuisi yang tepat. 295 00:14:48,880 --> 00:14:53,700 Tapi berbalik 180 derajat harfiah berarti berputar 180 derajat, 296 00:14:53,700 --> 00:14:55,860 dan itu tidak benar-benar apa yang saya inginkan, rupanya. 297 00:14:55,860 --> 00:14:58,026 Karena setidaknya dia di dunia ini dua dimensi, 298 00:14:58,026 --> 00:15:00,740 jadi balik benar-benar akan flip dia terbalik. 299 00:15:00,740 --> 00:15:04,030 >> Saya mungkin ingin menggunakan apa block sebaliknya, berdasarkan apa yang Anda lihat di sini? 300 00:15:04,030 --> 00:15:11,890 301 00:15:11,890 --> 00:15:14,790 Bagaimana mungkin kita memperbaiki ini? 302 00:15:14,790 --> 00:15:18,380 Ya, jadi kita bisa menunjukkan dalam arah yang berlawanan. 303 00:15:18,380 --> 00:15:22,300 Dan benar-benar bahkan itu tidak akan cukup, 304 00:15:22,300 --> 00:15:26,410 karena kita hanya bisa kode keras untuk menunjuk kiri atau kanan. 305 00:15:26,410 --> 00:15:27,920 >> Anda tahu apa yang bisa kita lakukan? 306 00:15:27,920 --> 00:15:30,160 Sepertinya kita memiliki kenyamanan blok di sini. 307 00:15:30,160 --> 00:15:32,987 Jika saya memperbesar, melihat sesuatu yang kita suka di sini? 308 00:15:32,987 --> 00:15:36,120 309 00:15:36,120 --> 00:15:40,020 Jadi sepertinya MIT memiliki abstraksi dibangun di sini. 310 00:15:40,020 --> 00:15:45,440 Blok ini tampaknya menjadi setara yang blok lainnya, plural? 311 00:15:45,440 --> 00:15:49,510 >> satu blok ini tampaknya menjadi setara untuk seluruh trio ini blok 312 00:15:49,510 --> 00:15:50,880 yang kita miliki di sini. 313 00:15:50,880 --> 00:15:54,670 Jadi ternyata saya dapat menyederhanakan saya Program dengan menyingkirkan semua itu 314 00:15:54,670 --> 00:15:58,270 dan hanya menempatkan ini di sini. 315 00:15:58,270 --> 00:16:01,620 Dan sekarang dia masih sedikit kereta, dan itu bagus untuk saat ini. 316 00:16:01,620 --> 00:16:03,370 Kami akan memberikan yang ada. 317 00:16:03,370 --> 00:16:06,000 Tapi program saya bahkan sederhana, dan ini, juga, 318 00:16:06,000 --> 00:16:09,060 akan menjadi wakil dari tujuan di programming-- 319 00:16:09,060 --> 00:16:13,430 adalah idealnya membuat kode Anda sebagai sederhana, kompak mungkin, 320 00:16:13,430 --> 00:16:15,650 sementara masih sebagai dibaca mungkin. 321 00:16:15,650 --> 00:16:20,310 Anda tidak ingin membuatnya begitu singkat bahwa sulit untuk memahami. 322 00:16:20,310 --> 00:16:22,826 >> Tapi perhatikan aku sudah diganti tiga blok dengan satu, 323 00:16:22,826 --> 00:16:24,200 dan itu bisa dibilang hal yang baik. 324 00:16:24,200 --> 00:16:27,280 Aku sudah disarikan pergi gagasan memeriksa apakah Anda 325 00:16:27,280 --> 00:16:29,120 di tepi dengan hanya satu blok. 326 00:16:29,120 --> 00:16:31,520 Sekarang kita bisa bersenang-senang dengan ini, pada kenyataannya. 327 00:16:31,520 --> 00:16:35,790 Ini tidak menambahkan begitu banyak nilai intelektual tetapi nilai playful. 328 00:16:35,790 --> 00:16:39,730 Aku akan pergi ke depan dan ambil suara ini di sini. 329 00:16:39,730 --> 00:16:42,900 330 00:16:42,900 --> 00:16:46,420 Jadi biarkan aku pergi ke depan, dan biarkan aku menghentikan program sejenak. 331 00:16:46,420 --> 00:16:52,070 Aku akan merekam berikut, memungkinkan akses ke mikrofon saya. 332 00:16:52,070 --> 00:16:53,181 >> Kita mulai. 333 00:16:53,181 --> 00:16:53,680 Aduh. 334 00:16:53,680 --> 00:16:58,710 335 00:16:58,710 --> 00:17:01,140 Mari kita coba ini lagi. 336 00:17:01,140 --> 00:17:02,279 Kita mulai. 337 00:17:02,279 --> 00:17:03,570 OK, saya mencatat hal yang salah. 338 00:17:03,570 --> 00:17:04,580 Kita mulai. 339 00:17:04,580 --> 00:17:05,080 Aduh. 340 00:17:05,080 --> 00:17:07,910 341 00:17:07,910 --> 00:17:08,800 Aduh. 342 00:17:08,800 --> 00:17:09,300 Baiklah. 343 00:17:09,300 --> 00:17:10,791 Sekarang saya perlu untuk menyingkirkan itu. 344 00:17:10,791 --> 00:17:11,290 Baiklah. 345 00:17:11,290 --> 00:17:13,950 >> Jadi sekarang aku punya perekaman hanya "Aduh." 346 00:17:13,950 --> 00:17:18,040 Jadi sekarang aku akan pergi depan dan menyebutnya "Aduh." 347 00:17:18,040 --> 00:17:20,270 Aku akan kembali script saya, dan sekarang 348 00:17:20,270 --> 00:17:25,460 pemberitahuan ada blok ini yang disebut memutar suara "meong" atau memutar suara "Aduh." 349 00:17:25,460 --> 00:17:28,920 Aku akan menyeret ini, dan di mana harus saya menempatkan ini untuk efek lucu? 350 00:17:28,920 --> 00:17:31,740 351 00:17:31,740 --> 00:17:37,860 Ya, jadi sekarang itu jenis kereta, karena sekarang ini block-- 352 00:17:37,860 --> 00:17:42,050 perhatikan bagaimana ini "jika di tepi, bounce "adalah jenis mandiri. 353 00:17:42,050 --> 00:17:43,704 Jadi saya harus memperbaiki ini. 354 00:17:43,704 --> 00:17:44,870 Biarkan aku pergi ke depan dan melakukan hal ini. 355 00:17:44,870 --> 00:17:48,630 Biarkan aku menyingkirkan ini dan kembali untuk asli kami, lebih disengaja 356 00:17:48,630 --> 00:17:49,870 fungsionalitas. 357 00:17:49,870 --> 00:18:01,080 Jadi "jika menyentuh tepi, maka" Saya ingin untuk mengubah, sebagai Victoria diusulkan, 358 00:18:01,080 --> 00:18:02,480 180 derajat. 359 00:18:02,480 --> 00:18:05,497 Dan apakah saya ingin bermain suara "Aduh" di sana? 360 00:18:05,497 --> 00:18:11,800 361 00:18:11,800 --> 00:18:15,580 >> Ya, melihat itu luar blok kuning. 362 00:18:15,580 --> 00:18:17,680 Jadi ini juga, akan menjadi bug, tapi aku sudah melihat itu. 363 00:18:17,680 --> 00:18:21,290 Jadi aku akan seret di sini, dan pemberitahuan sekarang ini dalam "jika." 364 00:18:21,290 --> 00:18:24,250 Jadi "jika" adalah semacam ini seperti lengan-seperti blot 365 00:18:24,250 --> 00:18:26,260 yang hanya akan melakukan apa yang di dalamnya. 366 00:18:26,260 --> 00:18:30,216 Jadi sekarang jika saya zoom out di risiko annoying-- 367 00:18:30,216 --> 00:18:32,860 368 00:18:32,860 --> 00:18:36,470 >> KOMPUTER: Aduh, aduh, aduh. 369 00:18:36,470 --> 00:18:39,910 >> DAVID Malan: Dan hanya akan berlangsung selamanya. 370 00:18:39,910 --> 00:18:44,160 Sekarang hanya untuk mempercepat hal-hal sini, biarkan aku pergi ke depan dan membuka, 371 00:18:44,160 --> 00:18:50,460 mari say-- biarkan aku pergi ke beberapa barang saya sendiri dari kelas. 372 00:18:50,460 --> 00:18:53,000 373 00:18:53,000 --> 00:19:00,220 Dan biarkan aku membuka, katakanlah, ini satu yang dibuat oleh salah satu rekan mengajar kami 374 00:19:00,220 --> 00:19:01,500 beberapa tahun yang lalu. 375 00:19:01,500 --> 00:19:04,732 Jadi beberapa dari Anda mungkin ingat game ini dari masa lampau, 376 00:19:04,732 --> 00:19:05,940 dan itu benar-benar luar biasa. 377 00:19:05,940 --> 00:19:08,190 Meskipun kami sudah melakukan sederhana program sekarang, 378 00:19:08,190 --> 00:19:09,980 mari kita mempertimbangkan apa ini benar-benar tampak seperti. 379 00:19:09,980 --> 00:19:10,650 Mari saya tekan tombol play. 380 00:19:10,650 --> 00:19:14,210 381 00:19:14,210 --> 00:19:18,980 >> Jadi dalam game ini, kita memiliki katak, dan menggunakan panah keys-- 382 00:19:18,980 --> 00:19:23,340 ia mengambil langkah besar daripada yang saya ingat-- Saya memiliki kontrol atas katak ini. 383 00:19:23,340 --> 00:19:29,630 Dan tujuannya adalah untuk mendapatkan seluruh sibuk jalan tanpa berlari ke mobil. 384 00:19:29,630 --> 00:19:34,735 Dan mari kita see-- jika saya pergi ke sini, saya harus menunggu log untuk menggulir dengan. 385 00:19:34,735 --> 00:19:38,130 386 00:19:38,130 --> 00:19:39,274 Ini terasa seperti bug. 387 00:19:39,274 --> 00:19:42,240 388 00:19:42,240 --> 00:19:43,495 Ini adalah jenis bug. 389 00:19:43,495 --> 00:19:45,980 390 00:19:45,980 --> 00:19:46,480 Baiklah. 391 00:19:46,480 --> 00:19:51,550 Aku tentang ini di sini, ada, dan kemudian Anda tetap 392 00:19:51,550 --> 00:19:54,100 berjalan sampai Anda mendapatkan semua katak untuk bantalan lily. 393 00:19:54,100 --> 00:19:55,920 Sekarang ini mungkin terlihat semua lebih kompleks, 394 00:19:55,920 --> 00:19:57,840 tapi mari kita coba untuk memecahkan ini turun mental 395 00:19:57,840 --> 00:20:00,040 dan verbal menjadi blok-blok komponen. 396 00:20:00,040 --> 00:20:03,910 Jadi mungkin ada teka-teki sepotong bahwa kita belum melihat belum 397 00:20:03,910 --> 00:20:07,440 tapi itu menanggapi keystrokes, untuk hal-hal yang aku memukul pada keyboard. 398 00:20:07,440 --> 00:20:11,660 >> Jadi mungkin ada beberapa jenis blok yang mengatakan, jika kunci sama up, 399 00:20:11,660 --> 00:20:15,965 kemudian melakukan sesuatu dengan Scratch-- mungkin memindahkannya 10 langkah cara ini. 400 00:20:15,965 --> 00:20:20,240 Jika ditekan ditekan, bergerak 10 langkah cara ini, atau tombol kiri, bergerak 10 langkah 401 00:20:20,240 --> 00:20:21,710 cara ini, 10 langkah itu. 402 00:20:21,710 --> 00:20:23,644 Aku sudah jelas berubah kucing menjadi katak. 403 00:20:23,644 --> 00:20:26,060 Jadi itu hanya mana kostum, panggilan Scratch pengubah kami 404 00:20:26,060 --> 00:20:28,440 hanya mengimpor gambar katak. 405 00:20:28,440 --> 00:20:29,570 >> Tapi apa lagi yang terjadi? 406 00:20:29,570 --> 00:20:32,794 Apa baris lain dari kode, apa potongan puzzle lainnya 407 00:20:32,794 --> 00:20:35,460 melakukan Blake, mengajar sesama, digunakan dalam program ini, rupanya? 408 00:20:35,460 --> 00:20:38,320 409 00:20:38,320 --> 00:20:42,730 Apa yang membuat segalanya move-- apa pemrograman membangun? 410 00:20:42,730 --> 00:20:44,950 >> Gerak, sure-- sehingga bergerak blok, pasti. 411 00:20:44,950 --> 00:20:49,330 Dan apa itu blok bergerak dalam, kemungkinan besar? 412 00:20:49,330 --> 00:20:52,850 Ya, semacam lingkaran, mungkin selamanya memblokir, mungkin mengulang block-- 413 00:20:52,850 --> 00:20:54,070 ulangi sampai blok. 414 00:20:54,070 --> 00:20:57,330 Dan itulah yang membuat log dan bantalan lily dan segala sesuatu yang lain bergerak 415 00:20:57,330 --> 00:20:57,990 bolak-balik. 416 00:20:57,990 --> 00:21:00,270 Ini hanya terjadi tanpa henti. 417 00:21:00,270 --> 00:21:03,180 >> Mengapa beberapa mobil bergerak lebih cepat dari yang lain? 418 00:21:03,180 --> 00:21:06,607 Apa yang berbeda tentang program-program tersebut? 419 00:21:06,607 --> 00:21:09,690 Ya, mungkin beberapa dari mereka mengambil langkah lagi sekaligus dan beberapa dari mereka 420 00:21:09,690 --> 00:21:10,690 langkah-langkah yang lebih sedikit sekaligus. 421 00:21:10,690 --> 00:21:14,670 Dan efek visual cepat dibandingkan lambat. 422 00:21:14,670 --> 00:21:16,030 >> Apa yang Anda pikir terjadi? 423 00:21:16,030 --> 00:21:19,700 Ketika aku katak saya semua jalan di seberang jalan dan sungai 424 00:21:19,700 --> 00:21:23,560 ke lily pad, sesuatu penting terjadi. 425 00:21:23,560 --> 00:21:26,540 Apa yang terjadi segera setelah saya melakukan itu? 426 00:21:26,540 --> 00:21:27,210 Itu berhenti. 427 00:21:27,210 --> 00:21:29,680 katak yang berhenti, dan Aku punya katak kedua. 428 00:21:29,680 --> 00:21:33,155 Jadi apa yang membangun harus digunakan di sana, fitur apa? 429 00:21:33,155 --> 00:21:36,020 430 00:21:36,020 --> 00:21:38,660 >> Ya, jadi ada semacam "Jika" kondisi di sana, juga. 431 00:21:38,660 --> 00:21:41,909 Dan ternyata out-- kita tidak melihat ini-- tapi ada blok lain di sana yang 432 00:21:41,909 --> 00:21:45,300 bisa mengatakan, jika Anda menyentuh hal lain pada layar, 433 00:21:45,300 --> 00:21:47,720 jika Anda menyentuh pad lily, "kemudian." 434 00:21:47,720 --> 00:21:50,810 Dan kemudian saat itulah kita membuat katak kedua muncul. 435 00:21:50,810 --> 00:21:54,969 Jadi meskipun game ini tentu sangat tanggal, meskipun pada pandangan pertama 436 00:21:54,969 --> 00:21:58,010 ada begitu banyak terjadi Blake on-- dan tidak cambuk ini dalam dua menit, 437 00:21:58,010 --> 00:22:00,390 mungkin membawanya beberapa jam untuk membuat game ini 438 00:22:00,390 --> 00:22:03,850 berdasarkan memori atau video nya versi tahun kemarin itu. 439 00:22:03,850 --> 00:22:07,940 Tapi semua hal-hal kecil akan pada layar dalam isolasi 440 00:22:07,940 --> 00:22:11,550 mendidih ke ini sangat sederhana gerakan atau pernyataan constructs-- 441 00:22:11,550 --> 00:22:15,519 seperti yang sudah kita bahas, loop dan kondisi, dan itu saja. 442 00:22:15,519 --> 00:22:17,060 Ada beberapa fitur yang lebih menarik lainnya. 443 00:22:17,060 --> 00:22:19,130 Beberapa dari mereka adalah murni estetika atau akustik, 444 00:22:19,130 --> 00:22:20,964 seperti suara saya hanya bermain dengan. 445 00:22:20,964 --> 00:22:23,380 Tetapi untuk sebagian besar, Anda memiliki dalam bahasa ini, Scratch, 446 00:22:23,380 --> 00:22:25,350 semua fundamental bangunan blok yang Anda 447 00:22:25,350 --> 00:22:29,280 ada di C, Java, JavaScript, PHP, Ruby, Python, 448 00:22:29,280 --> 00:22:32,960 dan sejumlah bahasa lain. 449 00:22:32,960 --> 00:22:36,720 Pertanyaan tentang Scratch? 450 00:22:36,720 --> 00:22:37,220 Baiklah. 451 00:22:37,220 --> 00:22:40,303 Jadi kita tidak akan menyelam lebih dalam ke Scratch, meskipun kau selamat datang akhir pekan ini, 452 00:22:40,303 --> 00:22:42,860 terutama jika Anda memiliki anak-anak atau keponakan dan semacamnya, 453 00:22:42,860 --> 00:22:44,220 untuk memperkenalkan mereka kepada Scratch. 454 00:22:44,220 --> 00:22:47,960 Ini sebenarnya sangat lucu lingkungan dengan, sebagai penulisnya mengatakan, 455 00:22:47,960 --> 00:22:49,120 langit-langit yang sangat tinggi. 456 00:22:49,120 --> 00:22:51,670 Meskipun kami mulai dengan sangat detail tingkat rendah, 457 00:22:51,670 --> 00:22:54,890 Anda benar-benar dapat melakukan sedikit dengan itu, dan ini mungkin 458 00:22:54,890 --> 00:22:57,360 demonstrasi yang tepat. 459 00:22:57,360 --> 00:23:02,920 >> Tapi mari kita sekarang beralih ke beberapa lebih masalah canggih, jika Anda mau, 460 00:23:02,920 --> 00:23:05,870 dikenal sebagai "mencari" dan "Pemilahan," lebih umum. 461 00:23:05,870 --> 00:23:09,500 Kami memiliki buku telepon ini earlier-- inilah satu lagi hanya untuk discussion-- 462 00:23:09,500 --> 00:23:13,460 bahwa kita mampu untuk mencari lebih efisien karena 463 00:23:13,460 --> 00:23:15,270 dari asumsi yang signifikan. 464 00:23:15,270 --> 00:23:17,655 Dan hanya harus jelas, apa yang Asumsi itu saya membuat 465 00:23:17,655 --> 00:23:19,280 ketika mencari melalui buku telepon ini? 466 00:23:19,280 --> 00:23:23,342 467 00:23:23,342 --> 00:23:25,300 Bahwa Mike Smith berada di buku telepon, meskipun saya 468 00:23:25,300 --> 00:23:27,410 akan mampu menangani skenario tanpa dia 469 00:23:27,410 --> 00:23:30,720 ada jika aku hanya berhenti sebelum waktunya. 470 00:23:30,720 --> 00:23:31,806 Buku ini abjad. 471 00:23:31,806 --> 00:23:33,930 Dan itu sangat murah hati asumsi, karena itu 472 00:23:33,930 --> 00:23:36,580 berarti someone-- Aku agak pemotongan sudut, 473 00:23:36,580 --> 00:23:40,580 seperti saya lebih cepat karena seseorang lain melakukan banyak kerja keras untuk saya. 474 00:23:40,580 --> 00:23:43,120 >> Tapi bagaimana jika telepon Buku yang unsorted? 475 00:23:43,120 --> 00:23:47,050 Mungkin Verizon punya malas, hanya melemparkan nama dan nomor semua orang di sana 476 00:23:47,050 --> 00:23:50,120 mungkin di urutan di mana mereka mendaftar untuk layanan telepon. 477 00:23:50,120 --> 00:23:54,570 Dan berapa banyak waktu yang dibutuhkan saya untuk menemukan seseorang seperti Mike Smith? 478 00:23:54,570 --> 00:23:58,160 1.000 Halaman ponsel book-- berapa banyak halaman saya harus melihat melalui? 479 00:23:58,160 --> 00:23:58,905 >> Mereka semua. 480 00:23:58,905 --> 00:24:00,030 Anda semacam beruntung. 481 00:24:00,030 --> 00:24:03,420 Anda benar-benar harus melihat setiap Halaman jika buku telepon hanya 482 00:24:03,420 --> 00:24:04,450 acak diurutkan. 483 00:24:04,450 --> 00:24:06,910 Anda mungkin beruntung dan menemukan Mike pada halaman pertama, karena ia 484 00:24:06,910 --> 00:24:08,826 adalah pelanggan pertama untuk memesan layanan telepon. 485 00:24:08,826 --> 00:24:10,760 Tapi dia mungkin telah yang terakhir, juga. 486 00:24:10,760 --> 00:24:12,500 >> Jadi urutan acak tidak baik. 487 00:24:12,500 --> 00:24:16,750 Jadi misalkan kita harus mengurutkan buku telepon atau data semacam umum 488 00:24:16,750 --> 00:24:18,520 bahwa kita telah diberikan. 489 00:24:18,520 --> 00:24:19,440 Bagaimana kita bisa melakukan itu? 490 00:24:19,440 --> 00:24:21,360 >> Nah, biarkan aku hanya mencoba contoh sederhana di sini. 491 00:24:21,360 --> 00:24:24,290 Biarkan aku pergi ke depan dan melemparkan beberapa nomor di papan. 492 00:24:24,290 --> 00:24:35,480 Misalkan angka yang kita miliki adalah, katakanlah, empat, dua, satu, dan tiga. 493 00:24:35,480 --> 00:24:38,390 Dan, Ben, mengurutkan angka-angka ini bagi kita. 494 00:24:38,390 --> 00:24:39,017 >> Oke bagus. 495 00:24:39,017 --> 00:24:39,850 Bagaimana Anda melakukannya? 496 00:24:39,850 --> 00:24:42,731 497 00:24:42,731 --> 00:24:43,230 Baiklah. 498 00:24:43,230 --> 00:24:44,710 Jadi mulai dengan yang terkecil nilai dan tertinggi, 499 00:24:44,710 --> 00:24:46,084 dan itu benar-benar intuisi yang baik. 500 00:24:46,084 --> 00:24:48,080 Dan menyadari kita bahwa manusia sebenarnya cukup 501 00:24:48,080 --> 00:24:49,913 pandai memecahkan masalah seperti ini, setidaknya 502 00:24:49,913 --> 00:24:51,810 ketika data yang relatif kecil. 503 00:24:51,810 --> 00:24:54,860 Segera setelah Anda mulai memiliki ratusan angka, ribuan nomor, 504 00:24:54,860 --> 00:24:58,440 jutaan nomor, Ben mungkin tidak bisa melakukannya cukup secepat itu, 505 00:24:58,440 --> 00:25:00,620 dengan asumsi bahwa ada kesenjangan dalam angka. 506 00:25:00,620 --> 00:25:03,450 Cukup mudah untuk menghitung satu juta jika tidak, memakan waktu hanya. 507 00:25:03,450 --> 00:25:07,150 >> Jadi algoritma kedengarannya seperti Ben digunakan sekarang 508 00:25:07,150 --> 00:25:08,930 adalah pencarian untuk nomor terkecil. 509 00:25:08,930 --> 00:25:12,900 Jadi meskipun kita manusia dapat mengambil di banyak informasi visual, 510 00:25:12,900 --> 00:25:14,830 komputer sebenarnya sedikit lebih terbatas. 511 00:25:14,830 --> 00:25:17,560 komputer hanya dapat melihat satu byte pada suatu waktu 512 00:25:17,560 --> 00:25:20,770 atau mungkin empat byte di time-- sebuah hari ini mungkin 8 byte pada time-- sebuah 513 00:25:20,770 --> 00:25:24,450 tetapi jumlah yang sangat kecil dari byte pada waktu tertentu. 514 00:25:24,450 --> 00:25:28,480 >> Jadi mengingat bahwa kita benar-benar memiliki empat nilai terpisah di sini- 515 00:25:28,480 --> 00:25:32,440 dan Anda bisa memikirkan Ben sebagai memiliki penutup mata jika ia adalah komputer seperti 516 00:25:32,440 --> 00:25:36,450 bahwa ia tidak bisa melihat apa-apa dari satu nomor di time-- sebuah 517 00:25:36,450 --> 00:25:39,720 sehingga kita umumnya akan menganggap, seperti di Bahasa Inggris, kami akan membaca dari kanan ke kiri. 518 00:25:39,720 --> 00:25:42,870 Jadi angka pertama Ben mungkin tampak di empat dan kemudian sangat cepat 519 00:25:42,870 --> 00:25:44,770 menyadari itu cukup besar number-- biarkan aku terus mencari. 520 00:25:44,770 --> 00:25:45,357 >> Ada dua. 521 00:25:45,357 --> 00:25:45,940 Tunggu sebentar. 522 00:25:45,940 --> 00:25:47,070 Dua lebih kecil dari empat. 523 00:25:47,070 --> 00:25:47,986 Aku akan ingat. 524 00:25:47,986 --> 00:25:49,070 Dua sekarang terkecil. 525 00:25:49,070 --> 00:25:50,417 Sekarang satu-- yang bahkan lebih baik. 526 00:25:50,417 --> 00:25:51,250 Itu bahkan lebih kecil. 527 00:25:51,250 --> 00:25:54,000 Aku akan melupakan dua dan hanya ingat satu sekarang. 528 00:25:54,000 --> 00:25:56,550 >> Dan dia bisa berhenti mencari? 529 00:25:56,550 --> 00:25:58,360 Yah, dia bisa berdasarkan informasi ini, 530 00:25:58,360 --> 00:26:00,477 tapi dia Sebaiknya pencarian yang lebih baik sisa daftar. 531 00:26:00,477 --> 00:26:02,060 Karena bagaimana jika nol berada dalam daftar? 532 00:26:02,060 --> 00:26:03,643 Bagaimana jika negatif satu berada di daftar? 533 00:26:03,643 --> 00:26:07,720 Dia hanya tahu bahwa jawabannya adalah benar jika dia secara mendalam 534 00:26:07,720 --> 00:26:08,729 memeriksa seluruh daftar. 535 00:26:08,729 --> 00:26:10,020 Jadi kita melihat sisa ini. 536 00:26:10,020 --> 00:26:11,394 Three-- itu membuang-buang waktu. 537 00:26:11,394 --> 00:26:13,540 Mendapat beruntung, tapi aku masih benar untuk melakukannya. 538 00:26:13,540 --> 00:26:17,857 Dan sekarang dia mungkin dipilih jumlah terkecil 539 00:26:17,857 --> 00:26:20,440 dan hanya menaruhnya di awal dari daftar, seperti yang saya akan lakukan di sini. 540 00:26:20,440 --> 00:26:23,480 Sekarang apa yang Anda lakukan selanjutnya, meskipun Anda tidak berpikir tentang hal itu hampir 541 00:26:23,480 --> 00:26:25,962 sejauh ini? 542 00:26:25,962 --> 00:26:27,670 Ulangi proses, jadi semacam lingkaran. 543 00:26:27,670 --> 00:26:28,920 Ada ide akrab. 544 00:26:28,920 --> 00:26:30,860 Jadi di sini adalah empat. 545 00:26:30,860 --> 00:26:32,110 Itulah saat yang terkecil. 546 00:26:32,110 --> 00:26:33,220 Itu kandidat. 547 00:26:33,220 --> 00:26:33,900 Tidak lagi. 548 00:26:33,900 --> 00:26:34,770 Sekarang aku sudah melihat dua. 549 00:26:34,770 --> 00:26:36,630 Itulah elemen terkecil berikutnya. 550 00:26:36,630 --> 00:26:40,800 Three-- itu tidak kecil, sehingga sekarang Ben dapat mencabut dua. 551 00:26:40,800 --> 00:26:44,510 >> Dan sekarang kita ulangi proses, dan tentu saja tiga akan ditarik keluar berikutnya. 552 00:26:44,510 --> 00:26:45,420 Ulangi proses. 553 00:26:45,420 --> 00:26:46,990 Empat akan ditarik keluar. 554 00:26:46,990 --> 00:26:50,140 Dan sekarang kita keluar dari nomor, sehingga daftar harus diurutkan. 555 00:26:50,140 --> 00:26:51,960 >> Dan memang, ini adalah algoritma formal. 556 00:26:51,960 --> 00:26:56,610 Seorang ilmuwan komputer akan menyebutnya "selection sort," 557 00:26:56,610 --> 00:27:00,880 ide menjadi semacam sebuah daftar iteratively-- lagi 558 00:27:00,880 --> 00:27:03,807 dan lagi dan lagi memilih jumlah terkecil. 559 00:27:03,807 --> 00:27:06,140 Dan apa yang baik tentang itu adalah itu hanya begitu darn intuitif. 560 00:27:06,140 --> 00:27:07,470 Ini sangat sederhana. 561 00:27:07,470 --> 00:27:11,100 Dan Anda dapat mengulangi hal yang sama operasi lagi dan lagi. 562 00:27:11,100 --> 00:27:12,150 Itu mudah. 563 00:27:12,150 --> 00:27:17,170 >> Dalam hal ini adalah cepat, tapi berapa lama waktu yang benar-benar mengambil? 564 00:27:17,170 --> 00:27:19,880 Mari kita membuatnya tampak dan merasa sedikit lebih membosankan. 565 00:27:19,880 --> 00:27:24,150 Jadi satu, dua, tiga, empat, lima enam, tujuh, delapan, sembilan, 10, 11, 12, 13, 14, 566 00:27:24,150 --> 00:27:26,160 15, 16-- jumlah sewenang-wenang. 567 00:27:26,160 --> 00:27:28,780 Aku hanya ingin lebih ini waktu hanya empat. 568 00:27:28,780 --> 00:27:30,780 Jadi jika saya punya keseluruhan sekelompok angka sekarang-- itu 569 00:27:30,780 --> 00:27:32,420 bahkan tidak peduli apa yang mereka are-- mari 570 00:27:32,420 --> 00:27:34,380 berpikir tentang apa ini algoritma benar-benar seperti. 571 00:27:34,380 --> 00:27:35,857 >> Misalkan ada nomor di sana. 572 00:27:35,857 --> 00:27:38,190 Sekali lagi, tidak peduli apa mereka, tapi mereka secara acak. 573 00:27:38,190 --> 00:27:39,679 Saya menerapkan algoritma Ben. 574 00:27:39,679 --> 00:27:41,220 Saya harus memilih nomor terkecil. 575 00:27:41,220 --> 00:27:41,761 Apa yang saya lakukan? 576 00:27:41,761 --> 00:27:44,240 Dan aku akan secara fisik melakukannya kali ini untuk bertindak keluar. 577 00:27:44,240 --> 00:27:46,099 Melihat, mencari, mencari, mencari, mencari. 578 00:27:46,099 --> 00:27:48,140 Hanya pada saat saya sampai ke akhir daftar bisa 579 00:27:48,140 --> 00:27:51,230 Saya menyadari terkecil Jumlah itu dua kali ini. 580 00:27:51,230 --> 00:27:52,720 Salah satu yang tidak ada dalam daftar. 581 00:27:52,720 --> 00:27:54,400 Jadi saya meletakkan dua. 582 00:27:54,400 --> 00:27:55,590 >> Apa yang harus saya lakukan selanjutnya? 583 00:27:55,590 --> 00:27:58,600 Melihat, mencari, mencari, mencari. 584 00:27:58,600 --> 00:28:02,250 Sekarang saya menemukan nomor tujuh, karena ada kesenjangan dalam Numbers ini 585 00:28:02,250 --> 00:28:03,300 tapi hanya sewenang-wenang. 586 00:28:03,300 --> 00:28:03,800 Baiklah. 587 00:28:03,800 --> 00:28:06,030 Jadi sekarang aku bisa meletakkan tujuh. 588 00:28:06,030 --> 00:28:08,860 Mencari mencari, mencari. 589 00:28:08,860 --> 00:28:11,030 >> Sekarang Aku menduga, dari Tentu saja, yang Ben tidak 590 00:28:11,030 --> 00:28:14,780 memiliki RAM ekstra, ekstra memori, karena, tentu saja, 591 00:28:14,780 --> 00:28:16,080 Aku sedang melihat nomor yang sama. 592 00:28:16,080 --> 00:28:18,246 Tentunya saya bisa ingat semua angka-angka, 593 00:28:18,246 --> 00:28:19,930 dan itu benar-benar benar. 594 00:28:19,930 --> 00:28:22,610 Tapi jika Ben ingat semua nomor dia melihat, 595 00:28:22,610 --> 00:28:24,430 dia belum benar-benar membuat kemajuan mendasar 596 00:28:24,430 --> 00:28:26,170 karena dia sudah memiliki kemampuan untuk mencari 597 00:28:26,170 --> 00:28:27,540 melalui nomor di papan tulis. 598 00:28:27,540 --> 00:28:29,373 Mengingat semua nomor tidak membantu, 599 00:28:29,373 --> 00:28:32,490 karena ia masih bisa sebagai komputer hanya melihat, kita sudah mengatakan, satu nomor 600 00:28:32,490 --> 00:28:33,080 pada suatu waktu. 601 00:28:33,080 --> 00:28:35,760 Jadi tidak ada semacam curang ada yang Anda dapat memanfaatkan. 602 00:28:35,760 --> 00:28:39,170 >> Jadi dalam kenyataannya, seperti yang saya terus mencari daftar, 603 00:28:39,170 --> 00:28:44,200 Aku benar-benar harus hanya terus bolak-balik melalui itu, mencabut 604 00:28:44,200 --> 00:28:45,710 jumlah terkecil berikutnya. 605 00:28:45,710 --> 00:28:48,810 Dan seperti yang Anda jenis menyimpulkan dari gerakan-gerakan konyol saya, 606 00:28:48,810 --> 00:28:50,860 ini hanya akan sangat membosankan sangat cepat, 607 00:28:50,860 --> 00:28:54,850 dan saya tampaknya akan kembali dan balik, bolak-balik sedikit. 608 00:28:54,850 --> 00:29:03,220 Sekarang untuk menjadi adil, saya tidak harus pergi cukup, baik, mari kita see-- untuk menjadi adil, 609 00:29:03,220 --> 00:29:06,310 Saya tidak harus berjalan cukup karena banyak langkah setiap kali. 610 00:29:06,310 --> 00:29:09,200 Karena, tentu saja, seperti yang saya pilih nomor dari daftar, 611 00:29:09,200 --> 00:29:11,860 daftar tersisa semakin pendek. 612 00:29:11,860 --> 00:29:14,240 >> Dan mari kita berpikir tentang berapa banyak langkah Aku benar-benar 613 00:29:14,240 --> 00:29:16,010 traipsing melalui setiap kali. 614 00:29:16,010 --> 00:29:18,950 Dalam situasi pertama kami memiliki 16 angka, 615 00:29:18,950 --> 00:29:22,210 dan maximally-- mari kita melakukan ini untuk discussion-- sebuah 616 00:29:22,210 --> 00:29:25,640 Aku harus melihat melalui 16 nomor untuk menemukan terkecil. 617 00:29:25,640 --> 00:29:28,420 Tapi setelah saya dicabut jumlah terkecil, bagaimana 618 00:29:28,420 --> 00:29:30,590 panjang adalah daftar yang tersisa, tentu saja? 619 00:29:30,590 --> 00:29:31,420 Hanya 15. 620 00:29:31,420 --> 00:29:34,670 Jadi berapa banyak angka lakukan Ben atau saya harus untuk melihat melalui kedua kalinya? 621 00:29:34,670 --> 00:29:36,832 15, hanya untuk pergi dan menemukan terkecil. 622 00:29:36,832 --> 00:29:39,540 Tapi sekarang, tentu saja, daftar ini, juga, lebih kecil daripada sebelumnya. 623 00:29:39,540 --> 00:29:42,540 Jadi berapa banyak langkah apakah saya harus mengambil waktu berikutnya? 624 00:29:42,540 --> 00:29:49,970 14 dan kemudian 13 dan kemudian 12, ditambah dot, dot, dot, sampai aku pergi dengan hanya satu. 625 00:29:49,970 --> 00:29:53,146 Jadi sekarang seorang ilmuwan komputer akan bertanya, baik, apa yang semua sama? 626 00:29:53,146 --> 00:29:55,770 Ini sebenarnya sama dengan beberapa beton nomor yang kita bisa pasti 627 00:29:55,770 --> 00:30:00,490 melakukan deret hitung, tapi kami ingin berbicara tentang efisiensi algoritma 628 00:30:00,490 --> 00:30:04,940 sedikit lebih dirumuskan secara, independen dari berapa lama daftar adalah. 629 00:30:04,940 --> 00:30:06,240 >> Dan sehingga Anda tahu apa? 630 00:30:06,240 --> 00:30:09,860 Ini adalah 16, tapi seperti saya katakan sebelumnya, mari kita sebut ukuran masalah 631 00:30:09,860 --> 00:30:10,970 n, di mana n adalah beberapa nomor. 632 00:30:10,970 --> 00:30:13,220 Mungkin 16, mungkin itu tiga, mungkin itu satu juta. 633 00:30:13,220 --> 00:30:13,761 Saya tidak tahu. 634 00:30:13,761 --> 00:30:14,390 Saya tidak peduli. 635 00:30:14,390 --> 00:30:16,520 Apa yang saya inginkan adalah formula yang saya bisa 636 00:30:16,520 --> 00:30:19,420 gunakan untuk membandingkan algoritma ini terhadap algoritma lain 637 00:30:19,420 --> 00:30:22,350 bahwa seseorang mungkin mengklaim lebih baik atau lebih buruk. 638 00:30:22,350 --> 00:30:25,430 >> Jadi ternyata, dan saya hanya tahu ini dari sekolah dasar, 639 00:30:25,430 --> 00:30:34,790 bahwa ini benar-benar bekerja untuk sama Hal seperti n lebih n ditambah satu lebih dari dua. 640 00:30:34,790 --> 00:30:40,020 Dan ini terjadi untuk sama, dari Tentu saja, n kuadrat ditambah n lebih dari dua. 641 00:30:40,020 --> 00:30:43,250 Jadi jika saya ingin rumus untuk berapa banyak langkah 642 00:30:43,250 --> 00:30:46,330 terlibat dalam melihat semua dari angka-angka lagi dan lagi 643 00:30:46,330 --> 00:30:52,681 dan lagi dan lagi, saya akan mengatakan itu n kuadrat ditambah n lebih dari dua. 644 00:30:52,681 --> 00:30:53,430 Tapi kau tahu apa? 645 00:30:53,430 --> 00:30:54,500 Ini hanya tampak berantakan. 646 00:30:54,500 --> 00:30:56,470 Saya hanya benar-benar ingin pengertian umum dari hal. 647 00:30:56,470 --> 00:30:58,810 Dan Anda mungkin ingat dari SMA yang ada 648 00:30:58,810 --> 00:31:00,660 adalah gagasan dari istilah urutan tertinggi. 649 00:31:00,660 --> 00:31:05,300 Manakah dari istilah-istilah ini, n kuadrat, n, atau setengah, 650 00:31:05,300 --> 00:31:07,550 memiliki dampak yang paling dari waktu ke waktu? 651 00:31:07,550 --> 00:31:11,920 N lebih besar mendapat, yang dari hal-hal ini yang paling? 652 00:31:11,920 --> 00:31:15,560 >> Dengan kata lain, jika saya pasang dalam satu juta, n kuadrat 653 00:31:15,560 --> 00:31:17,900 akan menjadi yang paling mungkin faktor mendominasi, 654 00:31:17,900 --> 00:31:21,670 karena satu juta kali sendiri adalah jauh lebih besar 655 00:31:21,670 --> 00:31:23,682 dari ditambah satu tambahan juta. 656 00:31:23,682 --> 00:31:24,390 Sehingga Anda tahu apa? 657 00:31:24,390 --> 00:31:27,305 Ini darn seperti besar nomor jika Anda persegi nomor. 658 00:31:27,305 --> 00:31:28,430 Ini tidak benar-benar peduli. 659 00:31:28,430 --> 00:31:30,596 Kami hanya akan lintas yang keluar dan melupakannya. 660 00:31:30,596 --> 00:31:34,250 Dan seorang ilmuwan komputer akan mengatakan bahwa efisiensi algoritma ini 661 00:31:34,250 --> 00:31:37,850 adalah di urutan n squared-- Maksudku benar-benar perkiraan. 662 00:31:37,850 --> 00:31:40,810 Hal ini semacam kasar n kuadrat. 663 00:31:40,810 --> 00:31:44,130 Seiring waktu, semakin besar dan n lebih besar mendapat, ini 664 00:31:44,130 --> 00:31:47,610 adalah estimasi yang baik untuk apa efisiensi atau kurangnya efisiensi 665 00:31:47,610 --> 00:31:49,400 algoritma ini sebenarnya. 666 00:31:49,400 --> 00:31:52,040 Dan saya berasal itu, tentu saja, dari benar-benar melakukan matematika. 667 00:31:52,040 --> 00:31:54,040 Tapi sekarang aku hanya melambaikan tangan saya, karena saya hanya 668 00:31:54,040 --> 00:31:55,790 menginginkan sensasi umum algoritma ini. 669 00:31:55,790 --> 00:31:58,850 >> Jadi dengan menggunakan logika yang sama, sementara itu, mari kita pertimbangkan algoritma lain 670 00:31:58,850 --> 00:32:01,162 kita sudah melihat at-- pencarian linear. 671 00:32:01,162 --> 00:32:02,870 Ketika saya sedang mencari untuk book-- ponsel 672 00:32:02,870 --> 00:32:05,980 tidak menyortir itu, mencari melalui book-- ponsel 673 00:32:05,980 --> 00:32:09,197 kita terus mengatakan bahwa itu 1.000 langkah, atau 500 langkah. 674 00:32:09,197 --> 00:32:10,280 Tapi mari kita generalisasi itu. 675 00:32:10,280 --> 00:32:12,860 Jika ada n halaman di buku telepon, apa 676 00:32:12,860 --> 00:32:17,250 waktu berjalan atau efisiensi pencarian linear? 677 00:32:17,250 --> 00:32:19,750 Ini pada urutan berapa banyak langkah untuk menemukan 678 00:32:19,750 --> 00:32:24,210 Mike Smith menggunakan pencarian linear, yang algoritma pertama, atau bahkan kedua? 679 00:32:24,210 --> 00:32:27,240 680 00:32:27,240 --> 00:32:31,710 >> Dalam kasus terburuk, Mike adalah pada akhir buku ini. 681 00:32:31,710 --> 00:32:35,590 Jadi jika buku telepon memiliki 1.000 halaman, kita mengatakan terakhir kali, dalam kasus terburuk, 682 00:32:35,590 --> 00:32:38,380 mungkin butuh kira-kira berapa banyak halaman untuk menemukan Mike? 683 00:32:38,380 --> 00:32:38,990 Seperti 1.000. 684 00:32:38,990 --> 00:32:39,830 Ini adalah batas atas. 685 00:32:39,830 --> 00:32:41,790 Ini adalah situasi yang paling buruk. 686 00:32:41,790 --> 00:32:44,410 Tapi sekali lagi, kita bergerak menjauh dari angka-angka seperti 1000 sekarang. 687 00:32:44,410 --> 00:32:45,730 Ini hanya n. 688 00:32:45,730 --> 00:32:47,470 >> Jadi apa kesimpulan logis? 689 00:32:47,470 --> 00:32:50,210 Menemukan Mike di telepon buku yang memiliki halaman n 690 00:32:50,210 --> 00:32:55,280 mungkin mengambil, dalam kasus terburuk, berapa banyak langkah pada urutan n? 691 00:32:55,280 --> 00:32:58,110 Dan memang komputer ilmuwan akan mengatakan 692 00:32:58,110 --> 00:33:02,340 bahwa waktu berjalan, atau kinerja atau efisiensi 693 00:33:02,340 --> 00:33:07,470 atau inefisiensi, dari sebuah algoritma seperti pencarian linear adalah di urutan n. 694 00:33:07,470 --> 00:33:10,010 Dan kita dapat menerapkan hal yang sama logika persimpangan sesuatu 695 00:33:10,010 --> 00:33:13,170 karena saya hanya melakukan yang kedua algoritma kami telah dengan buku telepon, 696 00:33:13,170 --> 00:33:16,040 di mana kami pergi dua halaman pada satu waktu. 697 00:33:16,040 --> 00:33:20,120 >> Jadi 1.000 halaman buku telepon mungkin membawa kita 500 halaman bergantian, ditambah satu 698 00:33:20,120 --> 00:33:21,910 jika kita melipatgandakan kembali sedikit. 699 00:33:21,910 --> 00:33:26,590 Jadi jika buku telepon memiliki halaman n, tapi kita lakukan dua halaman pada satu waktu, 700 00:33:26,590 --> 00:33:28,900 itulah kira-kira apa? 701 00:33:28,900 --> 00:33:33,190 N lebih dari dua, sehingga seperti n lebih dari dua. 702 00:33:33,190 --> 00:33:38,490 Tapi saya membuat klaim saat yang lalu bahwa n lebih two-- 703 00:33:38,490 --> 00:33:41,060 itulah jenis yang sama hanya n. 704 00:33:41,060 --> 00:33:44,050 Ini hanya faktor konstan, ilmuwan komputer akan mengatakan. 705 00:33:44,050 --> 00:33:45,970 Mari kita hanya fokus pada variabel, really-- 706 00:33:45,970 --> 00:33:47,780 variabel terbesar dalam persamaan. 707 00:33:47,780 --> 00:33:52,530 >> Jadi linear pencarian, baik yang dilakukan salah satu halaman pada satu waktu atau dua halaman pada satu waktu, 708 00:33:52,530 --> 00:33:54,810 adalah semacam dasarnya sama. 709 00:33:54,810 --> 00:33:56,880 Ini masih di urutan n. 710 00:33:56,880 --> 00:34:01,930 Tapi aku mengaku dengan gambar saya sebelumnya bahwa algoritma ketiga tidak 711 00:34:01,930 --> 00:34:02,480 linear. 712 00:34:02,480 --> 00:34:03,605 Itu bukan garis lurus. 713 00:34:03,605 --> 00:34:08,659 Itu garis melengkung, dan formula aljabar ada apa? 714 00:34:08,659 --> 00:34:11,812 Log dari n-- sehingga log basis dua dari n. 715 00:34:11,812 --> 00:34:14,520 Dan kita tidak perlu pergi ke terlalu banyak detail pada logaritma hari ini, 716 00:34:14,520 --> 00:34:17,394 tetapi kebanyakan ilmuwan komputer tidak akan bahkan memberitahu Anda apa dasar adalah. 717 00:34:17,394 --> 00:34:20,639 Karena itu semua hanya faktor konstan, sehingga untuk berbicara, 718 00:34:20,639 --> 00:34:22,659 hanya perbedaan numerik sedikit. 719 00:34:22,659 --> 00:34:31,179 Dan ini akan menjadi sangat umum Cara untuk komputer terutama resmi 720 00:34:31,179 --> 00:34:33,949 para ilmuwan di papan atau programmer di sebuah papan putih 721 00:34:33,949 --> 00:34:36,889 sebenarnya alasan yang algoritma mereka akan menggunakan 722 00:34:36,889 --> 00:34:39,500 atau apa efisiensi algoritma mereka. 723 00:34:39,500 --> 00:34:42,960 >> Dan ini belum tentu sesuatu Anda mendiskusikan secara rinci besar, 724 00:34:42,960 --> 00:34:47,889 tapi seorang programmer yang baik adalah seseorang yang memiliki solid, latar belakang formal. 725 00:34:47,889 --> 00:34:50,120 Dia mampu berbicara dengan Anda dalam jenis cara 726 00:34:50,120 --> 00:34:53,350 dan benar-benar membuat argumen kualitatif 727 00:34:53,350 --> 00:34:56,870 mengapa satu algoritma atau salah satu bagian dari perangkat lunak 728 00:34:56,870 --> 00:35:00,165 unggul dalam beberapa cara lain. 729 00:35:00,165 --> 00:35:02,540 Karena Anda bisa pasti hanya menjalankan program satu orang 730 00:35:02,540 --> 00:35:04,980 dan menghitung jumlah detik dibutuhkan untuk menyortir beberapa nomor, 731 00:35:04,980 --> 00:35:06,710 dan Anda dapat menjalankan beberapa Program orang lain 732 00:35:06,710 --> 00:35:08,418 dan menghitung jumlah detik dibutuhkan. 733 00:35:08,418 --> 00:35:12,840 Tapi ini adalah cara yang lebih umum yang Anda dapat menggunakan untuk menganalisis algoritma, 734 00:35:12,840 --> 00:35:15,520 jika Anda mau, hanya pada kertas atau hanya secara lisan. 735 00:35:15,520 --> 00:35:18,430 Tanpa menjalankannya, tanpa bahkan mencoba sampel input, 736 00:35:18,430 --> 00:35:20,180 Anda hanya dapat alasan melalui itu. 737 00:35:20,180 --> 00:35:24,670 Dan dengan mempekerjakan pengembang atau jika memiliki dia semacam berdebat untuk Anda 738 00:35:24,670 --> 00:35:28,460 mengapa algoritma mereka, rahasia mereka saus untuk mencari miliaran 739 00:35:28,460 --> 00:35:30,580 halaman web untuk Anda perusahaan lebih baik, ini 740 00:35:30,580 --> 00:35:33,302 adalah jenis argumen mereka idealnya harus mampu membuat. 741 00:35:33,302 --> 00:35:35,010 Atau setidaknya ini hal-hal yang 742 00:35:35,010 --> 00:35:40,211 yang akan datang dalam diskusi, di setidaknya dalam diskusi yang sangat formal. 743 00:35:40,211 --> 00:35:40,710 Baiklah. 744 00:35:40,710 --> 00:35:44,400 Jadi Ben diusulkan sesuatu disebut pilihan semacam. 745 00:35:44,400 --> 00:35:48,200 Tapi aku akan mengusulkan bahwa ada cara lain untuk melakukan hal ini, juga. 746 00:35:48,200 --> 00:35:50,400 Apa yang saya benar-benar tidak suka tentang algoritma Ben 747 00:35:50,400 --> 00:35:54,400 adalah bahwa ia terus berjalan, atau setelah saya berjalan, bolak-balik 748 00:35:54,400 --> 00:35:56,930 dan bolak-balik dan bolak-balik. 749 00:35:56,930 --> 00:36:04,130 Bagaimana jika sebaliknya saya melakukan sesuatu seperti angka-angka ini di sini 750 00:36:04,130 --> 00:36:08,200 dan saya hanya berurusan dengan masing-masing jumlah pada gilirannya karena saya diberikan itu? 751 00:36:08,200 --> 00:36:10,780 >> Dengan kata lain, inilah daftar nomor. 752 00:36:10,780 --> 00:36:12,944 Empat, satu, tiga, dua. 753 00:36:12,944 --> 00:36:14,360 Dan aku akan melakukan hal berikut. 754 00:36:14,360 --> 00:36:17,230 Aku akan memasukkan nomor di mana mereka berada agak 755 00:36:17,230 --> 00:36:18,980 dari memilih mereka satu per satu. 756 00:36:18,980 --> 00:36:20,820 Dengan kata lain, inilah nomor empat. 757 00:36:20,820 --> 00:36:22,430 >> Berikut daftar asli saya. 758 00:36:22,430 --> 00:36:25,290 Dan aku akan menjaga dasarnya daftar baru di sini. 759 00:36:25,290 --> 00:36:26,710 Jadi ini adalah daftar tua. 760 00:36:26,710 --> 00:36:28,560 Ini adalah daftar baru. 761 00:36:28,560 --> 00:36:30,220 Aku melihat nomor empat pertama. 762 00:36:30,220 --> 00:36:34,500 daftar baru saya awalnya kosong, sehingga sepele kasus 763 00:36:34,500 --> 00:36:36,410 bahwa empat kini daftar berbagai macam. 764 00:36:36,410 --> 00:36:39,560 Aku hanya mengambil jumlah aku diberi, dan aku memasukkannya dalam daftar baru saya. 765 00:36:39,560 --> 00:36:41,460 >> Apakah daftar baru ini diurutkan? 766 00:36:41,460 --> 00:36:41,990 Ya. 767 00:36:41,990 --> 00:36:45,090 Itu bodoh karena hanya ada satu elemen, tapi itu benar-benar diurutkan. 768 00:36:45,090 --> 00:36:46,390 Tidak ada yang keluar dari tempat. 769 00:36:46,390 --> 00:36:49,290 Ini lebih menarik, algoritma ini, ketika saya pindah ke langkah berikutnya. 770 00:36:49,290 --> 00:36:50,550 >> Sekarang aku punya satu. 771 00:36:50,550 --> 00:36:55,430 Jadi satu, tentu saja, termasuk di awal atau akhir daftar baru ini? 772 00:36:55,430 --> 00:36:56,360 Awal mula. 773 00:36:56,360 --> 00:36:58,530 Jadi saya harus melakukan beberapa pekerjaan sekarang. 774 00:36:58,530 --> 00:37:01,410 Saya telah mengambil beberapa kebebasan dengan spidol saya 775 00:37:01,410 --> 00:37:03,120 dengan hanya menggambar hal mana aku ingin mereka, 776 00:37:03,120 --> 00:37:05,320 tapi itu tidak benar-benar akurat dalam komputer. 777 00:37:05,320 --> 00:37:08,530 Sebuah komputer, seperti yang kita tahu, memiliki RAM, atau Random Access Memory, 778 00:37:08,530 --> 00:37:12,411 dan itu salah satu byte dan byte lain dan byte lain. 779 00:37:12,411 --> 00:37:14,910 Dan jika Anda memiliki gigabyte RAM, Anda memiliki satu miliar byte, 780 00:37:14,910 --> 00:37:16,680 tapi mereka secara fisik dalam satu lokasi. 781 00:37:16,680 --> 00:37:19,540 Anda tidak bisa hanya memindahkan barang di sekitar dengan menggambar di papan 782 00:37:19,540 --> 00:37:20,750 di mana pun Anda inginkan. 783 00:37:20,750 --> 00:37:24,090 Jadi jika daftar baru saya memiliki empat lokasi di memori, 784 00:37:24,090 --> 00:37:27,480 sayangnya empat adalah sudah di tempat yang salah. 785 00:37:27,480 --> 00:37:30,410 >> Jadi untuk memasukkan nomor satu Aku tidak bisa hanya menarik di sini. 786 00:37:30,410 --> 00:37:31,901 lokasi memori ini tidak ada. 787 00:37:31,901 --> 00:37:35,150 Itu akan kecurangan, dan saya telah kecurangan pictorially selama beberapa menit 788 00:37:35,150 --> 00:37:35,800 sini. 789 00:37:35,800 --> 00:37:40,950 Jadi benar-benar, jika saya ingin menempatkan satu di sini, Aku harus menyalin empat sementara 790 00:37:40,950 --> 00:37:43,030 dan kemudian menempatkan satu di sana. 791 00:37:43,030 --> 00:37:45,500 >> Itu baik-baik saja, itu benar, yang secara teknis mungkin, 792 00:37:45,500 --> 00:37:48,410 tapi menyadari itu bekerja ekstra. 793 00:37:48,410 --> 00:37:50,460 Aku tidak hanya menempatkan angka di tempat. 794 00:37:50,460 --> 00:37:53,026 Saya pertama kali harus memindahkan nomor, kemudian meletakkannya di tempat, 795 00:37:53,026 --> 00:37:54,650 jadi aku agak dua kali lipat jumlah saya bekerja. 796 00:37:54,650 --> 00:37:55,660 Jadi ingatlah bahwa dalam pikiran. 797 00:37:55,660 --> 00:37:57,120 >> Tapi sekarang saya sudah selesai dengan elemen ini. 798 00:37:57,120 --> 00:37:59,056 Sekarang saya ingin meraih nomor tiga. 799 00:37:59,056 --> 00:38:00,430 Di mana, tentu saja, apakah itu milik? 800 00:38:00,430 --> 00:38:01,480 Diantara. 801 00:38:01,480 --> 00:38:03,650 Saya tidak bisa menipu lagi dan hanya meletakkannya di sana, 802 00:38:03,650 --> 00:38:06,770 karena, sekali lagi, memori ini adalah di lokasi fisik. 803 00:38:06,770 --> 00:38:10,900 Jadi saya harus menyalin empat dan menempatkan tiga di sini. 804 00:38:10,900 --> 00:38:11,550 Bukan masalah besar. 805 00:38:11,550 --> 00:38:14,610 Ini hanya satu langkah ekstra again-- terasa sangat murah. 806 00:38:14,610 --> 00:38:16,445 >> Tapi sekarang aku pindah ke dua. 807 00:38:16,445 --> 00:38:17,820 Kedua, tentu saja, berada di sini. 808 00:38:17,820 --> 00:38:20,990 Sekarang Anda mulai melihat bagaimana pekerjaan dapat menumpuk. 809 00:38:20,990 --> 00:38:23,520 Sekarang apa yang harus saya lakukan? 810 00:38:23,520 --> 00:38:28,570 Ya, saya harus memindahkan empat, Saya kemudian harus menyalin tiga, 811 00:38:28,570 --> 00:38:31,200 dan sekarang saya bisa memasukkan dua. 812 00:38:31,200 --> 00:38:34,460 Dan menangkap dengan ini algoritma, cukup menarik, 813 00:38:34,460 --> 00:38:41,050 adalah bahwa misalkan kita memiliki lebih ekstrim kasus di mana itu katakanlah delapan, tujuh, 814 00:38:41,050 --> 00:38:45,150 enam, lima, empat, tiga, dua, satu. 815 00:38:45,150 --> 00:38:49,450 Hal ini, dalam banyak konteks, skenario terburuk, 816 00:38:49,450 --> 00:38:51,570 karena hal darn secara harfiah mundur. 817 00:38:51,570 --> 00:38:53,670 >> Ini tidak benar-benar mempengaruhi algoritma Ben, 818 00:38:53,670 --> 00:38:55,940 karena dalam pemilihan Ben semacam dia akan terus 819 00:38:55,940 --> 00:38:58,359 akan bolak-balik melalui daftar. 820 00:38:58,359 --> 00:39:01,150 Dan karena ia selalu mencari melalui daftar yang tersisa utuh, 821 00:39:01,150 --> 00:39:02,858 tidak apa-apa di mana unsur-unsur yang. 822 00:39:02,858 --> 00:39:05,630 Tapi dalam kasus ini dengan Memasukkan saya approach-- mari kita coba ini. 823 00:39:05,630 --> 00:39:08,616 >> Jadi satu, dua, tiga, empat, lima, enam, tujuh, delapan. 824 00:39:08,616 --> 00:39:11,630 Satu dua tiga empat, lima, enam, tujuh, delapan. 825 00:39:11,630 --> 00:39:14,320 Aku akan mengambil delapan, dan di mana saya menaruhnya? 826 00:39:14,320 --> 00:39:17,260 Nah, di awal daftar saya, karena daftar baru ini diurutkan. 827 00:39:17,260 --> 00:39:18,760 Dan saya coret. 828 00:39:18,760 --> 00:39:20,551 >> Di mana saya menempatkan tujuh? 829 00:39:20,551 --> 00:39:21,050 Darn it. 830 00:39:21,050 --> 00:39:23,174 Perlu pergi ke sana, jadi Aku harus melakukan beberapa menyalin. 831 00:39:23,174 --> 00:39:26,820 832 00:39:26,820 --> 00:39:28,480 Dan sekarang tujuh goes here. 833 00:39:28,480 --> 00:39:29,860 Sekarang saya beralih ke enam. 834 00:39:29,860 --> 00:39:30,980 Sekarang bahkan lebih banyak pekerjaan. 835 00:39:30,980 --> 00:39:32,570 >> Delapan harus pergi di sini. 836 00:39:32,570 --> 00:39:33,920 Tujuh harus pergi di sini. 837 00:39:33,920 --> 00:39:35,450 Sekarang enam bisa pergi di sini. 838 00:39:35,450 --> 00:39:37,950 Sekarang saya ambil lima. 839 00:39:37,950 --> 00:39:40,560 Sekarang delapan harus pergi di sini, tujuh harus pergi di sini, 840 00:39:40,560 --> 00:39:43,650 enam harus pergi di sini, dan sekarang lima dan ulangi. 841 00:39:43,650 --> 00:39:46,610 Dan aku cukup banyak bergerak terus-menerus. 842 00:39:46,610 --> 00:39:52,950 >> Jadi pada akhirnya, algorithm-- ini kita akan menyebutnya penyisipan sort-- sebenarnya 843 00:39:52,950 --> 00:39:55,020 memiliki banyak pekerjaan, juga. 844 00:39:55,020 --> 00:39:56,970 Hanya saja yang berbeda jenis pekerjaan dari Ben. 845 00:39:56,970 --> 00:40:00,090 karya Ben telah saya akan bolak-balik sepanjang waktu, 846 00:40:00,090 --> 00:40:03,510 memilih berikutnya terkecil Unsur lagi dan lagi. 847 00:40:03,510 --> 00:40:06,660 Jadi itu semacam ini sangat visual pekerjaan. 848 00:40:06,660 --> 00:40:10,600 >> Algoritma ini lain, yang masih correct-- itu akan mendapatkan pekerjaan yang done-- 849 00:40:10,600 --> 00:40:12,800 hanya mengubah jumlah pekerjaan. 850 00:40:12,800 --> 00:40:15,420 Sepertinya awalnya Anda menghemat, karena Anda hanya 851 00:40:15,420 --> 00:40:19,190 berurusan dengan setiap elemen depan tanpa berjalan semua 852 00:40:19,190 --> 00:40:20,930 cara melalui daftar seperti Ben adalah. 853 00:40:20,930 --> 00:40:25,300 Tapi masalahnya adalah, terutama dalam kasus gila di mana itu semua mundur, 854 00:40:25,300 --> 00:40:27,830 Anda hanya jenis menunda kerja keras 855 00:40:27,830 --> 00:40:30,360 sampai Anda harus memperbaiki kesalahan-kesalahan Anda. 856 00:40:30,360 --> 00:40:33,919 >> Dan jadi jika Anda bisa membayangkan ini delapan dan tujuh dan enam dan lima 857 00:40:33,919 --> 00:40:36,710 dan kemudian empat dan tiga dan dua bergerak jalan melalui daftar, 858 00:40:36,710 --> 00:40:39,060 kami baru saja mengubah jenis pekerjaan yang kita lakukan. 859 00:40:39,060 --> 00:40:42,340 Alih-alih melakukan itu di mulai dari iterasi saya, 860 00:40:42,340 --> 00:40:45,250 Aku hanya melakukannya di akhir setiap iterasi. 861 00:40:45,250 --> 00:40:50,550 Jadi ternyata bahwa algoritma ini, juga, umumnya disebut insertion sort, 862 00:40:50,550 --> 00:40:52,190 juga di urutan n kuadrat. 863 00:40:52,190 --> 00:40:56,480 Ini sebenarnya tidak lebih baik, tidak lebih baik sama sekali. 864 00:40:56,480 --> 00:41:00,810 >> Namun, ada pendekatan ketiga Saya akan mendorong kita untuk mempertimbangkan, 865 00:41:00,810 --> 00:41:02,970 yang ini. 866 00:41:02,970 --> 00:41:07,850 Jadi misalkan daftar saya, untuk kesederhanaan lagi, empat, satu, tiga, 867 00:41:07,850 --> 00:41:11,080 two-- hanya empat angka. 868 00:41:11,080 --> 00:41:13,300 Ben memiliki intuisi yang baik, intuisi manusia yang baik 869 00:41:13,300 --> 00:41:16,340 sebelumnya, dimana kita tetap seluruh daftar eventually-- insertion sort. 870 00:41:16,340 --> 00:41:18,020 Aku membujuk kita bersama. 871 00:41:18,020 --> 00:41:22,530 Tapi mari kita mempertimbangkan Cara paling mudah untuk memperbaiki daftar ini. 872 00:41:22,530 --> 00:41:24,110 >> Daftar ini tidak diurutkan. 873 00:41:24,110 --> 00:41:26,130 Mengapa? 874 00:41:26,130 --> 00:41:31,920 Dalam bahasa Inggris, menjelaskan mengapa itu tidak benar-benar diurutkan. 875 00:41:31,920 --> 00:41:33,400 Apa artinya tidak akan diurutkan? 876 00:41:33,400 --> 00:41:34,220 >> SISWA: Ini tidak berurutan. 877 00:41:34,220 --> 00:41:34,990 >> DAVID Malan: Tidak berurutan. 878 00:41:34,990 --> 00:41:35,822 Berikan saya contoh. 879 00:41:35,822 --> 00:41:37,180 >> SISWA: Menempatkan mereka dalam rangka. 880 00:41:37,180 --> 00:41:37,440 >> DAVID Malan: OK. 881 00:41:37,440 --> 00:41:38,790 Memberi saya contoh yang lebih spesifik. 882 00:41:38,790 --> 00:41:39,832 >> SISWA: Ascending order. 883 00:41:39,832 --> 00:41:41,206 DAVID Malan: Tidak urutan menaik. 884 00:41:41,206 --> 00:41:42,100 Lebih tepat. 885 00:41:42,100 --> 00:41:45,190 Aku tidak tahu apa yang Anda maksud dengan naik. 886 00:41:45,190 --> 00:41:47,150 Apa yang salah? 887 00:41:47,150 --> 00:41:49,930 >> SISWA: The terkecil dari nomor tidak di ruang pertama. 888 00:41:49,930 --> 00:41:51,140 >> DAVID Malan: jumlah terkecil ini tidak di ruang pertama. 889 00:41:51,140 --> 00:41:52,120 Lebih spesifik. 890 00:41:52,120 --> 00:41:55,000 Aku mulai menangkap. 891 00:41:55,000 --> 00:41:59,470 Kami menghitung, tapi apa rusak di sini? 892 00:41:59,470 --> 00:42:00,707 >> SISWA: urutan numerik. 893 00:42:00,707 --> 00:42:02,040 DAVID Malan: urutan numerik. 894 00:42:02,040 --> 00:42:04,248 disukai setiap orang menjaga itu di sini-tingkat yang sangat tinggi. 895 00:42:04,248 --> 00:42:07,450 Hanya harfiah katakan padaku apa salah seperti kekuatan lima tahun. 896 00:42:07,450 --> 00:42:08,310 >> SISWA: Ditambah satu. 897 00:42:08,310 --> 00:42:08,750 >> DAVID Malan: Apa itu? 898 00:42:08,750 --> 00:42:09,610 >> SISWA: Ditambah satu. 899 00:42:09,610 --> 00:42:11,235 >> DAVID Malan: Apa maksudmu ditambah satu? 900 00:42:11,235 --> 00:42:12,754 901 00:42:12,754 --> 00:42:14,170 Beri aku berusia lima tahun yang berbeda. 902 00:42:14,170 --> 00:42:16,840 903 00:42:16,840 --> 00:42:18,330 Apa yang salah, ibu? 904 00:42:18,330 --> 00:42:19,940 Apa yang salah, ayah? 905 00:42:19,940 --> 00:42:22,808 Apa maksudmu ini tidak diurutkan? 906 00:42:22,808 --> 00:42:24,370 >> SISWA: Ini bukan tempat yang tepat. 907 00:42:24,370 --> 00:42:25,580 >> DAVID Malan: Apa tidak di tempat yang tepat? 908 00:42:25,580 --> 00:42:26,174 >> SISWA: Empat. 909 00:42:26,174 --> 00:42:27,090 DAVID Malan: OK, baik. 910 00:42:27,090 --> 00:42:29,110 Jadi empat tidak mana seharusnya. 911 00:42:29,110 --> 00:42:30,590 Secara khusus, apakah ini benar? 912 00:42:30,590 --> 00:42:33,000 Empat dan satu, yang pertama dua nomor yang saya lihat. 913 00:42:33,000 --> 00:42:34,930 Apakah ini benar? 914 00:42:34,930 --> 00:42:36,427 Tidak, mereka rusak, kan? 915 00:42:36,427 --> 00:42:38,135 Bahkan, pikir sekarang tentang komputer, juga. 916 00:42:38,135 --> 00:42:40,824 Hanya dapat melihat mungkin satu, mungkin dua hal di once-- 917 00:42:40,824 --> 00:42:43,240 dan benar-benar hanya satu hal pada suatu waktu, tetapi setidaknya bisa 918 00:42:43,240 --> 00:42:45,790 melihat satu hal maka Hal berikutnya tepat di sebelah itu. 919 00:42:45,790 --> 00:42:47,380 >> Jadi apakah ini dalam rangka? 920 00:42:47,380 --> 00:42:48,032 Tentu saja tidak. 921 00:42:48,032 --> 00:42:48,740 Sehingga Anda tahu apa? 922 00:42:48,740 --> 00:42:51,020 Mengapa kita tidak mengambil bayi langkah-langkah memperbaiki masalah ini 923 00:42:51,020 --> 00:42:53,410 bukannya melakukan mewah ini algoritma seperti Ben, di mana 924 00:42:53,410 --> 00:42:56,440 dia semacam memperbaikinya dengan perulangan melalui daftar 925 00:42:56,440 --> 00:42:59,670 bukannya melakukan apa yang saya lakukan, di mana Aku hanya jenis tetap sebagai kita pergi? 926 00:42:59,670 --> 00:43:03,650 Mari kita secara harfiah memecah Gagasan urutan numerik Comes urutan, 927 00:43:03,650 --> 00:43:06,990 menyebutnya apa pun yang Anda want-- ke dalam perbandingan berpasangan. 928 00:43:06,990 --> 00:43:07,590 >> Empat dan satu. 929 00:43:07,590 --> 00:43:09,970 Apakah ini urutan yang benar? 930 00:43:09,970 --> 00:43:11,310 Jadi mari kita memperbaikinya. 931 00:43:11,310 --> 00:43:14,700 Satu dan empat, dan kemudian kami hanya akan menyalin itu. 932 00:43:14,700 --> 00:43:15,560 Baiklah, baik. 933 00:43:15,560 --> 00:43:17,022 Saya tetap satu dan empat. 934 00:43:17,022 --> 00:43:18,320 Tiga dan dua? 935 00:43:18,320 --> 00:43:18,820 Tidak. 936 00:43:18,820 --> 00:43:21,690 Biarkan kata-kata saya cocok jari-jari saya. 937 00:43:21,690 --> 00:43:23,695 Empat dan tiga? 938 00:43:23,695 --> 00:43:27,930 >> Ini bukan dalam rangka, jadi aku akan untuk melakukan satu, tiga, empat, dua. 939 00:43:27,930 --> 00:43:28,680 Oke bagus. 940 00:43:28,680 --> 00:43:32,310 Sekarang empat dan dua? 941 00:43:32,310 --> 00:43:33,370 Kami harus memperbaiki ini, juga. 942 00:43:33,370 --> 00:43:36,700 Jadi satu, tiga, dua, empat. 943 00:43:36,700 --> 00:43:39,820 Jadi yang diurutkan? 944 00:43:39,820 --> 00:43:43,170 Tidak, tapi lebih dekat ke diurutkan? 945 00:43:43,170 --> 00:43:48,930 >> Hal ini, karena kita tetap ini kesalahan, kita tetap kesalahan ini, 946 00:43:48,930 --> 00:43:50,370 dan kami tetap kesalahan ini. 947 00:43:50,370 --> 00:43:52,420 Jadi kita tetap tiga kesalahan bisa dibilang. 948 00:43:52,420 --> 00:43:58,100 Masih tidak benar-benar terlihat diurutkan, tapi itu adalah obyektif lebih dekat dengan diurutkan 949 00:43:58,100 --> 00:44:00,080 karena kita tetap beberapa kesalahan-kesalahan. 950 00:44:00,080 --> 00:44:02,047 >> Sekarang apa yang harus saya lakukan selanjutnya? 951 00:44:02,047 --> 00:44:03,630 Aku agak mencapai akhir daftar. 952 00:44:03,630 --> 00:44:05,680 Saya tampaknya telah diperbaiki semua kesalahan, tapi tidak ada. 953 00:44:05,680 --> 00:44:08,510 Karena dalam kasus ini, beberapa nomor mungkin menggelegak lebih dekat 954 00:44:08,510 --> 00:44:10,410 ke nomor lain yang masih rusak. 955 00:44:10,410 --> 00:44:12,951 Jadi mari kita melakukannya lagi, dan aku akan hanya melakukannya di tempat saat ini. 956 00:44:12,951 --> 00:44:14,170 Satu dan tiga? 957 00:44:14,170 --> 00:44:14,720 Tidak apa-apa. 958 00:44:14,720 --> 00:44:16,070 Tiga dan dua? 959 00:44:16,070 --> 00:44:17,560 Tentu saja tidak ada, jadi mari kita mengubah itu. 960 00:44:17,560 --> 00:44:19,160 Jadi dua, tiga. 961 00:44:19,160 --> 00:44:21,340 Tiga dan empat? 962 00:44:21,340 --> 00:44:24,370 Dan sekarang mari kita hanya menjadi khususnya bertele-tele di sini. 963 00:44:24,370 --> 00:44:26,350 Apakah diurutkan? 964 00:44:26,350 --> 00:44:29,280 Anda manusia tahu itu diurutkan. 965 00:44:29,280 --> 00:44:30,400 >> Aku harus mencoba lagi. 966 00:44:30,400 --> 00:44:31,900 Jadi Olivia mengusulkan saya coba lagi. 967 00:44:31,900 --> 00:44:32,530 Mengapa? 968 00:44:32,530 --> 00:44:35,810 Karena komputer tidak memiliki kemewahan mata manusia 969 00:44:35,810 --> 00:44:38,080 hanya melirik back-- OK, aku sudah selesai. 970 00:44:38,080 --> 00:44:41,610 Bagaimana komputer menentukan bahwa daftar sekarang diurutkan? 971 00:44:41,610 --> 00:44:44,590 Mekanis. 972 00:44:44,590 --> 00:44:47,650 >> Aku harus pergi melalui sekali lagi, dan hanya jika saya 973 00:44:47,650 --> 00:44:51,190 tidak membuat / menemukan kesalahan yang bisa saya kemudian menyimpulkan sebagai komputer, ya, 974 00:44:51,190 --> 00:44:51,980 kami baik untuk pergi. 975 00:44:51,980 --> 00:44:54,850 Jadi satu dan dua, dua dan tiga, tiga dan empat. 976 00:44:54,850 --> 00:44:58,030 Sekarang saya pasti dapat mengatakan ini adalah diurutkan, karena saya tidak melakukan perubahan. 977 00:44:58,030 --> 00:45:01,940 Sekarang akan bug dan hanya bodoh jika saya, komputer, 978 00:45:01,940 --> 00:45:05,640 tanya pertanyaan-pertanyaan yang sama lagi mengharapkan jawaban yang berbeda. 979 00:45:05,640 --> 00:45:07,110 Seharusnya tidak terjadi. 980 00:45:07,110 --> 00:45:08,600 >> Dan jadi sekarang daftar diurutkan. 981 00:45:08,600 --> 00:45:12,630 Sayangnya, waktu berjalan dari algoritma ini juga n kuadrat. 982 00:45:12,630 --> 00:45:13,130 Mengapa? 983 00:45:13,130 --> 00:45:19,520 Karena Anda memiliki nomor n, dan di kasus terburuk Anda harus bergerak nomor n 984 00:45:19,520 --> 00:45:23,637 n kali karena Anda harus terus kembali untuk memeriksa dan berpotensi memperbaiki 985 00:45:23,637 --> 00:45:24,220 angka-angka ini. 986 00:45:24,220 --> 00:45:26,280 Dan kita bisa melakukan lebih analisis formal, juga. 987 00:45:26,280 --> 00:45:29,530 >> Jadi ini semua untuk mengatakan kami sudah tiga pendekatan yang berbeda, satu 988 00:45:29,530 --> 00:45:32,210 dari mereka segera intuitif dari kelelawar dari Ben 989 00:45:32,210 --> 00:45:35,170 penyisipan saya sarankan semacam untuk yang satu ini 990 00:45:35,170 --> 00:45:38,540 di mana Anda jenis melupakan hutan untuk pohon awalnya. 991 00:45:38,540 --> 00:45:41,760 Tapi kemudian jika Anda mengambil langkah mundur, voila, kami tetap gagasan penyortiran. 992 00:45:41,760 --> 00:45:43,824 Jadi ini, berani mengatakan, tingkat yang lebih rendah mungkin 993 00:45:43,824 --> 00:45:45,740 dari beberapa orang lain algoritma, tetapi mari kita 994 00:45:45,740 --> 00:45:48,550 melihat apakah kita tidak dapat membayangkan ini dengan cara ini. 995 00:45:48,550 --> 00:45:51,450 >> Jadi ini adalah beberapa bagus software bahwa seseorang 996 00:45:51,450 --> 00:45:56,110 menulis menggunakan warna-warni bar itu akan melakukan hal berikut untuk kita. 997 00:45:56,110 --> 00:45:57,736 Setiap bar ini mewakili angka. 998 00:45:57,736 --> 00:46:00,026 Taller bar, lebih besar nomor, kecil bar, 999 00:46:00,026 --> 00:46:00,990 semakin kecil angkanya. 1000 00:46:00,990 --> 00:46:05,880 Jadi idealnya kita ingin piramida bagus di mana ia mulai kecil dan mendapat besar, 1001 00:46:05,880 --> 00:46:08,330 dan itu berarti bahwa bar ini diurutkan. 1002 00:46:08,330 --> 00:46:11,200 Jadi aku akan pergi ke depan dan memilih, misalnya, algoritma Ben 1003 00:46:11,200 --> 00:46:13,990 first-- pilihan semacam. 1004 00:46:13,990 --> 00:46:16,220 >> Dan perhatikan apa yang dilakukannya. 1005 00:46:16,220 --> 00:46:18,670 Cara mereka telah memilih untuk memvisualisasikan algoritma ini 1006 00:46:18,670 --> 00:46:22,090 adalah bahwa, seperti saya berjalan melalui daftar saya, 1007 00:46:22,090 --> 00:46:24,710 Program ini berjalan melalui daftar nomor, 1008 00:46:24,710 --> 00:46:28,160 menyoroti dalam warna pink setiap nomor yang itu melihat. 1009 00:46:28,160 --> 00:46:32,360 Dan apa yang akan terjadi sekarang? 1010 00:46:32,360 --> 00:46:35,154 >> Jumlah terkecil yang Saya atau Ben ditemukan tiba-tiba 1011 00:46:35,154 --> 00:46:36,820 akan pindah ke awal daftar. 1012 00:46:36,820 --> 00:46:40,037 Dan pemberitahuan mereka lakukan mengusir jumlah yang ada di sana, 1013 00:46:40,037 --> 00:46:41,120 dan itu baik-baik saja. 1014 00:46:41,120 --> 00:46:42,600 Aku tidak bisa masuk ke tingkat detail. 1015 00:46:42,600 --> 00:46:44,308 Tapi kita perlu menempatkan jumlah itu di suatu tempat, 1016 00:46:44,308 --> 00:46:47,775 jadi kami hanya pindah ke tempat terbuka yang telah dibuat. 1017 00:46:47,775 --> 00:46:49,900 Jadi aku akan mempercepat ini up, karena jika tidak 1018 00:46:49,900 --> 00:46:51,871 menjadi sangat membosankan cepat. 1019 00:46:51,871 --> 00:46:55,800 1020 00:46:55,800 --> 00:46:58,600 Animasi speed-- ada kita pergi. 1021 00:46:58,600 --> 00:47:01,850 Prinsip jadi sekarang sama Saya menerapkan, tetapi Anda 1022 00:47:01,850 --> 00:47:06,540 bisa mulai merasakan algoritma, jika Anda akan, atau melihatnya sedikit lebih jelas. 1023 00:47:06,540 --> 00:47:13,190 Dan algoritma ini memiliki efek memilih elemen terkecil berikutnya, 1024 00:47:13,190 --> 00:47:16,422 sehingga Anda akan mulai melihatnya jalan sampai di sebelah kiri. 1025 00:47:16,422 --> 00:47:19,130 Dan pada setiap iterasi, seperti yang saya diusulkan, itu tidak sedikit kerja kurang. 1026 00:47:19,130 --> 00:47:21,921 Tidak perlu pergi jauh-jauh kembali ke ujung kiri daftar, 1027 00:47:21,921 --> 00:47:23,900 karena sudah tahu mereka diurutkan. 1028 00:47:23,900 --> 00:47:28,129 Jadi jenis rasanya seperti itu mempercepat, meskipun setiap langkah adalah 1029 00:47:28,129 --> 00:47:29,420 mengambil jumlah waktu yang sama. 1030 00:47:29,420 --> 00:47:31,600 Hanya ada sedikit langkah yang tersisa. 1031 00:47:31,600 --> 00:47:35,240 Dan sekarang Anda dapat jenis merasakan algoritma membersihkan akhir itu, 1032 00:47:35,240 --> 00:47:37,040 dan memang sekarang sudah diurutkan. 1033 00:47:37,040 --> 00:47:41,620 >> Jadi insertion sort adalah semua dilakukan. 1034 00:47:41,620 --> 00:47:43,600 Aku harus kembali mengacak array. 1035 00:47:43,600 --> 00:47:45,940 Dan perhatikan aku hanya bisa terus mengacak itu, 1036 00:47:45,940 --> 00:47:50,630 dan kita akan mendapatkan perkiraan pendekatan yang sama, insertion sort. 1037 00:47:50,630 --> 00:47:55,050 Mari saya memperlambatnya di sini. 1038 00:47:55,050 --> 00:47:56,915 Mari kita mulai yang lebih. 1039 00:47:56,915 --> 00:47:57,414 Berhenti. 1040 00:47:57,414 --> 00:48:00,662 1041 00:48:00,662 --> 00:48:02,410 >> Mari kita melewatkan empat. 1042 00:48:02,410 --> 00:48:03,200 Di sana kami pergi. 1043 00:48:03,200 --> 00:48:04,190 Mengacak array yang mereka. 1044 00:48:04,190 --> 00:48:05,555 Dan di sini kita go-- insertion sort. 1045 00:48:05,555 --> 00:48:10,260 1046 00:48:10,260 --> 00:48:12,800 Bermain. 1047 00:48:12,800 --> 00:48:17,280 Perhatikan bahwa itu berurusan dengan masing-masing Unsur itu pertemuan langsung, 1048 00:48:17,280 --> 00:48:20,282 tetapi jika itu milik di salah tempat pemberitahuan 1049 00:48:20,282 --> 00:48:21,740 semua pekerjaan yang harus terjadi. 1050 00:48:21,740 --> 00:48:24,700 Kami harus terus bergeser lebih dan lebih elemen untuk membuat ruang 1051 00:48:24,700 --> 00:48:27,340 untuk satu kami ingin menempatkan di tempat. 1052 00:48:27,340 --> 00:48:30,740 >> Jadi kita fokus pada ujung kiri dari daftar saja. 1053 00:48:30,740 --> 00:48:34,460 Perhatikan kita bahkan belum tampak at-- kami belum disorot dalam apa pun warna pink 1054 00:48:34,460 --> 00:48:35,610 ke kanan. 1055 00:48:35,610 --> 00:48:38,180 Kami hanya berurusan dengan masalah seperti yang kita pergi, 1056 00:48:38,180 --> 00:48:40,430 tapi kami menciptakan banyak bekerja untuk diri kita sendiri masih. 1057 00:48:40,430 --> 00:48:44,410 Dan jadi jika kita mempercepat ini sekarang pergi ke selesai, 1058 00:48:44,410 --> 00:48:46,210 itu memiliki rasa yang berbeda untuk itu memang. 1059 00:48:46,210 --> 00:48:50,150 Ini hanya berfokus pada ujung kiri tapi melakukan lebih banyak pekerjaan sedikit sebagai needed-- 1060 00:48:50,150 --> 00:48:53,230 jenis hal smoothing lebih, memperbaiki hal-hal, 1061 00:48:53,230 --> 00:48:58,350 tapi berurusan akhirnya dengan setiap elemen satu per satu 1062 00:48:58,350 --> 00:49:07,740 sampai kita mendapatkan the-- baik, kita semua tahu bagaimana ini akan berakhir, 1063 00:49:07,740 --> 00:49:09,700 jadi sedikit underwhelming mungkin. 1064 00:49:09,700 --> 00:49:12,830 >> Tapi daftar di end-- yang spoiler-- akan diurutkan. 1065 00:49:12,830 --> 00:49:15,300 Jadi mari kita lihat satu yang terakhir. 1066 00:49:15,300 --> 00:49:16,840 Kita tidak bisa hanya melewatkan sekarang. 1067 00:49:16,840 --> 00:49:18,000 Kita sudah hampir sampai. 1068 00:49:18,000 --> 00:49:19,980 Dua untuk pergi, satu untuk pergi. 1069 00:49:19,980 --> 00:49:22,680 Dan voila. 1070 00:49:22,680 --> 00:49:23,450 Sangat baik. 1071 00:49:23,450 --> 00:49:27,220 >> Jadi sekarang mari kita lakukan satu yang terakhir, re-mengacak dengan bubble sort. 1072 00:49:27,220 --> 00:49:31,690 Dan perhatikan di sini, terutama jika saya lambat bawah, hal ini terus menukik melalui. 1073 00:49:31,690 --> 00:49:36,830 Tetapi melihat itu hanya membuat berpasangan semacam comparisons-- solusi lokal. 1074 00:49:36,830 --> 00:49:39,050 Tapi begitu kita sampai akhir daftar dalam warna pink, 1075 00:49:39,050 --> 00:49:40,690 apa yang akan harus terjadi lagi? 1076 00:49:40,690 --> 00:49:44,539 1077 00:49:44,539 --> 00:49:46,830 Ya, itu akan harus mulai dari awal, karena hanya 1078 00:49:46,830 --> 00:49:49,870 kesalahan berpasangan tetap. 1079 00:49:49,870 --> 00:49:53,120 Dan yang mungkin telah mengungkapkan namun orang lain. 1080 00:49:53,120 --> 00:49:58,950 Dan jadi jika Anda mempercepat hal ini, Anda akan melihat bahwa, banyak seperti namanya, 1081 00:49:58,950 --> 00:50:01,870 lebih kecil elements-- atau lebih tepatnya, yang elements-- besar mulai 1082 00:50:01,870 --> 00:50:03,740 gelembung ke atas, jika Anda mau. 1083 00:50:03,740 --> 00:50:07,380 Dan unsur-unsur yang lebih kecil mulai gelembung ke kiri. 1084 00:50:07,380 --> 00:50:10,780 Dan memang, itu semacam efek visual juga. 1085 00:50:10,780 --> 00:50:17,150 Dan jadi ini akan berakhir menyelesaikan dalam cara yang sangat mirip, juga. 1086 00:50:17,150 --> 00:50:19,160 >> Kami tidak perlu memikirkan pada satu ini. 1087 00:50:19,160 --> 00:50:21,010 Mari saya buka ini sekarang juga. 1088 00:50:21,010 --> 00:50:24,040 Ada beberapa algoritma pengurutan lainnya di dunia, beberapa di antaranya 1089 00:50:24,040 --> 00:50:25,580 ditangkap di sini. 1090 00:50:25,580 --> 00:50:29,960 Dan terutama untuk pelajar yang tidak tentu visual atau matematika, 1091 00:50:29,960 --> 00:50:31,930 seperti yang kita lakukan sebelumnya, kita bisa juga melakukan ini audially 1092 00:50:31,930 --> 00:50:34,210 jika kita kaitkan suara dengan ini. 1093 00:50:34,210 --> 00:50:36,990 Dan hanya untuk bersenang-senang, di sini adalah beberapa algoritma yang berbeda, 1094 00:50:36,990 --> 00:50:40,950 dan salah satu dari mereka secara khusus Anda akan melihat disebut "merge sort." 1095 00:50:40,950 --> 00:50:43,250 >> Hal ini sebenarnya fundamental algoritma yang lebih baik, 1096 00:50:43,250 --> 00:50:45,860 sehingga menggabungkan semacam, salah satu yang Anda lihat, 1097 00:50:45,860 --> 00:50:49,170 tidak urutan n kuadrat. 1098 00:50:49,170 --> 00:50:57,280 Ini pada urutan n kali log dari n, yang sebenarnya lebih kecil dan dengan demikian 1099 00:50:57,280 --> 00:50:58,940 lebih cepat dari tiga lainnya. 1100 00:50:58,940 --> 00:51:00,670 Dan ada beberapa lainnya yang konyol bahwa kita akan melihat. 1101 00:51:00,670 --> 00:51:01,933 >> Jadi di sini kita pergi dengan beberapa suara. 1102 00:51:01,933 --> 00:51:06,620 1103 00:51:06,620 --> 00:51:10,490 Ini adalah insertion sort, sehingga sekali lagi itu hanya berurusan dengan elemen 1104 00:51:10,490 --> 00:51:13,420 karena mereka datang. 1105 00:51:13,420 --> 00:51:17,180 Ini adalah semacam gelembung, sehingga mempertimbangkan mereka pasang pada suatu waktu. 1106 00:51:17,180 --> 00:51:22,030 1107 00:51:22,030 --> 00:51:24,490 Dan lagi, elemen terbesar yang menggelegak ke atas. 1108 00:51:24,490 --> 00:51:38,098 1109 00:51:38,098 --> 00:51:41,710 >> Selanjutnya pilihan semacam. 1110 00:51:41,710 --> 00:51:45,420 Ini adalah algoritma Ben, di mana lagi dia memilih iteratif 1111 00:51:45,420 --> 00:51:46,843 elemen terkecil berikutnya. 1112 00:51:46,843 --> 00:51:49,801 1113 00:51:49,801 --> 00:51:53,900 Dan lagi, sekarang Anda dapat benar-benar mendengar bahwa itu mempercepat tetapi hanya sejauh 1114 00:51:53,900 --> 00:51:58,230 seperti yang dilakukannya kurang dan kurang bekerja pada setiap iterasi. 1115 00:51:58,230 --> 00:52:04,170 Ini adalah lebih cepat satu, menggabungkan semacam, yang menyortir cluster nomor 1116 00:52:04,170 --> 00:52:05,971 bersama-sama dan kemudian menggabungkan mereka. 1117 00:52:05,971 --> 00:52:07,720 Jadi look-- kiri setengah sudah diurutkan. 1118 00:52:07,720 --> 00:52:14,165 >> Sekarang itu memilah bagian kanan, dan sekarang itu akan menggabungkan mereka menjadi satu. 1119 00:52:14,165 --> 00:52:19,160 Ini adalah sesuatu yang disebut "Gnome macam." 1120 00:52:19,160 --> 00:52:23,460 Dan Anda dapat jenis melihat bahwa itu akan bolak-balik, 1121 00:52:23,460 --> 00:52:27,950 memperbaiki kerja sedikit di sini dan ada sebelum melanjutkan ke pekerjaan baru. 1122 00:52:27,950 --> 00:52:32,900 1123 00:52:32,900 --> 00:52:33,692 Dan hanya itu. 1124 00:52:33,692 --> 00:52:36,400 Ada semacam lain, yang benar-benar hanya untuk tujuan akademis, 1125 00:52:36,400 --> 00:52:40,980 disebut "semacam bodoh," yang mengambil data Anda, memilah secara acak, 1126 00:52:40,980 --> 00:52:43,350 dan kemudian memeriksa apakah itu disortir. 1127 00:52:43,350 --> 00:52:47,880 Dan jika tidak, itu kembali macam itu acak, memeriksa apakah itu diurutkan, 1128 00:52:47,880 --> 00:52:49,440 dan jika tidak mengulangi. 1129 00:52:49,440 --> 00:52:52,660 Dan dalam teori, probabilistically ini akan menyelesaikan, 1130 00:52:52,660 --> 00:52:54,140 tapi setelah sedikit waktu. 1131 00:52:54,140 --> 00:52:56,930 Ini bukan yang paling efisien algoritma. 1132 00:52:56,930 --> 00:53:02,550 Jadi pertanyaan pada mereka algoritma tertentu atau apapun 1133 00:53:02,550 --> 00:53:04,720 terkait di sana, juga? 1134 00:53:04,720 --> 00:53:09,430 >> Nah, sekarang mari kita menggoda terpisah apa semua garis ini bahwa saya telah menggambar 1135 00:53:09,430 --> 00:53:15,090 dan apa yang saya mengasumsikan komputer dapat melakukan di bawah tenda. 1136 00:53:15,090 --> 00:53:18,650 Saya berpendapat bahwa semua angka-angka ini Aku terus drawing-- mereka butuhkan untuk mendapatkan 1137 00:53:18,650 --> 00:53:21,330 disimpan di suatu tempat di memori. 1138 00:53:21,330 --> 00:53:24,130 Kami akan menyingkirkan orang ini sekarang juga. 1139 00:53:24,130 --> 00:53:30,110 >> Jadi sepotong memori dalam computer-- sehingga RAM DIMM adalah 1140 00:53:30,110 --> 00:53:35,480 apa yang kita mencari kemarin, dual inline memory module-- terlihat seperti ini. 1141 00:53:35,480 --> 00:53:39,370 Dan masing-masing chip hitam kecil beberapa jumlah byte, biasanya. 1142 00:53:39,370 --> 00:53:44,380 Dan kemudian pin emas seperti kabel yang terhubung ke komputer, 1143 00:53:44,380 --> 00:53:47,521 dan papan hijau silikon hanya apa yang membuat segala sesuatu bersama-sama. 1144 00:53:47,521 --> 00:53:48,770 Jadi, apa ini benar-benar berarti? 1145 00:53:48,770 --> 00:53:53,180 Jika Aku agak menarik gambar yang sama ini, mari kita misalkan untuk kesederhanaan 1146 00:53:53,180 --> 00:53:55,280 bahwa DIMM ini, dual inline memory module, 1147 00:53:55,280 --> 00:54:00,530 adalah salah satu gigabyte RAM, satu gigabyte memori, yang adalah berapa banyak byte Total? 1148 00:54:00,530 --> 00:54:02,100 Satu gigabyte adalah berapa banyak byte? 1149 00:54:02,100 --> 00:54:04,860 1150 00:54:04,860 --> 00:54:06,030 Lebih dari itu. 1151 00:54:06,030 --> 00:54:09,960 1124 adalah kilo, 1000. 1152 00:54:09,960 --> 00:54:11,730 Mega juta. 1153 00:54:11,730 --> 00:54:14,570 Giga adalah miliar. 1154 00:54:14,570 --> 00:54:15,070 >> Apakah saya berbohong? 1155 00:54:15,070 --> 00:54:16,670 Dapatkah kita bahkan membaca label? 1156 00:54:16,670 --> 00:54:19,920 Ini sebenarnya 128 gigabyte, sehingga lebih. 1157 00:54:19,920 --> 00:54:22,130 Tapi kita akan berpura-pura ini adalah salah satu gigabyte. 1158 00:54:22,130 --> 00:54:25,640 Jadi itu berarti ada satu miliar byte memori yang tersedia untuk saya 1159 00:54:25,640 --> 00:54:29,770 atau 8 miliar bit, tapi kami akan berbicara dalam hal bytes sekarang, 1160 00:54:29,770 --> 00:54:30,750 bergerak kedepan. 1161 00:54:30,750 --> 00:54:36,330 >> Jadi apa itu artinya ini satu byte, ini adalah byte lain, 1162 00:54:36,330 --> 00:54:38,680 ini adalah byte lain, dan jika kita benar-benar ingin 1163 00:54:38,680 --> 00:54:43,280 untuk lebih spesifik kita harus menggambar miliar kotak kecil. 1164 00:54:43,280 --> 00:54:44,320 Tapi apa artinya? 1165 00:54:44,320 --> 00:54:46,420 Nah, biarkan aku hanya tampilannya di atas gambar ini. 1166 00:54:46,420 --> 00:54:50,900 Jika saya punya sesuatu yang tampak seperti sekarang ini, yang empat byte. 1167 00:54:50,900 --> 00:54:53,710 >> Dan jadi saya bisa menempatkan empat angka di sini. 1168 00:54:53,710 --> 00:54:54,990 Satu dua tiga empat. 1169 00:54:54,990 --> 00:55:00,170 Atau aku bisa meletakkan empat huruf atau simbol. 1170 00:55:00,170 --> 00:55:02,620 "Hei!" bisa pergi di sana, karena masing-masing huruf, 1171 00:55:02,620 --> 00:55:04,370 kita bahas sebelumnya, bisa diwakili 1172 00:55:04,370 --> 00:55:06,650 dengan delapan bit atau ASCII atau byte. 1173 00:55:06,650 --> 00:55:09,370 Jadi dengan kata lain, Anda bisa menempatkan 8 miliar hal dalam 1174 00:55:09,370 --> 00:55:11,137 ini satu tongkat memori. 1175 00:55:11,137 --> 00:55:14,345 Sekarang apa artinya untuk meletakkan segala sesuatu kembali untuk kembali ke belakang dalam memori seperti ini? 1176 00:55:14,345 --> 00:55:17,330 Ini adalah apa yang seorang programmer sebut sebuah "array." 1177 00:55:17,330 --> 00:55:21,250 Dalam program komputer, Anda tidak berpikir tentang hardware yang mendasari, per se. 1178 00:55:21,250 --> 00:55:24,427 Anda hanya berpikir tentang diri Anda sebagai memiliki akses ke total miliar byte, 1179 00:55:24,427 --> 00:55:26,010 dan Anda dapat apa pun yang Anda inginkan dengan itu. 1180 00:55:26,010 --> 00:55:27,880 Tapi untuk kenyamanan akan sangat berguna 1181 00:55:27,880 --> 00:55:31,202 untuk menjaga hak memori Anda di samping satu sama lain seperti ini. 1182 00:55:31,202 --> 00:55:33,660 Jadi jika saya memperbesar ini-- karena kita pasti tidak akan 1183 00:55:33,660 --> 00:55:39,310 menggambar miliar squares-- sedikit mari kita mengira bahwa forum ini merupakan 1184 00:55:39,310 --> 00:55:40,610 tongkat memori sekarang. 1185 00:55:40,610 --> 00:55:43,800 Dan aku hanya akan menarik sebanyak saya penanda akhirnya memberi saya di sini. 1186 00:55:43,800 --> 00:55:46,420 1187 00:55:46,420 --> 00:55:52,300 Jadi sekarang kita memiliki tongkat memori di papan 1188 00:55:52,300 --> 00:55:56,400 yang punya satu, dua, tiga, empat, lima, enam, satu, dua, tiga, empat, lima, enam, 1189 00:55:56,400 --> 00:56:01,130 seven-- sehingga 42 byte memori pada total layar. 1190 00:56:01,130 --> 00:56:01,630 Terima kasih. 1191 00:56:01,630 --> 00:56:02,838 Ya, melakukan aritmatika saya benar. 1192 00:56:02,838 --> 00:56:05,120 Jadi 42 byte memori di sini. 1193 00:56:05,120 --> 00:56:06,660 Jadi, apa ini benar-benar berarti? 1194 00:56:06,660 --> 00:56:09,830 Nah, seorang programmer komputer akan benar-benar umumnya 1195 00:56:09,830 --> 00:56:12,450 memikirkan memori ini sebagai beralamat. 1196 00:56:12,450 --> 00:56:16,630 Dengan kata lain, setiap satu dari ini lokasi di memori, di hardware, 1197 00:56:16,630 --> 00:56:18,030 memiliki alamat yang unik. 1198 00:56:18,030 --> 00:56:22,020 >> Ini tidak serumit Satu Brattle Square, Cambridge, Mass., 02138. 1199 00:56:22,020 --> 00:56:23,830 Sebaliknya, itu hanya angka. 1200 00:56:23,830 --> 00:56:27,930 Ini adalah byte angka nol, ini adalah satu, ini adalah dua, ini adalah tiga, 1201 00:56:27,930 --> 00:56:30,327 dan ini adalah 41. 1202 00:56:30,327 --> 00:56:30,910 Tunggu sebentar. 1203 00:56:30,910 --> 00:56:32,510 Saya pikir saya mengatakan 42 saat yang lalu. 1204 00:56:32,510 --> 00:56:35,050 1205 00:56:35,050 --> 00:56:37,772 Aku mulai menghitung dari nol, jadi itu benar-benar benar. 1206 00:56:37,772 --> 00:56:40,980 Sekarang kita tidak harus benar-benar menarik itu sebagai kotak, dan jika Anda menggambar sebagai grid 1207 00:56:40,980 --> 00:56:43,520 Saya pikir hal sebenarnya mendapatkan sedikit menyesatkan. 1208 00:56:43,520 --> 00:56:46,650 Apa programmer akan, di pikirannya sendiri, 1209 00:56:46,650 --> 00:56:50,310 umumnya menganggap ini memori adalah seperti tape, 1210 00:56:50,310 --> 00:56:53,340 seperti sepotong selotip yang hanya berjalan dan selamanya 1211 00:56:53,340 --> 00:56:54,980 atau sampai Anda kehabisan memori. 1212 00:56:54,980 --> 00:56:59,200 Jadi cara yang lebih umum untuk menarik dan hanya berpikir tentang memori 1213 00:56:59,200 --> 00:57:03,710 akan bahwa ini adalah byte nol, satu, dua, tiga, dan kemudian dot, dot, dot. 1214 00:57:03,710 --> 00:57:07,650 Dan Anda memiliki 42 byte seperti total, bahkan meskipun secara fisik itu mungkin benar-benar 1215 00:57:07,650 --> 00:57:09,480 menjadi sesuatu yang lebih seperti ini. 1216 00:57:09,480 --> 00:57:12,850 >> Jadi jika Anda sekarang memikirkan Anda memori karena ini, seperti tape, 1217 00:57:12,850 --> 00:57:17,640 ini adalah apa yang seorang programmer lagi akan memanggil array memori. 1218 00:57:17,640 --> 00:57:20,660 Dan ketika Anda ingin benar-benar menyimpan sesuatu dalam memori komputer, 1219 00:57:20,660 --> 00:57:23,290 biasanya Anda lakukan toko hal back-to-back to back-to-back. 1220 00:57:23,290 --> 00:57:25,010 Jadi kita telah berbicara tentang angka. 1221 00:57:25,010 --> 00:57:30,880 Dan ketika saya ingin memecahkan masalah seperti empat, satu, tiga, dua, 1222 00:57:30,880 --> 00:57:33,820 meskipun saya hanya menggambar hanya nomor empat, satu, tiga, 1223 00:57:33,820 --> 00:57:39,490 dua di papan, komputer akan benar-benar memiliki setup ini dalam memori. 1224 00:57:39,490 --> 00:57:43,347 >> Dan apa yang akan di sebelah dua di memori komputer? 1225 00:57:43,347 --> 00:57:44,680 Nah, tidak ada jawaban untuk itu. 1226 00:57:44,680 --> 00:57:45,770 Kami tidak benar-benar tahu. 1227 00:57:45,770 --> 00:57:48,200 Dan asalkan komputer tidak membutuhkannya, 1228 00:57:48,200 --> 00:57:51,440 itu tidak harus peduli apa yang berikutnya ke nomor itu tidak peduli. 1229 00:57:51,440 --> 00:57:55,130 Dan ketika saya mengatakan sebelumnya bahwa komputer hanya dapat melihat satu alamat pada satu waktu, 1230 00:57:55,130 --> 00:57:56,170 ini adalah jenis sebabnya. 1231 00:57:56,170 --> 00:57:59,490 >> Tidak seperti rekor player dan kepala membaca 1232 00:57:59,490 --> 00:58:03,030 hanya mampu melihat tertentu alur dalam rekor lama-sekolah fisik 1233 00:58:03,030 --> 00:58:06,500 pada suatu waktu, sama bisa komputer berkat 1234 00:58:06,500 --> 00:58:09,810 untuk CPU dan nya Intel set instruksi, 1235 00:58:09,810 --> 00:58:12,480 antara yang instruksi dibaca dari memori 1236 00:58:12,480 --> 00:58:15,590 atau menyimpan ke memory-- sebuah komputer hanya dapat melihat 1237 00:58:15,590 --> 00:58:19,210 di satu lokasi di time-- sebuah kadang-kadang kombinasi dari mereka, 1238 00:58:19,210 --> 00:58:21,770 tapi benar-benar hanya satu lokasi pada satu waktu. 1239 00:58:21,770 --> 00:58:24,770 Jadi ketika kita melakukan berbagai algoritma, 1240 00:58:24,770 --> 00:58:28,110 Saya tidak hanya menulis dalam vacuum-- empat, satu, tiga, dua. 1241 00:58:28,110 --> 00:58:30,849 angka-angka benar-benar milik suatu tempat fisik di memori. 1242 00:58:30,849 --> 00:58:32,890 Jadi ada sedikit kecil transistor atau beberapa jenis 1243 00:58:32,890 --> 00:58:35,840 elektronik di bawah hood menyimpan nilai-nilai ini. 1244 00:58:35,840 --> 00:58:40,460 >> Dan total, berapa banyak bit yang terlibat sekarang, hanya harus jelas? 1245 00:58:40,460 --> 00:58:45,580 Jadi ini adalah empat byte, atau sekarang itu 32 bit Total. 1246 00:58:45,580 --> 00:58:49,280 Jadi sebenarnya ada 32 nol dan yang menyusun empat hal. 1247 00:58:49,280 --> 00:58:52,070 Bahkan ada lebih di sini, tapi lagi kita tidak peduli tentang hal itu. 1248 00:58:52,070 --> 00:58:55,120 >> Jadi sekarang mari kita bertanya lain Pertanyaan menggunakan memori, 1249 00:58:55,120 --> 00:58:57,519 karena pada akhirnya hari ini di varians. 1250 00:58:57,519 --> 00:59:00,310 Tidak peduli apa yang kita lakukan dengan komputer, pada akhir hari 1251 00:59:00,310 --> 00:59:02,560 hardware masih sama di bawah tenda. 1252 00:59:02,560 --> 00:59:04,670 Bagaimana saya akan menyimpan kata dalam sini? 1253 00:59:04,670 --> 00:59:09,710 Nah, sebuah kata dalam komputer seperti "Hei!" akan disimpan seperti ini. 1254 00:59:09,710 --> 00:59:12,300 Dan jika Anda ingin lebih lama kata, Anda hanya dapat 1255 00:59:12,300 --> 00:59:19,120 menimpa itu dan mengatakan sesuatu seperti "halo" dan toko yang di sini. 1256 00:59:19,120 --> 00:59:23,930 >> Dan jadi di sini, juga, contiguousness ini sebenarnya keuntungan, 1257 00:59:23,930 --> 00:59:26,530 karena komputer hanya bisa dibaca dari kanan ke kiri. 1258 00:59:26,530 --> 00:59:28,680 Tapi inilah pertanyaan. 1259 00:59:28,680 --> 00:59:33,480 Dalam konteks kata ini, h-e-l-l-o, tanda seru, 1260 00:59:33,480 --> 00:59:38,740 bagaimana mungkin komputer tahu di mana Kata dimulai dan di mana kata berakhir? 1261 00:59:38,740 --> 00:59:41,690 1262 00:59:41,690 --> 00:59:43,800 Dalam konteks angka, bagaimana komputer 1263 00:59:43,800 --> 00:59:48,396 tahu berapa lama urutan angka atau dari mana dimulai? 1264 00:59:48,396 --> 00:59:50,270 Nah, ternyata out-- dan kami tidak akan pergi terlalu banyak 1265 00:59:50,270 --> 00:59:54,970 ke tingkat detail-- komputer memindahkan barang-barang di dalam memori 1266 00:59:54,970 --> 00:59:57,800 harfiah dengan cara alamat ini. 1267 00:59:57,800 --> 01:00:02,080 Jadi di komputer, jika Anda menulis kode untuk menyimpan hal-hal 1268 01:00:02,080 --> 01:00:05,800 seperti kata-kata, apa yang Anda benar-benar lakukan adalah mengetik 1269 01:00:05,800 --> 01:00:11,320 ekspresi yang ingat di mana di memori komputer kata-kata ini. 1270 01:00:11,320 --> 01:00:14,370 Jadi biarkan aku melakukan sangat, contoh yang sangat sederhana. 1271 01:00:14,370 --> 01:00:18,260 >> Aku akan pergi ke depan dan membuka program teks sederhana, 1272 01:00:18,260 --> 01:00:20,330 dan aku akan membuat file bernama hello.c. 1273 01:00:20,330 --> 01:00:22,849 Sebagian besar informasi ini kami tidak akan masuk ke dalam detail, 1274 01:00:22,849 --> 01:00:25,140 tapi aku akan menulis Program dalam bahasa yang sama, 1275 01:00:25,140 --> 01:00:31,140 C. Ini jauh lebih menakutkan, Saya berpendapat, dari Scratch, 1276 01:00:31,140 --> 01:00:32,490 tapi itu sangat mirip dalam roh. 1277 01:00:32,490 --> 01:00:34,364 Bahkan, keriting ini braces-- Anda bisa jenis 1278 01:00:34,364 --> 01:00:37,820 memikirkan apa yang baru saja saya lakukan karena ini. 1279 01:00:37,820 --> 01:00:39,240 >> Mari kita lakukan ini, benar-benar. 1280 01:00:39,240 --> 01:00:45,100 Ketika bendera hijau diklik, melakukan hal berikut. 1281 01:00:45,100 --> 01:00:50,210 Saya ingin mencetak "halo." 1282 01:00:50,210 --> 01:00:51,500 Jadi ini sekarang pseudocode. 1283 01:00:51,500 --> 01:00:53,000 Aku agak mengaburkan garis. 1284 01:00:53,000 --> 01:00:56,750 Dalam C, bahasa ini yang saya bicarakan tentang, cetak baris ini hello 1285 01:00:56,750 --> 01:01:01,940 benar-benar menjadi "printf" dengan beberapa tanda kurung dan semi-colon. 1286 01:01:01,940 --> 01:01:03,480 >> Tapi itu ide yang sama persis. 1287 01:01:03,480 --> 01:01:06,730 Dan ini sangat user-friendly "Ketika bendera hijau diklik" menjadi 1288 01:01:06,730 --> 01:01:10,182 jauh lebih misterius "void main int." 1289 01:01:10,182 --> 01:01:12,890 Dan ini benar-benar tidak memiliki pemetaan, jadi aku hanya akan mengabaikan itu. 1290 01:01:12,890 --> 01:01:17,210 Tapi kurung kurawal adalah seperti potongan puzzle melengkung seperti ini. 1291 01:01:17,210 --> 01:01:18,700 >> Jadi Anda jenis dapat dari menebak. 1292 01:01:18,700 --> 01:01:22,357 Bahkan jika Anda tidak pernah diprogram sebelumnya, apa program ini mungkin lakukan? 1293 01:01:22,357 --> 01:01:25,560 1294 01:01:25,560 --> 01:01:28,000 Mungkin mencetak halo dengan tanda seru. 1295 01:01:28,000 --> 01:01:29,150 >> Jadi mari kita coba itu. 1296 01:01:29,150 --> 01:01:30,800 Aku akan menyimpannya. 1297 01:01:30,800 --> 01:01:34,000 Dan ini, sekali lagi, sangat lingkungan sekolah tua. 1298 01:01:34,000 --> 01:01:35,420 Saya tidak bisa klik, saya tidak dapat menarik. 1299 01:01:35,420 --> 01:01:36,910 Saya harus perintah ketik. 1300 01:01:36,910 --> 01:01:41,320 Jadi saya ingin menjalankan program saya, sehingga Saya mungkin melakukan hal ini, seperti hello.c. 1301 01:01:41,320 --> 01:01:42,292 Itu file aku berlari. 1302 01:01:42,292 --> 01:01:43,500 Tapi tunggu, aku kehilangan langkah. 1303 01:01:43,500 --> 01:01:46,470 Apa yang kita katakan adalah diperlukan langkah untuk bahasa seperti C? 1304 01:01:46,470 --> 01:01:49,470 Saya baru saja menulis sumber kode, tapi apa yang saya butuhkan? 1305 01:01:49,470 --> 01:01:50,670 Ya, aku butuh compiler. 1306 01:01:50,670 --> 01:01:57,670 Jadi pada Mac saya di sini, saya memiliki program yang disebut GCC, GNU C compiler, 1307 01:01:57,670 --> 01:02:03,990 yang memungkinkan saya untuk melakukan turn ini-- kode sumber ke dalam, kita akan menyebutnya, 1308 01:02:03,990 --> 01:02:04,930 kode mesin. 1309 01:02:04,930 --> 01:02:10,180 >> Dan saya bisa melihat bahwa, lagi, sebagai berikut, ini 1310 01:02:10,180 --> 01:02:14,090 adalah nol dan satu saya hanya dibuat dari kode sumber saya, 1311 01:02:14,090 --> 01:02:15,730 semua nol dan satu. 1312 01:02:15,730 --> 01:02:17,770 Dan jika saya ingin menjalankan saya program-- itu terjadi 1313 01:02:17,770 --> 01:02:23,010 disebut a.out untuk reasons-- sejarah "halo." 1314 01:02:23,010 --> 01:02:24,070 Saya dapat menjalankannya lagi. 1315 01:02:24,070 --> 01:02:25,690 Halo halo halo. 1316 01:02:25,690 --> 01:02:27,430 Dan tampaknya akan bekerja. 1317 01:02:27,430 --> 01:02:31,000 >> Tapi itu berarti suatu tempat di saya memori komputer adalah kata-kata 1318 01:02:31,000 --> 01:02:35,279 h-e-l-l-o, tanda seru. 1319 01:02:35,279 --> 01:02:38,070 Dan ternyata, hanya sebagai samping, apa komputer akan biasanya 1320 01:02:38,070 --> 01:02:40,550 lakukan sehingga ia tahu mana hal memulai dan end-- itu 1321 01:02:40,550 --> 01:02:42,460 akan menempatkan simbol khusus di sini. 1322 01:02:42,460 --> 01:02:46,064 Dan konvensi ini adalah untuk menempatkan angka nol pada akhir kata 1323 01:02:46,064 --> 01:02:48,230 sehingga Anda tahu di mana itu benar-benar berakhir, sehingga Anda 1324 01:02:48,230 --> 01:02:52,750 tidak menyimpan mencetak lebih banyak dan lebih karakter dari yang Anda benar-benar berniat. 1325 01:02:52,750 --> 01:02:55,400 >> Tapi takeaway di sini, bahkan meskipun ini cukup misterius, 1326 01:02:55,400 --> 01:02:58,140 adalah bahwa hal itu akhirnya relatif sederhana. 1327 01:02:58,140 --> 01:03:04,550 Anda diberi semacam tape, kosong ruang di mana Anda dapat menulis surat. 1328 01:03:04,550 --> 01:03:07,150 Anda hanya perlu memiliki simbol khusus, seperti sewenang-wenang 1329 01:03:07,150 --> 01:03:10,316 angka nol, untuk menempatkan pada akhir kata-kata Anda sehingga komputer tahu, 1330 01:03:10,316 --> 01:03:13,410 oh, saya harus berhenti mencetak setelah Aku melihat tanda seru. 1331 01:03:13,410 --> 01:03:16,090 Karena hal berikutnya ada adalah nilai ASCII dari nol, 1332 01:03:16,090 --> 01:03:19,125 atau karakter null sebagai seseorang akan menyebutnya. 1333 01:03:19,125 --> 01:03:21,500 Tapi ada jenis masalah di sini, dan mari kita memulihkan kembali 1334 01:03:21,500 --> 01:03:23,320 ke nomor sejenak. 1335 01:03:23,320 --> 01:03:28,720 Misalkan yang saya lakukan, pada kenyataannya, memiliki sebuah array angka, 1336 01:03:28,720 --> 01:03:30,730 dan anggaplah bahwa Program saya menulis adalah 1337 01:03:30,730 --> 01:03:34,680 seperti buku kelas untuk guru dan guru kelas. 1338 01:03:34,680 --> 01:03:38,720 Dan program ini memungkinkan dia mengetikkan skor siswa mereka ' 1339 01:03:38,720 --> 01:03:39,960 pada kuis. 1340 01:03:39,960 --> 01:03:43,750 Dan anggaplah bahwa siswa mendapat 100 pada kuis pertama mereka, mungkin 1341 01:03:43,750 --> 01:03:49,920 seperti 80 pada berikutnya, maka 75, kemudian 90 pada kuis keempat. 1342 01:03:49,920 --> 01:03:54,150 >> Jadi pada titik ini dalam cerita, array adalah ukuran empat. 1343 01:03:54,150 --> 01:03:58,470 Ada benar-benar lebih banyak memori di komputer, tetapi array, sehingga untuk berbicara, 1344 01:03:58,470 --> 01:04:00,350 adalah ukuran empat. 1345 01:04:00,350 --> 01:04:06,060 Misalkan sekarang bahwa guru ingin untuk menetapkan kuis kelima kelas. 1346 01:04:06,060 --> 01:04:08,510 Nah, salah satu hal yang ia atau dia akan harus melakukan 1347 01:04:08,510 --> 01:04:10,650 sekarang menyimpan nilai tambahan di sini. 1348 01:04:10,650 --> 01:04:15,490 Tetapi jika array guru memiliki dibuat dalam program ini adalah dari ukuran untuk, 1349 01:04:15,490 --> 01:04:22,440 salah satu masalah dengan array adalah bahwa Anda tidak bisa hanya terus menambah memori. 1350 01:04:22,440 --> 01:04:26,470 Karena bagaimana jika bagian lain dari Program memiliki kata "hey" di sana? 1351 01:04:26,470 --> 01:04:29,650 >> Dengan kata lain, ingatan saya bisa digunakan untuk apa saja dalam sebuah program. 1352 01:04:29,650 --> 01:04:33,250 Dan jika di muka saya mengetik di, hey, Saya ingin masukan empat skor kuis, 1353 01:04:33,250 --> 01:04:34,784 mereka mungkin pergi di sini dan di sini. 1354 01:04:34,784 --> 01:04:37,700 Dan jika Anda tiba-tiba berubah pikiran kemudian dan mengatakan saya ingin kuis kelima 1355 01:04:37,700 --> 01:04:40,872 skor, Anda tidak bisa hanya meletakkannya di mana pun Anda inginkan, 1356 01:04:40,872 --> 01:04:42,580 karena bagaimana jika ini memori yang digunakan 1357 01:04:42,580 --> 01:04:45,990 sesuatu else-- program lain atau beberapa fitur lain dari program tersebut 1358 01:04:45,990 --> 01:04:46,910 bahwa Anda menjalankan? 1359 01:04:46,910 --> 01:04:50,650 Jadi Anda harus berpikir di muka bagaimana Anda ingin menyimpan data Anda, 1360 01:04:50,650 --> 01:04:54,480 karena sekarang Anda sudah dicat diri ke sudut digital. 1361 01:04:54,480 --> 01:04:57,280 >> Jadi seorang guru mungkin bukan mengatakan saat menulis program 1362 01:04:57,280 --> 01:04:59,360 untuk menyimpan nya nilai, Anda tahu apa? 1363 01:04:59,360 --> 01:05:04,180 Saya akan meminta, saat menulis program saya, 1364 01:05:04,180 --> 01:05:12,070 yang ingin saya nol, satu, dua, tiga, empat, lima, enam, delapan nilai Total. 1365 01:05:12,070 --> 01:05:15,320 Jadi satu, dua, tiga, empat, lima, enam, tujuh, delapan. 1366 01:05:15,320 --> 01:05:18,612 guru hanya dapat over-mengalokasikan memori saat menulis nya Program 1367 01:05:18,612 --> 01:05:19,570 dan berkata, kau tahu apa? 1368 01:05:19,570 --> 01:05:22,236 Aku tidak akan pernah menetapkan lebih dari delapan kuis di semester. 1369 01:05:22,236 --> 01:05:23,130 Itu hanya gila. 1370 01:05:23,130 --> 01:05:24,470 Aku tidak akan pernah mengalokasikan itu. 1371 01:05:24,470 --> 01:05:28,270 Sehingga dengan cara ini ia memiliki fleksibilitas untuk skor toko siswa, 1372 01:05:28,270 --> 01:05:33,010 seperti 75, 90, dan mungkin salah satu ekstra di mana siswa mendapat kredit tambahan, 105. 1373 01:05:33,010 --> 01:05:36,130 >> Tetapi jika guru tidak pernah menggunakan tiga ruang ini, 1374 01:05:36,130 --> 01:05:38,860 ada sebuah takeaway intuitif sini. 1375 01:05:38,860 --> 01:05:41,410 Dia hanya membuang-buang ruang. 1376 01:05:41,410 --> 01:05:44,790 Jadi dengan kata lain, ada ini tradeoff umum dalam pemrograman 1377 01:05:44,790 --> 01:05:48,241 di mana Anda dapat mengalokasikan persis seperti yang banyak memori yang Anda inginkan, 1378 01:05:48,241 --> 01:05:51,490 terbalik dari yang adalah bahwa Anda super efficient-- Anda tidak menjadi boros 1379 01:05:51,490 --> 01:05:54,640 di all-- tapi downside yang adalah bagaimana jika Anda berubah pikiran ketika 1380 01:05:54,640 --> 01:05:58,780 menggunakan program yang ingin Anda untuk menyimpan lebih banyak data dari yang Anda awalnya ditujukan. 1381 01:05:58,780 --> 01:06:03,030 >> Jadi mungkin solusinya adalah, kemudian, menulis program Anda sedemikian rupa 1382 01:06:03,030 --> 01:06:05,605 bahwa mereka menggunakan lebih banyak memori dari yang mereka benar-benar perlu. 1383 01:06:05,605 --> 01:06:07,730 Dengan cara ini Anda tidak akan untuk lari ke masalah itu, 1384 01:06:07,730 --> 01:06:09,730 tapi kau menjadi boros. 1385 01:06:09,730 --> 01:06:12,960 Dan semakin banyak memori program anda menggunakan, seperti yang kita bahas kemarin, kurang 1386 01:06:12,960 --> 01:06:15,410 memori yang tersedia untuk program lain, 1387 01:06:15,410 --> 01:06:18,790 semakin cepat komputer Anda mungkin memperlambat turun karena memori virtual. 1388 01:06:18,790 --> 01:06:22,670 Dan solusi yang ideal mungkin apa? 1389 01:06:22,670 --> 01:06:24,610 >> Under-pengalokasian tampaknya buruk. 1390 01:06:24,610 --> 01:06:27,030 Over-pengalokasian tampaknya buruk. 1391 01:06:27,030 --> 01:06:31,120 Jadi apa yang mungkin menjadi solusi yang lebih baik? 1392 01:06:31,120 --> 01:06:32,390 Realokasi. 1393 01:06:32,390 --> 01:06:33,590 Lebih dinamis. 1394 01:06:33,590 --> 01:06:37,520 Jangan memaksakan diri untuk memilih apriori, di awal, apa yang Anda inginkan. 1395 01:06:37,520 --> 01:06:41,370 Dan tentu saja tidak over-mengalokasikan, jangan sampai Anda menjadi boros. 1396 01:06:41,370 --> 01:06:45,770 >> Dan untuk mencapai tujuan tersebut, kami perlu membuang struktur data ini, 1397 01:06:45,770 --> 01:06:48,100 sehingga untuk berbicara, jauh. 1398 01:06:48,100 --> 01:06:51,080 Dan jadi apa programmer biasanya akan menggunakan 1399 01:06:51,080 --> 01:06:55,940 adalah sesuatu yang disebut tidak Array tapi linked list. 1400 01:06:55,940 --> 01:07:00,860 Dengan kata lain, dia akan mulai berpikir memori mereka 1401 01:07:00,860 --> 01:07:05,280 sebagai jenis bentuk bahwa mereka dapat menarik dengan cara berikut. 1402 01:07:05,280 --> 01:07:08,520 Jika saya ingin menyimpan satu nomor di a program-- jadi September, 1403 01:07:08,520 --> 01:07:12,600 Saya sudah memberikan siswa saya kuis; saya ingin untuk menyimpan kuis pertama siswa, 1404 01:07:12,600 --> 01:07:16,220 dan mereka mendapat 100 pada itu-- I Saya akan meminta komputer saya, 1405 01:07:16,220 --> 01:07:19,540 dengan cara program saya sudah ditulis, untuk satu sepotong memori. 1406 01:07:19,540 --> 01:07:22,570 Dan aku akan menyimpan nomor 100 di dalamnya, dan hanya itu. 1407 01:07:22,570 --> 01:07:24,820 >> Lalu beberapa minggu kemudian ketika saya mendapatkan kuis kedua saya, 1408 01:07:24,820 --> 01:07:27,890 dan sudah waktunya untuk mengetik dalam 90%, saya akan 1409 01:07:27,890 --> 01:07:32,129 untuk meminta komputer, hey, komputer, dapat saya memiliki potongan lain dari memori? 1410 01:07:32,129 --> 01:07:34,170 Ini akan memberi saya ini sepotong kosong memori. 1411 01:07:34,170 --> 01:07:39,370 Aku akan dimasukkan ke dalam jumlah 90, tetapi dalam program saya entah bagaimana atau other-- 1412 01:07:39,370 --> 01:07:42,100 dan kami tidak akan khawatir tentang sintaks untuk ini-- saya perlu 1413 01:07:42,100 --> 01:07:44,430 entah bagaimana rantai hal-hal ini bersama-sama. 1414 01:07:44,430 --> 01:07:47,430 Dan aku akan rantai mereka bersama-sama dengan apa yang tampak seperti anak panah di sini. 1415 01:07:47,430 --> 01:07:50,050 >> Kuis ketiga yang muncul, Aku akan mengatakan, hei, komputer, 1416 01:07:50,050 --> 01:07:51,680 memberikan potongan memori yang lain. 1417 01:07:51,680 --> 01:07:54,660 Dan aku akan meletakkan apa pun itu, seperti 75, 1418 01:07:54,660 --> 01:07:56,920 dan saya harus rantai ini bersama-sama sekarang entah bagaimana. 1419 01:07:56,920 --> 01:08:00,290 kuis keempat datang, dan mungkin itu menjelang akhir semester. 1420 01:08:00,290 --> 01:08:03,140 Dan dengan itu program saya mungkin menggunakan memori 1421 01:08:03,140 --> 01:08:05,540 seluruh tempat, seluruh fisik. 1422 01:08:05,540 --> 01:08:08,170 Dan hanya untuk iseng, aku akan menarik ini sebagainya 1423 01:08:08,170 --> 01:08:11,260 quiz-- saya lupa apa itu; saya pikir mungkin 80 atau something-- 1424 01:08:11,260 --> 01:08:12,500 cara di atas sini. 1425 01:08:12,500 --> 01:08:15,920 >> Tapi itu baik-baik saja, karena pictorially Aku akan menarik garis ini. 1426 01:08:15,920 --> 01:08:19,063 Dengan kata lain, dalam kenyataannya, di hardware komputer Anda, 1427 01:08:19,063 --> 01:08:20,979 skor pertama mungkin berakhir di sini karena itu 1428 01:08:20,979 --> 01:08:22,529 tepat di awal semester. 1429 01:08:22,529 --> 01:08:25,810 Yang berikutnya mungkin berakhir di sini karena sedikit waktu telah berlalu 1430 01:08:25,810 --> 01:08:27,210 dan program terus berjalan. 1431 01:08:27,210 --> 01:08:30,060 Skor berikutnya, yang 75, mungkin di sini. 1432 01:08:30,060 --> 01:08:33,420 Dan skor terakhir mungkin 80, yang di sini. 1433 01:08:33,420 --> 01:08:38,729 >> Jadi dalam kenyataannya, secara fisik, mungkin ini apa memori komputer Anda terlihat seperti. 1434 01:08:38,729 --> 01:08:41,569 Tapi ini bukan mental yang berguna paradigma untuk programmer komputer. 1435 01:08:41,569 --> 01:08:44,649 Mengapa Anda harus peduli di mana heck data Anda berakhir? 1436 01:08:44,649 --> 01:08:46,200 Anda hanya ingin menyimpan data. 1437 01:08:46,200 --> 01:08:49,390 >> Ini adalah jenis seperti diskusi kita sebelumnya menggambar kubus. 1438 01:08:49,390 --> 01:08:52,200 Mengapa Anda peduli apa sudut adalah kubus 1439 01:08:52,200 --> 01:08:53,740 dan bagaimana Anda harus mengubah menggambar itu? 1440 01:08:53,740 --> 01:08:54,950 Anda hanya ingin kubus. 1441 01:08:54,950 --> 01:08:57,359 Demikian pula di sini, Anda hanya ingin buku kelas. 1442 01:08:57,359 --> 01:08:59,559 Anda hanya ingin memikirkan ini sebagai daftar nomor. 1443 01:08:59,559 --> 01:09:01,350 Siapa yang peduli bagaimana itu diimplementasikan dalam perangkat keras? 1444 01:09:01,350 --> 01:09:05,180 >> Jadi abstraksi sekarang adalah gambar ini di sini. 1445 01:09:05,180 --> 01:09:07,580 Ini adalah daftar link, sebagai programmer akan menyebutnya, 1446 01:09:07,580 --> 01:09:10,640 sejauh Anda memiliki daftar, jelas angka. 1447 01:09:10,640 --> 01:09:14,990 Tapi itu terkait pictorially dengan cara panah tersebut, 1448 01:09:14,990 --> 01:09:18,510 dan semua anak panah ini are-- bawahnya tenda, jika Anda penasaran, 1449 01:09:18,510 --> 01:09:23,210 ingat bahwa hardware fisik kita memiliki alamat nol, satu, dua, tiga, empat. 1450 01:09:23,210 --> 01:09:28,465 Semua anak panah ini adalah seperti peta atau arah, di mana jika 90 is-- sekarang 1451 01:09:28,465 --> 01:09:29,090 Saya harus menghitung. 1452 01:09:29,090 --> 01:09:31,750 >> Nol, satu, dua, tiga, empat, lima, enam, tujuh. 1453 01:09:31,750 --> 01:09:35,640 Sepertinya 90 adalah di Jumlah alamat memori tujuh. 1454 01:09:35,640 --> 01:09:38,460 Semua anak panah ini adalah seperti memo kertas kecil 1455 01:09:38,460 --> 01:09:42,439 yang memberi arah ke Program yang mengatakan ikuti peta ini 1456 01:09:42,439 --> 01:09:43,880 untuk sampai ke lokasi tujuh. 1457 01:09:43,880 --> 01:09:46,680 Dan di sana Anda akan menemukan skor kuis kedua siswa. 1458 01:09:46,680 --> 01:09:52,100 Sementara itu, 75-- jika saya terus ini, ini adalah tujuh, delapan, sembilan, 10, 11, 12, 1459 01:09:52,100 --> 01:09:54,240 13, 14, 15. 1460 01:09:54,240 --> 01:09:59,080 >> panah lain ini hanya merupakan peta ke lokasi memori 15. 1461 01:09:59,080 --> 01:10:02,550 Tapi sekali lagi, programmer umumnya tidak tidak peduli tentang tingkat detail. 1462 01:10:02,550 --> 01:10:05,530 Dan dalam kebanyakan setiap pemrograman bahasa hari ini, programmer 1463 01:10:05,530 --> 01:10:10,490 bahkan tidak akan tahu di mana dalam memori angka-angka ini sebenarnya. 1464 01:10:10,490 --> 01:10:14,830 Semua ia harus peduli adalah bahwa mereka entah bagaimana terkait bersama-sama 1465 01:10:14,830 --> 01:10:18,390 dalam struktur data seperti ini. 1466 01:10:18,390 --> 01:10:21,580 >> Tapi ternyata tidak untuk mendapatkan terlalu teknis. 1467 01:10:21,580 --> 01:10:27,430 Tapi hanya karena kita mungkin bisa mampu untuk memiliki diskusi ini di sini, 1468 01:10:27,430 --> 01:10:33,630 misalkan kita kembali masalah ini di sini array. 1469 01:10:33,630 --> 01:10:35,780 Mari kita lihat apakah kita menyesal akan di sini. 1470 01:10:35,780 --> 01:10:42,950 Ini adalah 100, 90, 75, dan 80. 1471 01:10:42,950 --> 01:10:44,980 >> Ijinkan saya membuat klaim ini. 1472 01:10:44,980 --> 01:10:48,980 Ini adalah array, dan lagi, karakteristik yang menonjol dari array 1473 01:10:48,980 --> 01:10:52,400 adalah bahwa semua data Anda kembali ke kembali ke belakang di memory-- harfiah 1474 01:10:52,400 --> 01:10:56,830 satu byte atau mungkin empat byte, beberapa jumlah tetap byte pergi. 1475 01:10:56,830 --> 01:11:00,710 Dalam daftar link, yang kita mungkin menarik seperti ini, di bawah tenda yang 1476 01:11:00,710 --> 01:11:02,000 tahu di mana itu hal ini? 1477 01:11:02,000 --> 01:11:03,630 Bahkan tidak perlu mengalir seperti ini. 1478 01:11:03,630 --> 01:11:06,050 Beberapa data bisa kembali ke kiri di sana. 1479 01:11:06,050 --> 01:11:07,530 Anda bahkan tidak tahu. 1480 01:11:07,530 --> 01:11:15,430 >> Dan dengan sebuah array, Anda memiliki fitur yang dikenal sebagai akses acak. 1481 01:11:15,430 --> 01:11:20,570 Dan apa akses acak berarti adalah bahwa komputer dapat melompat langsung 1482 01:11:20,570 --> 01:11:22,730 untuk setiap lokasi dalam array. 1483 01:11:22,730 --> 01:11:23,580 Mengapa? 1484 01:11:23,580 --> 01:11:26,000 Karena komputer tahu bahwa lokasi pertama adalah 1485 01:11:26,000 --> 01:11:29,540 nol, satu, dua, dan tiga. 1486 01:11:29,540 --> 01:11:33,890 >> Dan jadi jika Anda ingin pergi dari elemen ini ke elemen berikutnya, 1487 01:11:33,890 --> 01:11:36,099 Anda benar-benar, di pikiran komputer, hanya menambahkan satu. 1488 01:11:36,099 --> 01:11:39,140 Jika Anda ingin pergi ke elemen ketiga, hanya menambahkan satu-- elemen berikutnya, hanya 1489 01:11:39,140 --> 01:11:40,290 menambahkan satu. 1490 01:11:40,290 --> 01:11:42,980 Namun, dalam versi ini cerita, kira 1491 01:11:42,980 --> 01:11:46,080 komputer saat ini sedang mencari pada atau berurusan dengan nomor 100. 1492 01:11:46,080 --> 01:11:49,770 Bagaimana Anda mendapatkan ke yang berikutnya kelas dalam buku kelas? 1493 01:11:49,770 --> 01:11:52,560 >> Anda harus mengambil tujuh langkah, yang sewenang-wenang. 1494 01:11:52,560 --> 01:11:58,120 Untuk mendapatkan ke yang berikutnya, Anda harus mengambil delapan langkah untuk 15. 1495 01:11:58,120 --> 01:12:02,250 Dengan kata lain, itu bukan gap konstan antara angka-angka, 1496 01:12:02,250 --> 01:12:04,857 dan sehingga hanya mengambil komputer lebih banyak waktu adalah titik. 1497 01:12:04,857 --> 01:12:06,940 komputer harus mencari melalui memori agar 1498 01:12:06,940 --> 01:12:08,990 untuk menemukan apa yang Anda cari. 1499 01:12:08,990 --> 01:12:14,260 >> Jadi sedangkan array cenderung menjadi data yang cepat structure-- karena Anda 1500 01:12:14,260 --> 01:12:17,610 dapat benar-benar hanya melakukan aritmatika sederhana dan di mana Anda inginkan dengan menambahkan satu, 1501 01:12:17,610 --> 01:12:21,300 untuk instance-- sebuah linked list, Anda mengorbankan fitur itu. 1502 01:12:21,300 --> 01:12:24,020 Anda tidak bisa hanya pergi dari pertama untuk kedua ketiga untuk keempat. 1503 01:12:24,020 --> 01:12:25,240 Anda harus mengikuti peta. 1504 01:12:25,240 --> 01:12:28,160 Anda harus mengambil langkah-langkah lebih untuk mendapatkan nilai-nilai yang 1505 01:12:28,160 --> 01:12:30,230 tampaknya akan menjadi menambahkan biaya. 1506 01:12:30,230 --> 01:12:35,910 Jadi kita membayar harga, tapi apa itu fitur yang Dan sedang mencari di sini? 1507 01:12:35,910 --> 01:12:38,110 Apa linked list tampaknya memungkinkan kita untuk melakukan, 1508 01:12:38,110 --> 01:12:40,240 yang merupakan asal-usul cerita khusus ini? 1509 01:12:40,240 --> 01:12:43,250 1510 01:12:43,250 --> 01:12:43,830 >> Persis. 1511 01:12:43,830 --> 01:12:46,220 Sebuah ukuran yang dinamis untuk itu. 1512 01:12:46,220 --> 01:12:48,040 Kita dapat menambah daftar ini. 1513 01:12:48,040 --> 01:12:51,430 Kita bahkan dapat mengecilkan daftar, sehingga bahwa kita hanya menggunakan sebanyak memori 1514 01:12:51,430 --> 01:12:55,560 karena kami benar-benar ingin dan sebagainya kami tidak pernah over-mengalokasikan. 1515 01:12:55,560 --> 01:12:58,470 >> Sekarang hanya harus benar-benar rewel, ada biaya tersembunyi. 1516 01:12:58,470 --> 01:13:01,980 Jadi Anda tidak hanya harus membiarkan saya meyakinkan Anda bahwa ini adalah tradeoff menarik. 1517 01:13:01,980 --> 01:13:04,190 Ada biaya lain yang tersembunyi di sini. 1518 01:13:04,190 --> 01:13:06,550 Manfaatnya, harus jelas, adalah bahwa kita mendapatkan dinamisme. 1519 01:13:06,550 --> 01:13:10,359 Jika saya ingin unsur lain, saya hanya bisa menggambar dan memasukkan nomor di sana. 1520 01:13:10,359 --> 01:13:12,150 Dan kemudian saya bisa menghubungkannya dengan gambar di sini, 1521 01:13:12,150 --> 01:13:14,970 sedangkan di sini, sekali lagi, jika saya sudah dicat sendiri ke sudut, 1522 01:13:14,970 --> 01:13:19,410 jika sesuatu yang lain sudah menggunakan memori di sini, aku beruntung. 1523 01:13:19,410 --> 01:13:21,700 Aku sudah dicat sendiri ke sudut. 1524 01:13:21,700 --> 01:13:24,390 >> Tapi apa yang tersembunyi biaya dalam gambar ini? 1525 01:13:24,390 --> 01:13:27,690 Ini bukan hanya jumlah yang waktu yang dibutuhkan 1526 01:13:27,690 --> 01:13:29,870 untuk pergi dari sini ke sini, yang tujuh langkah, maka 1527 01:13:29,870 --> 01:13:32,820 delapan langkah, yang lebih dari satu. 1528 01:13:32,820 --> 01:13:34,830 Apa biaya lain yang tersembunyi? 1529 01:13:34,830 --> 01:13:35,440 Bukan hanya waktu. 1530 01:13:35,440 --> 01:13:44,790 1531 01:13:44,790 --> 01:13:49,940 Informasi tambahan diperlukan untuk mencapai gambar ini. 1532 01:13:49,940 --> 01:13:53,210 >> Ya, itu peta, mereka memo kecil kertas, saya tetap menggambarkan mereka sebagai. 1533 01:13:53,210 --> 01:13:55,650 Ini arrows-- mereka tidak bebas. 1534 01:13:55,650 --> 01:13:57,660 Sebuah computer-- Anda tahu apa komputer memiliki. 1535 01:13:57,660 --> 01:13:58,790 Ini memiliki nol dan satu. 1536 01:13:58,790 --> 01:14:03,170 Jika Anda ingin mewakili panah atau map atau nomor, Anda memerlukan beberapa memori. 1537 01:14:03,170 --> 01:14:05,950 Jadi harga lain Anda membayar untuk sebuah linked list, 1538 01:14:05,950 --> 01:14:09,070 ilmu komputer umum sumber daya, juga ruang. 1539 01:14:09,070 --> 01:14:11,710 >> Dan memang begitu, jadi sering, antara pengorbanan 1540 01:14:11,710 --> 01:14:15,580 dalam merancang rekayasa perangkat lunak sistem adalah waktu dan space-- 1541 01:14:15,580 --> 01:14:18,596 dua bahan Anda, dua dari bahan yang paling mahal Anda. 1542 01:14:18,596 --> 01:14:21,220 Ini biaya saya lebih banyak waktu karena saya harus mengikuti peta ini, 1543 01:14:21,220 --> 01:14:25,730 tapi itu juga biaya saya lebih banyak ruang karena saya harus menjaga peta ini sekitar. 1544 01:14:25,730 --> 01:14:28,730 Jadi harapan, karena kami sudah jenis dibahas lebih kemarin dan hari ini, 1545 01:14:28,730 --> 01:14:31,720 adalah bahwa manfaat akan lebih besar daripada biaya. 1546 01:14:31,720 --> 01:14:33,870 >> Tapi tidak ada solusi yang jelas di sini. 1547 01:14:33,870 --> 01:14:35,870 Mungkin itu adalah better-- a la cepat dan kotor, 1548 01:14:35,870 --> 01:14:38,660 sebagai Kareem diusulkan earlier-- untuk membuang memori pada masalah. 1549 01:14:38,660 --> 01:14:42,520 Hanya membeli lebih banyak memori, berpikir kurang keras tentang pemecahan masalah, 1550 01:14:42,520 --> 01:14:44,595 dan menyelesaikannya dengan cara yang lebih mudah. 1551 01:14:44,595 --> 01:14:46,720 Dan memang sebelumnya, ketika kita berbicara tentang pengorbanan, 1552 01:14:46,720 --> 01:14:49,190 itu tidak ruang dalam komputer dan waktu. 1553 01:14:49,190 --> 01:14:51,810 Itu waktu pengembang, yang belum sumber daya lain. 1554 01:14:51,810 --> 01:14:54,829 >> Jadi sekali lagi, itu tindakan penyeimbangan ini mencoba untuk memutuskan mana dari hal-hal 1555 01:14:54,829 --> 01:14:55,870 Anda bersedia untuk menghabiskan? 1556 01:14:55,870 --> 01:14:57,380 Yang merupakan yang paling mahal? 1557 01:14:57,380 --> 01:15:01,040 Yang menghasilkan hasil yang lebih baik? 1558 01:15:01,040 --> 01:15:01,540 Ya? 1559 01:15:01,540 --> 01:15:11,310 1560 01:15:11,310 --> 01:15:12,580 >> Memang. 1561 01:15:12,580 --> 01:15:15,970 Dalam hal ini, jika Anda mewakili angka di maps-- yang 1562 01:15:15,970 --> 01:15:18,820 ini disebut dalam banyak bahasa "Pointer" atau "alamat" - 1563 01:15:18,820 --> 01:15:20,390 itu ganda ruang. 1564 01:15:20,390 --> 01:15:24,390 Itu tidak perlu seburuk ganda jika sekarang kami hanya menyimpan nomor. 1565 01:15:24,390 --> 01:15:27,410 Misalkan kita menyimpan catatan pasien di hospital-- sebuah 1566 01:15:27,410 --> 01:15:30,870 sehingga nama Pierson ini, nomor telepon, nomor jaminan sosial, dokter 1567 01:15:30,870 --> 01:15:31,540 sejarah. 1568 01:15:31,540 --> 01:15:34,160 Kotak ini mungkin banyak, jauh lebih besar, dalam hal ini 1569 01:15:34,160 --> 01:15:38,000 pointer kecil kecil, alamat berikutnya element-- itu bukan masalah besar. 1570 01:15:38,000 --> 01:15:40,620 Ini pinggiran seperti biaya tidak masalah. 1571 01:15:40,620 --> 01:15:43,210 Tapi dalam kasus ini, ya, itu dua kali lipat a. 1572 01:15:43,210 --> 01:15:45,290 Pertanyaan bagus. 1573 01:15:45,290 --> 01:15:47,900 >> Mari kita bicara tentang waktu sedikit lebih konkret. 1574 01:15:47,900 --> 01:15:50,380 Apa waktu berjalan mencari daftar ini? 1575 01:15:50,380 --> 01:15:53,640 Misalkan saya ingin mencari melalui semua nilai siswa, 1576 01:15:53,640 --> 01:15:55,980 dan ada n nilai dalam struktur data ini. 1577 01:15:55,980 --> 01:15:58,830 Di sini juga, kita bisa meminjam kosakata sebelumnya. 1578 01:15:58,830 --> 01:16:00,890 Ini adalah struktur data linear. 1579 01:16:00,890 --> 01:16:04,570 >> O besar n adalah apa yang diperlukan untuk mendapatkan sampai akhir struktur data ini, 1580 01:16:04,570 --> 01:16:08,410 whereas-- dan kami belum melihat ini before-- array memberi Anda 1581 01:16:08,410 --> 01:16:13,555 apa yang disebut konstanta waktu, yang berarti satu langkah atau dua langkah atau 10 steps-- 1582 01:16:13,555 --> 01:16:14,180 tidak masalah. 1583 01:16:14,180 --> 01:16:15,440 Ini adalah jumlah tetap. 1584 01:16:15,440 --> 01:16:17,440 Ini tidak ada hubungannya dengan ukuran array. 1585 01:16:17,440 --> 01:16:20,130 Dan alasan untuk itu, lagi, akses random. 1586 01:16:20,130 --> 01:16:23,180 komputer bisa saja segera melompat ke lokasi lain, 1587 01:16:23,180 --> 01:16:27,770 karena mereka semua sama jarak dari segala sesuatu yang lain. 1588 01:16:27,770 --> 01:16:29,112 Tidak ada pemikiran yang terlibat. 1589 01:16:29,112 --> 01:16:31,900 1590 01:16:31,900 --> 01:16:32,400 Baiklah. 1591 01:16:32,400 --> 01:16:39,230 Jadi jika saya bisa, saya mencoba untuk melukis dua gambar akhir. 1592 01:16:39,230 --> 01:16:42,830 Yang sangat umum dikenal sebagai tabel hash. 1593 01:16:42,830 --> 01:16:51,120 Jadi untuk memotivasi diskusi ini, biarkan aku berpikir tentang bagaimana untuk melakukan hal ini. 1594 01:16:51,120 --> 01:16:52,610 >> Jadi bagaimana ini? 1595 01:16:52,610 --> 01:16:55,160 Misalkan masalah kami ingin memecahkan sekarang 1596 01:16:55,160 --> 01:16:58,360 menerapkan di dictionary-- sebuah sehingga sejumlah besar kata-kata bahasa Inggris 1597 01:16:58,360 --> 01:16:59,330 atau terserah. 1598 01:16:59,330 --> 01:17:02,724 Dan tujuannya adalah untuk dapat menjawab pertanyaan dari formulir adalah ini sebuah kata? 1599 01:17:02,724 --> 01:17:04,640 Jadi Anda ingin menerapkan pemeriksa ejaan, hanya 1600 01:17:04,640 --> 01:17:07,220 seperti kamus fisik Anda dapat melihat hal-hal di. 1601 01:17:07,220 --> 01:17:10,490 Bagaimana jika aku melakukan ini dengan array. 1602 01:17:10,490 --> 01:17:12,590 Aku bisa melakukan ini. 1603 01:17:12,590 --> 01:17:20,756 >> Dan kira kata-kata apple dan pisang dan melon. 1604 01:17:20,756 --> 01:17:23,330 1605 01:17:23,330 --> 01:17:26,465 Dan saya tidak bisa memikirkan buah yang dimulai dengan d, jadi kami hanya 1606 01:17:26,465 --> 01:17:27,590 akan memiliki tiga buah. 1607 01:17:27,590 --> 01:17:31,510 Jadi ini adalah sebuah array, dan kami menyimpan semua kata-kata ini 1608 01:17:31,510 --> 01:17:34,200 dalam kamus ini sebagai array. 1609 01:17:34,200 --> 01:17:39,350 Pertanyaannya, kemudian, adalah bagaimana lagi Anda bisa menyimpan informasi ini? 1610 01:17:39,350 --> 01:17:43,160 >> Yah, aku jenis kecurangan di sini, karena masing-masing surat-surat ini dalam kata 1611 01:17:43,160 --> 01:17:44,490 benar-benar sebuah byte individu. 1612 01:17:44,490 --> 01:17:46,740 Jadi jika saya benar-benar ingin menjadi rewel, saya harus benar-benar 1613 01:17:46,740 --> 01:17:49,600 akan membagi ini menjadi lebih potongan yang lebih kecil dari memori, 1614 01:17:49,600 --> 01:17:51,289 dan kita bisa melakukan hal itu. 1615 01:17:51,289 --> 01:17:53,580 Tapi kita akan mengalami masalah yang sama seperti sebelumnya. 1616 01:17:53,580 --> 01:17:56,674 Bagaimana jika, seperti Merriam Webster atau Oxford tidak setiap year-- mereka menambahkan kata-kata 1617 01:17:56,674 --> 01:17:59,340 ke dictionary-- kita tidak selalu ingin melukis diri kita sendiri 1618 01:17:59,340 --> 01:18:00,780 ke sudut dengan array? 1619 01:18:00,780 --> 01:18:05,710 >> Jadi alih-alih, mungkin pendekatan yang lebih cerdas adalah untuk menempatkan apel di node atau kotak sendiri, 1620 01:18:05,710 --> 01:18:11,190 seperti yang kita katakan, pisang, dan maka di sini kita memiliki blewah. 1621 01:18:11,190 --> 01:18:14,990 1622 01:18:14,990 --> 01:18:16,790 Dan kami string yang hal-hal ini bersama-sama. 1623 01:18:16,790 --> 01:18:19,980 Jadi ini adalah array, dan ini adalah linked list. 1624 01:18:19,980 --> 01:18:23,300 Jika Anda tidak bisa melihat, itu hanya mengatakan "array," dan ini mengatakan "daftar." 1625 01:18:23,300 --> 01:18:25,780 >> Jadi kita harus sama masalah persis seperti sebelumnya, 1626 01:18:25,780 --> 01:18:28,600 dimana kita sekarang memiliki dinamisme dalam daftar kami terkait. 1627 01:18:28,600 --> 01:18:31,090 Tapi kami memiliki kamus cukup lambat. 1628 01:18:31,090 --> 01:18:32,870 Misalkan saya ingin mencari kata. 1629 01:18:32,870 --> 01:18:35,430 Mungkin membawa saya O besar n langkah, karena kata mungkin 1630 01:18:35,430 --> 01:18:37,840 menjadi semua jalan pada akhir daftar, seperti melon. 1631 01:18:37,840 --> 01:18:40,600 Dan ternyata dalam pemrograman, semacam 1632 01:18:40,600 --> 01:18:42,700 dari grail suci data struktur, adalah sesuatu 1633 01:18:42,700 --> 01:18:46,620 yang memberikan konstan waktu seperti array 1634 01:18:46,620 --> 01:18:50,870 tapi yang masih memberikan dinamisme. 1635 01:18:50,870 --> 01:18:52,940 >> Jadi dapat kita memiliki yang terbaik dari kedua dunia? 1636 01:18:52,940 --> 01:18:55,570 Dan memang, ada sesuatu disebut tabel hash 1637 01:18:55,570 --> 01:18:59,320 yang memungkinkan Anda untuk melakukan hal bahwa, meskipun sekitar. 1638 01:18:59,320 --> 01:19:03,140 Sebuah tabel hash adalah pengujian struktur data yang kita 1639 01:19:03,140 --> 01:19:06,340 bisa memikirkan sebagai Kombinasi dari array-- 1640 01:19:06,340 --> 01:19:12,390 dan aku akan menggambar seperti ini-- dan daftar terkait 1641 01:19:12,390 --> 01:19:17,310 bahwa saya akan menggambar seperti ini di sini. 1642 01:19:17,310 --> 01:19:19,760 >> Dan cara hal ini karya adalah sebagai berikut. 1643 01:19:19,760 --> 01:19:23,310 1644 01:19:23,310 --> 01:19:29,540 Jika ini sekarang-- hash table-- adalah struktur data ketiga, 1645 01:19:29,540 --> 01:19:32,590 dan saya ingin menyimpan kata-kata dalam ini, saya tidak 1646 01:19:32,590 --> 01:19:35,440 ingin hanya menyimpan semua kata kembali untuk kembali ke belakang ke belakang. 1647 01:19:35,440 --> 01:19:37,430 Saya ingin memanfaatkan beberapa sepotong informasi 1648 01:19:37,430 --> 01:19:40,330 tentang kata-kata yang akan membiarkan saya mendapatkannya di mana itu lebih cepat. 1649 01:19:40,330 --> 01:19:43,666 >> Jadi mengingat kata-kata apple dan pisang dan melon, 1650 01:19:43,666 --> 01:19:45,040 Saya sengaja memilih kata-kata. 1651 01:19:45,040 --> 01:19:45,340 Mengapa? 1652 01:19:45,340 --> 01:19:47,631 Apa semacam fundamental yang berbeda tentang tiga? 1653 01:19:47,631 --> 01:19:49,950 1654 01:19:49,950 --> 01:19:51,484 Apa yang jelas? 1655 01:19:51,484 --> 01:19:52,900 Mereka mulai dengan huruf yang berbeda. 1656 01:19:52,900 --> 01:19:53,900 >> Sehingga Anda tahu apa? 1657 01:19:53,900 --> 01:19:57,120 Daripada menempatkan semua kata-kata saya di ember yang sama, sehingga untuk berbicara, 1658 01:19:57,120 --> 01:20:00,390 seperti dalam satu daftar besar, mengapa tidak melakukan Saya setidaknya mencoba optimasi 1659 01:20:00,390 --> 01:20:04,180 dan membuat daftar saya 1/26 lama. 1660 01:20:04,180 --> 01:20:07,440 Sebuah optimasi menarik mungkin mengapa tidak melakukan 1661 01:20:07,440 --> 01:20:10,650 Aku-- saat memasukkan kata ke dalam struktur data ini, 1662 01:20:10,650 --> 01:20:14,300 ke dalam memori komputer, mengapa saya tidak meletakkan semua 'a' kata di sini, 1663 01:20:14,300 --> 01:20:17,270 semua kata 'b' di sini, dan semua 'c' kata di sini? 1664 01:20:17,270 --> 01:20:24,610 Jadi ini akhirnya menempatkan sebuah apel di sini, pisang sini, melon di sini, 1665 01:20:24,610 --> 01:20:25,730 dan seterusnya. 1666 01:20:25,730 --> 01:20:31,700 >> Dan jika saya memiliki tambahan kata like-- apa lagi? 1667 01:20:31,700 --> 01:20:36,640 Apel, pisang, pir. 1668 01:20:36,640 --> 01:20:39,370 Siapapun memikirkan buah yang dimulai dengan a, b, atau c? 1669 01:20:39,370 --> 01:20:40,570 sempurna Blueberry--. 1670 01:20:40,570 --> 01:20:43,990 Yang akan berakhir di sini. 1671 01:20:43,990 --> 01:20:47,530 Dan jadi kita tampaknya memiliki sedikit solusi yang lebih baik, 1672 01:20:47,530 --> 01:20:50,820 karena sekarang jika saya ingin untuk mencari apel, saya 1673 01:20:50,820 --> 01:20:53,200 first-- saya tidak hanya menyelam ke dalam struktur data saya. 1674 01:20:53,200 --> 01:20:54,850 Saya tidak menyelam ke dalam memori komputer saya. 1675 01:20:54,850 --> 01:20:56,530 Saya pertama kali melihat huruf pertama. 1676 01:20:56,530 --> 01:20:58,610 >> Dan ini adalah apa komputer ilmuwan akan mengatakan. 1677 01:20:58,610 --> 01:21:00,760 Anda hash ke dalam struktur data Anda. 1678 01:21:00,760 --> 01:21:04,100 Anda mengambil masukan Anda, yang pada hal ini adalah kata seperti apel. 1679 01:21:04,100 --> 01:21:07,150 Anda menganalisis itu, melihat huruf pertama dalam kasus ini, 1680 01:21:07,150 --> 01:21:08,340 demikian hashing. 1681 01:21:08,340 --> 01:21:10,950 Hashing adalah dimana istilah umum Anda mengambil sesuatu sebagai masukan 1682 01:21:10,950 --> 01:21:12,116 dan Anda menghasilkan beberapa output. 1683 01:21:12,116 --> 01:21:15,090 Dan output dalam Kasus adalah lokasi 1684 01:21:15,090 --> 01:21:18,150 Anda ingin mencari, pertama lokasi, lokasi kedua, ketiga. 1685 01:21:18,150 --> 01:21:22,160 Jadi input apel, output adalah pertama. 1686 01:21:22,160 --> 01:21:25,054 input adalah pisang, yang output harus kedua. 1687 01:21:25,054 --> 01:21:27,220 input blewah, output harus ketiga. 1688 01:21:27,220 --> 01:21:30,320 input adalah blueberry, yang output harus kembali menjadi yang kedua. 1689 01:21:30,320 --> 01:21:34,010 Dan itulah yang membantu Anda mengambil pintas melalui memori Anda 1690 01:21:34,010 --> 01:21:39,050 untuk mendapatkan kata-kata atau data secara lebih efektif. 1691 01:21:39,050 --> 01:21:43,330 >> Sekarang ini menebang waktu kita berpotensi sebanyak satu dari 26, 1692 01:21:43,330 --> 01:21:45,850 karena jika Anda berasumsi bahwa Anda memiliki banyak "a" kata-kata "z" 1693 01:21:45,850 --> 01:21:48,080 kata-kata sebagai kata-kata "q", yang tidak benar-benar realistic-- 1694 01:21:48,080 --> 01:21:50,830 Anda akan memiliki condong di huruf tertentu alphabet-- yang 1695 01:21:50,830 --> 01:21:53,204 tapi ini akan menjadi tambahan Pendekatan yang tidak memungkinkan 1696 01:21:53,204 --> 01:21:55,930 Anda untuk mendapatkan kata-kata jauh lebih cepat. 1697 01:21:55,930 --> 01:21:59,660 Dan pada kenyataannya, canggih program, Googles dunia, 1698 01:21:59,660 --> 01:22:02,180 yang Facebooks dari dunia-- mereka akan menggunakan tabel hash 1699 01:22:02,180 --> 01:22:03,740 untuk banyak tujuan yang berbeda. 1700 01:22:03,740 --> 01:22:06,590 Tapi mereka tidak akan begitu naif hanya melihat huruf pertama 1701 01:22:06,590 --> 01:22:09,700 di apel atau pisang atau pir atau melon, 1702 01:22:09,700 --> 01:22:13,420 karena seperti yang Anda lihat ini daftar masih bisa panjang. 1703 01:22:13,420 --> 01:22:17,130 >> Dan jadi ini mungkin masih menjadi semacam dari linear-- sehingga semacam lambat, 1704 01:22:17,130 --> 01:22:19,980 seperti dengan O besar n yang kita bahas sebelumnya. 1705 01:22:19,980 --> 01:22:25,290 Jadi apa tabel hash nyata baik akan do-- itu akan memiliki array yang jauh lebih besar. 1706 01:22:25,290 --> 01:22:28,574 Dan itu akan menggunakan lebih banyak fungsi hashing canggih, 1707 01:22:28,574 --> 01:22:30,240 sehingga tidak hanya melihat "a." 1708 01:22:30,240 --> 01:22:35,480 Mungkin terlihat di "a-p-p-l-e" dan entah bagaimana mengkonversi lima huruf 1709 01:22:35,480 --> 01:22:38,400 ke lokasi di mana apel harus disimpan. 1710 01:22:38,400 --> 01:22:42,660 Kami hanya naif menggunakan huruf 'a' saja, karena itu bagus dan sederhana. 1711 01:22:42,660 --> 01:22:44,600 >> Tapi tabel hash, di akhirnya, Anda bisa memikirkan 1712 01:22:44,600 --> 01:22:47,270 sebagai kombinasi array, yang masing-masing 1713 01:22:47,270 --> 01:22:51,700 memiliki daftar link yang idealnya harus sesingkat mungkin. 1714 01:22:51,700 --> 01:22:54,364 Dan ini bukan solusi yang jelas. 1715 01:22:54,364 --> 01:22:57,280 Bahkan, banyak dari fine tuning yang berlangsung di bawah tenda saat 1716 01:22:57,280 --> 01:22:59,654 melaksanakan jenis-jenis struktur data yang canggih 1717 01:22:59,654 --> 01:23:01,640 adalah apa yang benar yang panjang array? 1718 01:23:01,640 --> 01:23:03,250 Apa fungsi hash yang tepat? 1719 01:23:03,250 --> 01:23:04,830 Bagaimana Anda menyimpan hal-hal dalam memori? 1720 01:23:04,830 --> 01:23:07,249 >> Tapi menyadari betapa cepat diskusi semacam ini 1721 01:23:07,249 --> 01:23:10,540 meningkat, baik sejauh bahwa itu semacam dari atas kepala seseorang pada saat ini, yang 1722 01:23:10,540 --> 01:23:11,360 baik-baik saja. 1723 01:23:11,360 --> 01:23:18,820 Tapi kita mulai, ingat, dengan benar-benar sesuatu tingkat rendah dan elektronik. 1724 01:23:18,820 --> 01:23:20,819 Dan ini lagi adalah ini tema abstraksi, 1725 01:23:20,819 --> 01:23:23,610 di mana setelah Anda mulai untuk mengambil untuk diberikan, OK, saya punya itu-- ada 1726 01:23:23,610 --> 01:23:26,680 memori fisik, OK, mendapatkannya, setiap lokasi fisik memiliki alamat, 1727 01:23:26,680 --> 01:23:29,910 OK, saya mendapatkannya, saya dapat mewakili alamat tersebut sebagai arrows-- 1728 01:23:29,910 --> 01:23:34,650 Anda dapat dengan cepat mulai memiliki percakapan yang lebih canggih yang 1729 01:23:34,650 --> 01:23:38,360 pada akhirnya tampaknya akan memungkinkan kita untuk memecahkan masalah seperti mencari 1730 01:23:38,360 --> 01:23:41,620 dan menyortir lebih efektif. 1731 01:23:41,620 --> 01:23:44,190 Dan yakinlah, too-- karena saya pikir ini 1732 01:23:44,190 --> 01:23:48,700 adalah terdalam kita sudah ke beberapa topik CS ini proper-- kami telah 1733 01:23:48,700 --> 01:23:51,880 dilakukan dalam satu hari dan setengah di ini menunjukkan apa yang mungkin Anda biasanya lakukan lebih 1734 01:23:51,880 --> 01:23:55,520 kursus delapan minggu dalam satu semester. 1735 01:23:55,520 --> 01:23:59,670 >> Pertanyaan ini? 1736 01:23:59,670 --> 01:24:01,100 Tidak? 1737 01:24:01,100 --> 01:24:01,940 Baiklah. 1738 01:24:01,940 --> 01:24:05,610 Nah, kenapa tidak kita berhenti di sana, mulai siang beberapa menit lebih awal, 1739 01:24:05,610 --> 01:24:07,052 melanjutkan hanya sekitar satu jam? 1740 01:24:07,052 --> 01:24:08,760 Dan aku akan berlama-lama untuk sedikit dengan pertanyaan. 1741 01:24:08,760 --> 01:24:11,343 Lalu aku akan harus pergi mengambil beberapa panggilan jika itu OK. 1742 01:24:11,343 --> 01:24:15,000 Aku akan menyalakan musik sementara itu, tapi makan siang harus sekitar sudut. 1743 01:24:15,000 --> 01:24:17,862