1 00:00:00,000 --> 00:00:03,423 >> [MÜZİK OYUN] 2 00:00:03,423 --> 00:00:05,380 3 00:00:05,380 --> 00:00:08,210 >> ANDI PENG: bölümün 6. haftada hoş geldiniz. 4 00:00:08,210 --> 00:00:11,620 Biz bizim standart sapma Salı bölüm süresi 5 00:00:11,620 --> 00:00:14,130 bu güzel Pazar sabahı öğleden sonra. 6 00:00:14,130 --> 00:00:17,330 Herkes için teşekkür ederiz o Bugün, fakat beni ciddiye katıldı 7 00:00:17,330 --> 00:00:18,170 alkış yuvarlak. 8 00:00:18,170 --> 00:00:20,600 >> Bu oldukça büyük bir çaba. 9 00:00:20,600 --> 00:00:23,600 Neredeyse bile did not make it zaman içinde, ama Tamam oldu. 10 00:00:23,600 --> 00:00:27,520 Bu yüzden sana bu hepimiz biliyoruz Sadece sınav için yaptık. 11 00:00:27,520 --> 00:00:30,370 Her şeyden önce, hoş geldiniz Bunun flip tarafında. 12 00:00:30,370 --> 00:00:32,917 >> İkincisi, biz bunun hakkında konuşacağım. 13 00:00:32,917 --> 00:00:34,000 Biz sınav hakkında konuşacağım. 14 00:00:34,000 --> 00:00:35,700 Biz nasıl bahsedeceğiz Sınıfta yapıyoruz. 15 00:00:35,700 --> 00:00:36,550 İyi olacaksın. 16 00:00:36,550 --> 00:00:39,080 Ben senin sınavlar için var Burada sonunda sen, 17 00:00:39,080 --> 00:00:42,120 böylece siz almak istiyorsanız a, ona tamamen iyi bak. 18 00:00:42,120 --> 00:00:46,590 >> Yani çabuk, başlamadan önce aşağıdaki gibi bugün gündem. 19 00:00:46,590 --> 00:00:48,430 Gördüğünüz gibi, biz konum temelde hızlı pişirim 20 00:00:48,430 --> 00:00:52,120 veri yapılarının bir sürü ile Gerçekten, gerçekten, gerçekten hızlı. 21 00:00:52,120 --> 00:00:54,380 Gibi Yani, bu olmayacak Süper interaktif bugün. 22 00:00:54,380 --> 00:00:59,620 Bu sadece bana biraz bağırarak olacak şeyler ve ben sizi şaşırtmak eğer, 23 00:00:59,620 --> 00:01:02,680 Çok hızlı gidiyorsam, bana haber ver. 24 00:01:02,680 --> 00:01:05,200 Onlar sadece çeşitli veri konum yapıları ve bir parçası olarak 25 00:01:05,200 --> 00:01:07,070 Bu için pset arasında Yaklaşan hafta, olacak 26 00:01:07,070 --> 00:01:10,340 Bunlardan birini uygulamak için istenir, Belki de, iki tanesi them-- iki 27 00:01:10,340 --> 00:01:12,319 senin pset içinde. 28 00:01:12,319 --> 00:01:14,610 Tamam, bu yüzden sadece gidiyorum Bazı duyurular ile başlar. 29 00:01:14,610 --> 00:01:19,070 Biz yığınlar ve daha sıralarında üzerinden gidersiniz Biz sınav öncesi ne yaptığını daha derinlik. 30 00:01:19,070 --> 00:01:20,990 Biz gidip bağlantılı olacak Yine, bir kez daha listelemek 31 00:01:20,990 --> 00:01:23,899 daha derinlemesine daha fazla ne Biz sınav öncesi vardı. 32 00:01:23,899 --> 00:01:26,440 Ve sonra karma bahsedeceğiz tablolar, ağaçlar ve çalışır, hangi 33 00:01:26,440 --> 00:01:28,890 Tüm pset için oldukça gereklidir. 34 00:01:28,890 --> 00:01:32,925 Ve sonra bazı üzerinden gidersiniz pset5 için yararlı ipuçları. 35 00:01:32,925 --> 00:01:37,360 >> Tamam, bu nedenle sınav 0. 36 00:01:37,360 --> 00:01:41,090 Ortalama% 58 idi. 37 00:01:41,090 --> 00:01:45,370 Bu çok düşük ve bu yüzden hepiniz uygun çok iyi yaptı 38 00:01:45,370 --> 00:01:46,510 Bununla. 39 00:01:46,510 --> 00:01:49,970 >> Sen eğer Hemen hemen, başparmak kuralı olduğunu ortalamanın bir standart sapma olan 40 00:01:49,970 --> 00:01:52,990 biz daha az konum beri özellikle rahat bölüm, tamamen iyiyiz. 41 00:01:52,990 --> 00:01:54,120 Sen yoldasın. 42 00:01:54,120 --> 00:01:55,190 Hayat güzeldir. 43 00:01:55,190 --> 00:01:58,952 >> Ben o düşünmek korkutucu olduğunu biliyorum Ben bu quiz bir% 40 gibi aldım. 44 00:01:58,952 --> 00:02:00,160 Ben bu sınıfı başarısız gidiyorum. 45 00:02:00,160 --> 00:02:02,243 Sana söz veriyorum, sen değilsin sınıf başarısız olacak. 46 00:02:02,243 --> 00:02:03,680 Tamamen iyisin. 47 00:02:03,680 --> 00:02:06,850 >> Üzerinde var kim o sizin için Ortalama etkileyici, etkileyici, 48 00:02:06,850 --> 00:02:08,780 gibi ciddi aferin. 49 00:02:08,780 --> 00:02:09,689 Yanımda onları var. 50 00:02:09,689 --> 00:02:11,730 Onları gelip çekinmeyin bölümün sonunda. 51 00:02:11,730 --> 00:02:14,520 Eğer varsa bana bildirin konular, onlarla sorular. 52 00:02:14,520 --> 00:02:17,204 Biz puanınızı kadar eklerseniz Yanlış, lütfen bize bildirin. 53 00:02:17,204 --> 00:02:21,240 >> Tamam, pset5 yüzden, bu gerçekten anlamda Yale için garip bir hafta 54 00:02:21,240 --> 00:02:24,240 Bizim pset bağlı olduğu Dahil olmak üzere öğle saatlerinde Çarşamba 55 00:02:24,240 --> 00:02:27,317 Geç bir gün, bu yüzden aslında öğle saatlerinde Salı teorik nedeniyle. 56 00:02:27,317 --> 00:02:29,150 Muhtemelen hiç kimse bitmiş öğle saatlerinde Salı günü de. 57 00:02:29,150 --> 00:02:30,830 Bu tamamen iyi. 58 00:02:30,830 --> 00:02:33,700 Biz ofis saatleri için gidiyoruz Bu gece aynı zamanda Pazartesi gecesi. 59 00:02:33,700 --> 00:02:36,810 Ve tüm bölümleri bu hafta olacak aslında atölye haline, 60 00:02:36,810 --> 00:02:38,800 bu yüzden pop çekinmeyin İstediğiniz bölüm, 61 00:02:38,800 --> 00:02:42,810 ve onlar tür mini pset olacak Bu konuda yardım için atölyeler. 62 00:02:42,810 --> 00:02:45,620 Böylece örneğin, bu tek bölümdür nerede malzeme öğretim ediyoruz. 63 00:02:45,620 --> 00:02:49,220 Tüm diğer bölümler odaklama olacak münhasıran pset için yardımına. 64 00:02:49,220 --> 00:02:50,146 Evet? 65 00:02:50,146 --> 00:02:52,000 >> HEDEF KİTLE: Nerede çalışma saatleri nelerdir? 66 00:02:52,000 --> 00:02:56,120 >> ANDI PENG: Ofis saatleri oh iyi bir soru geceden. 67 00:02:56,120 --> 00:03:00,580 Bence çalışma saatleri gece Teal ya Commons altındadır. 68 00:03:00,580 --> 00:03:02,984 Online CS50 kontrol edin ve ofis saatleri gitmek 69 00:03:02,984 --> 00:03:05,650 Bir zamanlama olması gerektiğini Bunların hepsi size söyler. 70 00:03:05,650 --> 00:03:07,954 >> Bu gece ya biliyorum ya da yarın teal olduğu 71 00:03:07,954 --> 00:03:10,120 ve ben olabilir düşünüyorum Geçen gece için commons. 72 00:03:10,120 --> 00:03:11,020 Emin değilim. 73 00:03:11,020 --> 00:03:11,700 İyi soru. 74 00:03:11,700 --> 00:03:14,430 CS50 kontrol edin. 75 00:03:14,430 --> 00:03:18,780 >> Ilgili Serin, herhangi bir sorunuz Üç gün gibi gelecek için zamanlama? 76 00:03:18,780 --> 00:03:21,690 Ben David gibi adamlar söz Bu tepenin üst olduğunu söyledi. 77 00:03:21,690 --> 00:03:23,050 Sizler neredeyse vardır. 78 00:03:23,050 --> 00:03:24,644 Sadece üç gün daha. 79 00:03:24,644 --> 00:03:26,310 Oraya, ve sonra hepimiz aşağı geleceğiz. 80 00:03:26,310 --> 00:03:28,114 Biz güzel bir CS-serbest mola olacak. 81 00:03:28,114 --> 00:03:28,780 Tekrar hoş geldin. 82 00:03:28,780 --> 00:03:30,779 Biz web dalmak programlama ve geliştirme, 83 00:03:30,779 --> 00:03:35,150 çok eğlenceli şeyler karşılaştırıldığında Diğer psets bazı. 84 00:03:35,150 --> 00:03:37,974 Ve bu soğuk olacak ve Biz eğlenceli olacak. 85 00:03:37,974 --> 00:03:38,890 Biz daha fazla şeker gerekecek. 86 00:03:38,890 --> 00:03:39,730 Şeker için özür dilerim. 87 00:03:39,730 --> 00:03:40,945 Ben şeker unuttum. 88 00:03:40,945 --> 00:03:43,310 Bu kaba bir sabah oldu. 89 00:03:43,310 --> 00:03:46,340 Yani siz, neredeyse orada ve ben sizlerle gurur duyuyorum. 90 00:03:46,340 --> 00:03:49,570 >> Tamam, bu yüzden yığınları. 91 00:03:49,570 --> 00:03:53,331 Kim Jack ilgili soruyu sevdim ve sınavda onun giyim? 92 00:03:53,331 --> 00:03:53,830 Hiç kimse? 93 00:03:53,830 --> 00:03:56,500 Tamam sorun değil. 94 00:03:56,500 --> 00:04:00,200 >> Yani aslında olabildiğince Resmi Jack, burada bu adam, 95 00:04:00,200 --> 00:04:03,350 giysi almak için seviyor yığının en dışında, 96 00:04:03,350 --> 00:04:05,750 ve o üzerine geri koyar kendisinden sonra yığını bitti. 97 00:04:05,750 --> 00:04:07,600 Yani bu şekilde, o asla almak gibi görünüyor 98 00:04:07,600 --> 00:04:10,090 tabanına Onun giyim yığını. 99 00:04:10,090 --> 00:04:12,600 Yani bu tür açıklar temel veri yapısı 100 00:04:12,600 --> 00:04:16,610 Bir yığın uygulanmaktadır nasıl. 101 00:04:16,610 --> 00:04:20,060 >> Esasen, bir düşün nesnelerinin herhangi yığını olarak yığını 102 00:04:20,060 --> 00:04:24,900 Eğer tepesine şeyler koymak, ve nerede sonra üst onları dışarı pop. 103 00:04:24,900 --> 00:04:28,600 Yani LIFO biz gibi kısaltma Son In First Out use-- için. 104 00:04:28,600 --> 00:04:32,480 Ve böylece üstüne de son Yığın çıkar ilk biridir. 105 00:04:32,480 --> 00:04:34,260 Ve böylece iki terim Biz ilişkilendirmek istiyorum 106 00:04:34,260 --> 00:04:36,190 Bununla push ve pop denir. 107 00:04:36,190 --> 00:04:39,790 Ne zaman üzerine bir şeyler itmek yığını ve geri pop. 108 00:04:39,790 --> 00:04:43,422 >> Ve bu yüzden bu bir tür olduğunu tahmin o sizin için soyut bir kavram 109 00:04:43,422 --> 00:04:45,630 Kim bir gibi görmek istiyorum Bu gerçek uygulaması 110 00:04:45,630 --> 00:04:46,740 Gerçek dünyada. 111 00:04:46,740 --> 00:04:50,170 Kaçınız bir kompozisyon yazdım Belki bir saat gibi, nedeniyle önce 112 00:04:50,170 --> 00:04:54,510 ve yanlışlıkla silinen büyük yanlışlıkla gibi o yığın? 113 00:04:54,510 --> 00:04:58,560 Ve sonra ne kontrol yapmak Biz geri koymak için kullanabilirsiniz? 114 00:04:58,560 --> 00:05:00,030 Kontrol-Z, tamam mı? 115 00:05:00,030 --> 00:05:03,640 Kontrol-Z, bu kez miktarı Kontrol-Z hayatımı kurtardı ki, 116 00:05:03,640 --> 00:05:08,820 Her zaman kıçımı kurtardı Bu bir yığın aracılığıyla uygulanmaktadır oluyor. 117 00:05:08,820 --> 00:05:13,020 >> Esasen tüm bilgiler Bu, Word belgenizi üzerinde bulunuyor 118 00:05:13,020 --> 00:05:15,080 o itti ve irade attı alır. 119 00:05:15,080 --> 00:05:19,460 Ve böylece esasen zaman sizi bir şey silmek, yukarı geri pop. 120 00:05:19,460 --> 00:05:22,820 Ve sonra tekrar ihtiyacınız varsa, size Control-C ne olduğu, itin. 121 00:05:22,820 --> 00:05:26,770 Ve böylece gerçek dünya fonksiyonu ne kadar basit veri yapısının 122 00:05:26,770 --> 00:05:28,690 günlük hayatınızda yardımcı olabilir. 123 00:05:28,690 --> 00:05:31,710 124 00:05:31,710 --> 00:05:40,150 >> Bu yüzden, bir yapı yoludur biz aslında bir yığın oluşturun. 125 00:05:40,150 --> 00:05:44,720 Daha sonra struct tanımlamak yazın ve biz alt yığını diyoruz. 126 00:05:44,720 --> 00:05:47,440 Ve yığınının içinde, iki parametre vardır 127 00:05:47,440 --> 00:05:51,580 Biz esas olarak işleyebilirsiniz bu yüzden Char yıldız dizeleri kapasitesine sahiptir. 128 00:05:51,580 --> 00:05:55,150 >> O yapıyor Tüm bu bir dizi yaratıyor 129 00:05:55,150 --> 00:05:58,835 Biz ne istersen saklayabilir hangi biz onun kapasitesini belirleyebilir. 130 00:05:58,835 --> 00:06:01,990 Kapasite sadece maksimum miktarı mı öğeleri bu diziye koyabilirsiniz. 131 00:06:01,990 --> 00:06:05,660 int boyutu tutan counter Kaç öğelerin iz şu anda 132 00:06:05,660 --> 00:06:07,850 yığınında. 133 00:06:07,850 --> 00:06:11,860 Öyleyse biz, A, takip edebilirsiniz hem gerçek yığın ne kadar büyük, 134 00:06:11,860 --> 00:06:14,850 ve A, B, nasıl yığının kadar biz istemiyoruz çünkü biz doldurdu 135 00:06:14,850 --> 00:06:18,800 Bizim kapasitemiz ne üzerinde taşma. 136 00:06:18,800 --> 00:06:24,340 >> Örneğin, bu güzel yüzden Soru senin sınav oldu. 137 00:06:24,340 --> 00:06:28,160 Esasen nasıl itmek yapmak Bir yığının en üstüne. 138 00:06:28,160 --> 00:06:28,830 Oldukça basit. 139 00:06:28,830 --> 00:06:30,621 Bunu bakarsanız, Bu doğru yürüyeceğiz. 140 00:06:30,621 --> 00:06:32,640 [Duyulamaz] size-- ise ne zaman, hatırlıyorum 141 00:06:32,640 --> 00:06:35,300 Herhangi bir erişmek istiyorsanız bir yapı içinde parametre, 142 00:06:35,300 --> 00:06:40,320 Eğer struct.parameter adını yapın. 143 00:06:40,320 --> 00:06:42,720 >> Bu durumda, s Bizim yığının adı. 144 00:06:42,720 --> 00:06:46,230 Biz boyutunu erişmek istiyorsanız o, bu yüzden s.size yapmak. 145 00:06:46,230 --> 00:06:50,280 Boyutu değil Yani sürece kapasitesi ya da uzun eşit 146 00:06:50,280 --> 00:06:52,940 o kapasitesinden daha az olduğu gibi, ya burada çalışacak. 147 00:06:52,940 --> 00:06:57,180 >> Sen içini erişmek istiyorsanız destenizin, s.strings yüzden, 148 00:06:57,180 --> 00:07:00,790 ve bu yeni numara koymak için gidiyoruz Orada eklemek istediğiniz. 149 00:07:00,790 --> 00:07:05,030 Sadece biz isteyeceksiniz diyelim yığına int n takın, 150 00:07:05,030 --> 00:07:08,905 biz s.strings yapabiliriz parantez, s.size n eşittir. 151 00:07:08,905 --> 00:07:11,030 Boyut nerede Çünkü Şu anda, yığında 152 00:07:11,030 --> 00:07:14,590 Biz itmek için gidiyoruz o, biz sadece erişim 153 00:07:14,590 --> 00:07:17,370 boyutu her yerde, Yığının mevcut dolgunluk, 154 00:07:17,370 --> 00:07:21,729 ve biz onun üzerine int n itin. 155 00:07:21,729 --> 00:07:24,770 Ve sonra biz emin olmak istiyorum daha da, n boyutunu artırma konum 156 00:07:24,770 --> 00:07:27,436 biz ettik ve bu yüzden takip edebilirsiniz yığına ekstra bir şey eklendi. 157 00:07:27,436 --> 00:07:29,660 Şimdi daha büyük bir boyutu var. 158 00:07:29,660 --> 00:07:33,196 Bu burada mantıklı mı Herkes, ne mantıksal çalışıyor? 159 00:07:33,196 --> 00:07:34,160 Bu tür hızlı oldu. 160 00:07:34,160 --> 00:07:39,535 161 00:07:39,535 --> 00:07:42,160 HEDEF KİTLE: Eğer üzerine gidebilir miyim s.stringss.strings [s.size] Yine? 162 00:07:42,160 --> 00:07:45,808 ANDI PENG: Tabii, yani ne yapar bize vermek şu anda s.size? 163 00:07:45,808 --> 00:07:47,440 HEDEF KİTLE: Bu geçerli boyutu var. 164 00:07:47,440 --> 00:07:50,890 ANDI PENG: Kesinlikle, bu yüzden bizim boyut olan akım indeksi, 165 00:07:50,890 --> 00:07:57,780 ve bu yüzden yeni bir tamsayı koymak istiyorum Biz s.size eklemek istediğiniz. 166 00:07:57,780 --> 00:07:58,760 bu mantıklı mı? 167 00:07:58,760 --> 00:08:01,110 S.strings için, tüm bu olan dizinin adıdır. 168 00:08:01,110 --> 00:08:03,510 O Tüm erişen olduğunu Bizim yapı içinde dizi, 169 00:08:03,510 --> 00:08:06,030 ve bu yüzden isterseniz Bu dizine n koyun, 170 00:08:06,030 --> 00:08:09,651 biz sadece erişebilirsiniz kullanarak parantez s.size. 171 00:08:09,651 --> 00:08:10,150 Güzel. 172 00:08:10,150 --> 00:08:13,580 173 00:08:13,580 --> 00:08:18,916 >> Pekala, pop, ben onu pseudocode Sizinle, ancak benzer kavram için. 174 00:08:18,916 --> 00:08:19,790 bu mantıklı mı? 175 00:08:19,790 --> 00:08:22,310 Boyutu büyük olduğu takdirde Daha sonra sıfır, daha sen 176 00:08:22,310 --> 00:08:25,350 Eğer bir şey almak istiyorum biliyor dışarı boyutu değil çünkü eğer 177 00:08:25,350 --> 00:08:27,620 sıfırdan büyük, o zaman yığınında bir şey yok. 178 00:08:27,620 --> 00:08:29,840 >> Yani sadece çalıştırmak istediğiniz Bu kod, sadece can 179 00:08:29,840 --> 00:08:32,320 pop şey varsa pop. 180 00:08:32,320 --> 00:08:35,830 Boyutu büyükse yüzden 0'dan, biz eksi boyutu. 181 00:08:35,830 --> 00:08:40,020 Biz boyutunu azaltma ve daha sonra iade Çünkü bunun içinde ne olursa olsun 182 00:08:40,020 --> 00:08:42,710 haşhaş, biz istiyoruz depolanır ne olursa olsun erişim 183 00:08:42,710 --> 00:08:45,694 yığının üst endekste. 184 00:08:45,694 --> 00:08:46,610 Her şey mantıklı? 185 00:08:46,610 --> 00:08:49,693 Yaptığım Eğer siz, bu yazmak Siz bunu yazmak mümkün olurdu? 186 00:08:49,693 --> 00:08:52,029 187 00:08:52,029 --> 00:08:53,570 Tamam, siz onunla oynayabilir. 188 00:08:53,570 --> 00:08:55,252 Endişeye gerek yok bunu alamadım eğer. 189 00:08:55,252 --> 00:08:57,460 Biz kod zamanımız yok dışarı bugün ettik çünkü 190 00:08:57,460 --> 00:08:59,959 Bu yapıların bir sürü var geçmesi, ama aslında için 191 00:08:59,959 --> 00:09:02,214 pseudocode, çok, çok benzer itmek. 192 00:09:02,214 --> 00:09:03,380 Sadece mantık birlikte izleyin. 193 00:09:03,380 --> 00:09:06,092 Tüm erişen emin olun doğru yapı özellikleri. 194 00:09:06,092 --> 00:09:06,574 Evet? 195 00:09:06,574 --> 00:09:09,282 >> HEDEF KİTLE: Will bu slaytlar ve Bu her şeyi yukarı bugün-ish olacak? 196 00:09:09,282 --> 00:09:11,586 ANDI PENG: Her zaman, evet. 197 00:09:11,586 --> 00:09:13,710 Ben koymak için denemek için gidiyorum Bu kadar sonra bir saat gibi. 198 00:09:13,710 --> 00:09:16,626 David'i e-posta göndereceğiz, David çalışacağız Bu bir saat sonra gibi koyun. 199 00:09:16,626 --> 00:09:20,040 200 00:09:20,040 --> 00:09:25,470 >> Tamam, öyleyse biz bu diğer taşınmak güzel veri yapısı bir kuyruk çağırdı. 201 00:09:25,470 --> 00:09:30,140 Siz burada görebileceğiniz gibi, bir Kuyruk, aramızda İngilizler için, 202 00:09:30,140 --> 00:09:32,010 o bütün bir çizgidir. 203 00:09:32,010 --> 00:09:34,680 Yani aykırı Ne Eğer, bir yığın olduğunu düşünüyorum 204 00:09:34,680 --> 00:09:37,750 bir sıra tam ne olduğunu mantıksal Ne olduğunu düşünüyorum. 205 00:09:37,750 --> 00:09:41,914 Bu, FIFO kurallarına göre düzenlenen oluyor Hangi İlk olarak, Birinci Out. 206 00:09:41,914 --> 00:09:43,705 İlk iseniz sıralı bir, sen 207 00:09:43,705 --> 00:09:46,230 Bunlardan ilki çizgi çıkıyor. 208 00:09:46,230 --> 00:09:49,680 >> Yani biz bu aramak için ne gibi dequeueing ve kuyruğa alınmasından olduğunu. 209 00:09:49,680 --> 00:09:52,380 Biz bir şey eklemek istiyorsanız Bizim kuyruğa biz enqueue. 210 00:09:52,380 --> 00:09:55,690 Biz isterseniz sıradan çıkarma, ya da almak bir şey uzakta, biz sıradan çıkarma. 211 00:09:55,690 --> 00:10:03,350 >> Biz tür konum Yani aynı anlamda Sabit boyutlu unsurları oluştururken biz 212 00:10:03,350 --> 00:10:06,500 Belirli saklayabilirsiniz şeyler, ama biz de can 213 00:10:06,500 --> 00:10:10,100 biz yerleştirerek nereye değiştirmek bunların içinde parametreler 214 00:10:10,100 --> 00:10:13,140 ne türüne göre işlevselliği, biz istiyoruz. 215 00:10:13,140 --> 00:10:16,700 Yığınlar Böylece, son aranan biri, N ilki dışında olmak. 216 00:10:16,700 --> 00:10:19,800 Kuyruk ilk şey istediğim dışarı ilk şey olması. 217 00:10:19,800 --> 00:10:22,510 218 00:10:22,510 --> 00:10:26,710 >> Yapı tipi Yani Gördüğünüz gibi, tanımlar, 219 00:10:26,710 --> 00:10:29,470 o biraz farklı yığını neydi 220 00:10:29,470 --> 00:10:33,120 Sadece biz tutmak zorunda değil, çünkü boyutu şu anda nerede parça, 221 00:10:33,120 --> 00:10:37,420 biz de başın izlemek isteyen yanı sıra nerede biz şu anda. 222 00:10:37,420 --> 00:10:39,580 Yani kolay olduğunu düşünüyorum Ben bu kadar çizerseniz. 223 00:10:39,580 --> 00:10:53,270 Yani biz bir sıra var düşünelim, bu yüzden başı sağ burada diyelim. 224 00:10:53,270 --> 00:10:55,811 225 00:10:55,811 --> 00:10:58,310 Hat başı, haydi Sadece, orada şu anda söylemek 226 00:10:58,310 --> 00:11:01,809 ve biz eklemek istediğiniz kuyruğuna bir şey. 227 00:11:01,809 --> 00:11:04,350 Ben esasen boyutunu arayacağım kuyruk aynı şey, 228 00:11:04,350 --> 00:11:06,314 senin kuyruk olduğu her yerde sonu. 229 00:11:06,314 --> 00:11:07,730 Sadece boyutu tam burada diyelim. 230 00:11:07,730 --> 00:11:14,380 231 00:11:14,380 --> 00:11:18,400 >> Peki nasıl bir fizibil yok bir sıra içine bir şey eklemek? 232 00:11:18,400 --> 00:11:21,000 233 00:11:21,000 --> 00:11:24,130 Ne endeks biz yerleştirmek istiyoruz nereye eklemek istiyoruz. 234 00:11:24,130 --> 00:11:29,320 Bu başlangıcı ise senin Sıraya ve bu onun sonu 235 00:11:29,320 --> 00:11:31,860 ya da boyutu, nerede biz yapmak Bir sonraki nesne eklemek ister misin? 236 00:11:31,860 --> 00:11:32,920 >> HEDEF KİTLE: [duyulamaz] 237 00:11:32,920 --> 00:11:35,920 ANDI PENG: Kesinlikle, eklemek istediğiniz bağlı o bunu yazdım. 238 00:11:35,920 --> 00:11:37,840 Ya bu boş ya da boş. 239 00:11:37,840 --> 00:11:42,630 Yani muhtemelen eklemek istediğiniz Çünkü burada boyut o-- ise 240 00:11:42,630 --> 00:11:50,540 Bunların hepsi doluysa, istediğiniz Doğru, burada eklemek için? 241 00:11:50,540 --> 00:11:57,150 >> Ve böylece, çok, çok süre Basit, değil oldukça her zaman doğru 242 00:11:57,150 --> 00:12:00,690 Ana fark nedeniyle Bir kuyruk ve bir yığın arasındaki 243 00:12:00,690 --> 00:12:04,350 Bu kuyruk can olduğunu aslında manipüle edilebilir 244 00:12:04,350 --> 00:12:06,980 Böylece kafa değişiklikleri İstediğiniz yere bağlı 245 00:12:06,980 --> 00:12:08,650 senin işaretin başlangıcı başlatın. 246 00:12:08,650 --> 00:12:11,900 Ve sonuç olarak, senin kuyruk Ayrıca değişecek. 247 00:12:11,900 --> 00:12:14,770 Ve böylece bir göz atın Şu anda bu kodu. 248 00:12:14,770 --> 00:12:18,620 Siz de istendi gibi enqueue, sınavda yazmak. 249 00:12:18,620 --> 00:12:22,580 Belki biz neden konuşmak edeceğiz Cevap ne oldu oldu. 250 00:12:22,580 --> 00:12:26,790 >> Oldukça, biri bu çizgiyi uygun olamazdı kod ama aslında bu parça 251 00:12:26,790 --> 00:12:29,030 bir satırda olmalıdır. 252 00:12:29,030 --> 00:12:30,140 30 saniye gibi harcayın. 253 00:12:30,140 --> 00:12:33,000 Bir göz atın ve neden görmek işte bu yoldur. 254 00:12:33,000 --> 00:12:50,030 255 00:12:50,030 --> 00:12:55,420 >> Çok, çok benzer yapı, çok, çok Önceki benzer yapı 256 00:12:55,420 --> 00:12:58,090 belki hariç yığını bir satır kod. 257 00:12:58,090 --> 00:13:01,190 Ve bir satır kod olduğunu özelliğe belirler. 258 00:13:01,190 --> 00:13:03,900 Ve gerçekten ayıran bir yığın bir kuyruk. 259 00:13:03,900 --> 00:13:18,510 260 00:13:18,510 --> 00:13:22,010 >> Herkes bir bıçak almak istiyorum Eğer ettik niye açıklayan 261 00:13:22,010 --> 00:13:24,980 Burada bu karmaşık bir şey var mı? 262 00:13:24,980 --> 00:13:27,845 Biz dönüşünü görmek için bizim harika arkadaşım modülü. 263 00:13:27,845 --> 00:13:31,020 Siz yakında gelecek gibi programlama tanımak, 264 00:13:31,020 --> 00:13:34,910 Neredeyse her zaman sen lüzum bir şey bir şey sarmak için, 265 00:13:34,910 --> 00:13:36,850 modülü bunu yapmak için bir yol olacak. 266 00:13:36,850 --> 00:13:40,510 Yani bilerek, kimse istemez kod bu hattı açıklayan denemek için? 267 00:13:40,510 --> 00:13:44,060 268 00:13:44,060 --> 00:13:47,507 Evet, bütün cevaplar Kabul ve hoş geldiniz. 269 00:13:47,507 --> 00:13:48,840 HEDEF KİTLE: Benimle mi konuşuyorsun? 270 00:13:48,840 --> 00:13:49,506 ANDI PENG: Evet. 271 00:13:49,506 --> 00:13:56,200 HEDEF KİTLE: Oh, hayır üzgünüm. 272 00:13:56,200 --> 00:14:00,250 ANDI PENG: Tamam, atalım Bu kod üzerinden yürümek. 273 00:14:00,250 --> 00:14:03,642 Peki ne zaman çalışıyorsun bir sıra üzerine bir şey eklemek, 274 00:14:03,642 --> 00:14:08,510 Kafa olur o güzel durumda Burada olmak, bu bizim için çok kolay 275 00:14:08,510 --> 00:14:10,960 Sadece sonuna gitmek için Doğru bir şey eklemek? 276 00:14:10,960 --> 00:14:14,690 Ama sıranın tüm noktasıdır Bu can aslında dinamik kafa 277 00:14:14,690 --> 00:14:17,280 yere bağlı olarak değişiklik biz Bizim q başlangıcı olmak istiyorum, 278 00:14:17,280 --> 00:14:19,880 ve, kuyruk gibi Ayrıca değişecek. 279 00:14:19,880 --> 00:14:31,100 >> Ve böylece bu olmadığını hayal Sıraya değil, bu kuyruk oldu. 280 00:14:31,100 --> 00:14:37,900 281 00:14:37,900 --> 00:14:39,330 Kafası tam burada diyelim. 282 00:14:39,330 --> 00:14:54,900 283 00:14:54,900 --> 00:14:56,980 En bizim kuyruk bu gibi görünüyordu diyelim. 284 00:14:56,980 --> 00:15:00,190 Nereye kaydırmak isteseydim hattın başlangıcı olan 285 00:15:00,190 --> 00:15:03,400 en biz başını değiştirdi diyelim Bu şekilde ve burada boyutları. 286 00:15:03,400 --> 00:15:07,100 >> Şimdi bir şey eklemek istiyorum Bu kuyruk, ama siz gördüğünüz gibi, 287 00:15:07,100 --> 00:15:11,150 Sadece kadar basit değil boyutu sonra ne olursa olsun eklemek 288 00:15:11,150 --> 00:15:13,630 o zaman tükendi çünkü Bizim asıl dizinin sınırları. 289 00:15:13,630 --> 00:15:16,190 Biz gerçekten eklemek istediğiniz burada. 290 00:15:16,190 --> 00:15:18,610 Bu bir kuyruğa güzelliği Bu görsel, bize olan 291 00:15:18,610 --> 00:15:22,380 çizgi böyle gider gibi görünüyor ancak veri yapısında depolanan zaman 292 00:15:22,380 --> 00:15:29,370 Onlar bir döngü gibi vermek. 293 00:15:29,370 --> 00:15:32,360 Bu tür sarar ön aynı yolu 294 00:15:32,360 --> 00:15:34,780 Bir satır da sarın ki etrafında her yerde sizi bağlı 295 00:15:34,780 --> 00:15:36,279 olmak üzere satırın başına istiyoruz. 296 00:15:36,279 --> 00:15:38,630 Ve böylece biz alırsak Buraya bak, diyelim 297 00:15:38,630 --> 00:15:40,880 Biz yaratmak istedik ki Fonksiyon enqueue denir. 298 00:15:40,880 --> 00:15:43,980 Biz o q içine int n eklemek istedim. 299 00:15:43,980 --> 00:15:49,250 Q.size bizim veri olduğunu arayacağım q-- Eğer Bizim queue.size yapmazsa structure-- 300 00:15:49,250 --> 00:15:52,520 kapasite veya eğer eşit bu kapasitenin daha az var 301 00:15:52,520 --> 00:15:55,120 q.strings bizim q içinde dizidir. 302 00:15:55,120 --> 00:15:58,380 Biz ayarlamak için gidiyoruz Bu q.heads eşit, 303 00:15:58,380 --> 00:16:02,730 Hangi burada, artı q.size kapasitesi ile modülü olan 304 00:16:02,730 --> 00:16:04,290 Buralarda bize geri sarın. 305 00:16:04,290 --> 00:16:08,040 >> Bu örnek, endekste Yani Başın sağ, 1 mi? 306 00:16:08,040 --> 00:16:11,480 Boyutta endeksi 0, 1, 2, 3, 4'tür. 307 00:16:11,480 --> 00:16:19,500 Yani biz 1 artı 4 modülü yapabilirsiniz 5 bizim kapasitesi. 308 00:16:19,500 --> 00:16:20,920 Ne bizi veriyor? 309 00:16:20,920 --> 00:16:23,270 Indeks nedir bu Bu çıkıyor? 310 00:16:23,270 --> 00:16:24,080 >> HEDEF KİTLE: 0. 311 00:16:24,080 --> 00:16:27,870 >> ANDI'nin PENG: 0, burada Burada olur, 312 00:16:27,870 --> 00:16:30,640 ve bu yüzden mümkün olmak istiyorum Burada eklemek için. 313 00:16:30,640 --> 00:16:34,730 Ve böylece bu denklem burada tür sadece herhangi bir numaraları ile çalışır 314 00:16:34,730 --> 00:16:36,750 yere bağlı olarak sizin Baş ve boyutu vardır. 315 00:16:36,750 --> 00:16:38,541 Ne o biliyorsanız şeyleri bilirsin vardır 316 00:16:38,541 --> 00:16:43,170 Tam olarak eklemek istediğiniz yeri ne olursa olsun kuyrukta peşinde. 317 00:16:43,170 --> 00:16:44,640 Bu herkese mantıklı mı? 318 00:16:44,640 --> 00:16:48,560 >> Ben bir beyin tür biliyorum teaser yana özellikle bu 319 00:16:48,560 --> 00:16:50,512 senin sınav sonrasında geldi. 320 00:16:50,512 --> 00:16:52,220 Ama umarım herkes Şimdi anlayabiliyorum 321 00:16:52,220 --> 00:16:57,800 Neden bu çözüm ya da bu fonksiyonu olan yoldur. 322 00:16:57,800 --> 00:16:59,840 Herkes biraz bu konuda belirsiz? 323 00:16:59,840 --> 00:17:03,471 324 00:17:03,471 --> 00:17:03,970 TAMAM. 325 00:17:03,970 --> 00:17:07,109 326 00:17:07,109 --> 00:17:09,970 >> Ve şimdi, eğer Bu sıradan çıkarma istedi 327 00:17:09,970 --> 00:17:15,240 Bizim baş kayması olacağını nerede Biz sıradan çıkarma olsaydı, çünkü 328 00:17:15,240 --> 00:17:17,030 Biz q ucunu yapmayız. 329 00:17:17,030 --> 00:17:19,130 Biz doğru, baş çıkarmak istiyor? 330 00:17:19,130 --> 00:17:24,260 Bu nedenle sonuç olarak, kafa değişecek, Eğer enqueue zaman neden o olduğunu 331 00:17:24,260 --> 00:17:26,800 Eğer takip etmek lazım nerede başınızı ve boyut 332 00:17:26,800 --> 00:17:29,450 eklemek için muktedir olan doğru pozisyona. 333 00:17:29,450 --> 00:17:32,740 >> Ve böylece sıradan çıkarma yaparken, Ben de bunu Pseudocode. 334 00:17:32,740 --> 00:17:35,480 İstersen çekinmeyin Bu dışarı kodlama girişimi için. 335 00:17:35,480 --> 00:17:36,980 Haklısınız, kafa taşımak istediğiniz? 336 00:17:36,980 --> 00:17:39,320 Ben sıradan çıkarma isteseydim, ben kafa üzerinde hareket edeceklerdi. 337 00:17:39,320 --> 00:17:40,800 Bu kafa olurdu. 338 00:17:40,800 --> 00:17:45,617 >> Ve bizim geçerli boyutu olur çıkarma çünkü biz artık 339 00:17:45,617 --> 00:17:46,950 Dizideki dört element var. 340 00:17:46,950 --> 00:17:51,370 Biz sadece üç ve daha sonra istediğimiz içinde saklanır ne olursa olsun dönmek 341 00:17:51,370 --> 00:17:56,260 Başın bu almak istiyorum çünkü yığına yüzden çok benzer değer dışarı. 342 00:17:56,260 --> 00:17:58,010 Sadece alıyorsun başka bir yerden, 343 00:17:58,010 --> 00:18:01,770 ve size işaretçi atamak zorunda Sonuç olarak farklı bir yere. 344 00:18:01,770 --> 00:18:03,890 Mantıken, herkes takip edin? 345 00:18:03,890 --> 00:18:05,690 Büyük. 346 00:18:05,690 --> 00:18:10,156 >> Tamam, bu yüzden biz biraz konuşacağız bağlantılı listeler hakkında daha derinlemesine 347 00:18:10,156 --> 00:18:13,280 Onlar çok değerli olacak çünkü Bu hafta en seyri sizin için 348 00:18:13,280 --> 00:18:14,964 psets. 349 00:18:14,964 --> 00:18:17,130 Bağlı listeler, olarak siz hepsi vardır, hatırlıyorum 350 00:18:17,130 --> 00:18:22,570 Belirli bir düğüm olan düğümlerin Bir değer ve bir işaretçi hem değerleri 351 00:18:22,570 --> 00:18:26,290 Bu birbirine bağlanmıştır Bu işaretçileri tarafından. 352 00:18:26,290 --> 00:18:29,880 Nasıl Ve böylece yapı Burada bir düğüm biz oluşturmak 353 00:18:29,880 --> 00:18:33,569 olan int n var ne olursa olsun Bir mağaza veya dize n değeri 354 00:18:33,569 --> 00:18:35,610 veya istediğiniz ne olursa olsun karakter yıldız n, diyoruz. 355 00:18:35,610 --> 00:18:41,482 Göstericidir Struct düğüm yıldızı, Her düğüm olmasını istiyorum, 356 00:18:41,482 --> 00:18:43,690 Bunu zorunda gidiyoruz Bir sonraki doğru işaretçi noktası. 357 00:18:43,690 --> 00:18:48,207 358 00:18:48,207 --> 00:18:50,040 Sen başını olacak olan bir bağlantılı liste 359 00:18:50,040 --> 00:18:53,140 geri kalanı için işaret edecek böylece ve benzeri değerler 360 00:18:53,140 --> 00:18:55,290 sonunda sonuna ulaşana kadar. 361 00:18:55,290 --> 00:18:58,040 Ve bu son düğümü adildir bir işaretçi yok olacak. 362 00:18:58,040 --> 00:18:59,952 Bu işaret için gidiyor null, ve o zaman var 363 00:18:59,952 --> 00:19:01,910 Eğer isabet biliyorum Bağlantılı listenin sonunda 364 00:19:01,910 --> 00:19:04,076 zaman son işaretçi bir şey işaret etmiyor. 365 00:19:04,076 --> 00:19:06,670 366 00:19:06,670 --> 00:19:10,990 >> Bu yüzden daha fazla biraz gitmek için gidiyoruz ilgili derinliği nasıl bir olasılıkla olur 367 00:19:10,990 --> 00:19:12,400 Bağlantılı bir liste arayın. 368 00:19:12,400 --> 00:19:15,460 Bazı hatırla Bağlantılı listelerin sakıncaları 369 00:19:15,460 --> 00:19:19,340 aramalar ile ilgili bir dizi ayet. 370 00:19:19,340 --> 00:19:22,565 Bir dizi yapabilirsiniz ikili arama, ancak Neden bir bağlantılı listede bunu yapamam? 371 00:19:22,565 --> 00:19:26,834 372 00:19:26,834 --> 00:19:30,320 >> HEDEF KİTLE: hepsi bağlı Çünkü, ama oldukça nerede bilmiyorum 373 00:19:30,320 --> 00:19:31,330 [Duyulamaz]. 374 00:19:31,330 --> 00:19:34,600 >> ANDI PENG: Evet, aynen öyle hatırlıyorum Bu bir dizi parlak 375 00:19:34,600 --> 00:19:37,190 Biz olmasıydı rasgele erişim belleği nerede 376 00:19:37,190 --> 00:19:41,580 Ben endeks değeri isteseydi Altı, ben sadece endeks altı söyleyebiliriz 377 00:19:41,580 --> 00:19:42,407 Bana o değer vermek. 378 00:19:42,407 --> 00:19:45,240 Diziler sıralanır çünkü Ve bu bir ardışık bellek alanda 379 00:19:45,240 --> 00:19:48,020 tek bir yerde, oysa bağlantılı listeler tür 380 00:19:48,020 --> 00:19:52,820 olan rastgele etrafında serpiştirilmiş ve tek yolu birini bulabilirsiniz 381 00:19:52,820 --> 00:19:56,890 bildiren bir işaretçi aracılığıyla sonraki düğüm nerede adresi. 382 00:19:56,890 --> 00:20:00,290 >> Böylece sonuç olarak, tek yolu Bağlantılı bir liste içinde arama yapmak için 383 00:20:00,290 --> 00:20:01,560 doğrusal arama motorudur. 384 00:20:01,560 --> 00:20:05,890 Ben tam olarak nerede olduğunu bilmiyorum çünkü Bağlantılı listede 12. değerdir 385 00:20:05,890 --> 00:20:08,780 Ben bütününü hareket ettirmek zorunda Bu bağlantılı liste biri 386 00:20:08,780 --> 00:20:12,450 ilk düğümü tırnağa tek, ikinci düğüme üçüncü düğüm, 387 00:20:12,450 --> 00:20:17,690 Sonunda elde edene kadar tüm yol aşağı Ben arıyorum o düğüm olduğu için. 388 00:20:17,690 --> 00:20:22,110 Ve böylece bu anlamda, arama Bağlantılı bir listede her zaman n. 389 00:20:22,110 --> 00:20:23,040 Her zaman n var. 390 00:20:23,040 --> 00:20:25,690 Lineer zaman içinde hep. 391 00:20:25,690 --> 00:20:28,470 >> Ve böylece kod hangi Bunu uygulamak ve bu 392 00:20:28,470 --> 00:20:32,620 Senin beri sizin için biraz yeni adamlar gerçekten hakkında ya da hiç konuşmadık 393 00:20:32,620 --> 00:20:35,000 nasıl görülen göstericiler işaretçileri üzerinden arama, 394 00:20:35,000 --> 00:20:37,670 bu yüzden doğru yürüyeceğiz Bu çok, çok yavaş. 395 00:20:37,670 --> 00:20:40,200 Yani bool arama, sağ, en istediğimiz düşünelim 396 00:20:40,200 --> 00:20:42,820 adında bir işlevi oluşturmak için true döndürür arama 397 00:20:42,820 --> 00:20:46,820 bağlantılı içinde bir değer bulursa listelemek ve aksi takdirde false döndürür. 398 00:20:46,820 --> 00:20:50,030 Düğüm yıldız listesi Şu anda sadece işaretçi 399 00:20:50,030 --> 00:20:52,960 Bağlantılı listedeki ilk öğeye. 400 00:20:52,960 --> 00:20:56,700 int n sen değerdir Bu listede arıyor. 401 00:20:56,700 --> 00:20:58,770 >> Yani düğüm yıldızı işaretçi listesi eşittir. 402 00:20:58,770 --> 00:21:00,970 Yani biz ayarı demektir ve bir işaretçi oluşturma 403 00:21:00,970 --> 00:21:03,592 Listenin içinde ilk düğüme. 404 00:21:03,592 --> 00:21:04,300 Benimle herkes? 405 00:21:04,300 --> 00:21:06,530 Biz gitmek için olsaydı Yani Buraya, ben olurdu 406 00:21:06,530 --> 00:21:13,850 işaret eden bir işaretçi başlatıldı Kafa ne olursa olsun o listesidir. 407 00:21:13,850 --> 00:21:18,600 >> Ve sonra, buraya bir kez olsun işaretçi eşit boş değil ise, 408 00:21:18,600 --> 00:21:22,160 böylece biz hangi döngü geçme sonradan olacak 409 00:21:22,160 --> 00:21:25,940 çünkü ne bizim listesinin geri kalanı işaretçi boş eşittir ne olur? 410 00:21:25,940 --> 00:21:27,550 Biz have-- biliyoruz 411 00:21:27,550 --> 00:21:28,450 >> HEDEF KİTLE: [duyulamaz] 412 00:21:28,450 --> 00:21:31,491 >> ANDI PENG: Kesinlikle, bu yüzden biz biliyoruz biz doğru listenin sonuna ulaştınız? 413 00:21:31,491 --> 00:21:34,470 Buraya geri gitmek, her düğüm bir düğümden diğer işaret edilmelidir 414 00:21:34,470 --> 00:21:36,550 ve benzeri ve benzeri sonunda vurmak kadar 415 00:21:36,550 --> 00:21:41,589 Bağlantılı listenin kuyruk, hangi bir gösterici olduğunu sadece 416 00:21:41,589 --> 00:21:43,130 Hiçbir dışında herhangi bir yerde işaret etmiyor. 417 00:21:43,130 --> 00:21:47,510 Ve böylece temelde biliyor listenizi hala orada olduğunu 418 00:21:47,510 --> 00:21:50,900 işaretçi eşit değildir kadar Boş null eşittir çünkü bir kez, 419 00:21:50,900 --> 00:21:53,310 Eğer daha fazla şeyler olduğunu biliyorum. 420 00:21:53,310 --> 00:21:56,930 >> Yani biz konum hangi döngü Gerçek aramayı zorunda olacak. 421 00:21:56,930 --> 00:22:01,690 Ve pointer-- görmek yaparsanız Orada ok fonksiyonu bu tür? 422 00:22:01,690 --> 00:22:06,930 Yani işaretçi noktaları eğer n, eğer n eşittir n at gösterici, 423 00:22:06,930 --> 00:22:09,180 böylece anlamına eğer sen işaretçi 424 00:22:09,180 --> 00:22:13,420 Her ucunda aramaya düğüm değeri aslında eşittir 425 00:22:13,420 --> 00:22:15,990 Eğer, aradığınız true dönmek istiyorum. 426 00:22:15,990 --> 00:22:19,280 Yani temelde, sen bir düğüm konum eğer , aradığınız değeri vardır 427 00:22:19,280 --> 00:22:23,550 Eğer oldum biliyorum Başarıyla arama yapabilmek. 428 00:22:23,550 --> 00:22:27,150 >> Aksi takdirde, ayarlamak istediğiniz Bir sonraki düğüme için işaretçi. 429 00:22:27,150 --> 00:22:28,850 Burada bu hat yapıyor budur. 430 00:22:28,850 --> 00:22:31,750 Pointer yanındaki işaretçi eşittir. 431 00:22:31,750 --> 00:22:33,360 Bu çalışma nasıl herkes görüyor musun? 432 00:22:33,360 --> 00:22:36,580 >> Ve esasen sen gidiyorsun sadece listenin tamamını travers 433 00:22:36,580 --> 00:22:41,920 işaretçinizi her zaman kadar sıfırlama sonunda listenin sonuna çarptı. 434 00:22:41,920 --> 00:22:45,030 Ve hiç olduğunu biliyoruz Daha fazla düğüm, arama yapmak 435 00:22:45,030 --> 00:22:47,999 ve daha sonra sahte dönebilirsiniz Bildiğiniz çünkü, o kadar iyi, oh, 436 00:22:47,999 --> 00:22:50,540 Ben aramak mümkün oldum eğer Listenin tamamı ile. 437 00:22:50,540 --> 00:22:54,530 Bu örnekte, ben istedim 10 değerine bakmak için, 438 00:22:54,530 --> 00:22:57,250 ve ben başında başlayacak ve Ben, tüm yol aşağı arama 439 00:22:57,250 --> 00:23:00,550 ve ben sonunda bu var olan null işaret eden bir işaretçi, 440 00:23:00,550 --> 00:23:04,415 Ben değil, bok, ben 10 sanırım biliyorum Bu liste onu bulamadım çünkü. 441 00:23:04,415 --> 00:23:06,520 Ve ben listenin sonunda değilim. 442 00:23:06,520 --> 00:23:11,040 Ve bu durumda bildiğiniz Ben return false gidiyorum. 443 00:23:11,040 --> 00:23:12,900 >> Bu biraz için emmek edelim. 444 00:23:12,900 --> 00:23:17,350 Bu güzel olacak senin pset için önemli. 445 00:23:17,350 --> 00:23:21,140 Bunun mantığı, belki de çok basittir sözdizimsel sadece uygulanması. 446 00:23:21,140 --> 00:23:23,365 Siz yapmak istiyorum anlamak emin olun. 447 00:23:23,365 --> 00:23:25,870 448 00:23:25,870 --> 00:23:27,650 Güzel. 449 00:23:27,650 --> 00:23:32,560 >> Tamam, bu yüzden nasıl olurdu Doğru, düğümler ekleyerek, 450 00:23:32,560 --> 00:23:35,380 bir liste halinde Çünkü hatırlıyorum Ne yararları nelerdir 451 00:23:35,380 --> 00:23:39,230 bir bağlantılı liste karşı olan depolama açısından bir dizi? 452 00:23:39,230 --> 00:23:41,110 >> HEDEF KİTLE: Dinamik değil, bu nedenle daha kolay aşağıdaki amaçlara 453 00:23:41,110 --> 00:23:43,180 >> ANDI PENG: Kesinlikle, bu yüzden, dinamik var olan 454 00:23:43,180 --> 00:23:46,880 genişletmek ve daraltmak anlamına gelir Kullanıcının ihtiyaçlarına bağlı. 455 00:23:46,880 --> 00:23:56,570 Ve böylece, bu anlamda biz ihtiyacımız yok Gereksiz bellek atık çünkü ben 456 00:23:56,570 --> 00:24:00,850 Ben istediğim kaç değer bilmiyorsanız saklamak için, bu benim için mantıklı değil 457 00:24:00,850 --> 00:24:04,310 Bir dizi yüzünden oluşturmak için Ben 10 değerlerini depolamak istiyorsanız 458 00:24:04,310 --> 00:24:08,380 ve ben 1000 bir dizi, işte oluşturmak boşa belleğin bir sürü ayrılan. 459 00:24:08,380 --> 00:24:11,180 Biz bağlantılı kullanmak istiyorsanız bu yüzden Liste dinamik muktedir 460 00:24:11,180 --> 00:24:13,860 değiştirmek veya boyutunu küçültmek. 461 00:24:13,860 --> 00:24:17,040 >> Ve böylece ekleme yapar biraz daha karmaşık. 462 00:24:17,040 --> 00:24:20,810 Biz rastgele unsurları erişemiyor yana Biz bir dizi cekti yolu. 463 00:24:20,810 --> 00:24:24,270 Ben bir öğe eklemek istiyorsanız Yedinci dizine, 464 00:24:24,270 --> 00:24:26,930 Ben sadece bunu ekleyebilirsiniz Yedinci dizine. 465 00:24:26,930 --> 00:24:30,020 Bağlı listesinde, öyle değil oldukça kolay çalışmak, 466 00:24:30,020 --> 00:24:34,947 ve bu yüzden eklemek istedim bağlantılı liste burada bir, 467 00:24:34,947 --> 00:24:36,280 görsel, bunu görmek çok kolay. 468 00:24:36,280 --> 00:24:39,363 Biz sadece, orada eklemek istiyorum Sağ listenin başında, 469 00:24:39,363 --> 00:24:40,840 Sağ baş sonra. 470 00:24:40,840 --> 00:24:44,579 >> Ama biz var olan yolu yeniden atamak için işaretçileri biraz kıvrık olan 471 00:24:44,579 --> 00:24:47,620 ya da, mantıksal, o mantıklı ama Eğer buna sahip olduğundan emin olmak istiyorum 472 00:24:47,620 --> 00:24:50,250 Tamamen aşağı çünkü istediğiniz son şey 473 00:24:50,250 --> 00:24:52,990 bir işaretçi yeniden atamak için Burada yapıyoruz yolu. 474 00:24:52,990 --> 00:24:58,170 Eğer inceleyebilirsiniz 1 tırnağa işaretçisi, 475 00:24:58,170 --> 00:25:01,086 daha sonra aniden The tüm Bağlantılı listenin geri kalanı 476 00:25:01,086 --> 00:25:04,680 Eğer aslında çünkü kaybolur Geçici bir şey oluşturulur. 477 00:25:04,680 --> 00:25:06,220 Yani 2'ye işaret ediyor. 478 00:25:06,220 --> 00:25:10,080 Eğer pointer, yeniden atarsanız Listenizdeki geri kalanı tamamen kaybolur. 479 00:25:10,080 --> 00:25:13,310 Yani olmak istiyorum Burada çok dikkatli 480 00:25:13,310 --> 00:25:17,010 İlk atama sizden ne olursa olsun işaretçi 481 00:25:17,010 --> 00:25:20,150 her yerde içine eklemek istediğiniz İstediğiniz ve sonra seni 482 00:25:20,150 --> 00:25:22,710 Listenizdeki geri kalanı inceleyebilirsiniz yapabilirsiniz. 483 00:25:22,710 --> 00:25:25,250 >> Yani bu her yerde için de geçerli Eğer eklemek için çalışıyoruz. 484 00:25:25,250 --> 00:25:27,520 En eklemek istiyorsanız Baş, burada cevap vermek istiyorsanız, 485 00:25:27,520 --> 00:25:29,455 En eklemek istiyorsanız sonunda, iyi, bitiş I 486 00:25:29,455 --> 00:25:30,910 Sanırım sadece olur Hiçbir işaretçi var, ama 487 00:25:30,910 --> 00:25:33,830 Bunu yapmazsanız emin olmak istiyorum Listenizdeki geri kalanını kaybeder. 488 00:25:33,830 --> 00:25:36,640 Her zaman emin olmak istiyorum Yeni düğüm işaret ediyor 489 00:25:36,640 --> 00:25:39,330 ne olursa olsun doğru sen içine eklemek istediğiniz, 490 00:25:39,330 --> 00:25:42,170 ve daha sonra üzerinde zincirleme ekleyebilirsiniz. 491 00:25:42,170 --> 00:25:43,330 Herkes açık? 492 00:25:43,330 --> 00:25:45,427 >> Bu olacak Gerçek konulardan biri. 493 00:25:45,427 --> 00:25:48,010 En önemli konulardan biri Eğer pset üzerinde zorunda gidiyoruz 494 00:25:48,010 --> 00:25:51,340 oluşturmak için denemek için gidiyoruz olduğunu bağlantılı liste ve insert şeyler 495 00:25:51,340 --> 00:25:53,340 ama sonra sadece kaybetmek Bağlantılı listenin geri kalanı. 496 00:25:53,340 --> 00:25:54,900 Ve sizin gibi olmak için gidiyoruz, ben Bu neden oluyor bilmiyorum? 497 00:25:54,900 --> 00:25:58,040 Ve geçmesi için bir ağrı var ve işaretçileri tüm arayın. 498 00:25:58,040 --> 00:26:02,100 >> Ve ben bu pset size garanti, Bu düğümler dışarı yazma ve çizim 499 00:26:02,100 --> 00:26:03,344 çok, çok yararlı olacaktır. 500 00:26:03,344 --> 00:26:06,010 Yani tamamen takip edebilirsiniz Tüm işaretçiler nerede, 501 00:26:06,010 --> 00:26:08,540 ne yanlış gidiyor Tüm düğümler nerede, 502 00:26:08,540 --> 00:26:12,660 erişmek için yapmanız gerekenleri veya eklemek veya silmek veya bunlardan herhangi. 503 00:26:12,660 --> 00:26:14,550 Bu iyi Herkes? 504 00:26:14,550 --> 00:26:15,050 Güzel. 505 00:26:15,050 --> 00:26:19,300 506 00:26:19,300 --> 00:26:22,600 >> Biz koduna bakmak istedim Yani? 507 00:26:22,600 --> 00:26:24,470 Ah, bilmiyorum eğer bu yüzden, Şeyin Tamam görebilirsiniz 508 00:26:24,470 --> 00:26:27,940 üstünde o bütün bir işlevdir İstediğimiz adlı insert 509 00:26:27,940 --> 00:26:31,365 Bağlantılı listeye int n eklemek için. 510 00:26:31,365 --> 00:26:32,740 Biz bu yürüyelim gidiyoruz. 511 00:26:32,740 --> 00:26:34,770 Bu kod bir çok yeni sözdizimi bir çok şey. 512 00:26:34,770 --> 00:26:36,220 Biz Tamam olacak. 513 00:26:36,220 --> 00:26:39,120 >> Üst, ne zaman yukarı Yani biz bir şey yaratmak istiyoruz 514 00:26:39,120 --> 00:26:42,380 biz yapmak için ne gerek, özellikle eğer o yığının üzerinde depolanmamalıdır vermek ister 515 00:26:42,380 --> 00:26:43,920 ancak yığın? 516 00:26:43,920 --> 00:26:45,460 Biz doğru bir malloc gidilir? 517 00:26:45,460 --> 00:26:48,240 Yani biz bir işaretçi oluşturmak için gidiyoruz. 518 00:26:48,240 --> 00:26:52,074 Düğüm, işaretçi, yeni eşittir Bir düğüm boyutunu Malloc 519 00:26:52,074 --> 00:26:53,740 İstediğimiz çünkü düğüm oluşturulacak. 520 00:26:53,740 --> 00:26:56,720 Biz miktarını istiyoruz Bir düğüm alır bellek 521 00:26:56,720 --> 00:26:59,300 için tahsis edilecek yeni bir düğüm oluşturulması. 522 00:26:59,300 --> 00:27:02,270 >> Ve sonra biz kontrol edeceğiz Yeni eşittir sıfır eşittir bakın. 523 00:27:02,270 --> 00:27:03,370 Biz ne dediğini hatırlıyor musun? 524 00:27:03,370 --> 00:27:06,470 Malloc Ne olursa olsun seni, Her zaman ne yapmalıyım? 525 00:27:06,470 --> 00:27:09,490 Her zaman görmek için kontrol etmelisiniz olsun veya olmasın o null. 526 00:27:09,490 --> 00:27:13,620 >> Örneğin, işletim Sistem, tamamen dolu 527 00:27:13,620 --> 00:27:17,060 En fazla bellek olsaydı Tüm ve malloc deneyin, 528 00:27:17,060 --> 00:27:18,410 Sizin için boş dönecekti. 529 00:27:18,410 --> 00:27:21,094 Ve böylece bunu kullanmaya çalıştığınızda o null olarak işaret edildiğinde, 530 00:27:21,094 --> 00:27:23,260 Eğer mümkün gitmiyorsun Bu bilgilere erişmek için. 531 00:27:23,260 --> 00:27:27,010 Ve böylece gibi, biz yapmak istedim ne zaman mallocing yaptığınızdan emin olun, 532 00:27:27,010 --> 00:27:30,500 her zaman görmek için kontrol ediyoruz size verilen bellek null. 533 00:27:30,500 --> 00:27:33,670 O değilse, o zaman biz taşıyabilirsiniz Bizim kod geri kalanı ile. 534 00:27:33,670 --> 00:27:36,140 >> Yani biz gidiyoruz yeni bir düğüm başlatılamıyor. 535 00:27:36,140 --> 00:27:39,050 Yeni n n eşittir yapacağız. 536 00:27:39,050 --> 00:27:42,390 Ve sonra biz yapacağız Yeni yeni işaretçi ayarlamak 537 00:27:42,390 --> 00:27:46,900 null şu anda biz değil, çünkü o işaret etmek için bir şey istiyor. 538 00:27:46,900 --> 00:27:48,755 Biz hiç bir fikrim var nereye bu koymak için gidiyor 539 00:27:48,755 --> 00:27:50,630 ve sonra biz istiyorsanız başında takın, 540 00:27:50,630 --> 00:27:53,820 o zaman biz atayabilirsiniz kafasına işaretçi. 541 00:27:53,820 --> 00:27:58,530 Herkes mantığını takip eder nerede o oluyor? 542 00:27:58,530 --> 00:28:02,502 >> Biz yapıyoruz Bütün yeni yaratıyor düğüm, null işaretçi ayarı 543 00:28:02,502 --> 00:28:04,210 ve daha sonra yeniden atama o kafa biz eğer 544 00:28:04,210 --> 00:28:06,320 Biz başında eklemek istediğini biliyorum. 545 00:28:06,320 --> 00:28:09,420 Ve sonra baş gidiyor yeni düğümün doğru etmektedir. 546 00:28:09,420 --> 00:28:11,060 O OK Herkes? 547 00:28:11,060 --> 00:28:12,380 >> Yani iki aşamalı bir süreçtir. 548 00:28:12,380 --> 00:28:14,760 İlk atamak lazım ne sen yaratıyorsun. 549 00:28:14,760 --> 00:28:18,260 O işaretçi ayarla Sizi referans ve ardından 550 00:28:18,260 --> 00:28:21,400 can dereference tür İlk işaretçi 551 00:28:21,400 --> 00:28:22,972 ve yeni bir düğüm doğru gelin. 552 00:28:22,972 --> 00:28:25,680 Eğer eklemek istediğiniz yerde, Bu mantık doğru tutmak için gidiyor. 553 00:28:25,680 --> 00:28:27,530 >> Bu atama gibi tür Geçici değişkenler. 554 00:28:27,530 --> 00:28:28,700 Unutmayın, var emin olmak için size o 555 00:28:28,700 --> 00:28:30,346 Eğer takas eğer kaybetmeyecek yok. 556 00:28:30,346 --> 00:28:33,470 Sen bir sahip olduğunuzdan emin olmak istiyorum tür tutar geçici değişken 557 00:28:33,470 --> 00:28:35,620 nerede şeyin iz böylece saklanır sen 558 00:28:35,620 --> 00:28:41,190 Elbette herhangi bir değer kaybetmek yok ve onunla düşünsen gibi. 559 00:28:41,190 --> 00:28:42,710 >> Tamam, bu yüzden kod burada olacak. 560 00:28:42,710 --> 00:28:45,020 Siz bölümünden sonra bir göz atın. 561 00:28:45,020 --> 00:28:48,060 Orada olacak. 562 00:28:48,060 --> 00:28:50,280 >> Yani nasıl yaptığını tahmin İstediğimiz bu farklılık 563 00:28:50,280 --> 00:28:52,300 orta veya sonunda eklemek için? 564 00:28:52,300 --> 00:28:57,892 Herkes ne bir fikir var mı Mantıksal referans olarak sözde kod 565 00:28:57,892 --> 00:29:00,350 eğer biz istedi biz alacağını ortada eklemek için? 566 00:29:00,350 --> 00:29:03,391 Yani eğer biz eklemek istedim Baş, yaptığımız tüm yeni bir düğüm oluşturmaktır. 567 00:29:03,391 --> 00:29:06,311 Biz bunun işaretçisi ayarlayın ne olursa olsun kafasına yeni bir düğüm, 568 00:29:06,311 --> 00:29:08,310 ve sonra biz baş ayarlayın Yeni düğüme, değil mi? 569 00:29:08,310 --> 00:29:11,560 Biz ortada eklemek isteseydi Listenin, ne yapmamız gerekir? 570 00:29:11,560 --> 00:29:14,108 571 00:29:14,108 --> 00:29:16,110 >> HEDEF KİTLE: Hala olur Benzer bir süreç 572 00:29:16,110 --> 00:29:19,114 bir işaretçi atama gibi ve Daha sonra, bu işaretçi atama 573 00:29:19,114 --> 00:29:20,530 ama biz orada bulmak zorunda kalacak. 574 00:29:20,530 --> 00:29:23,560 >> ANDI PENG: Kesinlikle, kesinlikle bu yüzden Senin dışında aynı işlem 575 00:29:23,560 --> 00:29:27,820 tam olarak nerede bulmak zorunda sen yeni işaretçi içine gitmek istiyorum, 576 00:29:27,820 --> 00:29:44,790 Ben eklemek istiyorsanız, bu yüzden Tamam list-- bağlantılı orta, 577 00:29:44,790 --> 00:29:46,370 en bizim bağlantılı liste diyelim. 578 00:29:46,370 --> 00:29:49,500 Biz burada eklemek istiyorsanız, Biz yeni bir düğüm oluşturmak için gidiyoruz. 579 00:29:49,500 --> 00:29:50,520 Biz malloc gidiyoruz. 580 00:29:50,520 --> 00:29:52,220 Biz yeni bir düğüm oluşturmak için gidiyoruz. 581 00:29:52,220 --> 00:29:55,940 Biz atamak için gidiyoruz Burada bu düğümün işaretçi. 582 00:29:55,940 --> 00:29:58,335 >> Ama sorun şu farklıdır başıdır yerden 583 00:29:58,335 --> 00:30:00,490 biz biliyordu ki nerede başıdır. 584 00:30:00,490 --> 00:30:01,930 Bu doğru, ilk haklıydı? 585 00:30:01,930 --> 00:30:04,870 Ama burada biz takip etmek lazım nerede biz onu takmadan ediyoruz. 586 00:30:04,870 --> 00:30:07,930 Biz takarken ise bizim Burada düğüm, elimizdeki 587 00:30:07,930 --> 00:30:12,270 emin olmak için Bu düğüme bir önceki 588 00:30:12,270 --> 00:30:14,172 işaretçi atar biridir. 589 00:30:14,172 --> 00:30:16,380 Öyleyse ne tür var İki şeyi takip. 590 00:30:16,380 --> 00:30:19,420 Nereye bu takip ederse Düğüm şu anda takmadan olduğunu. 591 00:30:19,420 --> 00:30:23,280 Ayrıca takip etmek zorunda size aradığınız önceki düğüm 592 00:30:23,280 --> 00:30:24,340 da oradaydı. 593 00:30:24,340 --> 00:30:25,830 Bu iyi Herkes? 594 00:30:25,830 --> 00:30:26,500 TAMAM. 595 00:30:26,500 --> 00:30:28,000 >> Nasıl sonunda takmadan dersiniz? 596 00:30:28,000 --> 00:30:34,220 Ben isteseydim ben burada-- eklemek isteseydi Bir listenin sonuna yeni bir düğüm eklemek için, 597 00:30:34,220 --> 00:30:37,009 Bunu yapmayı nasıl gidebilir? 598 00:30:37,009 --> 00:30:39,300 İZLEYİCİ: Böylece, şu anda Sonuncusu en null işaret etti. 599 00:30:39,300 --> 00:30:40,960 ANDI PENG: Evet. 600 00:30:40,960 --> 00:30:43,560 Kesinlikle, bu yüzden bu bir Şu anda bilmek sivri, 601 00:30:43,560 --> 00:30:46,720 ve bu yüzden bu anlamda, bu, sanırım Bir listenin sonuna eklemek çok kolaydır. 602 00:30:46,720 --> 00:30:51,810 Yapmanız gereken tek şey onu ayarlanır null olarak ve daha sonra patlaması eşit. 603 00:30:51,810 --> 00:30:53,070 İşte orada, çok kolay. 604 00:30:53,070 --> 00:30:53,960 Çok basit. 605 00:30:53,960 --> 00:30:56,430 >> Çok benzer Seni baş, ancak mantıksal 606 00:30:56,430 --> 00:30:59,690 adımlar emin olmak için Eğer bu birini yaparak doğru almak 607 00:30:59,690 --> 00:31:01,500 Eğer birlikte aşağıdaki ediyoruz. 608 00:31:01,500 --> 00:31:04,420 Bu ortada, çok kolay kodunuzu, üzerinde yakalanmak 609 00:31:04,420 --> 00:31:05,671 oh, çok işaretçileri var. 610 00:31:05,671 --> 00:31:07,461 Nerede olduğunu bilmiyorum şey işaret ediyor. 611 00:31:07,461 --> 00:31:09,170 Ben bile olduğumu hangi düğümün bilmiyorum. 612 00:31:09,170 --> 00:31:11,490 Nasıl gidiyor? 613 00:31:11,490 --> 00:31:13,620 >> Derin bir nefes al, sakin ol, rahatla. 614 00:31:13,620 --> 00:31:15,530 Bağlantılı listesini çizin. 615 00:31:15,530 --> 00:31:18,800 Derseniz, ben tam olarak nerede biliyorum Ben içine bu eklemek gerekir 616 00:31:18,800 --> 00:31:22,970 ve ben benim atamak nasıl biliyor işaretçileri, çok, çok daha kolay canlandırmaya 617 00:31:22,970 --> 00:31:27,200 konrtol çok, çok daha kolay değil kodunuzu böcek kaybolmak. 618 00:31:27,200 --> 00:31:29,410 O OK Herkes? 619 00:31:29,410 --> 00:31:31,380 TAMAM. 620 00:31:31,380 --> 00:31:35,120 >> Yani biz değil bir kavram tahmin Gerçekten, şimdi önce konuştuk 621 00:31:35,120 --> 00:31:38,131 ve muhtemelen seni sanırım çok yet-- karşılaşır değil 622 00:31:38,131 --> 00:31:40,880 bir ileri konsept-- tür biz aslında bir veriye sahip olduğunu 623 00:31:40,880 --> 00:31:43,900 yapı iki kat bağlantılı liste çağırdı. 624 00:31:43,900 --> 00:31:46,390 Siz gördüğünüz gibi, biz yapıyoruz bütün yaratır 625 00:31:46,390 --> 00:31:50,400 Bir gerçek değer, extra Bizim düğümlerin her birinde işaretçi 626 00:31:50,400 --> 00:31:52,660 bu da bir önceki birleşme noktasına işaret eder. 627 00:31:52,660 --> 00:31:58,170 Yani sadece biz var düğümler bir sonraki işaret etmektedir. 628 00:31:58,170 --> 00:32:01,430 Onlar da bir önceki etmektedir. 629 00:32:01,430 --> 00:32:04,310 Şu anda bu iki görmezden gidiyorum. 630 00:32:04,310 --> 00:32:06,740 >> Öyleyse bir zincir var Bu her iki yönde hareket edebilir, 631 00:32:06,740 --> 00:32:09,630 ve o zaman biraz daha kolay mantıksal birlikte takip etmek. 632 00:32:09,630 --> 00:32:11,896 Burada olduğu gibi, yerine oh, kayıtlarını tutmak, ben 633 00:32:11,896 --> 00:32:14,520 Bu düğüm olduğunu bilmek zorunda Ben yeniden atamak zorunda kimse, 634 00:32:14,520 --> 00:32:17,532 Ben sadece buraya gitmek ve olabilir Sadece önceki çekin. 635 00:32:17,532 --> 00:32:19,490 Sonra tam olarak nerede biliyorum olduğunu ve o zaman 636 00:32:19,490 --> 00:32:21,130 çapraz zorunda değilsiniz bağlantılı liste tamamı. 637 00:32:21,130 --> 00:32:22,180 Biraz daha kolay. 638 00:32:22,180 --> 00:32:24,960 >> Ama böyle, sen iki misli var işaretçileri miktarı, 639 00:32:24,960 --> 00:32:26,960 bellek miktarı çift var. 640 00:32:26,960 --> 00:32:28,950 Bu takip etmek işaretçiler bir sürü. 641 00:32:28,950 --> 00:32:32,140 Biraz daha karmaşık, ama bu kullanıcı dostu bağlı olarak biraz daha 642 00:32:32,140 --> 00:32:34,080 Eğer başarmak için çalışıyoruz ne. 643 00:32:34,080 --> 00:32:36,910 >> Yani veri bu tür yapı tamamen mevcut 644 00:32:36,910 --> 00:32:40,280 ve için yapı çok olduğunu Eğer yaşıyorsanız hepsi hariç, basit, 645 00:32:40,280 --> 00:32:43,850 Bunun yerine bir sonraki için sadece bir işaretçi, Ayrıca daha önceki bir işaretçi var. 646 00:32:43,850 --> 00:32:45,940 Hepsi fark var. 647 00:32:45,940 --> 00:32:47,740 Bu iyi Herkes? 648 00:32:47,740 --> 00:32:48,240 Güzel. 649 00:32:48,240 --> 00:32:50,940 650 00:32:50,940 --> 00:32:53,280 >> Pekala, şimdi ben Gerçekten muhtemelen harcamak 651 00:32:53,280 --> 00:32:56,870 15 ila 20 dakika veya toplu gibi bölümünde zaman geri kalanı 652 00:32:56,870 --> 00:32:58,360 karma tablo hakkında konuşuyor. 653 00:32:58,360 --> 00:33:02,590 Nasıl çocuklar birçok pset5 spec okudum? 654 00:33:02,590 --> 00:33:03,620 Tamam, iyi. 655 00:33:03,620 --> 00:33:06,160 Normalde% 50 daha yüksek bulunuyor. 656 00:33:06,160 --> 00:33:07,560 Tamam. 657 00:33:07,560 --> 00:33:10,345 >> Siz göreceğiniz gibi Yani, Eğer pset5 içinde meydan konum 658 00:33:10,345 --> 00:33:16,790 bir sözlük uygulamak olacaktır Eğer 140.000 kelime üzerinde yük nerede 659 00:33:16,790 --> 00:33:20,610 biz ve Yazım Denetimi size vermek Metnin tamamı karşı o. 660 00:33:20,610 --> 00:33:22,580 Size rasgele vereceğiz edebiyat parçalar. 661 00:33:22,580 --> 00:33:23,520 Size Odyssey vereceğiz. 662 00:33:23,520 --> 00:33:24,561 Size İlyada vereceğiz. 663 00:33:24,561 --> 00:33:26,350 Size Austin Powers vereceğim. 664 00:33:26,350 --> 00:33:28,220 >> Ve meydan imla denetimi olacak 665 00:33:28,220 --> 00:33:31,760 Bütün her tek sözcük Bu sözlükler 666 00:33:31,760 --> 00:33:34,960 esasen bizim yazım denetleyicisi ile. 667 00:33:34,960 --> 00:33:38,620 Ve bu yüzden birkaç parça var Bu pset oluşturmak yerine, 668 00:33:38,620 --> 00:33:41,970 ilk olmak istiyorum aslında yüklemek mümkün 669 00:33:41,970 --> 00:33:43,970 içine tüm kelimeler senin sözlük, sonra sizi 670 00:33:43,970 --> 00:33:45,530 edebilmek olmak istiyorum hepsi yazım denetimi. 671 00:33:45,530 --> 00:33:48,780 Ve böylece gibi, size gereken gidiyoruz Bu hızlı yapabilirsiniz veri yapısı 672 00:33:48,780 --> 00:33:50,790 ve verimli bir şekilde dinamik olarak. 673 00:33:50,790 --> 00:33:52,900 >> Yani kolay herhalde Bunu yapmanın yolu, sizi 674 00:33:52,900 --> 00:33:55,010 Muhtemelen, bir dizi yaratacak? 675 00:33:55,010 --> 00:33:58,910 Depolama kolay yolu sensin 140.000 kelimelik bir dizi oluşturabilirsiniz 676 00:33:58,910 --> 00:34:03,400 ve sadece orada hepsini koyun ve Daha sonra ikili arama onları çapraz 677 00:34:03,400 --> 00:34:06,780 veya seçimler ya da Ben- üzgünüm sıralama ediyor. 678 00:34:06,780 --> 00:34:10,729 Bunları sıralamak ve sonra onları geçebilir ikili arama ya da sadece doğrusal arama ile 679 00:34:10,729 --> 00:34:13,730 ve sadece son sözleri, ancak bellek büyük miktarda alır 680 00:34:13,730 --> 00:34:15,190 ve çok verimli değil. 681 00:34:15,190 --> 00:34:18,350 >> Ve böylece biz başlatmak için gidiyoruz yapma yolları hakkında konuşurken 682 00:34:18,350 --> 00:34:20,110 Bizim çalışma süresi daha verimli. 683 00:34:20,110 --> 00:34:23,190 Ve hedefimiz almak için zaman sabiti nerede 684 00:34:23,190 --> 00:34:25,810 neredeyse diziler, gibi Eğer anlık erişimi vardır. 685 00:34:25,810 --> 00:34:28,560 Hiçbir şey aramak istedim, Ben sadece edebilmek olmak istiyorum 686 00:34:28,560 --> 00:34:30,810 boom, tam olarak bulmak, ve dışarı çekin. 687 00:34:30,810 --> 00:34:34,100 Ve böylece bir yapı olan biz çok yakın olma olacak 688 00:34:34,100 --> 00:34:37,569 Sürekli erişmek mümkün Zaman, bu Holy Grail 689 00:34:37,569 --> 00:34:41,370 sürekli programlanmasında zaman karma tablo denir. 690 00:34:41,370 --> 00:34:45,370 Ve böylece Davut önce bahsedilen [Duyulamaz] derste biraz, 691 00:34:45,370 --> 00:34:49,100 ama biz gerçekten gidiyoruz Derin bu hafta dalış 692 00:34:49,100 --> 00:34:51,780 ilgili oluyor bir parça nasıl bir karma tablo çalışır. 693 00:34:51,780 --> 00:34:53,949 >> Bu şekilde Böylece bir karma Tablo çalışmaları, örnek olarak, 694 00:34:53,949 --> 00:35:00,230 Ben kelimelerin bir demet saklamak istedim, bir İngilizce sözcüklerin demet, 695 00:35:00,230 --> 00:35:02,940 Ben teorik olarak koyabilirsiniz muz, elma, kivi, mango, çift, 696 00:35:02,940 --> 00:35:04,980 ve hepsi sadece bir dizi üzerinde kavun. 697 00:35:04,980 --> 00:35:07,044 Hepsi uygun olabilir ve bulmak olabilir. 698 00:35:07,044 --> 00:35:09,210 Bu bir ağrı tür olurdu ve erişim yoluyla arama 699 00:35:09,210 --> 00:35:12,920 ancak bunu yapmanın kolay yolu Biz bir yapı aslında yaratabilir 700 00:35:12,920 --> 00:35:15,680 Biz karma karma tablo denir. 701 00:35:15,680 --> 00:35:19,880 Biz aracılığıyla tuşları tüm koşmak bir karma işlevi, bir denklem, 702 00:35:19,880 --> 00:35:22,600 Bu içine hepsini dönüyor Bir değerin çeşit 703 00:35:22,600 --> 00:35:28,740 o zaman üzerine saklayabilir bağlantılı liste aslında bir dizi. 704 00:35:28,740 --> 00:35:32,570 >> Ve işte biz, isteseydi İngilizce kelimeleri saklamak için, 705 00:35:32,570 --> 00:35:37,250 Biz potansiyel sadece could, I do not biliyorum tüm ilk harflerini çevirmek 706 00:35:37,250 --> 00:35:39,630 Bir sayının çeşit içine. 707 00:35:39,630 --> 00:35:43,140 Ve böylece, örneğin, eğer istediğim Bir apple-- ile eşanlamlı olmak 708 00:35:43,140 --> 00:35:47,460 ya da 0 indeksi ile ve B, 1 ile eşanlamlı olmak 709 00:35:47,460 --> 00:35:51,030 Biz 26 girdileri olabilir bu sadece saklayabilirsiniz 710 00:35:51,030 --> 00:35:53,610 harflerinin bütün biz başlayacağız alfabe. 711 00:35:53,610 --> 00:35:56,130 Ve sonra biz olabilir 0 dizinindeki elma. 712 00:35:56,130 --> 00:35:59,160 Biz dizinindeki muz olabilir 1, 2 endeksinde kavun, 713 00:35:59,160 --> 00:36:00,540 ve benzerleri ve benzeri. 714 00:36:00,540 --> 00:36:04,460 Ve böylece ben aramak istedim Benim karma tablo ve erişim elma, 715 00:36:04,460 --> 00:36:07,560 Ben elma ile başlar biliyorum A, ve ben iyi biliyorum 716 00:36:07,560 --> 00:36:10,860 olması ve karma gerektiğini endeksi 0 dolayı masa 717 00:36:10,860 --> 00:36:13,620 fonksiyonun önceden atanmış. 718 00:36:13,620 --> 00:36:16,572 >> Bilmiyorum Yani, biz Bir kullanıcı programı nerede 719 00:36:16,572 --> 00:36:18,780 Eğer suçlanıyor olacak keyfi değil arbitrarily--, 720 00:36:18,780 --> 00:36:22,530 düşünceli çalışan ile İyi denklemlerin düşünüyorum 721 00:36:22,530 --> 00:36:25,460 yaymak mümkün senin tüm değerleri üzerinden 722 00:36:25,460 --> 00:36:29,370 Bir şekilde kolayca erişebilirsiniz sonradan bir denklem gibi 723 00:36:29,370 --> 00:36:31,130 Sen misin, kendiniz biliyorsunuz. 724 00:36:31,130 --> 00:36:35,210 Ben gitmek istedim anlamda yüzden mango, oh, bu m ile başlar, biliyorum. 725 00:36:35,210 --> 00:36:37,134 Bu 12 endeksi olmalıdır. 726 00:36:37,134 --> 00:36:38,800 Ben herhangi bir şey ile aramak zorunda değilsiniz. 727 00:36:38,800 --> 00:36:42,080 Ben sadece gidebiliriz tam olarak-- biliyorum ve 12 endeksi dışarı çekin. 728 00:36:42,080 --> 00:36:45,520 >> Nasıl Herkes net hash tablo işlevi çalışır? 729 00:36:45,520 --> 00:36:48,380 Bu sadece daha karmaşık bir dizi türüdür. 730 00:36:48,380 --> 00:36:50,010 Yani hepsi bu. 731 00:36:50,010 --> 00:36:51,630 TAMAM. 732 00:36:51,630 --> 00:36:57,690 >> Yani biz koşmak tahmin Bu sorunu nasıl 733 00:36:57,690 --> 00:37:06,390 Birden şeyler varsa olur bu sana aynı dizin verir? 734 00:37:06,390 --> 00:37:10,570 Yani tüm o bizim işlevi söylemek yaptım ilk harfini almak oldu 735 00:37:10,570 --> 00:37:14,490 ve bir o çevirmek içine 0 endeksi 25 ile ilgili. 736 00:37:14,490 --> 00:37:17,137 Yani eğer tamamen iyi olduğunu sadece her birine sahip. 737 00:37:17,137 --> 00:37:18,970 Fakat ikinci Başlamadan fazlasına sahip, sen 738 00:37:18,970 --> 00:37:20,910 Bir çarpışma denen zorunda olacak. 739 00:37:20,910 --> 00:37:25,580 >> Ben eklemeye çalışırsanız bir karma içine gömmek Yani zaten üzerinde muz vardır masa, 740 00:37:25,580 --> 00:37:27,870 Ne zaman ne olacak Bunu eklemek deneyin? 741 00:37:27,870 --> 00:37:30,930 Kötü şeyler nedeniyle muz zaten endeks içinde var 742 00:37:30,930 --> 00:37:33,800 Eğer saklamak istediğiniz. 743 00:37:33,800 --> 00:37:35,560 Berry tür ne yapmalıyım, ah, gibi? 744 00:37:35,560 --> 00:37:37,080 Ben nereye gideceğimi bilmiyorum. 745 00:37:37,080 --> 00:37:38,410 Bunu nasıl çözerim? 746 00:37:38,410 --> 00:37:41,150 >> Ve böylece siz olacak tür Bu zor bir şey yaptığını görmek 747 00:37:41,150 --> 00:37:44,810 nerede tür aslında can Bizim diziler bağlantılı liste oluşturmak. 748 00:37:44,810 --> 00:37:46,840 Ve böylece en kolay yolu Bu düşünmek, 749 00:37:46,840 --> 00:37:50,830 Tüm karma tablo bir bağlantılı listeler dizisi. 750 00:37:50,830 --> 00:37:55,670 Ve böylece, bu anlamda, sahip işaretçiler bu güzel dizi 751 00:37:55,670 --> 00:37:58,740 ve sonra her işaretçi olarak Bu değer, o endekste, 752 00:37:58,740 --> 00:38:00,740 aslında başka şeyler işaret edebilir. 753 00:38:00,740 --> 00:38:05,720 Ve böylece tüm bu ayrı olması büyük bir dizinin kapalı geliyor zincirleri. 754 00:38:05,720 --> 00:38:07,960 >> Ve işte, ben eğer berry eklemek istedim 755 00:38:07,960 --> 00:38:11,220 Tamam, ben giriş gidiyorum, biliyorum Benim karma fonksiyonu sayesinde. 756 00:38:11,220 --> 00:38:15,070 Ben indeksi ile sonuna kadar gidiyorum 1, ve sonra var edebilmek için gidiyorum 757 00:38:15,070 --> 00:38:20,410 Bu sadece küçük bir alt kümesi Dev 140.000 kelimelik sözlük. 758 00:38:20,410 --> 00:38:24,220 Ve sonra ben sadece bakabilirsiniz Bunun 1/26 yoluyla. 759 00:38:24,220 --> 00:38:27,910 >> Ve böylece o zaman sadece ekleyebilirsiniz önce veya sonra muz ya berry 760 00:38:27,910 --> 00:38:28,820 bu durumda? 761 00:38:28,820 --> 00:38:29,700 Sonra, değil mi? 762 00:38:29,700 --> 00:38:33,920 Ve böylece istediğiniz gidiyoruz muz sonra bu düğüm eklemek, 763 00:38:33,920 --> 00:38:36,667 ve böylece eklemek için gidiyoruz Bu bağlantılı listenin kuyruk. 764 00:38:36,667 --> 00:38:38,500 Geri dönmek için gidiyorum Bu önceki slayda, 765 00:38:38,500 --> 00:38:40,680 böylece siz nasıl görebilirsiniz hash fonksiyonu çalışır. 766 00:38:40,680 --> 00:38:43,980 >> Yani hash fonksiyonu bu denklemi olduğu Eğer giriş tür çalışan olduğunuzu 767 00:38:43,980 --> 00:38:46,940 almak için her türlü endeksi ile Eğer doğru atamak istediğiniz. 768 00:38:46,940 --> 00:38:51,130 Ve böylece, bu örnekte, tüm istediğimiz yapmak, ilk harfini almak oldu 769 00:38:51,130 --> 00:38:55,890 biz o zaman, bir dizin içine çevirmek Bizim hash fonksiyonu bu saklayabilirsiniz. 770 00:38:55,890 --> 00:39:00,160 Burada yapıyoruz hepimiz olman ilk harfini dönüştürülüyor. 771 00:39:00,160 --> 00:39:04,770 Yani keykey [0] sadece ilk harf ne olursa olsun dize biz yaşıyoruz, 772 00:39:04,770 --> 00:39:05,720 Biz geçiyoruz. 773 00:39:05,720 --> 00:39:09,740 Üst o dönüştürme ve konum Biz büyük A çıkarılarak ediyoruz 774 00:39:09,740 --> 00:39:11,740 Bunu yaparken ki tüm bize bir numara veriyor 775 00:39:11,740 --> 00:39:13,670 hangi biz değerlerimizi üzerine karma olabilir. 776 00:39:13,670 --> 00:39:16,550 >> Ve sonra biz gidiyoruz karma modülü SIZE dönün. 777 00:39:16,550 --> 00:39:19,340 Çok, çok dikkatli olun Teorik olarak, burada, çünkü 778 00:39:19,340 --> 00:39:21,870 senin müzakere değeri sonsuz olabilir. 779 00:39:21,870 --> 00:39:23,660 Bu sadece ve üzerinde ve gidebiliriz. 780 00:39:23,660 --> 00:39:26,080 O, gerçekten bazı olabilir Gerçekten büyük bir değer, 781 00:39:26,080 --> 00:39:29,849 ama hash tablosunda çünkü Oluşturduğunuz sadece 26 dizinleri vardır, 782 00:39:29,849 --> 00:39:31,890 Eğer emin olmak sizin modulusing böylece 783 00:39:31,890 --> 00:39:33,848 aynı şey run-- yok senin queue-- olarak bir şey 784 00:39:33,848 --> 00:39:36,320 böylece kaçıp olmadığını senin hash fonksiyonu alt. 785 00:39:36,320 --> 00:39:39,210 >> Etrafta geri sarmak istiyor [duyulamaz] ne zaman aynı şekilde 786 00:39:39,210 --> 00:39:41,750 Eğer, bir çok gibi oldu Çok büyük harf, sen 787 00:39:41,750 --> 00:39:43,740 o istemedi Sadece ucunu çalıştırın. 788 00:39:43,740 --> 00:39:46,948 Burada Aynı şey, emin olmak istiyorum o sararak ucunu çalışmaz 789 00:39:46,948 --> 00:39:48,330 etrafında tablonun üstüne. 790 00:39:48,330 --> 00:39:50,530 Yani bu sadece bir çok Basit hash fonksiyonu. 791 00:39:50,530 --> 00:39:56,570 Yaptığını Tüm çekmek ilk ne olursa olsun, bizim girdi mektup oldu 792 00:39:56,570 --> 00:40:01,660 ve bir dizin içine edecek Biz bizim karma tabloya koymak olabilir. 793 00:40:01,660 --> 00:40:05,450 >> Evet, ve bu yüzden, daha önce de söylediğim gibi Biz çarpışmalar çözmek yolu 794 00:40:05,450 --> 00:40:09,330 Bizim karma tablo yaşıyorsanız, Biz zincirleme, ne diyoruz. 795 00:40:09,330 --> 00:40:13,860 Birden eklemeye çalıştığınızda Yani eğer aynı şey ile başlayan kelimeler, 796 00:40:13,860 --> 00:40:16,145 Bir karma değerini zorunda gidiyoruz. 797 00:40:16,145 --> 00:40:18,770 Avokado ve elma, sen yasiyorsaniz Bizim hash fonksiyonu sayesinde çalıştırmak, 798 00:40:18,770 --> 00:40:21,450 Size vermek için gidiyoruz aynı sayıda, 0 sayısıdır. 799 00:40:21,450 --> 00:40:24,550 Ve böylece şekilde biz olduğunu çözmek biz aslında bir tür bunları bağlamak olabilir 800 00:40:24,550 --> 00:40:27,010 birbirine bağlı listeleri üzerinden. 801 00:40:27,010 --> 00:40:29,600 >> Ve böylece bu anlamda, Siz tür görebilirsiniz 802 00:40:29,600 --> 00:40:32,640 arasında nasıl veri yapıları o Daha önce ayar oldum 803 00:40:32,640 --> 00:40:35,870 Bir kuru üzüm bağlantılı liste tür gibi birine bir araya gelebilir. 804 00:40:35,870 --> 00:40:38,860 Ve sonra çok oluşturabilirsiniz daha verimli veri yapıları 805 00:40:38,860 --> 00:40:43,350 Bu büyük miktarlarda işleyebilir Veri, yani dinamik olarak yeniden boyutlandırma 806 00:40:43,350 --> 00:40:44,870 sizin ihtiyaçlarınıza. 807 00:40:44,870 --> 00:40:45,620 Herkes açık? 808 00:40:45,620 --> 00:40:47,580 Net Herkes tür Burada ne üzerine? 809 00:40:47,580 --> 00:40:52,110 >> Ben insert-- istiyorsa bir ne Bilmiyorum, ile başlar meyve, 810 00:40:52,110 --> 00:40:54,726 Berry dışındaki B, muz. 811 00:40:54,726 --> 00:40:55,710 >> HEDEF KİTLE: Böğürtlen. 812 00:40:55,710 --> 00:40:57,910 >> ANDI PENG: Böğürtlen, böğürtlen. 813 00:40:57,910 --> 00:41:00,530 Nereye böğürtlen burada gidiyor? 814 00:41:00,530 --> 00:41:04,251 Peki, biz aslında sıralanmış değil Bu henüz, ama teorik olarak 815 00:41:04,251 --> 00:41:06,250 Biz bu istedim eğer alfabetik sırayla, 816 00:41:06,250 --> 00:41:07,944 nereye böğürtlen gerekir? 817 00:41:07,944 --> 00:41:09,210 >> HEDEF KİTLE: [duyulamaz] 818 00:41:09,210 --> 00:41:11,100 >> ANDI PENG: Kesinlikle, burada daha sonra, değil mi? 819 00:41:11,100 --> 00:41:14,950 Ama çok zor çünkü reorder-- Ben size çocuklar kadar sanırım. 820 00:41:14,950 --> 00:41:17,920 Siz tamamen can İstediğini uygulamak. 821 00:41:17,920 --> 00:41:20,730 Daha verimli bir şekilde belki bunu 822 00:41:20,730 --> 00:41:24,570 Bağlantılı sıralamak olacaktır alfabetik içine listesi, 823 00:41:24,570 --> 00:41:26,520 ve böylece olduğunuzda şeyleri ekleyerek, istediğiniz 824 00:41:26,520 --> 00:41:28,632 Onları eklemek emin olmak için alfabetik içine 825 00:41:28,632 --> 00:41:30,590 böylece daha sonra olduğunuzda Onları aramak için çalışıyor, 826 00:41:30,590 --> 00:41:32,410 Her şeyi hareket ettirmek zorunda değilsiniz. 827 00:41:32,410 --> 00:41:35,290 Tam olarak nerede olduğunu bilmek o, ve daha kolay. 828 00:41:35,290 --> 00:41:39,100 >> Ama ne tür varsa şeyler, rastgele serpiştirilmiş 829 00:41:39,100 --> 00:41:41,420 Hala zorunda gidiyoruz Nasılsa geçiş için. 830 00:41:41,420 --> 00:41:44,990 Ve bu yüzden istedim sadece böğürtlen burada eklemek 831 00:41:44,990 --> 00:41:47,470 ve ben aramak istedim o, ben, oh biliyorum, böğürtlen 832 00:41:47,470 --> 00:41:52,012 1 indeksi ile başlar, bu yüzden olmalı anında sadece 1 ile arama biliyorum. 833 00:41:52,012 --> 00:41:53,970 Ve sonra ben tür can bağlantılı liste geçiş 834 00:41:53,970 --> 00:41:56,120 Ben böğürtlen elde edene kadar, ve evet o zaman--? 835 00:41:56,120 --> 00:41:59,550 >> HEDEF KİTLE: Eğer create-- çalışıyorsanız Bu çok basit bir karma gibi sanırım 836 00:41:59,550 --> 00:42:00,050 işlevi. 837 00:42:00,050 --> 00:42:02,835 Ve biz yapmak istedim Böyle bir çok katmanlı, 838 00:42:02,835 --> 00:42:05,870 Tamam, biz ayırmak istiyoruz tüm alfabetik harflerle gibi 839 00:42:05,870 --> 00:42:09,040 ve sonra tekrar başka bir set sevmeye Bu içinde alfabetik harflerin, 840 00:42:09,040 --> 00:42:11,715 Biz bir karma gibi koyarak karma tablo içinde tablo, 841 00:42:11,715 --> 00:42:13,256 veya bir işlev içinde bir işlev gibi? 842 00:42:13,256 --> 00:42:14,880 Ya da ki- olduğunu 843 00:42:14,880 --> 00:42:17,510 >> ANDI PENG: senin karma So senin karma tablo function-- 844 00:42:17,510 --> 00:42:19,360 siz istediğiniz kadar büyük olabilir. 845 00:42:19,360 --> 00:42:21,930 Yani bu anlamda, diye düşündüm çok, çok kolay oldu 846 00:42:21,930 --> 00:42:25,320 Benim için basit, sadece sıralama tabanlı etmek İlk kelimenin harfleri üzerinde. 847 00:42:25,320 --> 00:42:28,690 Ve böylece sadece 26 seçenek var. 848 00:42:28,690 --> 00:42:32,650 Ben sadece 26 seçenek alabilirsiniz 25 0 çünkü onlar sadece can 849 00:42:32,650 --> 00:42:36,510 A Z'ye başlamak Ama sen isteseydin belki daha fazla karmaşıklık eklemek için 850 00:42:36,510 --> 00:42:39,260 ya da daha hızlı çalışma süresi sizin hash tablosu, kesinlikle 851 00:42:39,260 --> 00:42:40,760 her türlü şeyi yapabilirsiniz. 852 00:42:40,760 --> 00:42:43,330 Kendi yapabilirsiniz size verir denklem 853 00:42:43,330 --> 00:42:48,000 daha fazla dağıtım senin sözler, o zaman, arama yaparken 854 00:42:48,000 --> 00:42:49,300 Daha hızlı olacak. 855 00:42:49,300 --> 00:42:52,100 >> Tamamen size çocuklar kadar var bunu nasıl uygulamak istiyorum. 856 00:42:52,100 --> 00:42:55,140 Sadece kovalar gibi düşün. 857 00:42:55,140 --> 00:42:57,376 Ben isteseydim 26 kovalar, ben gidiyorum 858 00:42:57,376 --> 00:42:59,420 Bu kova içine şeyleri sıralamak için. 859 00:42:59,420 --> 00:43:02,980 Ama bir grup var gidiyorum Her kovada şeyler, 860 00:43:02,980 --> 00:43:05,890 Bunu yapmak istiyorsanız bu yüzden daha hızlı ve daha verimli, 861 00:43:05,890 --> 00:43:07,190 Bana yüz kova atalım. 862 00:43:07,190 --> 00:43:09,290 >> Ama sonra bir bulmalıyız Onlar böylece yol şeyleri sıralamak için 863 00:43:09,290 --> 00:43:11,040 Uygun kova da olmalıdır. 864 00:43:11,040 --> 00:43:13,331 Ama sonra ne zaman aslında O kova bakmak istiyorum, 865 00:43:13,331 --> 00:43:16,410 var çünkü çok hızlıdır Her kovada daha az şeyler. 866 00:43:16,410 --> 00:43:20,250 Ve böylece, evet, bu aslında pset5 size çocuklar için hile 867 00:43:20,250 --> 00:43:22,360 Eğer olacağım olduğunu Sadece oluşturmak için meydan 868 00:43:22,360 --> 00:43:26,170 En verimli ne olursa olsun aklınıza gelebilecek işlevi olması 869 00:43:26,170 --> 00:43:28,520 depolamak ve bu değerleri kontrol etmek mümkün. 870 00:43:28,520 --> 00:43:30,840 >> Tamamen size çocuklar kadar Ancak bunu yapmak istiyorum, 871 00:43:30,840 --> 00:43:32,229 ama bu gerçekten iyi bir nokta. 872 00:43:32,229 --> 00:43:34,520 Bu mantık tür düşünmeye başlamak istiyorum 873 00:43:34,520 --> 00:43:37,236 iyi, neden daha fazla kova yapmazlar vardır. 874 00:43:37,236 --> 00:43:39,527 Ve sonra ben aramak zorunda daha az şeyler, sonra belki 875 00:43:39,527 --> 00:43:41,640 farklı bir karma işlevi vardır. 876 00:43:41,640 --> 00:43:45,500 >> Evet, bunu yapmak için pek çok yolu var pset, bazıları diğerlerinden daha hızlıdır. 877 00:43:45,500 --> 00:43:50,630 Ben tamamen ne kadar görmek için gidiyorum Hızlı hızlı siz olacak oldu 878 00:43:50,630 --> 00:43:55,170 senin işlevleri işe almak mümkün. 879 00:43:55,170 --> 00:43:58,176 Tamam, herkes iyi on zincirleme ve hash tabloları? 880 00:43:58,176 --> 00:44:00,800 Bu çok basit gibi aslında Bu konuda kavram düşünüyorsanız. 881 00:44:00,800 --> 00:44:05,160 O Tüm ayıran ne olursa olsun senin girişleri kova içine, 882 00:44:05,160 --> 00:44:10,670 Onları sıralama ve sonra arama Orada ilişkilendirilmiş olduğunu listeler. 883 00:44:10,670 --> 00:44:11,852 >> Güzel. 884 00:44:11,852 --> 00:44:18,160 Pekala, şimdi biz farklı bir sıralama var veri yapısının bir ağaç deniyor söyledi. 885 00:44:18,160 --> 00:44:20,850 Devam edelim ve denemeden hakkında konuşmak bu, açık bir şekilde farklıdır 886 00:44:20,850 --> 00:44:22,330 ama aynı kategorideki. 887 00:44:22,330 --> 00:44:29,010 Esasen, bütün bir ağaç yerine ise lineer şekilde veri organize 888 00:44:29,010 --> 00:44:32,560 Bir karma tablo size does-- olduğunu bu, bir üst ve bir alt var biliyorum 889 00:44:32,560 --> 00:44:37,900 ve sonra ne tür dökersin-- bir kapalı bağlantı ağaç, sen kök diyoruz bir üst vardır 890 00:44:37,900 --> 00:44:40,220 ve daha sonra tüm çevresinde yaprakları vardır. 891 00:44:40,220 --> 00:44:42,390 >> Ve böylece tüm burada var sadece üst düğüm 892 00:44:42,390 --> 00:44:45,980 diğer düğümlere, puan olduğunu işaret daha fazla düğümle ve benzeri ve benzeri. 893 00:44:45,980 --> 00:44:48,130 Ve böylece sadece bölme şubeleri var. 894 00:44:48,130 --> 00:44:53,255 Bu örgütlenme, sadece farklı bir yolu Veri ve biz bir ağaç diyoruz çünkü, 895 00:44:53,255 --> 00:44:56,270 Siz bu sadece sadece- Bir ağaç gibi bakmak için dışarı modellenmiştir. 896 00:44:56,270 --> 00:44:57,670 Biz ağaçların dememin sebebi bu. 897 00:44:57,670 --> 00:44:59,370 >> Hash tablo, bir tablo gibi görünüyor. 898 00:44:59,370 --> 00:45:01,310 Bir ağaç bir ağaç gibi görünüyor. 899 00:45:01,310 --> 00:45:03,300 O Tüm ayrı düğümler organize yolu 900 00:45:03,300 --> 00:45:06,020 İhtiyaçlarınız ne bağlı. 901 00:45:06,020 --> 00:45:11,810 >> Yani bir kök var ve sonra yaprakları vardır. 902 00:45:11,810 --> 00:45:15,380 Yol biz özellikle can Bir ikili ağaç düşünmek, 903 00:45:15,380 --> 00:45:18,150 Bir ikili ağaç sadece bir Bir ağacın belirli bir tip 904 00:45:18,150 --> 00:45:22,450 Nerede her düğüm sadece puan için, max, diğer iki düğüm. 905 00:45:22,450 --> 00:45:25,434 Ve böylece burada farklı olması senin ağacında simetri 906 00:45:25,434 --> 00:45:28,600 o kolay tür bakmak için yapar değerleri ne sonra size çünkü vardır 907 00:45:28,600 --> 00:45:30,150 Her zaman sol ya da sağ var. 908 00:45:30,150 --> 00:45:33,150 Bir sol üçte gibi Orada asla Sol veya soldan gelen dördüncü. 909 00:45:33,150 --> 00:45:36,358 Size bir sol ve hakkına sahip sadece var ve o iki ya da arama yapabilirsiniz. 910 00:45:36,358 --> 00:45:38,980 Ve böylece bu neden yararlıdır? 911 00:45:38,980 --> 00:45:40,980 Bu olduğu yolu Eğer arıyorsanız yararlıdır 912 00:45:40,980 --> 00:45:42,890 Doğru, değerler üzerinden aramak için? 913 00:45:42,890 --> 00:45:45,640 Aksine ikili uygulanması daha Bir hata dizideki arama 914 00:45:45,640 --> 00:45:49,260 Eğer düğümlerin eklemek mümkün olmak istedim ve at will ve ayrıca düğümleri götürmek 915 00:45:49,260 --> 00:45:52,185 Aramayı korumak İkili arama kapasiteleri. 916 00:45:52,185 --> 00:45:54,560 Yani bu şekilde, biz tür konum ne zaman hatırlamak tricking-- 917 00:45:54,560 --> 00:45:56,530 bağlı listeler ikili arama yapamaz dedi? 918 00:45:56,530 --> 00:46:01,700 Biz tür bir veri yapısını oluştururken hileler çalışma içine o. 919 00:46:01,700 --> 00:46:05,034 >> Ve böylece çünkü bağlı listeler, doğrusal onlar sadece birbiri ardına bağlantı. 920 00:46:05,034 --> 00:46:06,950 Biz tür olabilir işaretçileri farklı sıralama 921 00:46:06,950 --> 00:46:09,408 Farklı düğümlere o nokta Bu arama ile bize yardımcı olabilir. 922 00:46:09,408 --> 00:46:12,590 Ve işte, eğer ben istedim İkili arama ağacı var, 923 00:46:12,590 --> 00:46:14,090 Biliyorum benim orta olduğunu 55 ise. 924 00:46:14,090 --> 00:46:18,280 Ben sadece oluşturmak için gidiyorum Benim orta olarak, benim root olarak, 925 00:46:18,280 --> 00:46:20,770 ve sonra ben gidiyorum değerler bunun spin off. 926 00:46:20,770 --> 00:46:25,610 >> Yani burada, ben aramak için gidiyorum 66 değeri, ben 55 başlayabilirsiniz. 927 00:46:25,610 --> 00:46:27,310 Bu 55 den 66 büyük değil mi? 928 00:46:27,310 --> 00:46:30,970 Evet öyle, bu yüzden ben arama mus biliyorum i n bu ağacın sağ işaretçi. 929 00:46:30,970 --> 00:46:32,440 Ben 77 gidin. 930 00:46:32,440 --> 00:46:35,367 Tamam daha az ya da 77 daha büyük 66 mi? 931 00:46:35,367 --> 00:46:37,950 Ah, o daha az, bu yüzden bilirsin, Geriye kalan düğümü olmalıdır. 932 00:46:37,950 --> 00:46:41,410 >> Ve işte biz tür koruyarak ediyoruz diziler hakkında harika şeyler tüm 933 00:46:41,410 --> 00:46:44,420 böylece dinamik boyutlandırma gibi Nesnelerin, olduğu 934 00:46:44,420 --> 00:46:49,530 takın ve irade silmek mümkün, Sabit konusunda endişelenmenize gerek kalmadan 935 00:46:49,530 --> 00:46:50,370 alan miktarı. 936 00:46:50,370 --> 00:46:52,820 Biz hala tüm korumak Bu harika şeyler 937 00:46:52,820 --> 00:46:57,140 Ayrıca korumak mümkün olurken log ve ikili arama zamanını arama 938 00:46:57,140 --> 00:47:00,450 Daha önce sadece edildi bir ifade almak mümkün. 939 00:47:00,450 --> 00:47:06,310 >> Serin veri yapısı, tür Karmaşık, düğüm uygulamak. 940 00:47:06,310 --> 00:47:08,311 Eğer tüm görebileceğiniz gibi düğümün yapıdır 941 00:47:08,311 --> 00:47:10,143 Eğer bir sol olması ve doğru gösterici. 942 00:47:10,143 --> 00:47:11,044 Yani hepsi bu. 943 00:47:11,044 --> 00:47:12,960 Yani yerine sadece daha Bir x veya bir önceki sahip. 944 00:47:12,960 --> 00:47:15,920 Daha sonra sola veya sağa ve var ne tür onları birbirine bağlayabilirsiniz 945 00:47:15,920 --> 00:47:16,836 Ancak bunu seçin. 946 00:47:16,836 --> 00:47:21,080 947 00:47:21,080 --> 00:47:24,270 >> Tamam, biz aslında gidiyoruz Sadece birkaç dakika sürebilir. 948 00:47:24,270 --> 00:47:25,790 Yani biz buraya gitmek için gidiyoruz. 949 00:47:25,790 --> 00:47:28,270 Daha önce de söylediğim gibi, Tür açıkladı 950 00:47:28,270 --> 00:47:31,520 biz nasıl arkasındaki mantık Bu arama olacaktır. 951 00:47:31,520 --> 00:47:33,860 Biz denemek için gidiyoruz Bu out pseudocoding görmek için 952 00:47:33,860 --> 00:47:38,000 biz tür uygulayabilirsiniz eğer İkili arama Aynı mantık 953 00:47:38,000 --> 00:47:40,055 veri yapısının farklı bir tür. 954 00:47:40,055 --> 00:47:45,049 Siz bir çift gibi almak istiyorsanız dakika sadece bu düşünmek. 955 00:47:45,049 --> 00:48:45,927 956 00:48:45,927 --> 00:48:46,925 TAMAM. 957 00:48:46,925 --> 00:48:51,407 Pekala, ben gidiyorum Aslında sadece hayır Şeyin vermek, 958 00:48:51,407 --> 00:48:52,990 Biz ilk pseudocode hakkında konuşacağız. 959 00:48:52,990 --> 00:48:56,580 Yani herkes istiyor bir bıçak vermek ne 960 00:48:56,580 --> 00:49:02,100 Ne zaman yapmak istediğim ilk şey Eğer arama dışarı başlıyoruz? 961 00:49:02,100 --> 00:49:04,460 Biz arıyorsanız 66 değeri, ne 962 00:49:04,460 --> 00:49:07,940 Biz eğer yapmak istediğim ilk şey Bu ağaç Arama ikili istiyor? 963 00:49:07,940 --> 00:49:10,760 >> HEDEF KİTLE: Haklısınız bakmak istiyorum ve [duyulamaz] sol bakmak ve görmek 964 00:49:10,760 --> 00:49:11,230 daha çok sayıda. 965 00:49:11,230 --> 00:49:12,271 >> ANDI PENG: Evet, kesinlikle. 966 00:49:12,271 --> 00:49:15,350 Yani kök bakmak için gidiyoruz. 967 00:49:15,350 --> 00:49:18,180 Arayabileceğiniz birçok yolu var o, senin üst düğüm insanlar söylüyorlar. 968 00:49:18,180 --> 00:49:21,317 Çünkü kök demek istiyorum o ağacın köküne benziyor. 969 00:49:21,317 --> 00:49:23,400 Sen bakmak için gidiyoruz Kök düğüm, ve sen 970 00:49:23,400 --> 00:49:26,940 göreceğiz 66 daha fazladır veya daha az 55. 971 00:49:26,940 --> 00:49:30,360 Ve iyi, öyle, daha büyük olursa daha fazla, nereye bakmak istiyorsun? 972 00:49:30,360 --> 00:49:32,000 Nereye doğru, şimdi aramak istiyorsunuz? 973 00:49:32,000 --> 00:49:34,340 Biz aramak istediğiniz Bu ağacın sağ yarısı. 974 00:49:34,340 --> 00:49:38,390 >> Yani biz var, uygun bir sağa işaret işaretçi. 975 00:49:38,390 --> 00:49:44,325 Ve böylece o zaman ayarlayabilirsiniz Yeni kök 77 olmak. 976 00:49:44,325 --> 00:49:46,450 Biz sadece yere gidebilirsiniz işaretçi işaret ediyor. 977 00:49:46,450 --> 00:49:49,100 Peki, ah, işte başlıyoruz 77 at ve biz sadece can 978 00:49:49,100 --> 00:49:51,172 ardışık tekrar tekrar bunu. 979 00:49:51,172 --> 00:49:52,880 Bu şekilde, ne tür Bir işlevi var. 980 00:49:52,880 --> 00:49:57,430 Sen bu arama bir yolu var Sadece ve tekrar üzerinde tekrarlayabilirsiniz, 981 00:49:57,430 --> 00:50:02,720 Bakmak istediğiniz yere bağlı olarak sonunda değeri elde edene kadar 982 00:50:02,720 --> 00:50:04,730 Aradığınız söyledi. 983 00:50:04,730 --> 00:50:05,230 Mantıklı? 984 00:50:05,230 --> 00:50:07,800 >> Sana gerçek göstermek üzere olduğum kod ve kod bir çok şey. 985 00:50:07,800 --> 00:50:08,674 Gerek yok korkutmaya. 986 00:50:08,674 --> 00:50:09,910 Biz bu kadar konuşacağız. 987 00:50:09,910 --> 00:50:13,410 988 00:50:13,410 --> 00:50:14,020 >> Aslında hayır. 989 00:50:14,020 --> 00:50:15,061 Bu sadece pseudocode oldu. 990 00:50:15,061 --> 00:50:17,860 Tamam, bu sadece pseudocode oldu hangi biraz karmaşık, 991 00:50:17,860 --> 00:50:19,751 ama tamamen iyi. 992 00:50:19,751 --> 00:50:21,000 Burada herkesi birlikte aşağıdaki? 993 00:50:21,000 --> 00:50:24,260 Kök null ise, dönüş yanlış o yollarla çünkü 994 00:50:24,260 --> 00:50:26,850 Hatta orada bir şey yok. 995 00:50:26,850 --> 00:50:31,376 >> Kök n eğer öyleyse değeri ise o Eğer bakıyoruz biri olur, 996 00:50:31,376 --> 00:50:34,000 o zaman gerçek dönmek için gidiyoruz Bildiğiniz çünkü bunu buldum. 997 00:50:34,000 --> 00:50:36,250 Ama değer az ise n kök yerine, sen 998 00:50:36,250 --> 00:50:38,332 sol arama gidiş çocuk veya sol yaprak, 999 00:50:38,332 --> 00:50:39,540 onu aramak istediğiniz ne olursa olsun. 1000 00:50:39,540 --> 00:50:41,750 Ve değer kök büyükse, Doğru ağaç aramak için gidiyoruz, 1001 00:50:41,750 --> 00:50:44,610 sonra sadece işlevi çalıştırmak arama yoluyla tekrar. 1002 00:50:44,610 --> 00:50:48,037 >> Ve kök, null o ise Size sonuna ulaştınız demektir? 1003 00:50:48,037 --> 00:50:50,120 Yani hayır var demektir daha fazla yaprakları aramak için, 1004 00:50:50,120 --> 00:50:52,230 o zaman ben, oh, biliyorum Burası değil sanırım 1005 00:50:52,230 --> 00:50:55,063 Ben inceledim çünkü sonra ve burada değil her şey, 1006 00:50:55,063 --> 00:50:56,930 Sadece burada olmayabilir. 1007 00:50:56,930 --> 00:50:58,350 >> Bu herkese mantıklı mı? 1008 00:50:58,350 --> 00:51:03,230 Yani koruyarak ikili arama gibi bağlantılı listeler yetenekleri. 1009 00:51:03,230 --> 00:51:09,200 Serin ve böylece ikinci tip veri yapısı adamlar 1010 00:51:09,200 --> 00:51:13,180 senin pset üzerinde uygulama deneyebilirsiniz, Eğer sadece tek bir yöntemi seçmek zorundasınız. 1011 00:51:13,180 --> 00:51:19,430 Ama belki de alternatif bir yöntem için karma tablo bir trie diyoruz. 1012 00:51:19,430 --> 00:51:24,080 >> Tüm bir tray olan ağaç belirli bir tür olduğunu 1013 00:51:24,080 --> 00:51:28,600 diğer değerlere gitmek değerleri vardır. 1014 00:51:28,600 --> 00:51:31,450 Bunun yerine bir ikili olan anlamda ağaç tek olduğunu 1015 00:51:31,450 --> 00:51:35,940 şey iki işaret, sen olabilir pek çok şey için bir şey gelin. 1016 00:51:35,940 --> 00:51:39,450 Siz aslında diziler var hangi saklamak içinde 1017 00:51:39,450 --> 00:51:41,790 Diğer diziler işaret işaretçileri. 1018 00:51:41,790 --> 00:51:45,210 1019 00:51:45,210 --> 00:51:49,460 >> Peki biz nasıl düğüm Bir trie tanımlarsınız 1020 00:51:49,460 --> 00:51:52,590 Biz istiyorum olduğunu Boole, c kelime değil mi? 1021 00:51:52,590 --> 00:51:54,920 Yani düğüm Boolean olduğunu , doğru veya yanlış gibi 1022 00:51:54,920 --> 00:51:58,490 başında öncelikle Bu dizi, bu bir kelime? 1023 00:51:58,490 --> 00:52:03,620 İkincisi, işaretçiler sahip olmak istiyorum ne olursa olsun onları geri kalanı. 1024 00:52:03,620 --> 00:52:07,470 Biraz karmaşık, biraz soyut, ama Ne o bütün araçları açıklayacağız. 1025 00:52:07,470 --> 00:52:13,800 >> Yani burada, üstünde, eğer Bir dizi zaten ilan var, 1026 00:52:13,800 --> 00:52:17,040 Eğer bir Boole var bir düğüm ön depolanmış değeri 1027 00:52:17,040 --> 00:52:19,490 Bu, bu bir kelime söyler? 1028 00:52:19,490 --> 00:52:20,520 Bu bir kelime mi? 1029 00:52:20,520 --> 00:52:23,240 Ve sonra var senin dizinin geri kalanı o 1030 00:52:23,240 --> 00:52:26,040 aslında saklar tüm ne olabilir olanakları. 1031 00:52:26,040 --> 00:52:28,660 Bu nedenle, örneğin, gibi üstünde var 1032 00:52:28,660 --> 00:52:32,140 doğru ya da diyor ilk şey Yanlış, evet ya da hayır, bu bir kelimedir. 1033 00:52:32,140 --> 00:52:38,130 >> Ve sonra 26. boyunca 0 var saklayabilirsiniz harfler. 1034 00:52:38,130 --> 00:52:42,790 Burada arama isteseydim Yarasa, ben üstüne gitmek 1035 00:52:42,790 --> 00:52:49,200 ve ben de B buluyorum B. bakmak benim dizi ve böylece biliyorum, tamam, B bir kelimedir? 1036 00:52:49,200 --> 00:52:53,010 B yani böylece, bir kelime değil Ben araştırıcı tutmalısınız. 1037 00:52:53,010 --> 00:52:56,410 Ben B gidin ve ben bakmak B doğru işaret işaretçi 1038 00:52:56,410 --> 00:53:00,900 ve ben, bilgi başka bir dizi görmek Daha önce vardı aynı yapı. 1039 00:53:00,900 --> 00:53:05,240 >> Ve, oh sonraki var-- [duyulamaz] harfi A. 1040 00:53:05,240 --> 00:53:07,210 Yani biz bu dizide bak. 1041 00:53:07,210 --> 00:53:10,860 Biz sekizinci değeri bulmak, ve sonra, oh, görmek için bakmak 1042 00:53:10,860 --> 00:53:12,840 hey, bir kelime olduğunu, B-A bir kelimedir? 1043 00:53:12,840 --> 00:53:13,807 Bu bir kelime değildir. 1044 00:53:13,807 --> 00:53:14,890 Biz aramaya devam etmelisin. 1045 00:53:14,890 --> 00:53:17,850 >> Ve böylece o zaman nereye bakmak A puanlık işaretçi, 1046 00:53:17,850 --> 00:53:21,130 ve başka bir şekilde işaret hangi daha fazla değer saklanır var. 1047 00:53:21,130 --> 00:53:24,150 Ve sonunda, biz olsun Bir kelime B-A-T,. 1048 00:53:24,150 --> 00:53:25,970 Ve böylece bir dahaki sefere bak, sen gidiyorsun 1049 00:53:25,970 --> 00:53:30,850 evet, o çeki var, Bu Boole fonksiyonu doğrudur. 1050 00:53:30,850 --> 00:53:35,450 Ve böylece anlamda biz naziksiniz dizileri ile bir ağaç olan. 1051 00:53:35,450 --> 00:53:39,890 >> Öyleyse ne tür aşağı arama yapabilirsiniz. 1052 00:53:39,890 --> 00:53:43,650 Aksine bir işlev karma daha ve Bağlantılı liste değerleri atayarak, 1053 00:53:43,650 --> 00:53:49,190 Sadece bir uygulayabilirsiniz downwords arama tray. 1054 00:53:49,190 --> 00:53:50,850 Gerçekten, gerçekten bir şeyler karmaşık. 1055 00:53:50,850 --> 00:53:54,060 Ben gibiyim çünkü düşünmek kolay değil Pek çok veri yapılarını tükürme 1056 00:53:54,060 --> 00:53:58,710 Sana, ancak tür herkes yapar Bu mantığı nasıl çalıştığını anlamak? 1057 00:53:58,710 --> 00:54:01,920 >> Tamam iyi. 1058 00:54:01,920 --> 00:54:05,600 Bu nedenle B-A-T, ve sonra Aramak gidiyoruz. 1059 00:54:05,600 --> 00:54:07,940 Gittiğin dahaki sefere oh, hey, bu doğrudur, görmek, 1060 00:54:07,940 --> 00:54:09,273 Böylece bu bir kelime olmalı biliyorum. 1061 00:54:09,273 --> 00:54:12,030 1062 00:54:12,030 --> 00:54:13,770 >> Hayvanat bahçesi için aynı şey. 1063 00:54:13,770 --> 00:54:17,960 Yani burada bir şey varsa, şu an var biz Şu anda, hayvanat bahçesi aramak istedim, 1064 00:54:17,960 --> 00:54:20,780 Şu anda hayvanat bahçesi değil, bir Bizim kelimesinin sözlük 1065 00:54:20,780 --> 00:54:25,300 Çünkü siz, gördüğünüz gibi Biz bir Boole gereken ilk yer 1066 00:54:25,300 --> 00:54:28,590 dönmek gerçek zoom sonundadır. 1067 00:54:28,590 --> 00:54:30,430 Biz Z-O-O-M var. 1068 00:54:30,430 --> 00:54:33,900 >> Ve işte, biz aslında yok Bizim kelimesinin sözlük, hayvanat bahçesi, 1069 00:54:33,900 --> 00:54:36,070 Bu onay kutusu işaretli olmadığından. 1070 00:54:36,070 --> 00:54:39,540 Yani bilgisayar değil Hayvanat Bahçesi bir kelime olduğunu biliyorum 1071 00:54:39,540 --> 00:54:42,430 Çünkü biz ettik yolu Sadece yakınlaştırma burada, o saklanır 1072 00:54:42,430 --> 00:54:44,920 aslında bir Boolean değeri vardır Bu doğru döndü oldu. 1073 00:54:44,920 --> 00:54:49,380 Biz eklemek istiyorsanız Yani kelime, hayvanat bahçesi, bizim sözlüğümüze, 1074 00:54:49,380 --> 00:54:51,770 Biz bunu yaparken nasıl hakkında gitmek istiyorsunuz? 1075 00:54:51,770 --> 00:54:55,960 Emin olmak için yapmak zorunda ne bizim Bilgisayar Z-O-O bir kelime olduğunu biliyor 1076 00:54:55,960 --> 00:54:58,130 ve ilk kelime Z-O-O-M? 1077 00:54:58,130 --> 00:54:59,360 >> HEDEF KİTLE: [duyulamaz] 1078 00:54:59,360 --> 00:55:01,450 >> ANDI PENG: Kesinlikle, biz Bu emin olmak için 1079 00:55:01,450 --> 00:55:07,890 Burada, o Boolean değeri bu doğru bu kapalı kontrol etti. 1080 00:55:07,890 --> 00:55:13,297 Z-O-O, o zaman kontrol etmek gidiyoruz, bu yüzden tam olarak, hey, hayvanat bahçesi, bir kelime olduğunu biliyorum. 1081 00:55:13,297 --> 00:55:15,380 Ben söyleyeceğim o bir kelime öylesine var bilgisayar 1082 00:55:15,380 --> 00:55:18,000 , bilgisayar denetler olduğunu bu hayvanat bahçesi bir kelime olduğunu biliyor. 1083 00:55:18,000 --> 00:55:21,269 >> Tüm bu verileri hatırlayacak Çünkü yapılar, bizim için çok kolay 1084 00:55:21,269 --> 00:55:22,310 oh, yarasa bir kelime söylemek için. 1085 00:55:22,310 --> 00:55:22,851 Zoo kelime. 1086 00:55:22,851 --> 00:55:23,611 Yakınlaştırma bir kelime. 1087 00:55:23,611 --> 00:55:25,860 Ama bunu inşa ederken, Bilgisayar hiçbir fikri yok. 1088 00:55:25,860 --> 00:55:28,619 >> Yani tam olarak söylemek zorundayım hangi noktada bu kelime? 1089 00:55:28,619 --> 00:55:29,910 Hangi noktada bir kelime değil mi? 1090 00:55:29,910 --> 00:55:31,784 Ve hangi noktada ben yapmak şeyleri aramanıza gerek, 1091 00:55:31,784 --> 00:55:34,000 ve hangi noktada ben bir sonraki gitmek gerekir? 1092 00:55:34,000 --> 00:55:37,010 Bu açık Herkes? 1093 00:55:37,010 --> 00:55:39,540 Güzel. 1094 00:55:39,540 --> 00:55:42,530 >> Ve böylece o geliyor sorunu nasıl olur 1095 00:55:42,530 --> 00:55:45,560 bir şey ekleme hakkında gitmek orada aslında değil mi? 1096 00:55:45,560 --> 00:55:49,090 Yani sadece biz eklemek istediğiniz diyelim Bizim tray içine kelime, banyo,. 1097 00:55:49,090 --> 00:55:53,589 Size çocuklar şu anda gibi görebileceğiniz gibi Şu anda sahip olduğumuz tüm B-A-T 1098 00:55:53,589 --> 00:55:55,630 ve bu yeni veri yapısı bir bira bardağı var olduğunu 1099 00:55:55,630 --> 00:55:59,740 biz varsayalım, çünkü null işaret oh, B-A-T sonra hiçbir kelime yoktur ki, 1100 00:55:59,740 --> 00:56:02,530 Neden biz tutmak gerekiyor O T. sonra şeylere sahip 1101 00:56:02,530 --> 00:56:06,581 >> Size bunu Ama eğer sorun ortaya çıkar sonra gelen bir kelime istiyorum 1102 00:56:06,581 --> 00:56:07,080 T. 1103 00:56:07,080 --> 00:56:09,500 Eğer banyo varsa, sen H hakkı istemek için gidiyor. 1104 00:56:09,500 --> 00:56:13,290 Ve böylece biz bunu gidiyoruz yoludur biz ayrı bir düğüm oluşturmak için gidiyoruz. 1105 00:56:13,290 --> 00:56:16,840 Biz ne olursa olsun tutarı tahsis değiliz Bu yeni dizinin hafıza, 1106 00:56:16,840 --> 00:56:20,720 ve biz işaretçileri yeniden atamak için gidiyoruz. 1107 00:56:20,720 --> 00:56:22,947 >> Biz atamak için gidiyoruz H Her şeyden önce, bu null, 1108 00:56:22,947 --> 00:56:24,030 Biz kurtulmak için gidiyoruz. 1109 00:56:24,030 --> 00:56:26,590 Biz gidiyoruz H noktası aşağıya. 1110 00:56:26,590 --> 00:56:30,600 Biz H görürseniz, bunu istiyoruz Başka bir yere gitmek için. 1111 00:56:30,600 --> 00:56:33,910 >> Burada, biz o zaman evet kontrol edebilirsiniz. 1112 00:56:33,910 --> 00:56:38,170 Biz T sonra H vurursanız, oh, o zaman bu bir kelime olduğunu biliyoruz. 1113 00:56:38,170 --> 00:56:41,110 Boolean true dönmek için gidiyor. 1114 00:56:41,110 --> 00:56:42,950 Herkes bu oldu nasıl anlaşılır? 1115 00:56:42,950 --> 00:56:45,110 TAMAM. 1116 00:56:45,110 --> 00:56:47,214 >> Yani aslında, tüm Bu veri yapıları 1117 00:56:47,214 --> 00:56:50,130 bugün üzerinde gittin, ben ettik Gerçekten, gerçekten hızlı bir şekilde üzerlerine gitti 1118 00:56:50,130 --> 00:56:52,192 ve pek için detay ve Tamam. 1119 00:56:52,192 --> 00:56:53,900 Eğer karışıklık başladıktan sonra onunla, size olacak 1120 00:56:53,900 --> 00:56:55,733 nerede izleyebilmek tüm işaretçiler vardır 1121 00:56:55,733 --> 00:56:58,060 ne oluyor senin veri yapıları, vesaire. 1122 00:56:58,060 --> 00:56:59,810 Onlar, çok yararlı olacak ve size kalmış 1123 00:56:59,810 --> 00:57:03,890 adamlar tamamen anlamaya Bir şeyleri uygulamak istiyorum. 1124 00:57:03,890 --> 00:57:07,650 >> Ve böylece pset4, bir 5-- ah, o yanlış. 1125 00:57:07,650 --> 00:57:10,140 Pset5 imla hataları olduğunu. 1126 00:57:10,140 --> 00:57:13,710 Daha önce de söylediğim gibi, bir kez gidiyoruz Yine bizden kaynak kodunu indirin. 1127 00:57:13,710 --> 00:57:16,210 Üç ana Orada gidiyor şeyler indirirken olacak. 1128 00:57:16,210 --> 00:57:18,470 Sen, sözlükler indirebilirsiniz edeceğiz kers ve metinler. 1129 00:57:18,470 --> 00:57:21,660 >> Tüm bu şeyler vardır ya da kelime sözlükleri 1130 00:57:21,660 --> 00:57:25,190 biz kontrol etmek istediğiniz veya bilgi testi 1131 00:57:25,190 --> 00:57:26,930 biz imla denetimi istediğiniz. 1132 00:57:26,930 --> 00:57:29,670 Ve böylece sözlükler biz gidiyoruz vermek 1133 00:57:29,670 --> 00:57:34,870 Size istediğimiz gerçek kelimeleri vermek Eğer bu şekilde bir şekilde saklamak için 1134 00:57:34,870 --> 00:57:36,530 bir dizi daha etkilidir. 1135 00:57:36,530 --> 00:57:38,470 Ve sonra metinleri Biz ne konum olacak 1136 00:57:38,470 --> 00:57:43,900 soran emin olmak için kontrol büyü kelimelerin hepsi gerçek kelime vardır. 1137 00:57:43,900 --> 00:57:47,970 >> Ve bu nedenle üç blok size vereceğim programları 1138 00:57:47,970 --> 00:57:51,130 dictionary.c denir dictionary.h ve speller.c. 1139 00:57:51,130 --> 00:57:56,500 Ve böylece tüm dictionary.c olduğunu yapar Ne uygulamak için istenir. 1140 00:57:56,500 --> 00:57:57,880 Bu kelimeleri yükler. 1141 00:57:57,880 --> 00:58:02,000 Bu denetler onları büyü ve emin olur O her şeyin düzgün eklenir. 1142 00:58:02,000 --> 00:58:05,180 >> diction.h sadece bir kitaplık dosyası tüm bu fonksiyonları bildirir. 1143 00:58:05,180 --> 00:58:07,650 Ve speller.c, biz sana vereceğiz. 1144 00:58:07,650 --> 00:58:09,290 Bunu herhangi değiştirmeniz gerekmez. 1145 00:58:09,290 --> 00:58:14,290 Tüm speller.c olduğunu sürer, yüklerin, bunun hızını kontrol eder, 1146 00:58:14,290 --> 00:58:19,190 nasıl bir kriter testleri gibi hızlı bir şekilde şeyler yapmak mümkün olacaktır. 1147 00:58:19,190 --> 00:58:20,410 >> Bu bir yazım var. 1148 00:58:20,410 --> 00:58:23,920 Sadece onunla karışıklık yok, ama yapmak emin ne yaptığını anlıyorum. 1149 00:58:23,920 --> 00:58:28,090 Biz bir işlev olarak adlandırılan getrusage kullanan senin büyünün performansını test 1150 00:58:28,090 --> 00:58:28,590 denetleyicisi. 1151 00:58:28,590 --> 00:58:32,200 Tüm bu temelde test etmek olduğunu yapar Sözlüğünüzdeki her şeyin zamanı, 1152 00:58:32,200 --> 00:58:33,680 bu yüzden onu anlamak emin olun. 1153 00:58:33,680 --> 00:58:36,660 Onunla karışıklık için dikkatli olun ya da Başka şeyler düzgün çalışmaz. 1154 00:58:36,660 --> 00:58:39,740 1155 00:58:39,740 --> 00:58:44,170 >> Ve bu meydan toplu içindir Siz gerçekten dictionary.c değiştirmek için. 1156 00:58:44,170 --> 00:58:48,526 Size vermek için gidiyoruz Bir sözlükte 140,000 kelime. 1157 00:58:48,526 --> 00:58:50,900 Size bir metin vereceğiz bu kelimeleri içeren dosyadır, 1158 00:58:50,900 --> 00:58:54,840 ve biz organize edebilmek olmak istiyorum karma tablo veya bir tray içine onları 1159 00:58:54,840 --> 00:58:58,140 Biz büyü istiyoruz çünkü ne zaman Eğer büyü iseniz hayal check-- 1160 00:58:58,140 --> 00:59:00,690 Homeros'un Odyssey gibi kontrol. 1161 00:59:00,690 --> 00:59:03,010 Bu çok büyük bir testi gibi. 1162 00:59:03,010 --> 00:59:05,190 >> Her düşünün sözcük bakmak zorunda kaldı 1163 00:59:05,190 --> 00:59:08,100 140.000 değerler dizisi aracılığıyla. 1164 00:59:08,100 --> 00:59:10,350 Bu sonsuza kadar sürer makineniz çalıştırmak için. 1165 00:59:10,350 --> 00:59:14,490 Nerede biz organize etmek istiyoruz yüzden daha verimli veri yapılarına veri 1166 00:59:14,490 --> 00:59:17,270 Böyle bir karma tablo veya bir tray olarak. 1167 00:59:17,270 --> 00:59:20,700 Ve sonra siz tür yapabilirsiniz Erişim arama ne zaman 1168 00:59:20,700 --> 00:59:22,570 işler daha kolay ve daha hızlı. 1169 00:59:22,570 --> 00:59:24,934 >> Ve böylece çarpışmalar çözmek için dikkatli olun. 1170 00:59:24,934 --> 00:59:27,350 Bir demet almak için gidiyoruz A ile bu başlangıç ​​kelimelerin 1171 00:59:27,350 --> 00:59:29,957 Bir demet kelime almak için gidiyoruz Bu sizin kadar B. ile başlar 1172 00:59:29,957 --> 00:59:31,290 İstediğiniz kadar adamlar bunu çözmek için. 1173 00:59:31,290 --> 00:59:34,144 Belki daha var verimli hash fonksiyonu 1174 00:59:34,144 --> 00:59:36,810 sadece ilk harfi daha bir şey, ve böylece size kalmış 1175 00:59:36,810 --> 00:59:38,190 adamlar tür istersen yapmak. 1176 00:59:38,190 --> 00:59:40,148 >> Belki Eklemek istediğiniz birlikte tüm harfler. 1177 00:59:40,148 --> 00:59:43,410 Belki tuhaf şeyler yapmak istiyorum istiyorum harflerin sayısını hesap, 1178 00:59:43,410 --> 00:59:43,970 Herneyse. 1179 00:59:43,970 --> 00:59:45,386 Yapmak istediğiniz nasıl çocuklar kadar. 1180 00:59:45,386 --> 00:59:49,262 Eğer eğer, bir karma tablo yapmak istiyorsanız Tamamen size kalmış, bir trie denemek istiyorum. 1181 00:59:49,262 --> 00:59:52,470 Ben vaktinden sizi uyaracaktır tray genellikle biraz daha zor 1182 00:59:52,470 --> 00:59:54,520 Bir çok şey var sırf Daha fazla işaretçileri takip etmek. 1183 00:59:54,520 --> 00:59:55,645 Ama tamamen Sizinle kadar. 1184 00:59:55,645 --> 00:59:58,742 Bu çok daha verimli olduğunu çoğu durumda. 1185 00:59:58,742 --> 01:00:01,450 Gerçekten devam edebilmek istiyorum senin işaretçileri tüm iz. 1186 01:00:01,450 --> 01:00:03,850 Gibi aynı şeyi yapmak Ben burada ne işi olduğunu. 1187 01:00:03,850 --> 01:00:06,871 Ne zaman eklemek için çalışıyoruz karma tabloya değerleri veya silmek, 1188 01:00:06,871 --> 01:00:08,620 sen emin olun Gerçekten takip 1189 01:00:08,620 --> 01:00:11,860 Her şey çünkü nerede o ben eğer gerçekten kolay 1190 01:00:11,860 --> 01:00:14,727 kelime, Andy gibi eklemeye çalışıyor. 1191 01:00:14,727 --> 01:00:16,810 Sadece bu diyelim Gerçek kelime, kelime, andy, 1192 01:00:16,810 --> 01:00:19,640 Bir kelime dev listesine. 1193 01:00:19,640 --> 01:00:22,450 >> Ben sadece yeniden atamak için ne bir işaretçi yanlış ayy, 1194 01:00:22,450 --> 01:00:24,940 bütününü gidiyor Benim bağlantılı liste geri kalanı. 1195 01:00:24,940 --> 01:00:26,897 Şimdi tek kelime ben var andy ve şimdi 1196 01:00:26,897 --> 01:00:29,230 başka bir deyişle tüm Sözlük kayboldu. 1197 01:00:29,230 --> 01:00:31,370 Ve bu yüzden size emin olmak senin işaretçileri tüm takip 1198 01:00:31,370 --> 01:00:33,661 ya da başka almak için gidiyoruz kodunuzu büyük sorunlar. 1199 01:00:33,661 --> 01:00:35,840 Adım adım dikkatlice şeyler çizin. 1200 01:00:35,840 --> 01:00:37,870 Bu düşünmek çok daha kolay hale getirir. 1201 01:00:37,870 --> 01:00:40,910 >> Ve son olarak, mümkün olmak istiyorum Programınızın sizin performansını test 1202 01:00:40,910 --> 01:00:41,618 Büyük gemide. 1203 01:00:41,618 --> 01:00:43,710 Siz alırsan bir Şu anda CS50 bakmak, 1204 01:00:43,710 --> 01:00:45,210 Biz büyük tahta ne denir var. 1205 01:00:45,210 --> 01:00:50,200 Bu hızlı puan levhasıdır CS50 tamamında denetimi kez yazım 1206 01:00:50,200 --> 01:00:55,720 Şu anda, ben 10 gibi üst düşünüyorum Zaman ben onlardan sekiz personel olduğunu düşünüyorum. 1207 01:00:55,720 --> 01:00:57,960 Biz gerçekten siz bizi yenmek istiyorlar. 1208 01:00:57,960 --> 01:01:00,870 >> Hepimiz uygulamaya çalışıyorlardı mümkün olduğunca hızlı kodu. 1209 01:01:00,870 --> 01:01:04,880 Biz sizler meydan denemek istiyorum Bize ve hepimiz daha hızlı uygulanması 1210 01:01:04,880 --> 01:01:05,550 can. 1211 01:01:05,550 --> 01:01:07,970 Ve böylece bu gerçekten Biz konum ilk kez 1212 01:01:07,970 --> 01:01:12,680 Sizi soran bir pset yapmak için bu Eğer gerçekten ne olursa olsun yönteminde yapabilirsiniz 1213 01:01:12,680 --> 01:01:13,760 İstediğiniz. 1214 01:01:13,760 --> 01:01:17,730 >> Ben her zaman bu daha yakındır demek gerçek hayatta çözüm, değil mi? 1215 01:01:17,730 --> 01:01:19,550 Hey, bunu yapmak gerekir, diyorum. 1216 01:01:19,550 --> 01:01:21,380 Benim için bunu yapar bir program oluşturun. 1217 01:01:21,380 --> 01:01:22,630 İstediğiniz ancak bunu. 1218 01:01:22,630 --> 01:01:24,271 Ben sadece oruç tutmak istediğini biliyorum. 1219 01:01:24,271 --> 01:01:25,770 İşte bu hafta için mücadeledir. 1220 01:01:25,770 --> 01:01:27,531 Siz, biz gidiyoruz Sana bir görev verecek. 1221 01:01:27,531 --> 01:01:29,030 Size bir meydan okuma vermek için gidiyoruz. 1222 01:01:29,030 --> 01:01:31,559 Ve o zaman çocuklar kadar var tamamen sadece anlamaya 1223 01:01:31,559 --> 01:01:34,100 en hızlı ve en ne verimli bir şekilde uygulamak için. 1224 01:01:34,100 --> 01:01:34,600 Evet? 1225 01:01:34,600 --> 01:01:37,476 >> HEDEF KİTLE: Biz eğer izin var Daha hızlı yollarını araştırma istedi 1226 01:01:37,476 --> 01:01:40,821 Yapabileceğimiz, çevrimiçi hash tabloları yapmak Bu ve başkasının kodunu alıntı? 1227 01:01:40,821 --> 01:01:42,070 ANDI PENG: Evet, tamamen iyi. 1228 01:01:42,070 --> 01:01:44,320 Yani siz okursanız spec, bir çizgi var 1229 01:01:44,320 --> 01:01:48,310 Eğer çocuklar diyor spec karma araştırma tamamen ücretsiz 1230 01:01:48,310 --> 01:01:51,070 ne bazı fonksiyonlar hızlı hash fonksiyonları 1231 01:01:51,070 --> 01:01:54,720 olarak aracılığıyla şeyler çalıştırmak için Eğer bu kodu alıntı sürece. 1232 01:01:54,720 --> 01:01:57,220 Yani bazı insanlar zaten Hızlı yolları anladım 1233 01:01:57,220 --> 01:02:00,250 hızlı bir büyü dama yapıyor bilgi depolama yolları. 1234 01:02:00,250 --> 01:02:02,750 Tamamen size çocuklar kadar eğer Doğru, sadece almak istiyorum? 1235 01:02:02,750 --> 01:02:04,045 Eğer gerekçe emin olun. 1236 01:02:04,045 --> 01:02:06,170 Meydan burada gerçekten Biz sınamak için çalışıyoruz olduğunu 1237 01:02:06,170 --> 01:02:09,750 Bildiğiniz emin olduğunu yolunuzu etrafında değineği. 1238 01:02:09,750 --> 01:02:12,700 Bildiğim kadarıyla sen uygulama olarak Gerçek hash fonksiyonu 1239 01:02:12,700 --> 01:02:15,070 ve benzeri ile geliyor Matematik yapmak, 1240 01:02:15,070 --> 01:02:17,570 Siz araştırma ne olursa olsun yöntemler çevrimiçi siz istiyoruz. 1241 01:02:17,570 --> 01:02:17,996 Evet? 1242 01:02:17,996 --> 01:02:19,700 >> HEDEF KİTLE: biz sadece alıntı miyiz [duyulamaz] kullanarak? 1243 01:02:19,700 --> 01:02:20,120 >> ANDI PENG: Evet. 1244 01:02:20,120 --> 01:02:22,328 You can sadece senin açıklamada, Eğer, oh gibi verebiliriz 1245 01:02:22,328 --> 01:02:26,127 YADA alınan, yada, yada, karma işlevi. 1246 01:02:26,127 --> 01:02:27,210 Herkes herhangi bir sorunuz var mı? 1247 01:02:27,210 --> 01:02:29,694 Biz aslında breezed Bugün bölümünden. 1248 01:02:29,694 --> 01:02:31,610 Ben burada olacak hem de sorulara cevap. 1249 01:02:31,610 --> 01:02:36,570 >> Ayrıca, dediğim gibi, ofis Saat gece ve yarın. 1250 01:02:36,570 --> 01:02:40,307 Bu hafta aslında spec Süper kolay ve okumak için süper kısa. 1251 01:02:40,307 --> 01:02:43,140 Ben sadece, bir göz alarak öneririm Bunun tamamı baştan sona okuyun. 1252 01:02:43,140 --> 01:02:45,730 >> Ve Zamyla aslında size yürür fonksiyonların her birinden 1253 01:02:45,730 --> 01:02:49,796 Eğer uygulamanız gerekir ve bu yüzden var Her şeyi nasıl çok net. 1254 01:02:49,796 --> 01:02:51,920 Sadece emin sen olmak için işaretçileri takip. 1255 01:02:51,920 --> 01:02:53,650 Bu çok zorlu bir pset olduğunu. 1256 01:02:53,650 --> 01:02:56,744 >> Bu gibi çünkü zorlu değil oh, kavramlar çok daha fazla olduğu 1257 01:02:56,744 --> 01:02:59,160 Zor ya da öğrenmek zorunda yol çok yeni sözdizimi 1258 01:02:59,160 --> 01:03:00,650 Geçen pset için yaptım. 1259 01:03:00,650 --> 01:03:03,320 Bu pset zordur, çünkü çok işaretçiler vardır, 1260 01:03:03,320 --> 01:03:06,980 ve o zamanlar çok, çok kolay değil muktedir kodunuzda bir hata var 1261 01:03:06,980 --> 01:03:08,315 Bu hata nerede olduğunu bulmak için. 1262 01:03:08,315 --> 01:03:13,200 >> Ve böylece tam ve sana mutlak inanç adamlar bizim [duyulamaz] yenmek mümkün 1263 01:03:13,200 --> 01:03:13,700 yazımlar. 1264 01:03:13,700 --> 01:03:16,640 Ben aslında herhangi bir yazılı mayın var Henüz değil, ama benim yazmak üzereyim. 1265 01:03:16,640 --> 01:03:19,070 Eğer yazıyoruz süre Yani senin, benim yazılı olacak. 1266 01:03:19,070 --> 01:03:21,070 Ben yapmak denemek için gidiyorum benimki seninkinden daha hızlı. 1267 01:03:21,070 --> 01:03:23,940 Biz hızlı bir kimin görürsünüz. 1268 01:03:23,940 --> 01:03:27,340 >> Ve evet, ben tüm göreceksiniz Burada Salı günü çocuklar. 1269 01:03:27,340 --> 01:03:29,510 Ben bir pset atölyesi gibi bir tür çalışacaktır. 1270 01:03:29,510 --> 01:03:32,640 Bölümlerin hepsi hafta, pset atölyeleri vardır 1271 01:03:32,640 --> 01:03:36,690 böylece siz fırsatlar çok var Yardım için, mesai saatleri her zaman olduğu gibi, 1272 01:03:36,690 --> 01:03:41,330 ve ben gerçekten bekliyoruz senin adamların 'tüm kod okuma. 1273 01:03:41,330 --> 01:03:44,160 Burada eğer sınavlar kadar var adamlar o olsun gelmek istiyorum. 1274 01:03:44,160 --> 01:03:45,880 Bu kadar. 1275 01:03:45,880 --> 01:03:48,180