1 00:00:00,000 --> 00:00:02,520 [Powered by Google Translate] [Həftə 6, davamı] 2 00:00:02,520 --> 00:00:04,160 [David J. Malan] [Harvard Universiteti] 3 00:00:04,160 --> 00:00:08,720 [Bu CS50 edir.] [CS50.TV] 4 00:00:08,720 --> 00:00:12,970 Bu CS50 və bu həftə 6 sonu. 5 00:00:12,970 --> 00:00:17,970 Belə CS50x ki, edX təşəbbüsü cəlb Harvard ilk kursları biri 6 00:00:17,970 --> 00:00:20,590 həqiqətən bu ötən Bazar ertəsi oldu. 7 00:00:20,590 --> 00:00:23,460 İnternet haqqında nə digər bir fikir almaq istəyirsinizsə 8 00:00:23,460 --> 00:00:27,180 İndi birlikdə aşağıdakı, siz x.cs50.net giderim bilər. 9 00:00:27,180 --> 00:00:30,350 Yəni, edx.org müvafiq yerə yönlendirir 10 00:00:30,350 --> 00:00:34,160 bu və MİT və Berkeley digər kursları indi yaşadıqları idi. 11 00:00:34,160 --> 00:00:38,140 Siz bir haqq-hesab üçün qeydiyyatdan lazımdır, siz maddi əsasən eyni olduğunu görəcəksiniz 12 00:00:38,140 --> 00:00:42,170 Əgər biz hər şeyi hazır olaraq, təxirə bir neçə həftə olsa da, bu dövr idi. etdiyiniz kimi 13 00:00:42,170 --> 00:00:46,930 Amma nə CS50x tələbələr indi görəcəksiniz olduqca bu kimi interfeys. 14 00:00:46,930 --> 00:00:50,040 Bu, misal üçün, problem set 0 üçün gözden geçirmek aparıcı Zamyla edir. 15 00:00:50,040 --> 00:00:54,230 Edx.org giriş sonra, CS50x tələbə şeyi növ görür 16 00:00:54,230 --> 00:00:57,170 Bir kurs görmək gözləmək olardı: Bazar ertəsi üçün mühazirə, 17 00:00:57,170 --> 00:01:01,650 Çərşənbə, müxtəlif şort, problem dəstləri, bu walkthroughs, PDF üçün mühazirə. 18 00:01:01,650 --> 00:01:04,459 Bundan əlavə, burada bax, maşın tərcümə 19 00:01:04,459 --> 00:01:08,390 , İspan, İtalyan, Yapon, Çin İngilis dili protokolları və 20 00:01:08,390 --> 00:01:12,810 əlbəttə təkmil olacaq ki, digər dilləri və bütün dəstə 21 00:01:12,810 --> 00:01:15,840 biz API deyilən bir şey istifadə program onları roll kimi 22 00:01:15,840 --> 00:01:18,360 Google və ya proqram proqramlaşdırma interface, 23 00:01:18,360 --> 00:01:21,360 ki, bu digər dillərdə İngilis çevirmək imkan verir. 24 00:01:21,360 --> 00:01:24,100 Lakin bəzi yüz-plus könüllü gözəl ruh sayəsində, 25 00:01:24,100 --> 00:01:26,940 xahiş məşğul olmaq təklif edən İnternet təsadüfi insanlar 26 00:01:26,940 --> 00:01:30,180 Bu layihə, biz tədricən bu tərcümə keyfiyyətinin yaxşılaşdırılması olacaq 27 00:01:30,180 --> 00:01:35,790 insanlar bizim kompüter etdiyiniz səhvləri düzəltmək malik. 28 00:01:35,790 --> 00:01:42,330 >> Biz bir neçə tələbə biz ilkin gözləniləndən daha Bazar ertəsi göstərilir ki, həyata Belə ki çevrilir. 29 00:01:42,330 --> 00:01:48,980 Əslində, indi CS50x evdə birlikdə aşağıdakı 100,000 nəfər var. 30 00:01:48,980 --> 00:01:54,430 Belə ki, kompüter bu kurs edilməsi bu ilk sinif bütün hissəsidir həyata 31 00:01:54,430 --> 00:01:57,370 ümumiyyətlə, təhsil, daha geniş, əlverişli. 32 00:01:57,370 --> 00:02:00,130 Və reallıq, bu kütləvi online kurslar bəzi, indi 33 00:02:00,130 --> 00:02:04,070 onlar bütün biz burada işlər görünür kimi, bu çox yüksək nömrələri ilə başlanır. 34 00:02:04,070 --> 00:02:08,759 Amma məqsədi, nəticə etibarilə, CS50x üçün mümkün finiş xəttinə kimi bir çox insanlar üçün həqiqətən. 35 00:02:08,759 --> 00:02:12,000 Dizayn, CS50x bu ötən Bazar ertəsi təklif edir 36 00:02:12,000 --> 00:02:17,430 başqa yerdə məktəb öhdəlikləri insanlar kim ki, 15 aprel 2013 vasitəsilə bütün yolu, 37 00:02:17,430 --> 00:02:20,990 iş, ailə, digər münaqişələr və kimi, bir az daha çox rahatlıq var 38 00:02:20,990 --> 00:02:23,640 Bu kurs daxil dalış olan, bu, o demək kifayətdir 39 00:02:23,640 --> 00:02:30,540 olduqca ambitiously edilir adi dövr ərzində yalnız üç ay ərzində yalnız. 40 00:02:30,540 --> 00:02:34,190 Lakin bu tələbələr, eyni məzmunlu görüntülerken, eyni problem dəstləri həll olunacaq 41 00:02:34,190 --> 00:02:36,350 Eyni şort və kimi çıxışı olan. 42 00:02:36,350 --> 00:02:38,990 Beləliklə, biz bu birlikdə bütün həqiqətən bilirik. 43 00:02:38,990 --> 00:02:42,360 Və CS50x sonunda məqsədlərindən biri kimi bir çox insanlar üçün deyil 44 00:02:42,360 --> 00:02:45,720 finiş xəttinə və onlara kompüter elminin bu newfound anlayış vermək 45 00:02:45,720 --> 00:02:49,000 və proqramlaşdırma, həm də onlara bu paylaşılan təcrübəsi var. 46 00:02:49,000 --> 00:02:52,010 Kampus 50 müəyyən xüsusiyyətlərindən biri, biz ümid edirik ki, 47 00:02:52,010 --> 00:02:56,260 , bəzən daha yaxşı və ya pis, kommunal təcrübə bu cür olmuşdur 48 00:02:56,260 --> 00:02:59,480 amma bu insanlar üçün sol və sağ açmaq üçün olan 49 00:02:59,480 --> 00:03:01,830 və ofis saat və Hackathon və ədalətli. 50 00:03:01,830 --> 00:03:04,560 Bu, online xalqları ilə adam da bunu bir az çətindir 51 00:03:04,560 --> 00:03:10,580 lakin CS50x, ilk CS50 Expo ilə aprel ayında yekunlaşacaq 52 00:03:10,580 --> 00:03:13,630 ədalətli bizim fikir bir online uyğunlaşma olacaq 53 00:03:13,630 --> 00:03:18,250 , 2 dəqiqəlik video - Ü tələbələr bu minlərlə bütün 1 təqdim etməyə dəvət olunacaq 54 00:03:18,250 --> 00:03:22,480 onlara öz yekun layihə və ya video bir screencast salam waving ya 55 00:03:22,480 --> 00:03:24,490 və onların layihə söhbət və demoing, 56 00:03:24,490 --> 00:03:27,610 çox öz sələfləri kimi, ədalətli kampus burada işlər 57 00:03:27,610 --> 00:03:31,400 semestr sonuna, ümid qlobal sərgi var ki 58 00:03:31,400 --> 00:03:37,080 bu CS50x tələbələr yekun layihələrin çox kimi olan kampus burada bu Dekabr gözləyir. 59 00:03:37,080 --> 00:03:39,680 Gələcək ay ki, daha çox. 60 00:03:39,680 --> 00:03:43,640 >> 100,000 tələbələri ilə olsa da, bir neçə CA'lar ehtiyac gəlir. 61 00:03:43,640 --> 00:03:47,590 Uşaqlar burada cığır parlaq və CS50 alaraq nəzərə alaraq 62 00:03:47,590 --> 00:03:51,630 bir neçə həftə edX üzrə insanlar bu material azad əvvəl, 63 00:03:51,630 --> 00:03:55,330 Biz bu təşəbbüsü mümkün kimi öz tələbələrin çox cəlb etmək istərdim həyata, 64 00:03:55,330 --> 00:03:58,720 dövr habelə bu qış zamanı və bu gələn bahar də. 65 00:03:58,720 --> 00:04:01,620 Beləliklə, siz CS50x cəlb almaq istəyirsinizsə, 66 00:04:01,620 --> 00:04:07,450 xüsusilə CS50x müzakirə CS50 müzakirə və edX versiyası üzrə qoşulma 67 00:04:07,450 --> 00:04:10,140 bir çox kampus üzrə istifadə edilmiş, online bulletin board, 68 00:04:10,140 --> 00:04:13,040 ki, URL rəhbəri edin, bizi kim bildirin 69 00:04:13,040 --> 00:04:16,450 biz eyni bir tələbə və heyəti komanda və fakültə yaratmaq sevindim, çünki 70 00:04:16,450 --> 00:04:19,630 kampus olan sadəcə yanaşı oynayan və kömək edir. 71 00:04:19,630 --> 00:04:21,720 Və onlara tanış olan bir sual gördükdə, 72 00:04:21,720 --> 00:04:25,320 Siz, Internet bəzi ölkədə orada haradasa bir səhv hesabat, tələbə eşitmək 73 00:04:25,320 --> 00:04:27,450 və siz də həmin məsələ ki, üzük bir zəng çünki 74 00:04:27,450 --> 00:04:32,620 bir müddət əvvəl sizin d zalında, inşallah sonra sizə zəng və öz təcrübə mübadiləsi edə bilərsiniz. 75 00:04:32,620 --> 00:04:37,300 Beləliklə, siz istəyirsinizsə iştirak edin. 76 00:04:37,300 --> 00:04:39,360 >> Harvard Kompüter elm kursları, bir ənənə bir az var 77 00:04:39,360 --> 00:04:44,730 Siz qürurla wear bilər ki, bəzi geyim, bəzi geyim, olan, onların arasında CS50, 78 00:04:44,730 --> 00:04:49,090 semestr sonunda, siz CS50 başa olduqca qürurla dedi 79 00:04:49,090 --> 00:04:51,830 və CS50 və kimi etdi və biz həmişə tələbələri cəlb etmək üçün cəhd edin 80 00:04:51,830 --> 00:04:54,540 Bu prosesin mümkün qədər, biz dəvət vasitəsi ilə, 81 00:04:54,540 --> 00:04:56,900 dövr bu dəfə ətrafında, tələbələr dizayn təqdim 82 00:04:56,900 --> 00:04:59,330 istifadə etmək istədiyiniz seçimi Photoshop istifadə edərək, və ya hər hansı bir alət 83 00:04:59,330 --> 00:05:02,330 siz T-shirt və sweatshirts üçün dizayn təqdim etmək, dizayner danışırsınızsa 84 00:05:02,330 --> 00:05:06,100 və itlər üçün çətir və az bandanas biz indi və s. 85 00:05:06,100 --> 00:05:09,370 Və hər şey sonra deyil - qalibləri hər il sonra nümayiş olunur 86 00:05:09,370 --> 00:05:12,700 store.cs50.net da kurs saytında. 87 00:05:12,700 --> 00:05:15,790 Hər şey orada dəyəri satılır, amma saytında yalnız özü uzanır edir 88 00:05:15,790 --> 00:05:18,330 və insanlar kimi rəng və dizayn seçmək üçün imkan verir. 89 00:05:18,330 --> 00:05:20,420 Mən yalnız ötən il dizayn bəzi bölüşmək istədiyiniz fikir 90 00:05:20,420 --> 00:05:25,130 bir illik ənənə olan, burada bu bir başqa veb olmuşdur. 91 00:05:25,130 --> 00:05:29,410 "Mən Faultn Seg alıram Hər gün", keçən il təqdim biri 92 00:05:29,410 --> 00:05:32,290 olan məzunlar üçün hələ də mövcuddur. 93 00:05:32,290 --> 00:05:35,820 Bu bir idi "CS50, 1989 yaranma tarixi." 94 00:05:35,820 --> 00:05:39,010 Bizim Bowdens biri Rob, keçən il çox populyar idi. 95 00:05:39,010 --> 00:05:43,480 "Komanda Bowden" anadan olub, bu dizayn üst satıcılar arasında təqdim edilmişdir. 96 00:05:43,480 --> 00:05:49,040 Burada bu idi. Bir çox insanlar satış logs görə "Bowden Fever" idi. 97 00:05:49,040 --> 00:05:52,650 Ki, indi İnternet var, sizin dizayn ola bilər bilirik. 98 00:05:52,650 --> 00:05:57,510 Növbəti problem bu barədə daha ətraflı gəlmək edir. 99 00:05:57,510 --> 00:06:00,330 >> Daha bir aracı: İndi inşallah bir ifşa idi və etdik 100 00:06:00,330 --> 00:06:02,350 gdb bəzi praktiki təcrübə, 101 00:06:02,350 --> 00:06:04,570 ki, əlbəttə, ayıklama və siz manipulyasiya imkan verir 102 00:06:04,570 --> 00:06:09,500 kifayət qədər aşağı səviyyədə proqram, nə cür şeylər edir? 103 00:06:09,500 --> 00:06:13,030 Gdb nə imkan vermir? 104 00:06:13,030 --> 00:06:15,030 Evet? Mənə bir şey verin. [Tələbə cavab anlaşılmaz] 105 00:06:15,030 --> 00:06:18,120 Yaxşı. Funksiyası daxil Addım, belə ki, yalnız run yazın yoxdur 106 00:06:18,120 --> 00:06:22,310 və standart çıxış şeyi çap bütövlükdə vasitəsilə proqram zərbə var. 107 00:06:22,310 --> 00:06:25,190 Əksinə, ya növbəti yazaraq, xətti ilə xətt vasitəsilə addım bilər 108 00:06:25,190 --> 00:06:30,300 xətti və ya yazdığı bir qayda olaraq, bir funksiyası daxil dalış addım xətti ilə line getmək. 109 00:06:30,300 --> 00:06:35,240 Gdb siz nə imkan vermir? Evet? [Tələbə cavab anlaşılmaz] 110 00:06:35,240 --> 00:06:38,100 Dəyişənlərin yazdırın. Siz proqram daxilində bir az introspection etmək istəyirəm əgər 111 00:06:38,100 --> 00:06:41,500 bütün yer üzərində printf hesabatları yazılı müraciət etmədən, 112 00:06:41,500 --> 00:06:44,600 yalnız bir dəyişən çap və ya bir dəyişən bilərsiniz. 113 00:06:44,600 --> 00:06:46,710 Siz gdb kimi ayıklama ilə başqa nə edə bilər? 114 00:06:46,710 --> 00:06:49,170 [Tələbə cavab anlaşılmaz] 115 00:06:49,170 --> 00:06:52,080 Exactly. Siz breakpoints bilərsiniz, siz fasilə icra deyə bilərsiniz 116 00:06:52,080 --> 00:06:54,020 əsas funksiyası və ya foo funksiyası. 117 00:06:54,020 --> 00:06:56,800 Siz line 123 at break icrası demək olar. 118 00:06:56,800 --> 00:06:58,950 Və breakpoints həqiqətən güclü texnika var 119 00:06:58,950 --> 00:07:01,110 Çünki harada problem ümumi mənada əgər 120 00:07:01,110 --> 00:07:05,360 Yəqin ki, siz proqramın tam vasitəsilə gücləndirməklə vaxt sərf yoxdur olunur. 121 00:07:05,360 --> 00:07:08,250 Siz mahiyyətcə orada jump və sonra yazmağa başlaya bilərsiniz - 122 00:07:08,250 --> 00:07:10,970 addım və ya növbəti və ya analoji ilə vasitəsilə gücləndirməklə. 123 00:07:10,970 --> 00:07:14,340 Amma gdb kimi bir şey tutmaq, bu insan, sizə kömək edir ki, 124 00:07:14,340 --> 00:07:16,940 Sizin problemləri tapmaq ve hataları tapa bilərsiniz. 125 00:07:16,940 --> 00:07:19,470 Bu mütləq sizin üçün çox tapmaq deyil. 126 00:07:19,470 --> 00:07:23,070 >> Belə ki, biz qısa bir command line vasitədir ki, digər gün style50 təqdim 127 00:07:23,070 --> 00:07:27,500 bir az daha cleanly siz artıq kodu stylize çalışır, insan, görülən bilər var. 128 00:07:27,500 --> 00:07:29,530 Amma ki, bu da həqiqətən yalnız estetik bir şeydir. 129 00:07:29,530 --> 00:07:34,110 Istifadə etmək üçün bir az daha gizli ki Valgrind adlı digər alət var həyata Amma çevrilir. 130 00:07:34,110 --> 00:07:36,860 Onun çıxışı ilk baxışda ermənilər tərəfindən xüsusi amansızlıqla sirli edir. 131 00:07:36,860 --> 00:07:39,420 Amma xüsusilə indi müddəti hissəsi olduğunu, gözəl faydalı 132 00:07:39,420 --> 00:07:43,080 harada malloc və dinamik yaddaş ayrılması istifadə başlayan edirik. 133 00:07:43,080 --> 00:07:45,420 Things tez həqiqətən, həqiqətən, yanlış getmək bilər. 134 00:07:45,420 --> 00:07:49,320 Çünki sizin yaddaş azad unutmaq, və ya bəzi NULL pointer dereference əgər, 135 00:07:49,320 --> 00:07:55,770 və ya bir zibil göstərici dereference, adətən nəticələri olan simptom nədir? 136 00:07:55,770 --> 00:07:59,470 Günah Seg. Və kilobayttan ya megabayt bəzi sayının bu əsas fayl almaq 137 00:07:59,470 --> 00:08:02,990 o düşdü ki, sizin proqramın yaddaş dövlət təmsil 138 00:08:02,990 --> 00:08:05,730 ancaq proqram nəhayət, seqmentləşdirmə günah çatışmazlıqlar seg 139 00:08:05,730 --> 00:08:08,450 bir şey pis demək olar ki, həmişə bağlı baş deməkdir 140 00:08:08,450 --> 00:08:11,750 Əgər haradasa ki bir yaddaş bağlı səhv. 141 00:08:11,750 --> 00:08:14,100 Belə Valgrind bu kimi şeylər tapmaq kömək edir. 142 00:08:14,100 --> 00:08:17,720 Siz proqram tərtib etdik sonra, gdb kimi, çalışan bir aracıdır 143 00:08:17,720 --> 00:08:20,330 lakin birbaşa proqram run deyil, siz Valgrind run 144 00:08:20,330 --> 00:08:23,960 və siz gdb ilə kimi, bu proqram keçir. 145 00:08:23,960 --> 00:08:26,220 İndi, istifadə, ən yaxşı cür çıxış əldə etmək 146 00:08:26,220 --> 00:08:30,410 , belə ki, orada ekran üstün siz Valgrind-v bir az uzun görürsünüz olunur. 147 00:08:30,410 --> 00:08:35,350 Bir Linux kompüter proqramları istifadə etdiyiniz zaman "v" demək olar ki, hamı verbose deməkdir. 148 00:08:35,350 --> 00:08:38,770 Belə ki, siz default güc artıq data tüpürmək deməkdir. 149 00:08:38,770 --> 00:08:45,510 "- = Tam sızması kontrol." Bu, bütün mümkün yaddaş sızıntıları üçün çek deyib 150 00:08:45,510 --> 00:08:49,430 mən qəbul edə bilər ki, səhvlər. Bu, çox, Linux proqramları ilə ortaq bir paradiqma edir. 151 00:08:49,430 --> 00:08:52,710 Bir command line arqument varsa Ümumiyyətlə, ki, bir "keçid" var 152 00:08:52,710 --> 00:08:55,830 ki, proqram davranışı dəyişmək üçün nəzərdə, bu bir hərf var oldu 153 00:08:55,830 --> 00:09:00,310 bu-v, lakin işə ki, əgər, yalnız proqramçı dizayn, 154 00:09:00,310 --> 00:09:05,150 , command line arqumenti ilə sözləri tam bir söz və ya seriyası başlayır edilir -. 155 00:09:05,150 --> 00:09:08,190 Bu yalnız insan konvensiyalar, lakin getdikcə onları görəcəksiniz. 156 00:09:08,190 --> 00:09:12,410 Və sonra, nəhayət, "a.out" bu misal proqram üçün ixtiyari adı. 157 00:09:12,410 --> 00:09:14,640 Burada bəzi nümayəndəsi çıxış edir. 158 00:09:14,640 --> 00:09:22,890 >> Ki, demək bilər nə baxmaq əvvəl, mənə burada bir kod parçası üzərində gedək. 159 00:09:22,890 --> 00:09:26,390 Və tezliklə mənə yol bu həyata hərəkət imkan 160 00:09:26,390 --> 00:09:32,120 və in burada bu qısa nümunəsi olan memory.c, nəzər salaq. 161 00:09:32,120 --> 00:09:36,290 Belə ki, bu proqram mənə funksiyaları və suallar zoom imkan verir. 162 00:09:36,290 --> 00:09:39,430 Biz bir funksiyası çağırır əsas funksiyası, f var 163 00:09:39,430 --> 00:09:45,590 və sonra nə f biraz texniki ingilis, nə davam edir? 164 00:09:45,590 --> 00:09:49,760 F nə davam edir? 165 00:09:49,760 --> 00:09:53,680 Necə haqqında I line 20 ilə başlar və ulduzun yeri etməz, 166 00:09:53,680 --> 00:09:56,720 amma yalnız son məruzə ilə burada ardıcıl olacaq. 167 00:09:56,720 --> 00:09:59,910 Bizim üçün line 20 nə var? Sol tərəfində. Biz daha da qırmaq lazımdır. 168 00:09:59,910 --> 00:10:02,410 Int * x ki: nə edir? 169 00:10:02,410 --> 00:10:04,940 Okay. Bu göstərici elan və indi nin daha texniki olsun var. 170 00:10:04,940 --> 00:10:10,230 Bir göstərici bəyan çox konkret nə deməkdir? Başqası? 171 00:10:10,230 --> 00:10:15,050 Evet? [Tələbə cavab anlaşılmaz] Çox uzaq. 172 00:10:15,050 --> 00:10:17,060 Beləliklə, siz bərabər Qeydiyyat sağ tərəfinə oxu edirik. 173 00:10:17,060 --> 00:10:20,290 Yalnız int * x üzrə yalnız sol-nin diqqət edək. 174 00:10:20,290 --> 00:10:24,700 Bu göstərici "bəyan", ancaq indi edək ki, definition dərin dalış. 175 00:10:24,700 --> 00:10:28,330 Ki, konkret, texniki nə deməkdir? Evet? 176 00:10:28,330 --> 00:10:31,940 [Tələbə cavab anlaşılmaz] 177 00:10:31,940 --> 00:10:35,090 Okay. Bu yaddaş bir ünvan saxlamaq hazırlanması oldu. 178 00:10:35,090 --> 00:10:40,680 Yaxşı. Və gələcək bu bir addım olsun bu 32 bit ki, dəyişən, x, elan edir. 179 00:10:40,680 --> 00:10:44,440 Mən çünki 32 bit olduğunu bilirik - 180 00:10:44,440 --> 00:10:47,390 Bu halda bir göstərici deyil, çünki bu, bir int var, çünki deyil. 181 00:10:47,390 --> 00:10:49,650 Bir int ilə eyni, ki, təsadüf 182 00:10:49,650 --> 00:10:51,970 ancaq ulduz var ki, bu göstərici var deməkdir 183 00:10:51,970 --> 00:10:57,300 və cihaz, bir çox kompüter kimi deyil, bütün göstəricilərinə 32 bit var. 184 00:10:57,300 --> 00:11:01,850 Son Macs, son PC kimi daha müasir avadanlıq, siz, 64-bit göstəricilərinə ola bilər 185 00:11:01,850 --> 00:11:04,160 ancaq cihaz, bu şeylər 32 bit var. 186 00:11:04,160 --> 00:11:08,380 Beləliklə, biz ki standartlaşdırmaq lazımdır. Daha konkret, hekayə aşağıdakı kimi gedir: 187 00:11:08,380 --> 00:11:10,820 Biz bir pointer "bəyan" nə deməkdir? 188 00:11:10,820 --> 00:11:12,810 Biz yaddaş ünvan saxlamaq üçün hazırlamaq. 189 00:11:12,810 --> 00:11:15,530 Ki, nə deməkdir? 190 00:11:15,530 --> 00:11:19,810 Biz 32 bit qədər edir ki, dəyişən adlandırılan x yaratmaq 191 00:11:19,810 --> 00:11:23,810 ki, tezliklə tam üçün ünvan saxlamaq olacaq. 192 00:11:23,810 --> 00:11:26,470 Və yəqin ki, biz əldə edə bilərsiniz kimi haqqında kimi dəqiq deyil. 193 00:11:26,470 --> 00:11:31,810 Bu dünya sadələşdirmək və yalnız x adlı göstərici bəyan demək irəliləyir gözəl var. 194 00:11:31,810 --> 00:11:35,380 Bir göstərici elan, lakin həyata və nə həqiqətən neler anlamaq 195 00:11:35,380 --> 00:11:38,490 hətta yalnız bir neçə simvol. 196 00:11:38,490 --> 00:11:42,040 >> İndi, bu bir daha ifadə edir, hətta, demək olar ki, bir az daha asandır. 197 00:11:42,040 --> 00:11:48,160 Beləliklə, bu artıq qeyd edir ki, nə edir: "malloc (10 * sizeof (int));" Evet? 198 00:11:48,160 --> 00:11:52,350 [Tələbə cavab anlaşılmaz] 199 00:11:52,350 --> 00:11:58,250 Yaxşı. Mən orada onu edəcəyik. Bu on integers üçün yaddaş yığın ayrılması oldu. 200 00:11:58,250 --> 00:12:02,190 İndi in qədər dərin dalış olsun on integers üçün yaddaş yığın ayrılması oldu. 201 00:12:02,190 --> 00:12:05,390 Malloc nə qayıdır? 202 00:12:05,390 --> 00:12:10,390 Daha konkret ki yığın ünvanı, və ya ki, yığın ilk byte və ünvanı. 203 00:12:10,390 --> 00:12:14,080 Mən necə deyiləm, proqramçı bilmək yerləşir yaddaş bitir ki, yığın? 204 00:12:14,080 --> 00:12:18,340 Mən bunu bitişik ki, bilirik. Malloc, definition edərək, yaddaş bitişik yığın verəcək. 205 00:12:18,340 --> 00:12:21,240 Bu No boşluqların. Siz ki, yığın hər byte etmək imkanı 206 00:12:21,240 --> 00:12:26,760 geri geri geri, lakin yaddaş bu yığın sonunda olduğu necə bilirik? 207 00:12:26,760 --> 00:12:28,850 Siz malloc istifadə zaman? [Tələbə cavab anlaşılmaz] Yaxşı. 208 00:12:28,850 --> 00:12:30,670 Siz deyil. Siz yadda var. 209 00:12:30,670 --> 00:12:35,960 Mən dəyəri 10 istifadə yadda var və mən hətta burada etmişik görünmür. 210 00:12:35,960 --> 00:12:41,000 Amma onus mənə tamamilə. Biz strings üçün az güvenen olmaq etdiyiniz Strlen, 211 00:12:41,000 --> 00:12:45,860 çünki \ 0 malik olan bu Konvensiya yalnız 212 00:12:45,860 --> 00:12:48,840 və ya simli sonunda bu xüsusi nul xarakteri, NUL. 213 00:12:48,840 --> 00:12:51,740 Bu yaddaş yalnız ixtiyari chunks keçirilən deyil. 214 00:12:51,740 --> 00:12:58,590 Bu qədər var. Line 20 Beləliklə, sonra yaddaş yığın ayırır 215 00:12:58,590 --> 00:13:02,590 ki, on integers saxlaya bilərsiniz, və bu ilk byte üçün ünvan saxlayan 216 00:13:02,590 --> 00:13:05,610 dəyişən adlı x yaddaş ki, yığın edir. 217 00:13:05,610 --> 00:13:11,140 Bir göstərici olan dolayı. Line 21 Beləliklə, təəssüf ki, bir səhv idi. 218 00:13:11,140 --> 00:13:16,110 Lakin ilk, o nə edir? Bu, yer 10, dizine 0 mağaza deyən oldu 219 00:13:16,110 --> 00:13:19,480 x dəyəri 0 adlı yaddaş yığın edir. 220 00:13:19,480 --> 00:13:21,510 >> Belə şeylər bir neçə gedir bilərsiniz. 221 00:13:21,510 --> 00:13:25,420 X bir göstərici olsa da, bir neçə həftə əvvəl geri 222 00:13:25,420 --> 00:13:29,440 siz hələ də array-stil kvadrat mötərizə notation istifadə edə bilərsiniz. 223 00:13:29,440 --> 00:13:36,180 Əslində çox sirli görünüşlü göstərici hesab üçün qısa tərəfdən notation çünki. 224 00:13:36,180 --> 00:13:40,320 biz bu kimi bir şey olardı: ünvan x götür, artıq 10 ləkələr hərəkət 225 00:13:40,320 --> 00:13:44,550 o yerdə saxlanılır nə ünvan üçün orada gedin. 226 00:13:44,550 --> 00:13:48,090 Amma səmimi, bu oxumaq və rahat almaq üçün yalnız dəhşətli deyil. 227 00:13:48,090 --> 00:13:52,900 Belə ki, dünya adətən bu qədər çox insan dostu oxumaq yalnız çünki kvadrat mötərizə istifadə edir. 228 00:13:52,900 --> 00:13:55,140 Amma nə həqiqətən başlıq altında gedən var; 229 00:13:55,140 --> 00:13:58,190 x bir ünvan deyil, bir sıra, hər se edir. 230 00:13:58,190 --> 00:14:02,410 Belə ki, bu x-ci yeri 10 0 saxlanılması edilir. 231 00:14:02,410 --> 00:14:06,120 Nə üçün bu pis? Evet? 232 00:14:06,120 --> 00:14:17,370 [Tələbə cavab anlaşılmaz] Exactly. 233 00:14:17,370 --> 00:14:21,100 Biz yalnız on ints ayrılmış, lakin C proqramlaşdırma zaman 0-dan saymaq 234 00:14:21,100 --> 00:14:25,690 belə ki, 0 1 2 3 4 5 6 7 8 9 deyil, 10 girmə imkanı vardır. 235 00:14:25,690 --> 00:14:30,270 Buna görə ya proqram seg günah edir və ya deyil. 236 00:14:30,270 --> 00:14:32,900 Amma biz həqiqətən bilmirəm, bu bir nondeterministic davranış sortudur. 237 00:14:32,900 --> 00:14:35,600 Bu, həqiqətən biz xoşbəxt almaq asılıdır. 238 00:14:35,600 --> 00:14:40,650 Mən ki, əlavə byte istifadə əgər əməliyyat sistemi ağla deyil çıxır ki, varsa, 239 00:14:40,650 --> 00:14:43,360 o mənə verilmir baxmayaraq, mənim proqram qəza bilər. 240 00:14:43,360 --> 00:14:46,780 Bu, xammal var o arabası var, lakin bu simptom görmək bilər 241 00:14:46,780 --> 00:14:48,960 və ya yalnız bir dəfə isə onu görə bilərsiniz. 242 00:14:48,960 --> 00:14:51,230 Lakin reallıq səhv var, əslində, olmasıdır. 243 00:14:51,230 --> 00:14:54,320 Siz doğru istəyirəm ki, bir proqram yazdıq, əgər o, həqiqətən problem var 244 00:14:54,320 --> 00:14:58,840 insanların hər dəfə bir müddət çöküyor ki, istifadə etdiyiniz proqram satılan etdik ki, 245 00:14:58,840 --> 00:15:02,450 çünki, əlbəttə, bu yaxşı deyil. Əslində, bir Android telefon və ya iPhone varsa 246 00:15:02,450 --> 00:15:05,550 və siz, bu gün apps download Əgər yaşadığınız halda app yalnız çıxın 247 00:15:05,550 --> 00:15:10,040 o yox qəflətən ki, demək olar ki, həmişə bir yaddaş bağlı problem var 248 00:15:10,040 --> 00:15:12,830 proqramçı bir pointer qıfıllar və dereferenced vasitəsi 249 00:15:12,830 --> 00:15:18,670 o yoxdur, və iOS və ya Android nəticəsində yalnız tamamilə proqram öldürmək ki, 250 00:15:18,670 --> 00:15:23,080 çox risk müəyyən davranış və ya təhlükəsizlik kompromis bir növ çox. 251 00:15:23,080 --> 00:15:25,950 >> Bu bir başqa bu proqram başqa bir səhv var. 252 00:15:25,950 --> 00:15:30,180 Bu proqram nə qədər berbat var? 253 00:15:30,180 --> 00:15:32,740 Mən təbliğ sonra nə tətbiq deyil etdik. Evet? 254 00:15:32,740 --> 00:15:34,760 [Tələbə cavab anlaşılmaz] Yaxşı. 255 00:15:34,760 --> 00:15:36,880 Mən yaddaş azad deyil. Belə ki, indi thumb qayda 256 00:15:36,880 --> 00:15:43,150 siz malloc zəng zaman siz həyata zaman, o yaddaş istifadə edərək, pulsuz zəng olmalıdır olmalıdır. 257 00:15:43,150 --> 00:15:45,610 İndi mən bu yaddaş azad istəyirsiniz? 258 00:15:45,610 --> 00:15:49,780 Yəqin ki, bu ilk düzgün idi fərz, mən burada bunu etmək istəyirəm. 259 00:15:49,780 --> 00:15:55,710 Mən, məsələn, burada aşağı edə bilmirdik. Niyə? 260 00:15:55,710 --> 00:15:57,860 Məhz həyata çərçivəsində. Belə ki, göstəricilər haqqında söhbət edirik, baxmayaraq 261 00:15:57,860 --> 00:16:04,830 bu həftə 2 və ya x yalnız elan edildiyi qıvrım aşırma daxilində daxilində olduğu 3 məsələdir. 262 00:16:04,830 --> 00:16:11,000 Belə ki, siz mütləq orada azad edə bilməz. Bu pulsuz Mənim yalnız şans təxminən line 21 sonra. 263 00:16:11,000 --> 00:16:15,170 Bu kifayət qədər sadə proqram, siz cür fikrinizi bükülmüş bir dəfə olduqca asan idi 264 00:16:15,170 --> 00:16:17,870 səhvləri olduğu nə ətrafında proqram etdiklərini edir. 265 00:16:17,870 --> 00:16:20,500 Və ilk onu görmədi belə, ümid edirəm ki, indi bir az aydın deyil 266 00:16:20,500 --> 00:16:23,870 bu səhvlər olduqca asanlıqla həll və asanlıqla qəbul edir. 267 00:16:23,870 --> 00:16:28,720 Amma bir proqram 12-dən çox xətləri uzun zaman, o, 100 xətləri uzun, 50 xətləri uzun 268 00:16:28,720 --> 00:16:31,150 məntiqi vasitəsilə düşüncə, xətti ilə kodu xətti ilə gəzinti, 269 00:16:31,150 --> 00:16:35,110 daim, hata tapmaq, mümkün deyil, bunu xüsusilə əyləncə deyil 270 00:16:35,110 --> 00:16:38,340 və bunu da çətindir, və Valgrind kimi bir alət var edirdi. 271 00:16:38,340 --> 00:16:40,900 Mənə irəli getmək və bunu edək: mənim terminal pəncərə açmaq qoy, 272 00:16:40,900 --> 00:16:45,400 və yaddaş gözəl görünür, çünki mənə yalnız yaddaş run deyil bildirin. 273 00:16:45,400 --> 00:16:49,180 Mən xoşbəxt alıram. Serialın sonunda əlavə byte gedən 274 00:16:49,180 --> 00:16:51,060 çox problematik görünür deyil. 275 00:16:51,060 --> 00:16:56,370 Lakin mə deməkdir ki, ağlı başında olma çeki, etmək, yenə mənə bildirin 276 00:16:56,370 --> 00:16:58,320 Bu həqiqətən doğru olub olmadığını. 277 00:16:58,320 --> 00:17:04,690 >> Belə valgrind-v nə edək - = tam sızması kontrol 278 00:17:04,690 --> 00:17:07,520 və bu halda proqramın adını yaddaş deyil, a.out edir. 279 00:17:07,520 --> 00:17:10,760 Mənə irəli getmək və bunu bildirin. Daxil Hit. 280 00:17:10,760 --> 00:17:14,109 Allah Əziz. Bu çıxış, bu mən əvvəllər üçün alluded edir. 281 00:17:14,109 --> 00:17:17,550 Lakin, burada ağılsızlıq bütün vasitəsilə oxumaq öyrənmək əgər, 282 00:17:17,550 --> 00:17:20,760 Bu ən maraqlı deyil ki, yalnız diaqnostik çıxış edir. 283 00:17:20,760 --> 00:17:24,829 Sizin göz həqiqətən axtarır istəyir səhv və ya etibarsız hər hansı qeyd edir. 284 00:17:24,829 --> 00:17:26,800 Problemlər göstərir ki, söz. 285 00:17:26,800 --> 00:17:29,340 Və həqiqətən, aşağı burada yanlış gedir nə edək. 286 00:17:29,340 --> 00:17:35,230 Mən bir növ bir xülasə vardır "exit-da istifadə:. 1 blok 40 bayt" 287 00:17:35,230 --> 00:17:38,750 Mən hələ həqiqətən bir blok nə əmin deyiləm, lakin 40 bayt 288 00:17:38,750 --> 00:17:41,260 ki, gələn yerdə mən anlamaq bilər kimi həqiqətən hiss edir. 289 00:17:41,260 --> 00:17:45,030 40 bytes. Niyə çıxış istifadə 40 bytes var? 290 00:17:45,030 --> 00:17:48,780 Və daha konkret desək, biz burada aşağı diyirləyin əgər, 291 00:17:48,780 --> 00:17:54,520 mən niyə mütləq 40 bytes itirmişdir? Evet? 292 00:17:54,520 --> 00:17:59,520 [Tələbə cavab anlaşılmaz] mükəmməldir. Bəli, dəqiq. 293 00:17:59,520 --> 00:18:03,540 Var, on integers idi və o hər 4 və ya 32 bit ölçüsü 294 00:18:03,540 --> 00:18:08,300 siz təklif kimi, mən pulsuz adlı yoxdur, çünki mən dəqiq 40 bytes kaybettim. 295 00:18:08,300 --> 00:18:13,460 Yəni, bir səhv var, indi daha az aşağı baxaq və bu yanında görmək 296 00:18:13,460 --> 00:18:16,900 "Etibarsız ölçüsü 4 yazın." İndi bu nə deməkdir? 297 00:18:16,900 --> 00:18:21,150 Bu ünvan, yəqin, nə baza notation ifadə edir? 298 00:18:21,150 --> 00:18:23,640 Bu hexadecimal və hər hansı bir zaman siz 0x ilə başlayan bir sıra bax 299 00:18:23,640 --> 00:18:29,410 ki, biz geri suallar, hesab edirəm ki, pset 0 bölməsində yol idi ki, hexadecimal deməkdir 300 00:18:29,410 --> 00:18:34,090 olan ikili üçün hex üçün decimal konvertasiya və s, bir son hazırlıq həyata etmək yalnız idi. 301 00:18:34,090 --> 00:18:39,220 Hexadecimal, yalnız insan konvensiyası ilə, adətən göstəricilərinə təmsil etmək üçün istifadə olunur 302 00:18:39,220 --> 00:18:41,570 və ya ümumiyyətlə, ünvanlanır. Bu, yalnız bir konvensiya var 303 00:18:41,570 --> 00:18:45,340 oxumaq üçün bir az daha asandır, çünki decimal kimi bir şey bir az daha yığcam var 304 00:18:45,340 --> 00:18:47,720 ən insanlar istifadə üçün və ikili əhəmiyyətsizdir. 305 00:18:47,720 --> 00:18:50,840 Belə ki, indi bu nə deməkdir? Yalnış yazmaq var kimi Bəli, görünür, 306 00:18:50,840 --> 00:18:54,480 memory.c xətti 21 ölçülü 4. 307 00:18:54,480 --> 00:18:59,180 Belə in line 21 geri bildirin, və həqiqətən, burada yalnış yazmaq deyil. 308 00:18:59,180 --> 00:19:02,640 Belə Valgrind, tamamilə mənim əl keçirilməsi və nə fix mənə demək niyyətində deyil 309 00:19:02,640 --> 00:19:05,520 lakin mən yalnış yazmaq edirəm ki, aşkar edilir. 310 00:19:05,520 --> 00:19:08,800 Mən olmamalıdır 4 bayt toxunan deyiləm, və yəqin ki, çünki 311 00:19:08,800 --> 00:19:13,960 Siz qeyd kimi, mən əvəzinə [9] və [10] edirəm maksimum 312 00:19:13,960 --> 00:19:16,660 ya [0] və ya arasında bir şey. 313 00:19:16,660 --> 00:19:19,690 Valgrind ilə, indi bir proqram yazıyoruz hər zaman həyata 314 00:19:19,690 --> 00:19:24,190 göstəricilərinə istifadə edir və yaddaş istifadə edir və malloc xüsusilə ki, 315 00:19:24,190 --> 00:19:27,080 mütləq bu uzun çalışan vərdiş halına almaq 316 00:19:27,080 --> 00:19:30,890 lakin çox asanlıqla Valgrind əmri kopyalanamaz və yapışdırılır 317 00:19:30,890 --> 00:19:32,650 orada bəzi səhvlər var görmek üçün. 318 00:19:32,650 --> 00:19:34,820 Və, siz çıxış görmək hər zaman böyük olacaq 319 00:19:34,820 --> 00:19:39,430 ancaq vizual bütün çıxış vasitəsilə analiz və görmək görmek səhvlər qeyd 320 00:19:39,430 --> 00:19:43,190 ya xəbərdarlıq və ya etibarsız və ya itirdi. 321 00:19:43,190 --> 00:19:46,200 Siz kimi səs haradasa qıfıllar hər hansı bir söz. 322 00:19:46,200 --> 00:19:48,580 Sizin Toolbar yeni bir alət var ki, bilirik. 323 00:19:48,580 --> 00:19:51,270 >> İndi Bazar ertəsi, biz insanlar bütün dəstə idi bura qədər gəlib 324 00:19:51,270 --> 00:19:53,150 və əlaqəli siyahı anlayışı əks etdirir. 325 00:19:53,150 --> 00:20:00,970 Və biz hansı problemin həlli kimi bağlı siyahı təqdim? 326 00:20:00,970 --> 00:20:04,590 Evet? [Tələbə cavab anlaşılmaz] Yaxşı. 327 00:20:04,590 --> 00:20:06,530 Diziler yaddaş onlara əlavə ola bilməz. 328 00:20:06,530 --> 00:20:09,440 Siz ölçüsü 10 bir sıra ki, siz bütün ayrılması edin. 329 00:20:09,440 --> 00:20:13,690 Siz əvvəlcə malloc adlı əgər Siz realloc kimi bir funksiyası zəng edə bilərsiniz 330 00:20:13,690 --> 00:20:17,580 kosmik bunun sonuna olduqda və bu sıra inkişaf üçün cəhd edə bilərsiniz 331 00:20:17,580 --> 00:20:21,610 Başqa heç bir istifadə edir və orada deyil, bu, yalnız başqa bir yerdə bir daha yığın tapmaq olacaq. 332 00:20:21,610 --> 00:20:25,040 Lakin o, yeni array o bayt bütün surəti olacaq. 333 00:20:25,040 --> 00:20:28,310 Bu, çox düzgün həll kimi səslənir. 334 00:20:28,310 --> 00:20:34,790 Niyə bu çirkin deyil? 335 00:20:34,790 --> 00:20:36,940 Mən bu işləri demək, insanlar bu problemi həll etmişik. 336 00:20:36,940 --> 00:20:40,710 Niyə biz bağlı siyahıları ilə bazar ertəsi onu həll etmək lazım idi? Evet? 337 00:20:40,710 --> 00:20:44,060 [Tələbə cavab anlaşılmaz] Bu uzun müddət bilər. 338 00:20:44,060 --> 00:20:49,260 Əslində, malloc ya realloc və ya başqa biri olan calloc, zəng etdiyiniz istənilən vaxt, 339 00:20:49,260 --> 00:20:52,470 hər zaman, proqram, əməliyyat sistemi üçün gedir, 340 00:20:52,470 --> 00:20:54,310 proqramı yavaşlatmaq edirlər. 341 00:20:54,310 --> 00:20:57,470 Siz loops şeyi bu cür edirik, əgər, həqiqətən, hər şeyi yavaşladaraq edirik. 342 00:20:57,470 --> 00:21:00,740 Siz, "salam dünya" tipli proqramların sadə, bu qeyd etmək fikrində deyilik 343 00:21:00,740 --> 00:21:04,300 lakin çox böyük proqramların, yaddaş üçün təkrar əməliyyat sistemi tələb 344 00:21:04,300 --> 00:21:07,520 və ya təkrar geri verilməsi yaxşı bir şey olmayacaq çalışır. 345 00:21:07,520 --> 00:21:11,210 Plus, yalnız intellektual növ - bu zaman tam tullantılar var. 346 00:21:11,210 --> 00:21:16,490 Yeni array daxil hər şey çıxarmaq daha çox yaddaş ayrılması Niyə, risk, 347 00:21:16,490 --> 00:21:21,980 Siz, həqiqətən, ehtiyac kimi yalnız çox yaddaş ayırmağa imkan verir ki, bir alternativ varsa? 348 00:21:21,980 --> 00:21:24,130 Belə ki, burada müsbət və minuses var. 349 00:21:24,130 --> 00:21:26,730 Bu müsbət biri indi dinamizm var. 350 00:21:26,730 --> 00:21:29,100 Yaddaş chunks sərbəst olduğu əhəmiyyətli deyil, 351 00:21:29,100 --> 00:21:32,070 Mən yalnız göstəricilər vasitəsilə yaratmaq bu çörək qırıntıları sıralayabilirsiniz 352 00:21:32,070 --> 00:21:34,470 birlikdə mənim bütün bağlı siyahı simli üçün. 353 00:21:34,470 --> 00:21:36,470 Amma ən azı bir qiymət ödəyirlər. 354 00:21:36,470 --> 00:21:40,060 >> Mən bağlı siyahıları əldə imtina etmək lazımdır? 355 00:21:40,060 --> 00:21:42,470 Evet? [Tələbə cavab anlaşılmaz] Yaxşı. 356 00:21:42,470 --> 00:21:45,650 Daha çox yaddaş lazımdır. İndi, bu göstəricilər üçün yer lazımdır 357 00:21:45,650 --> 00:21:47,900 və bu super sadə bağlı siyahı halında 358 00:21:47,900 --> 00:21:51,410 yalnız 4 bayt olan integers saxlamaq üçün çalışır ki, deyirdik saxlamaq 359 00:21:51,410 --> 00:21:54,240 yaxşı bir göstərici 4 bayt, belə ki, indi sözün iki dəfə etdik 360 00:21:54,240 --> 00:21:57,290 yaddaş məbləği yalnız bu siyahıda saxlamaq lazımdır. 361 00:21:57,290 --> 00:21:59,680 Ancaq yenə də, bu kompüter sabit tradeoff edir 362 00:21:59,680 --> 00:22:03,440 zaman və məkan və inkişafı, səy və digər resurslar arasında. 363 00:22:03,440 --> 00:22:06,630 Bir bağlı siyahısını istifadə edərək, bir İşin mənfi tərəfi odur nədir? Evet? 364 00:22:06,630 --> 00:22:10,150 [Tələbə cavab anlaşılmaz] 365 00:22:10,150 --> 00:22:12,600 Yaxşı. Daxil olmaq kimi asan deyil. Biz leverage artıq ola bilər 366 00:22:12,600 --> 00:22:15,530 kimi həftə 0 prinsipləri bölmək və qalib. 367 00:22:15,530 --> 00:22:18,220 Və daha çox xüsusi, ikili axtarış. Çünki baxmayaraq biz insanlar 368 00:22:18,220 --> 00:22:20,400 Bu siyahıda ortasında olduğu təxminən bilərsiniz, 369 00:22:20,400 --> 00:22:25,840 kompüter yalnız bu bağlı siyahı ilk deyilən ünvan başlayır bilir. 370 00:22:25,840 --> 00:22:28,250 Və 0x123 və ya kimi bir şey var. 371 00:22:28,250 --> 00:22:30,990 Və proqram yalnız yol ortasında element tapa bilərsiniz 372 00:22:30,990 --> 00:22:33,350 əslində bütün siyahısını axtarış edir. 373 00:22:33,350 --> 00:22:35,500 Və hətta sonra, bu sözün bütün siyahısını axtarış çünki 374 00:22:35,500 --> 00:22:38,950 hətta bir dəfə siz göstəricilər aşağıdakı orta element çatmaq 375 00:22:38,950 --> 00:22:42,380 siz, proqram, potensial, bu siyahı necə uzun heç bir fikrim yoxdur 376 00:22:42,380 --> 00:22:45,250 siz sonunda edib, siz necə program bilmirəm qədər 377 00:22:45,250 --> 00:22:48,600 Bir bağlı siyahı sonunda olduğunu? 378 00:22:48,600 --> 00:22:51,120 Xüsusi NULL pointer, belə ki, yenə bir konvensiya var. 379 00:22:51,120 --> 00:22:53,870 Bu göstərici istifadə daha çox, biz mütləq bəzi zibil dəyəri istəmirəm 380 00:22:53,870 --> 00:22:57,750 haradasa mərhələ off işarə edərək, biz, bu tərəfdən olacaq NULL aşağı istəyirəm, 381 00:22:57,750 --> 00:23:01,530 o başa yerləşir biz bilirik ki, biz bu data tərkibində bu dayanacaq var ki. 382 00:23:01,530 --> 00:23:03,410 >> Biz bu manipulyasiya etmək istəyirsinizsə? 383 00:23:03,410 --> 00:23:05,980 Biz bu vizual çox idi, və insanlar ilə 384 00:23:05,980 --> 00:23:07,630 lakin nə biz durub etmək istəyirsinizsə? 385 00:23:07,630 --> 00:23:12,360 Belə ki, orijinal siyahı 9, 17, 20, 22, 29, 34 idi. 386 00:23:12,360 --> 00:23:16,730 Biz sonra sayı 55, bunun üçün bir node üçün malloc yer istədiyini əgər 387 00:23:16,730 --> 00:23:20,730 və sonra biz bazar ertəsi günü etdiyiniz kimi siyahısına 55 əlavə etmək istəyirsiniz? 388 00:23:20,730 --> 00:23:23,690 Biz bu etməliyəm? Yaxşı, Anita gəldi və o, mahiyyətcə siyahısı getdi. 389 00:23:23,690 --> 00:23:27,500 O, növbəti, növbəti, növbəti, növbəti, növbəti sonra ilk element başladı. 390 00:23:27,500 --> 00:23:29,500 Nəhayət sol bütün yol aşağı edib 391 00:23:29,500 --> 00:23:34,480 və oh həyata, bu NULL edir. Belə ki, nə göstərici manipulyasiya edilməsi lazım? 392 00:23:34,480 --> 00:23:37,980 Sonunda olan şəxs, sayı 34, sol əl qaldırdı lazım 393 00:23:37,980 --> 00:23:46,220 55 qeyd etmək, 55 yeni NULL terminator olmaq pointing down onların sol qol lazımdır. Done. 394 00:23:46,220 --> 00:23:49,540 Pretty asan bir sıralaması siyahısına 55 əlavə etmək üçün. 395 00:23:49,540 --> 00:23:51,800 Və necə ola bilər? 396 00:23:51,800 --> 00:23:55,690 >> Mənə irəli getmək və burada kodu Məsələn açmaq edək. 397 00:23:55,690 --> 00:23:58,120 Mən gedit açmaq və mənə ilk iki faylları açmaq qoy edəcəyik. 398 00:23:58,120 --> 00:24:02,050 Bir list1.h və bu kod yığın ki, mənə yalnız Xatırladaq 399 00:24:02,050 --> 00:24:04,920 biz bir node təmsil etmək üçün istifadə edir. 400 00:24:04,920 --> 00:24:13,040 A node siyahısında növbəti şey yalnız xal növbəti adlı n adlı int və bir pointer də var. 401 00:24:13,040 --> 00:24:15,450 Bu. H fayl indi. Niyə? 402 00:24:15,450 --> 00:24:19,090 Var, bu Konvensiyanın və biz bu böyük məbləği özümüz istifadə deyil 403 00:24:19,090 --> 00:24:22,220 printf və digər funksiyaları yazırdı ancaq adam 404 00:24:22,220 --> 00:24:27,150 stdio.h adlı fayl yazmaqla dünya üçün hədiyyə kimi bu funksiyaları bütün verdi. 405 00:24:27,150 --> 00:24:30,950 Və sonra string.h var, sonra map.h var və bütün bu h fayllar var 406 00:24:30,950 --> 00:24:34,410 siz görüldü və ya digər insanlar tərəfindən yazılı müddətində istifadə edə bilər ki. 407 00:24:34,410 --> 00:24:38,470 Adətən o edir. H faylları typedefs kimi yalnız şeylər 408 00:24:38,470 --> 00:24:42,310 və ya xüsusi növləri və ya sabitləri bəyan bəyan. 409 00:24:42,310 --> 00:24:47,890 Siz mövzu faylları funksiyaları 'applications qoymaq deyil. 410 00:24:47,890 --> 00:24:50,570 Siz əvəzinə, yalnız onların prototipləri qoydu. 411 00:24:50,570 --> 00:24:53,050 Siz onlar ehtiyac nə dünya ilə bölüşmək istəyirəm şeyi qoymaq 412 00:24:53,050 --> 00:24:55,640 onların kodu tərtib etmək üçün. Belə ki, yalnız bu vərdiş halına almaq üçün, 413 00:24:55,640 --> 00:24:59,110 biz eyni şey etmək qərarına gəlib. Çox list1.h var deyil 414 00:24:59,110 --> 00:25:02,070 lakin biz dünyada insanların maraq ola bilər ki, bir şey gətirdik 415 00:25:02,070 --> 00:25:05,030 olan bağlı siyahı həyata keçirilməsi istifadə etmək istəyirik. 416 00:25:05,030 --> 00:25:08,040 İndi list1.c, mən bu bütün şey ilə getmək deyil 417 00:25:08,040 --> 00:25:11,390 o bir az uzun, çünki, bu proqram, lakin ən sətirinə tez real run bildirin. 418 00:25:11,390 --> 00:25:15,720 Mənə List1 tərtib mənə sonra List1 run bildirin, və nə görürsünüz yerləşir edək 419 00:25:15,720 --> 00:25:18,070 biz burada süni bir sadə kiçik proqram var 420 00:25:18,070 --> 00:25:20,990 mənə siyahısına nömrələrin əlavə və aradan qaldırılması üçün imkan olacaq. 421 00:25:20,990 --> 00:25:24,310 Mənə irəli getmək və menyu et 3 3 yazın edək. 422 00:25:24,310 --> 00:25:27,880 Mən rəqəm daxil etmək istəyirəm - Gəlin 9 olan ilk sayı, nə 423 00:25:27,880 --> 00:25:30,550 və indi mən siyahısı indi 9-a bildirib alıram. 424 00:25:30,550 --> 00:25:33,760 Mənə davam və başqa durub edək, mən menyu et 3 təşkil edib. 425 00:25:33,760 --> 00:25:36,760 Nə sayı mən əlavə etmək istəyirsiniz? 17. 426 00:25:36,760 --> 00:25:39,220 Daxil edin. Mən yalnız bir daha edəcəyik. 427 00:25:39,220 --> 00:25:41,720 Mənə sayı 22 daxil edək. 428 00:25:41,720 --> 00:25:45,850 Beləliklə, biz bir an əvvəl slayd şəklində olduğunu bağlıdır siyahısı əvvəlinə var. 429 00:25:45,850 --> 00:25:48,740 Bu durub əslində necə baş verir? 430 00:25:48,740 --> 00:25:52,000 Həqiqətən, 22 siyahının sonunda indi. 431 00:25:52,000 --> 00:25:55,050 Hekayə Beləliklə, biz bazar ertəsi mərhələdə bildirib və yalnız indi recapped 432 00:25:55,050 --> 00:25:57,460 həqiqətən kodu baş edilməlidir. 433 00:25:57,460 --> 00:25:59,700 Bir nəzər salaq. Bu fayl aşağıya fırladın edək. 434 00:25:59,700 --> 00:26:01,720 Biz, funksiyaları, bəzi üzərində parıltı olacaq 435 00:26:01,720 --> 00:26:05,630 amma biz enmək ki, daxil funksiyası lazımdır. 436 00:26:05,630 --> 00:26:11,720 >> Biz bu bağlı siyahı yeni node daxil haqqında getmək necə edək. 437 00:26:11,720 --> 00:26:14,550 Siyahısı Harada elan? Yaxşı, qoy ki, üst bütün yolu gedin 438 00:26:14,550 --> 00:26:19,970 və mənim bağlı siyahı mahiyyətcə ilkin NULL olan bir göstərici kimi elan fark. 439 00:26:19,970 --> 00:26:23,180 Mən ümumiyyətlə biz qarşı təbliğ etdiyiniz burada qlobal dəyişən kullanıyorum 440 00:26:23,180 --> 00:26:25,280 onu qorumaq üçün kodu bir az messy edir, çünki 441 00:26:25,280 --> 00:26:29,080 bu tənbəl, adətən sort, ancaq tənbəl deyil və bu yanlış deyil və bu, pis deyil 442 00:26:29,080 --> 00:26:33,660 həyat üçün proqram yeganə məqsədi bir bağlı siyahı simülasyonu üçün olsun. 443 00:26:33,660 --> 00:26:35,460 Hansı edirik məhz budur. 444 00:26:35,460 --> 00:26:39,100 Hər funksiyası üçün keçməli sonra əsas bu elan və buna daha çox 445 00:26:39,100 --> 00:26:42,640 biz bu proqram yazdıq, biz yerinə oh reallaşdırmaq isə yalnız qlobal edək 446 00:26:42,640 --> 00:26:47,060 Bu proqram bütün məqsəd bir və yalnız bir bağlı siyahı nümayiş edir. 447 00:26:47,060 --> 00:26:50,700 Belə ki, tamam hiss edir. Burada mənim prototipləri və biz, bu bütün vasitəsilə getməyəcək 448 00:26:50,700 --> 00:26:55,800 amma sil funksiyası, bir tapmaq funksiyası, bir insert funksiyası və traverse funksiyası yazdı. 449 00:26:55,800 --> 00:26:59,080 Amma indi daxil funksiyası geri enmək bildirin 450 00:26:59,080 --> 00:27:01,490 və bu burada necə işlədiyini görmək. 451 00:27:01,490 --> 00:27:09,940 Daxil line deyil - burada biz gedin. 452 00:27:09,940 --> 00:27:12,850 Daxil edin. Biz xahiş olacaq, çünki Belə ki, hər hansı arqumentlər etmir 453 00:27:12,850 --> 00:27:15,930 onlar əlavə etmək istədiyiniz nömrəni üçün bu funksiya istifadəçi içərisində. 454 00:27:15,930 --> 00:27:19,410 Lakin ilk, biz onlara bir yer vermək üçün hazırlamaq. 455 00:27:19,410 --> 00:27:22,050 Bu digər Məsələn surəti və yapışdırıb növ edir. 456 00:27:22,050 --> 00:27:25,110 Bu halda, biz int ayrılması edilmişdir; bu dəfə biz bir node ayrılması edirik. 457 00:27:25,110 --> 00:27:27,910 Mən, həqiqətən, bir node nə qədər bytes xatırlamıram, lakin gözəl var. 458 00:27:27,910 --> 00:27:30,460 Sizeof mənim üçün ki, anlamaq olar. 459 00:27:30,460 --> 00:27:33,340 Və niyə line 120 NULL kontrol edirəm? 460 00:27:33,340 --> 00:27:37,530 Line 119 yanlış getmək bilər? Evet? 461 00:27:37,530 --> 00:27:40,530 [Tələbə cavab anlaşılmaz] 462 00:27:40,530 --> 00:27:43,440 Yaxşı. Sadəcə mən çox yaddaş tələb etdiyiniz halda ola bilər 463 00:27:43,440 --> 00:27:47,020 və ya bir şey nın səhv və əməliyyat sistemi, mənə vermək üçün kifayət qədər bytes yoxdur 464 00:27:47,020 --> 00:27:50,640 belə ki, NULL qaytarılması ilə qədər siqnalları, və mən kontrol olmayan 465 00:27:50,640 --> 00:27:54,710 və yalnız kor-koranə ünvanı geri istifadə davam, bu, NULL ola bilər. 466 00:27:54,710 --> 00:27:58,400 Bəzi unknown dəyər ola bilər; bir yaxşı şey istisna olmaqla, mən - 467 00:27:58,400 --> 00:28:00,590 həqiqətən unknown dəyəri olmayacaq. Bu NULL ola bilər, mən istəmirəm belə 468 00:28:00,590 --> 00:28:02,550 bu sui-istifadə və dereferencing risk. 469 00:28:02,550 --> 00:28:07,410 Ki, baş verərsə, mən yalnız qayıtmaq və mən hər hansı bir yaddaş geri ala bilmədim kimi biz iddia lazımdır. 470 00:28:07,410 --> 00:28:12,270 >> Əks halda, mən istifadəçi mənə əlavə etmək üçün bir sıra demək, mən bizim köhnə dostumuz GetInt zəng 471 00:28:12,270 --> 00:28:15,530 və sonra bu biz bazar ertəsi təqdim yeni sintaksis idi. 472 00:28:15,530 --> 00:28:20,320 "Newptr-> n 'siz malloc tərəfindən verilmiş ünvanı almaq deməkdir 473 00:28:20,320 --> 00:28:23,490 olan, yeni bir node obyekt ilk byte təmsil 474 00:28:23,490 --> 00:28:26,860 və sonra n adlı sahəsində gedin. 475 00:28:26,860 --> 00:28:35,270 Bir az trivia sual: Bu kodu nə daha sirli line bərabərdir? 476 00:28:35,270 --> 00:28:38,110 Necə başqa mən bu yazılı ola bilər? Bir zərbə almaq istəyirsiniz? 477 00:28:38,110 --> 00:28:41,480 [Tələbə cavab anlaşılmaz] 478 00:28:41,480 --> 00:28:44,870 Yaxşı. Edin. N istifadə edərək, lakin bu kimi olduqca kimi sadə deyil. 479 00:28:44,870 --> 00:28:47,090 Mən ilk nə etmək lazımdır? [Tələbə cavab anlaşılmaz] 480 00:28:47,090 --> 00:28:52,730 Yaxşı. I * newptr.n etmək lazımdır. 481 00:28:52,730 --> 00:28:55,610 Belə ki, bu göstərici yeni açıq-aydın bir ünvan var deyib. Niyə? 482 00:28:55,610 --> 00:28:59,520 Bu malloc geri Çünki. Deyərək * newptr "getmək" 483 00:28:59,520 --> 00:29:02,970 siz olduğumuzda, sonra, sonra daha çox tanış. n istifadə edə bilərsiniz 484 00:29:02,970 --> 00:29:05,730 lakin bu, yalnız biz insanlar edir, xüsusilə də əgər, bir az çirkin görünür 485 00:29:05,730 --> 00:29:10,360 oxları ilə göstəricilərinə bütün vaxt çəkmək; dünyanın bu arrow notation haqqında standart var, 486 00:29:10,360 --> 00:29:12,320 hansı tam eyni şey yoxdur. 487 00:29:12,320 --> 00:29:16,070 Sol şey bir göstərici olduqda> notation - Beləliklə, siz yalnız istifadə edin. 488 00:29:16,070 --> 00:29:18,790 Bir faktiki struct varsa Əks halda, bu. N istifadə edin. 489 00:29:18,790 --> 00:29:25,800 Və sonra bu: Niyə newptr-> gələn başlamaq yoxdur null? 490 00:29:25,800 --> 00:29:28,610 Biz mərhələnin sonunda bir sallanan sol off istəmirəm. 491 00:29:28,610 --> 00:29:31,630 Biz düz aşağı işarə istəyirik, bu siyahının sonu deməkdir 492 00:29:31,630 --> 00:29:34,980 potensial bu node da ola bilər, belə ki, biz daha yaxşı NULL əmin olun. 493 00:29:34,980 --> 00:29:38,460 Və, ümumiyyətlə, sizin dəyişənlərin və ya data üzvləri və structs başlatılıyor 494 00:29:38,460 --> 00:29:40,470 bir şey yalnız yaxşı təcrübədir. 495 00:29:40,470 --> 00:29:45,170 Yalnız zibil var və ümumiyyətlə mövcud davam imkan sorun siz alır 496 00:29:45,170 --> 00:29:48,650 Daha sonra haqqında bir şey unutmaq əgər. 497 00:29:48,650 --> 00:29:51,590 >> Burada bir neçə hallarda var. Bu, bir daha, daxil funksiyası 498 00:29:51,590 --> 00:29:54,930 dəyişən ilk adlanan əgər mən kontrol ilk şey deyil, 499 00:29:54,930 --> 00:29:58,240 qlobal dəyişən NULL ki, heç bir bağlı siyahı var deməkdir. 500 00:29:58,240 --> 00:30:02,460 Biz hər hansı bir ədəd daxil deyil, belə ki, bu cari nömrəsi daxil mənasız deyil 501 00:30:02,460 --> 00:30:05,240 siyahısına, çünki yalnız siyahının əvvəlində məxsusdur. 502 00:30:05,240 --> 00:30:08,100 Anita yalnız iddiasında, yalnız burada duran zaman bu idi 503 00:30:08,100 --> 00:30:11,390 biz bir node ayrılmış qədər başqa heç bir mərhələsində burada idi 504 00:30:11,390 --> 00:30:13,940 sonra o, ilk dəfə əlini qaldırmaq bilər 505 00:30:13,940 --> 00:30:17,420 hər kəs bazar ertəsi onun sonra səhnəyə çıxmaq əgər. 506 00:30:17,420 --> 00:30:22,900 İndi burada, bu demək üçün bir az çek əgər n yeni node dəyəri 507 00:30:22,900 --> 00:30:27,370 , cari ilk node-ci ildə n dəyəri 00:30:29,930 ki, başlayıb ki, bir bağlı siyahı var deməkdir. 509 00:30:29,930 --> 00:30:32,330 Var siyahıda ən azı bir node, lakin bu yeni oğlan 510 00:30:32,330 --> 00:30:37,230 ki, biz ətrafında şeyi hərəkət etmək lazımdır əvvəl məxsusdur. 511 00:30:37,230 --> 00:30:43,450 Siyahısında yalnız başlamışdır başqa sözlə, deyək 512 00:30:43,450 --> 00:30:48,100 bu ki, yalnız sayı 17, - əslində, biz daha aydın bunu edə bilərsiniz. 513 00:30:48,100 --> 00:30:56,010 Biz ilk çağırıb burada bir pointer ilə hekayə başlamaq varsa, 514 00:30:56,010 --> 00:30:59,870 və ilkin, bu, NULL, və biz sayı 9 daxil 515 00:30:59,870 --> 00:31:02,510 sayı 9 aydın siyahı əvvəlində məxsusdur. 516 00:31:02,510 --> 00:31:07,400 Belə ki, biz yalnız ünvanı və ya sayı 9 malloced və burada qoymaq nin iddia edək. 517 00:31:07,400 --> 00:31:13,170 Ilk ismarıcları 9 varsa, biz müzakirə ilk ssenari yalnız burada edək nöqtə bu adam deməkdir 518 00:31:13,170 --> 00:31:15,790 bu kimi NULL tərk; indi biz 9 saylı var. 519 00:31:15,790 --> 00:31:18,280 Biz daxil etmək istədiyiniz növbəti sayı 17-dir. 520 00:31:18,280 --> 00:31:22,420 17 buraya aiddir, belə ki, biz bu yolu bir məntiqi step var olacaq. 521 00:31:22,420 --> 00:31:26,060 Biz, biz sayı 8 daxil istədiyini iddia edək ki, əvvəl Belə ki, əvəzinə edək. 522 00:31:26,060 --> 00:31:28,650 >> Belə ki, yalnız rahatlığı xatirinə, mən burada çəkmək üçün gedirəm. 523 00:31:28,650 --> 00:31:30,760 Amma unutmayın, malloc ən yerdə qoya bilər. 524 00:31:30,760 --> 00:31:33,460 Amma rəsm xatirinə, mən burada qoymaq lazımdır. 525 00:31:33,460 --> 00:31:38,440 Mən yalnız sayı 8 üçün node ayrılmış etdik iddia, bu default NULL edir. 526 00:31:38,440 --> 00:31:42,800 İndi nə var? Bir cüt. 527 00:31:42,800 --> 00:31:47,090 Biz bu kimi bir pointer yenilənir Biz Bazar ertəsi, mərhələsində bu səhv etdi 528 00:31:47,090 --> 00:31:51,890 sonra bu idi, sonra biz iddia - biz səhnədə hər kəs yetim. 529 00:31:51,890 --> 00:31:54,350 Siz can't Çünki - burada əməliyyatları üçün vacibdir, 530 00:31:54,350 --> 00:31:58,760 İndi, çünki biz yalnız kosmosda üzən növ ki, bu node 9 kaybettim. 531 00:31:58,760 --> 00:32:01,150 Belə ki, bu barədə bazar ertəsi doğru yanaşma deyil. 532 00:32:01,150 --> 00:32:03,330 Biz ilk başqa bir şey var. 533 00:32:03,330 --> 00:32:06,280 Dünyanın dövlət bu kimi görünür. Əvvəlcə, 8 ayrılıb. 534 00:32:06,280 --> 00:32:10,550 Nə 8 daxil daha yaxşı yol ola bilər? 535 00:32:10,550 --> 00:32:14,720 Əvəzində ilk bu göstərici yenilənməsi, yalnız əvəzinə burada bu bir yeniləmə. 536 00:32:14,720 --> 00:32:17,720 Beləliklə, biz bu NULL xarakter çevirmək olacaq ki kodu bir line lazımdır 537 00:32:17,720 --> 00:32:22,020 node 9 işarə ki, faktiki göstərici daxil, 538 00:32:22,020 --> 00:32:27,970 və sonra təhlükəsiz burada bu oğlan da qeyd etmək ilk dəyişə bilərsiniz. 539 00:32:27,970 --> 00:32:31,330 İndi iki elementlərinin siyahısı, bir bağlı siyahı var. 540 00:32:31,330 --> 00:32:33,580 Bu, həqiqətən, burada kimi nə görünür? 541 00:32:33,580 --> 00:32:36,900 Biz kodu baxsaq, mən məhz o etdik ki, görürsünüz. 542 00:32:36,900 --> 00:32:41,970 Mən newptr bildirib etdik və bu hekayə, newptr bu oğlan da işarə edilmişdir. 543 00:32:41,970 --> 00:32:45,520 >> Mənə bir şey daha cəlb edək və bu üçün bir az daha otağı tərk olmalıdır. 544 00:32:45,520 --> 00:32:48,540 Belə ki, kiçik kiçik rəsm bağışla. 545 00:32:48,540 --> 00:32:52,140 Bu adam newptr adlanır. 546 00:32:52,140 --> 00:32:57,940 Yəni olaraq, bir neçə xətləri əvvəllər elan dəyişən deyil - yalnız 25 yuxarıda. 547 00:32:57,940 --> 00:33:03,430 Və 8 işarə edir. Mən newptr-> gələn demək zaman, struct getmək deməkdir ki, 548 00:33:03,430 --> 00:33:07,910 newptr tərəfindən də qeyd edilir ki, belə ki, burada biz orada getmək. 549 00:33:07,910 --> 00:33:13,990 Sonra arrow növbəti sahəsində əldə deyib, sonra = nə dəyəri qoymaq deyib? 550 00:33:13,990 --> 00:33:17,280 Nə dəyər ilk idi? Ilk idi dəyəri 551 00:33:17,280 --> 00:33:21,930 Birinci bu bu node da qeyd olunmalıdır deməkdir ki, bu düyün də işarə edilmişdir. 552 00:33:21,930 --> 00:33:25,660 Başqa sözlə, nə, mənim yazı ilə bir gülünc mess olsa görünür 553 00:33:25,660 --> 00:33:28,620 yalnız ətrafında bu oxlar hərəkət sadə bir fikir var 554 00:33:28,620 --> 00:33:31,560 bu bir liner ilə kodu tərcümə. 555 00:33:31,560 --> 00:33:38,110 Növbəti sahəsində ilk nə saxlamaq və sonra ilk əslində nə yeniləmə. 556 00:33:38,110 --> 00:33:40,900 Bu bəzi vasitəsilə irəli və sürətli irəli gedək, 557 00:33:40,900 --> 00:33:44,220 və indi bu quyruq durub yalnız baxmaq. 558 00:33:44,220 --> 00:33:51,210 Mən bir node növbəti sahəsində NULL olduğunu tapmaq nöqtəyə almaq düşünək. 559 00:33:51,210 --> 00:33:53,410 Və hekayə, bir detal bu nöqtədə mən artıq Parıldadıcı edirəm ki, 560 00:33:53,410 --> 00:33:58,170 Mən line 142, sələfi göstərici burada başqa göstərici qədər təqdim etdik ki. 561 00:33:58,170 --> 00:34:01,320 Əsasən, hekayə bu nöqtədə bir siyahısını uzun olur, 562 00:34:01,320 --> 00:34:04,800 I növ iki barmaqları ilə gəzmək lazımdır, mən də uzaq getmək əgər, çünki 563 00:34:04,800 --> 00:34:08,219 bir-uzunluğu siyahısına xatırlayıram, siz geri getmək bilməz. 564 00:34:08,219 --> 00:34:13,659 Belə predptr bu fikir mənim sol barmaq və newptr - deyil newptr. 565 00:34:13,659 --> 00:34:17,199 Burada bir başqa göstərici digər barmaq və mən siyahısı gəzinti yalnız cür edirəm. 566 00:34:17,199 --> 00:34:22,179 Ki, mövcud görə. Amma yalnız burada sadə hallarda biri hesab edək. 567 00:34:22,179 --> 00:34:26,620 Ki, pointer növbəti sahəsində NULL varsa, məntiqi dolayısı nə var? 568 00:34:26,620 --> 00:34:30,840 Bu siyahı traversing və Əgər bir NULL pointer edib? 569 00:34:30,840 --> 00:34:35,780 Siz siyahısı sonunda istəyirik, və s kodu bu bir əlavə element əlavə etmək 570 00:34:35,780 --> 00:34:41,230 intuitiv növ, onların növbəti pointer NULL ki node almaq olacaq 571 00:34:41,230 --> 00:34:46,120 Bu hazırda NULL, və yeni node ünvan üçün, baxmayaraq ki, o, dəyişir. 572 00:34:46,120 --> 00:34:52,260 Belə ki, yalnız biz kiminsə sol artırılması ilə səhnəyə çəkdi kodu ok rəsm edirik. 573 00:34:52,260 --> 00:34:54,070 >> Mən indi mənim əlləri dalğa lazımdır ki, işin 574 00:34:54,070 --> 00:34:58,020 Düşünürəm ki, biz ətraf mühit bu cür bunu zaman itirilmiş almaq asandır düşünmək yalnız, çünki, 575 00:34:58,020 --> 00:35:00,600 siyahısı nin ortasında durub kontrol edilir. 576 00:35:00,600 --> 00:35:03,220 Siz anlamaq istəyirsinizsə, ancaq daxilən, nə etmək lazımdır 577 00:35:03,220 --> 00:35:06,600 Bəzi sayı orta məxsusdur yerləşir siz gəzmək var 578 00:35:06,600 --> 00:35:09,510 birdən çox barmaq ilə bir çox göstərici, 579 00:35:09,510 --> 00:35:12,920 bu yoxlama ilə məxsus olduğu anlamaq element edir 00:35:15,450 > Cari və sonra ki, yer tapmaq 581 00:35:15,450 --> 00:35:20,400 sonra siz çox diqqətlə ətrafında göstəricilərinə hərəkət yerləşir shell oyun bu sort var. 582 00:35:20,400 --> 00:35:23,850 Və cavab, siz öz evdə vasitəsilə səbəb istəyirsinizsə, 583 00:35:23,850 --> 00:35:28,340 aşağı yalnız kodu bu iki xətti sonunda, lakin həmin xətlərin üçün super vacibdir. 584 00:35:28,340 --> 00:35:31,390 Əgər kimsə əl açılan və qaldırmaq əgər başqası, səhv üçün, çünki 585 00:35:31,390 --> 00:35:34,580 yenidən, siz siyahısı orphaning ola bilər. 586 00:35:34,580 --> 00:35:39,500 Daha konseptual yekunlaşdırmaq üçün, quyruq da daxil nisbətən sadə deyil. 587 00:35:39,500 --> 00:35:42,940 Baş da durub, həmçinin nisbətən sadə 588 00:35:42,940 --> 00:35:45,580 lakin bir əlavə göstərici bu dəfə güncellemeniz lazımdır 589 00:35:45,580 --> 00:35:47,930 burada siyahısına sayı 5 sıxmaq, 590 00:35:47,930 --> 00:35:51,560 və sonra ortada durub daha səy cəlb, 591 00:35:51,560 --> 00:35:56,130 çox diqqətlə onun düzgün yer sayı 20 əlavə etmək üçün, 592 00:35:56,130 --> 00:35:58,350 olan 17 və 22 arasında. 593 00:35:58,350 --> 00:36:02,700 Siz, 22 yeni node 20 nöqtəsi kimi bir şey etmək lazımdır 594 00:36:02,700 --> 00:36:08,470 sonra hansı node in göstərici ötən yenilənir lazımdır? 595 00:36:08,470 --> 00:36:10,630 Bu həqiqətən daxil, 17 var. 596 00:36:10,630 --> 00:36:14,080 Belə ki, təkrar edirəm ki, xüsusi həyata keçirilməsi üçün faktiki kodu uzatmaq lazımdır. 597 00:36:14,080 --> 00:36:17,280 >> İlk baxışdan, bu bir az böyük, amma bu, həqiqətən, yalnız sonsuz loop var 598 00:36:17,280 --> 00:36:21,770 ki, loop loop, loop, loop, siz NULL pointer hit kimi qırılma oldu 599 00:36:21,770 --> 00:36:24,590 bu noktada zəruri daxil edə bilərsiniz. 600 00:36:24,590 --> 00:36:30,960 Bu, sonra nümayəndəsi bağlı siyahı durub kodu. 601 00:36:30,960 --> 00:36:34,590 Ki, bir çox növ idi və biz bir problem həll etdiyiniz kimi hiss 602 00:36:34,590 --> 00:36:36,940 lakin biz bütün başqa bir təqdim etdik. Açığı, biz bütün bu vaxt sərf etdik 603 00:36:36,940 --> 00:36:40,540 böyük O və Ω və daha tez problemləri həll etmək üçün çalışır, vaxt çalışan, 604 00:36:40,540 --> 00:36:43,270 və burada biz geri, bu hiss böyük bir addım atırıq. 605 00:36:43,270 --> 00:36:45,380 Və hələ, məqsəd veri olsa, 606 00:36:45,380 --> 00:36:48,010 biz bazar ertəsi dedi ki, müqəddəs grail kimi hiss, həqiqətən olacaq 607 00:36:48,010 --> 00:36:50,470 dərhal hər şeyi saxlamaq üçün. 608 00:36:50,470 --> 00:36:53,930 >> Əslində, biz bir an qoymaq kənara bağlı siyahı etdi güman 609 00:36:53,930 --> 00:36:56,000 və biz əvəzinə masa anlayışı təqdim etdi. 610 00:36:56,000 --> 00:36:59,110 Və bir sıra kimi bir an üçün yalnız bir masa hesab edək. 611 00:36:59,110 --> 00:37:03,790 Bu array və bu halda burada 26 elementlər, 25 0 var 612 00:37:03,790 --> 00:37:07,940 və adları storage bəzi yığın lazım Güman: 613 00:37:07,940 --> 00:37:10,350 Alice və Bob və Charlie və kimi. 614 00:37:10,350 --> 00:37:12,880 Və bu adlar saxlamaq üçün bəzi data struktur lazımdır. 615 00:37:12,880 --> 00:37:15,000 Yaxşı, bir bağlı siyahısı kimi bir şey istifadə edə bilər 616 00:37:15,000 --> 00:37:20,260 və s Bob sonra Bob və Charlie əvvəl Alice daxil siyahısına gəzmək bilər. 617 00:37:20,260 --> 00:37:23,850 Və əslində, bir kənara kimi belə kodu görmək istəyirsinizsə, 618 00:37:23,850 --> 00:37:27,230 list2.h, biz məhz bunu bilirik. 619 00:37:27,230 --> 00:37:30,610 Biz bu kod vasitəsilə getmək deyil, lakin bu ilk nümunəsi bir variantdır 620 00:37:30,610 --> 00:37:34,640 ki, qondarma tələbə əvvəl gördüm başqa bir struct, təqdim 621 00:37:34,640 --> 00:37:40,330 və sonra nə faktiki bağlı siyahısında saxlayan bir tələbə strukturu bir göstəricisidir 622 00:37:40,330 --> 00:37:44,520 çox sadə bir az tam, n. 623 00:37:44,520 --> 00:37:46,900 Kod faktiki strings əhatə orada belə həyata 624 00:37:46,900 --> 00:37:49,940 lakin əl-qolu həqiqətən indi səmərəliliyi problemini həll etmək üçün, əgər 625 00:37:49,940 --> 00:37:53,380 biz Alice adlı bir obyekt verilir əgər bu gözəl ola bilməz, 626 00:37:53,380 --> 00:37:56,020 biz data strukturunda sağ yeri onu qoymaq istəyirəm 627 00:37:56,020 --> 00:37:58,860 yalnız Alice qoymaq həqiqətən gözəl olardı kimi hiss, 628 00:37:58,860 --> 00:38:01,180 adı birinci yeri, A ilə başlayır. 629 00:38:01,180 --> 00:38:05,270 Və onun adı ikinci yeri, B ilə başlayır Bob. 630 00:38:05,270 --> 00:38:09,580 Bir sıra ilə, və ya, bir masa ki, bir hash table zəng başlamaq edək 631 00:38:09,580 --> 00:38:13,650 biz məhz bunu edə bilərsiniz. Biz Alice kimi bir ad verilir varsa, 632 00:38:13,650 --> 00:38:16,700 Alice kimi simli, siz A-l-i-c-e yerləşir qoymaq bilərəm? 633 00:38:16,700 --> 00:38:20,540 Biz hueristic lazımdır. Biz Alice kimi daxil etmək funksiyası ehtiyac 634 00:38:20,540 --> 00:38:24,610 və cavab qaytarmaq, "bu yerdə Alice qoyun." 635 00:38:24,610 --> 00:38:28,720 Bu funksiya, bu qara qutusu, bir hash funksiyası adlanır gedir. 636 00:38:28,720 --> 00:38:32,330 >> A hash funksiyası, "Alice" kimi giriş edir ki, bir şey 637 00:38:32,330 --> 00:38:38,080 və qaytarır, adətən, bəzi data strukturunda rəqəmli yeri Alice məxsusdur yerləşir. 638 00:38:38,080 --> 00:38:40,830 Bu halda, bizim hash funksiyası nisbətən sadə olmalıdır. 639 00:38:40,830 --> 00:38:47,510 Bizim hash funksiyası hansı karakter mən qayğı lazımdır "Alice" verilir, əgər demək lazımdır? 640 00:38:47,510 --> 00:38:55,660 İlk. Mən [0] baxmaq, sonra [0] karakter A, əgər sayı 0 qayıtmaq deyirlər. 641 00:38:55,660 --> 00:39:01,130 O B varsa, 1 qayıtmaq. Onun C varsa, s 2 qayıtmaq, və. 642 00:39:01,130 --> 00:39:05,940 Bütün 0 indeksi, və s mənə Alice və sonra Bob və sonra Charlie daxil imkan və olardı 643 00:39:05,940 --> 00:39:10,960 Bu data strukturu. Amma bir problem var. 644 00:39:10,960 --> 00:39:13,060 Nə Anita yenidən çıxınca? Əgər 645 00:39:13,060 --> 00:39:17,510 Biz Anita harada qoymaq bilərəm? Onun adı da, A hərfi ilə başlayır 646 00:39:17,510 --> 00:39:20,330 biz bu məsələnin bir daha böyük mess etdik kimi və hiss edir. 647 00:39:20,330 --> 00:39:24,380 İndi data strukturu dərhal durub, daimi vaxt durub var 648 00:39:24,380 --> 00:39:27,100 olduqca pis halda daha xətti, 649 00:39:27,100 --> 00:39:29,510 ancaq bu halda Anita ilə nə edə bilər? 650 00:39:29,510 --> 00:39:34,110 Iki variant, həqiqətən, hansılardır? Evet? 651 00:39:34,110 --> 00:39:37,410 [Tələbə cavab anlaşılmaz] Okay, biz başqa ölçüsü ola bilər. 652 00:39:37,410 --> 00:39:42,320 Bu yaxşı. Belə ki, biz bazar ertəsi şifahi danışdıq kimi 3D şeylər inşa edə bilərsiniz. 653 00:39:42,320 --> 00:39:46,700 Biz burada bir giriş əlavə, lakin, bu sadə saxlamaq üçün çalışıram Güman bilər. 654 00:39:46,700 --> 00:39:50,160 Burada bütün məqsəd dərhal daimi zaman giriş əldə etmək 655 00:39:50,160 --> 00:39:52,170 ki, çox mürəkkəblik əlavə edir. 656 00:39:52,170 --> 00:39:55,970 Bu data strukturu Anita daxil çalışırken digər variantları hansılardır? Evet? 657 00:39:55,970 --> 00:39:58,610 [Tələbə cavab anlaşılmaz] Yaxşı. Belə ki, aşağı hər kəs hərəkət edə 658 00:39:58,610 --> 00:40:03,040 o, həqiqətən olmaq istəyir daha sonra Charlie Bob və Alice, aşağı nudges və kimi biz Anita qoydu. 659 00:40:03,040 --> 00:40:05,660 >> Əlbəttə ki, indi bu bir yan təsiri var. 660 00:40:05,660 --> 00:40:09,000 Bu data structure insanların bir dəfə daxil etmək istəmirəm, çünki yəqin ki, faydalı 661 00:40:09,000 --> 00:40:11,250 lakin biz onlar sonradan əgər yoxlamaq istəyirəm, çünki 662 00:40:11,250 --> 00:40:13,600 biz data strukturunda adları bütün çap istəyirsinizsə. 663 00:40:13,600 --> 00:40:15,850 Biz nəhayət Bu data ilə bir şey olacaq. 664 00:40:15,850 --> 00:40:20,810 Belə ki, indi biz o ehtimal yerdə artıq olan Alice, artıq berbat növü var. 665 00:40:20,810 --> 00:40:23,880 Nə Bob, nə Charlie edir. 666 00:40:23,880 --> 00:40:26,060 Belə ki, bəlkə bu yaxşı bir fikir deyil. 667 00:40:26,060 --> 00:40:28,830 Lakin, həqiqətən, bu bir variantdır. Biz hər kəs aşağı keçmək bilər 668 00:40:28,830 --> 00:40:32,240 və ya heck, Anita oyun gec gəldi, niyə biz yalnız Anita qoymaq deyil 669 00:40:32,240 --> 00:40:35,870 deyil, burada deyil, burada deyil, burada isə yalnız siyahıda bir az aşağı öz qoymaq bildirin. 670 00:40:35,870 --> 00:40:38,680 Amma sonra bu problem daha qalmaq başlayır. 671 00:40:38,680 --> 00:40:41,630 Siz onun ilk adı əsasında dərhal Alice tapa bilər. 672 00:40:41,630 --> 00:40:44,320 Və dərhal Bob və Charlie. Amma sonra, Anita axtarmaq 673 00:40:44,320 --> 00:40:46,360 və hmm bax Alice yolu var. 674 00:40:46,360 --> 00:40:48,770 Yaxşı, məni Alice aşağıda yoxlamaq edək. Bob Anita deyil. 675 00:40:48,770 --> 00:40:51,850 Charlie Anita deyil. Oh, Anita var. 676 00:40:51,850 --> 00:40:54,720 Və məntiq ki, qatar bütün yolu davam etsəniz, 677 00:40:54,720 --> 00:41:00,690 Bu yeni data strukturu tapmaq və ya Anita daxil ən pis halda çalışan zaman nə var? 678 00:41:00,690 --> 00:41:03,280 Bu doğru, O (n) var? 679 00:41:03,280 --> 00:41:06,280 Ən pis halda, çünki, Alice, Bob, Charlie var. . . 680 00:41:06,280 --> 00:41:10,150 bütün "Y" adına kimsə yol aşağı, belə ki, yalnız bir ləkə var buraxdı. 681 00:41:10,150 --> 00:41:13,950 Şükür ki, biz "Z" adlı heç bir, biz çox alt Anita qoydu. 682 00:41:13,950 --> 00:41:16,040 >> Biz həqiqətən problem həll deyil. 683 00:41:16,040 --> 00:41:19,890 Belə ki, bəlkə biz bu üçüncü ölçüsü təqdim etmək lazımdır. 684 00:41:19,890 --> 00:41:22,230 Biz bu üçüncü ölçüsü təqdim yoxsa Və bu, həyata çevirir 685 00:41:22,230 --> 00:41:25,240 biz mükəmməl bunu edə bilər, lakin müqəddəs grail almaq olacaq 686 00:41:25,240 --> 00:41:28,370 daimi zaman durub və dinamik insertions ki, 687 00:41:28,370 --> 00:41:30,960 biz ölçüsü 26 ağır kodu dizisi yoxdur. 688 00:41:30,960 --> 00:41:34,400 Biz istədiyiniz kimi bir çox adları kimi əlavə edə bilərsiniz, amma Gəlin burada 5 dəqiqə fasilə etmək 689 00:41:34,400 --> 00:41:38,790 və sonra düzgün edin. 690 00:41:38,790 --> 00:41:46,020 Bütün hüquqlar. Mən olduqca süni orada hekayə qurmaq 691 00:41:46,020 --> 00:41:48,670 Alice, sonra Bob və sonra Charlie və sonra Anita, seçerek 692 00:41:48,670 --> 00:41:51,000 onun adı aydın Alice ilə toqquşmaq gedirdi. 693 00:41:51,000 --> 00:41:54,120 Amma ilə bazar ertəsi günü sona çatdı sual yalnız necə ehtimal 694 00:41:54,120 --> 00:41:56,370 Bu cür toqquşma almaq olardı ki? Başqa sözlə, 695 00:41:56,370 --> 00:42:00,490 biz bu cədvəlli strukturunda istifadə başlamaq əgər, bu, həqiqətən, yalnız bir sıra deyil 696 00:42:00,490 --> 00:42:02,460 26 locations bu halda, 697 00:42:02,460 --> 00:42:05,740 bizim giriş yerinə bərabər paylanır əgər nə? 698 00:42:05,740 --> 00:42:09,620 Bu süni Alice və Bob və Charlie və David deyil və s əlifba, 699 00:42:09,620 --> 00:42:12,380 bu eyni Z. vasitəsilə A yayılan oldu 700 00:42:12,380 --> 00:42:15,220 >> Bəlkə biz yalnız uğurlu almaq lazımdır və biz iki A və ya iki B etmək fikrində deyilik 701 00:42:15,220 --> 00:42:17,640 kimsə işarə çox yüksək ehtimalı ilə, həm 702 00:42:17,640 --> 00:42:20,730 biz ümumiləşdirilmiş bu problem deyil, əgər 0 25 703 00:42:20,730 --> 00:42:26,060 lakin, demək, 0 364 və ya 65, tipik bir il gün tez-tez sayı, 704 00:42:26,060 --> 00:42:31,170 və sual, "bu otaq bizim iki eyni ad var ehtimalı nədir?" 705 00:42:31,170 --> 00:42:34,600 Başqa sözlə, ehtimal bizə iki A ilə başlayan bir adı var ki, nə var? 706 00:42:34,600 --> 00:42:37,190 Sual növ, eyni, lakin bu ünvan kosmik 707 00:42:37,190 --> 00:42:39,940 Bu axtarış yer, ad günləri halda böyükdür 708 00:42:39,940 --> 00:42:42,820 biz əlifba hərflərin çox il bir çox gün daha var. 709 00:42:42,820 --> 00:42:44,910 Bir toqquşma ehtimalı nədir? 710 00:42:44,910 --> 00:42:48,410 Yaxşı, biz riyaziyyat qarşı çıxış yolu figuring bu hesab edə bilər. 711 00:42:48,410 --> 00:42:50,580 Heç bir toqquşma ehtimalı nədir? 712 00:42:50,580 --> 00:42:53,970 Yaxşı, burada bu ifadə nə ehtimalı olduğunu deyir 713 00:42:53,970 --> 00:42:58,770 onlar unikal ad var ki, bu otaqda yalnız bir adam var, əgər? 714 00:42:58,770 --> 00:43:01,190 Bu 100% var. Çünki otaqda yalnız bir nəfər var, əgər 715 00:43:01,190 --> 00:43:03,940 onun ad günü ilin həyata 365 gün hər hansı ola bilər. 716 00:43:03,940 --> 00:43:08,650 Belə ki, 365/365 variantları mənə 1 dəyər verir. 717 00:43:08,650 --> 00:43:11,250 Belə ki, hazırda sözügedən ehtimal yalnız 1-dir. 718 00:43:11,250 --> 00:43:13,270 Ancaq otaq ikinci şəxs olduqda, 719 00:43:13,270 --> 00:43:16,490 onların ad günü fərqli ehtimalı var? 720 00:43:16,490 --> 00:43:20,680 Yalnız 364 mümkün gün məhəl sıçrayış il var 721 00:43:20,680 --> 00:43:23,580 onların ad günü üçün digər şəxslər ilə toqquşmaq deyil. 722 00:43:23,580 --> 00:43:31,920 Belə ki, 364/365. Üçüncü şəxs gəlir, bu, s 363/365, və. 723 00:43:31,920 --> 00:43:35,790 Belə ki, biz, kiçik və kiçik əldə olunur, bu fraksiyaları birlikdə vurulması saxlamaq 724 00:43:35,790 --> 00:43:40,720 anlamaq üçün bizə bütün unikal ad günü olduğunu ehtimal nədir? 725 00:43:40,720 --> 00:43:43,570 Amma sonra biz, əlbəttə, yalnız cavab almaq və onun ətrafında flip bilər 726 00:43:43,570 --> 00:43:47,210 və 1 minus bütün, biz nəhayət almaq lazımdır ifadə etmək 727 00:43:47,210 --> 00:43:51,250 Sizin math kitab geri xatırlayıram, o, bu kimi bir az bir şey görünür 728 00:43:51,250 --> 00:43:54,590 olan çox daha asan qrafik şərh olunur. 729 00:43:54,590 --> 00:43:57,820 Burada bu qrafik, x oxunda ad günü sayı var 730 00:43:57,820 --> 00:44:02,030 və ya ad günü olan insanlar və y ox üzrə sayı matç ehtimal edir. 731 00:44:02,030 --> 00:44:06,060 Və nə dedi, siz varsa, belə deyək ki, 732 00:44:06,060 --> 00:44:10,860 22, 23 kimi bir şey seçə imkan verir. 733 00:44:10,860 --> 00:44:13,160 Otaq, 22 və ya 23 nəfər, varsa 734 00:44:13,160 --> 00:44:17,100 o çox az adam iki eyni ad üçün gedir ehtimalı 735 00:44:17,100 --> 00:44:19,560 combinatorially, həqiqətən, super yüksək. 736 00:44:19,560 --> 00:44:23,450 50% bahis ki, praktiki olaraq yalnız 22 nəfər, seminar, bir sinif, 737 00:44:23,450 --> 00:44:25,790 Insanların 2 eyni ad üçün gedir. 738 00:44:25,790 --> 00:44:28,520 Çünki eyni ad ola bilər ki, bir çox yolları var. 739 00:44:28,520 --> 00:44:31,110 Hətta pis, siz chart və sağ tərəfdən baxsaq, 740 00:44:31,110 --> 00:44:34,040 zaman siz onu 58 tələbələri ilə bir sinif var 741 00:44:34,040 --> 00:44:39,270 ad olan 2 nəfər ehtimalı super, super yüksək, təxminən 100%-dir. 742 00:44:39,270 --> 00:44:41,880 İndi ki, real həyatı haqqında bir əyləncə fakt növ var. 743 00:44:41,880 --> 00:44:45,850 >> Ancaq təsiri, indi data strukturları və saxlanılması məlumat 744 00:44:45,850 --> 00:44:51,100 yalnız məlumatların bir gözəl, təmiz, bərabər yayılması var fərz o deməkdir ki, 745 00:44:51,100 --> 00:44:53,650 və şeyi bir dəstə uyğun bir böyük kifayət qədər array var 746 00:44:53,650 --> 00:44:59,360 Siz unikal yerlərdə insanların almaq olacaq demək deyil. 747 00:44:59,360 --> 00:45:03,810 Siz toqquşma var olacaq. , Bu deyilən kimi, hashing bu anlayışı Belə 748 00:45:03,810 --> 00:45:07,450 "Alice" kimi daxil alaraq və bir şəkildə masaj 749 00:45:07,450 --> 00:45:10,190 və sonra 0 və ya 1 və ya 2 kimi bir cavab geri almaq. 750 00:45:10,190 --> 00:45:17,500 Ki, funksiya bəzi çıxış geri almaq toqquşması bu ehtimalı ilə mürəkkəbləşdirilir olunur. 751 00:45:17,500 --> 00:45:19,530 Belə ki, necə biz bu toqquşma idarə edə bilərsiniz? 752 00:45:19,530 --> 00:45:21,940 Yaxşı, bir halda da, biz təklif edilib ki, ideya bilər. 753 00:45:21,940 --> 00:45:25,100 Biz yalnız bir az daha sadəcə, bəlkə hər kəs aşağı keçmək, və ya 754 00:45:25,100 --> 00:45:29,870 deyil, başqa hərəkət hər kəs çox isə yalnız mövcud spot altına Anita hərəkət edək. 755 00:45:29,870 --> 00:45:32,810 Alice 0 Yəni əgər, Bob 1 deyil, Charlie, 2 deyil 756 00:45:32,810 --> 00:45:35,260 biz yalnız yeri 3 Anita qoymaq lazımdır. 757 00:45:35,260 --> 00:45:38,860 Bu probing xətti deyilən data strukturlarında bir texnikadır. 758 00:45:38,860 --> 00:45:41,310 Yalnız bu xətt gəzinti edirik, siz probing növ istəyirik Xətti çünki 759 00:45:41,310 --> 00:45:43,640 məlumat tərkibində mövcud ləkələr üçün. 760 00:45:43,640 --> 00:45:46,210 Əlbəttə, bu, O (n) daxil devolves. 761 00:45:46,210 --> 00:45:49,590 Məlumat struktur həqiqətən tam varsa, bu 25 nəfər artıq var 762 00:45:49,590 --> 00:45:54,120 və sonra Anita çıxınca, o yeri Z olacaq nə başa və gözəl edir. 763 00:45:54,120 --> 00:45:56,540 O, hələ də uyğun, biz sonra onun tapa bilərsiniz. 764 00:45:56,540 --> 00:46:00,100 >> Amma bu şeyi sürətləndirmək məqsədi zidd idi. 765 00:46:00,100 --> 00:46:02,530 Yerine bu üçüncü ölçüsü təqdim nə olur? 766 00:46:02,530 --> 00:46:06,400 Bu texnika ümumiyyətlə ayrı-ayrı chaining adlanan və ya zəncirlər olan edilir. 767 00:46:06,400 --> 00:46:10,030 Və bir hash table, indi bu cədvəlli strukturunda nə 768 00:46:10,030 --> 00:46:13,450 Sizin masa yalnız göstəricilər bir sıra edir. 769 00:46:13,450 --> 00:46:18,230 Amma nə bu göstəricilər qeyd tahmin nədir? 770 00:46:18,230 --> 00:46:21,970 A bağlı siyahısı. Biz bu dünyanın, həm də ən yaxşı almaq nə olur? 771 00:46:21,970 --> 00:46:26,500 Biz ilkin göstəriciləri üçün seriallarda istifadə 772 00:46:26,500 --> 00:46:32,070 məlumat strukturu biz dərhal, [1], [30] və ya s [0] bilərsiniz 773 00:46:32,070 --> 00:46:36,480 lakin biz bəzi rahatlıq var və biz Anita və Alice və Adəm uyğun olar ki, 774 00:46:36,480 --> 00:46:38,630 və digər bir adı, 775 00:46:38,630 --> 00:46:43,470 biz əvəzinə digər ox özbaşına inkişaf edək. 776 00:46:43,470 --> 00:46:47,340 Və biz nəhayət, Bazar ertəsi kimi, bağlı siyahı ilə ifadə qabiliyyəti var. 777 00:46:47,340 --> 00:46:49,530 Biz qanunsuz məlumat strukturu inkişaf edə bilər. 778 00:46:49,530 --> 00:46:52,450 Alternativ olaraq, biz yalnız böyük 2-ölçülü array edə bilər 779 00:46:52,450 --> 00:46:57,190 lakin əgər bir dəhşətli vəziyyət olacaq 2 ölçülü array satırları bir 780 00:46:57,190 --> 00:47:01,280 onun adı A. ilə başlamaq olur əlavə şəxs üçün kifayət qədər böyük deyil 781 00:47:01,280 --> 00:47:04,200 Allah biz böyük 2-ölçülü struktur təkrar bölüşdürə var 782 00:47:04,200 --> 00:47:06,600 A adına bir çox insanlar var yalnız 783 00:47:06,600 --> 00:47:09,480 Z bir şey adına belə bir neçə nəfər var xüsusilə. 784 00:47:09,480 --> 00:47:12,170 Bu yalnız bir çox seyrək data quruluş olacaq. 785 00:47:12,170 --> 00:47:15,400 Belə ki, hər hansı bir vasitə ilə mükəmməl deyil, lakin indi biz ən azı imkanı var 786 00:47:15,400 --> 00:47:19,090 Alice ya Anita aid olduğu dərhal tapmaq, 787 00:47:19,090 --> 00:47:21,090 ən azı şaquli ox baxımından, 788 00:47:21,090 --> 00:47:25,850 və biz yalnız bu bağlı siyahısında Anita ya Alice qoymaq yerləşir qərar var. 789 00:47:25,850 --> 00:47:32,480 Biz şeyi çeşidlənməsi haqqında qayğı yoxdur, nə qədər tez biz bu kimi bir strukturu Alice daxil edə bilər? 790 00:47:32,480 --> 00:47:35,370 Bu daimi zamanı. [0] daxil Biz indeksi, və heç bir var, əgər 791 00:47:35,370 --> 00:47:37,550 Alice ki bağlı siyahı əvvəlində gedir. 792 00:47:37,550 --> 00:47:40,000 Lakin böyük bir məşğul deyil. Anita sonra çıxınca əgər Çünki 793 00:47:40,000 --> 00:47:42,160 addımlar bir sıra sonra, Anita Ü aid deyil? 794 00:47:42,160 --> 00:47:45,140 Yaxşı, [0]. Oop. Alice ki bağlı siyahı artıq. 795 00:47:45,140 --> 00:47:47,760 >> Amma biz bu adlar çeşidlənməsi haqqında qayğı yoxsa, 796 00:47:47,760 --> 00:47:53,580 biz yalnız Alice üzərində, insert Anita hərəkət edə bilər, lakin hətta daimi dəfə. 797 00:47:53,580 --> 00:47:57,010 Alice və Adəm və bütün bu digər bir adları var belə 798 00:47:57,010 --> 00:47:59,410 həqiqətən fiziki onlara dəyişkən deyil. Niyə? 799 00:47:59,410 --> 00:48:04,090 Biz yalnız bilən bağlı siyahısı ilə burada Çünki bu qovşaqlarının hər halda var idi? 800 00:48:04,090 --> 00:48:06,550 Siz bütün çörək qırıntıları hərəkət edir. 801 00:48:06,550 --> 00:48:10,930 Ətrafında okları hərəkət, siz fiziki ətrafında hər hansı bir məlumat hərəkət yoxdur. 802 00:48:10,930 --> 00:48:14,610 Beləliklə, biz dərhal, bu halda, Anita əlavə edə bilərsiniz. Sabit vaxt. 803 00:48:14,610 --> 00:48:20,250 Beləliklə, biz daimi zaman axtarış və Anita kimi kimsə daim zaman durub var. 804 00:48:20,250 --> 00:48:22,740 Amma dünya oversimplifying cür. 805 00:48:22,740 --> 00:48:28,510 Biz sonra Alice tapmaq istəyirsinizsə? 806 00:48:28,510 --> 00:48:31,050 Biz sonra Alice tapmaq istəyirsinizsə? 807 00:48:31,050 --> 00:48:35,690 Neçə addımlar ki, iştirak edir? 808 00:48:35,690 --> 00:48:37,850 [Tələbə cavab anlaşılmaz] 809 00:48:37,850 --> 00:48:40,950 Exactly. Də bağlı siyahısında Alice əvvəl insanların sayı. 810 00:48:40,950 --> 00:48:45,420 Bizim data strukturu, yenidən, bu şaquli çıxışı var, çünki Belə ki, kifayət qədər mükəmməl deyil 811 00:48:45,420 --> 00:48:50,240 və sonra asma bu bağlı siyahıları var - əslində isə bu bir sıra çəkmək deyil bildirin. 812 00:48:50,240 --> 00:48:56,020 Bu bağlı siyahıları bu kimi bir az bir şey görünür ki, bu off asma etdi. 813 00:48:56,020 --> 00:48:59,110 Ancaq problem varsa, Alice və Adəm və bütün bu digər bir adları 814 00:48:59,110 --> 00:49:01,720 orada daha çox başa, 815 00:49:01,720 --> 00:49:04,810 kimsə addımlar dəstə alaraq ola bilər tapmaq, 816 00:49:04,810 --> 00:49:06,670 , siz bağlı siyahı axır var bcause 817 00:49:06,670 --> 00:49:08,090 bir xətti əməliyyatdır. 818 00:49:08,090 --> 00:49:14,270 Belə ki, həqiqətən, sonra durub zaman nəticədə n siyahısına elementlərinin sayı yerləşir O (n) edir. 819 00:49:14,270 --> 00:49:21,780 Bölünür, in özbaşına bu m bağlı siyahıları sayı yerləşir m, zəng edək 820 00:49:21,780 --> 00:49:24,500 biz bu şaquli ox var ki. 821 00:49:24,500 --> 00:49:27,180 Başqa sözlə, biz həqiqətən adları bərabər yayılması güman əgər, 822 00:49:27,180 --> 00:49:30,150 tamamilə qeyri-real. Daha bir məktub açıq-aydın daha var. 823 00:49:30,150 --> 00:49:32,580 >> Amma biz an vahid paylanması üçün güman əgər, 824 00:49:32,580 --> 00:49:37,350 və biz ümumi insanlar, və m ümumi zəncir n 825 00:49:37,350 --> 00:49:40,630 Bu zəncir hər bizə mövcud, sonra uzunluğu 826 00:49:40,630 --> 00:49:44,380 ədalətli sadəcə ümumi, n zəncirlər sayı bölünür olacaq. 827 00:49:44,380 --> 00:49:48,900 Belə n / m. Biz bütün riyazi ağıllı ola bilər Lakin burada. 828 00:49:48,900 --> 00:49:53,030 Bu sabit sayı var, çünki m, daimi deyil. 829 00:49:53,030 --> 00:49:54,620 Siz əvvəlində sizin array bəyan olacaq 830 00:49:54,620 --> 00:49:58,450 və biz boyutlandırma şaquli ox deyilik. Anlayışı ilə, müəyyən edilir ki,. 831 00:49:58,450 --> 00:50:01,220 Bu dəyişən ki, danışmaq, yalnız üfüqi ox var. 832 00:50:01,220 --> 00:50:04,760 Belə ki, texniki, bu daimi deyil. Belə ki, indi durub dəfə 833 00:50:04,760 --> 00:50:09,700 olduqca çox O (n) edir. 834 00:50:09,700 --> 00:50:12,410 Belə ki, bütün daha yaxşı hiss etmir. 835 00:50:12,410 --> 00:50:14,940 Amma həqiqət burada nə var? Yaxşı, bütün bu vaxt, həftə, 836 00:50:14,940 --> 00:50:20,640 deyirdik olduğunuz O (n ²). O (n), 2 x n ², - n, 2 bölünür. . . ech. 837 00:50:20,640 --> 00:50:23,580 Bu, sadəcə n ² var. Amma indi dövr bu hissəsində, 838 00:50:23,580 --> 00:50:25,560 biz daha real dünya haqqında danışmağa başlaya bilərsiniz. 839 00:50:25,560 --> 00:50:31,520 Və n / m yalnız tək n artıq tamamilə daha sürətli edir. 840 00:50:31,520 --> 00:50:35,170 Bir min adları var, və çox buketler onları parçalamaq edin 841 00:50:35,170 --> 00:50:37,820 siz bu zəncirlər hər yalnız on adları var ki, 842 00:50:37,820 --> 00:50:41,670 tamamilə on şeyi axtarış min şey daha sürətli olacaq. 843 00:50:41,670 --> 00:50:43,740 Və qarşıdakı problem dəstdən birini siz etiraz edir 844 00:50:43,740 --> 00:50:46,100 məhz bu barədə düşünmək belə olsa, evet, 845 00:50:46,100 --> 00:50:49,520 asimptotik və riyazi, hələ də yalnız xətti deyil, 846 00:50:49,520 --> 00:50:51,700 şeyi tapmaq üçün çalışırıq zaman ümumi gücünü zaptetti. 847 00:50:51,700 --> 00:50:54,530 Əslində, bu çox daha sürətli olacaq 848 00:50:54,530 --> 00:50:56,520 çünki bu bölən edir. 849 00:50:56,520 --> 00:50:58,310 Və yenə bu ticarət-off olmalıdır olacaq 850 00:50:58,310 --> 00:51:01,390 və nəzəriyyəsi və reallıq arasındakı bu münaqişə, 851 00:51:01,390 --> 00:51:03,550 və kulplar bir dövr bu nöqtədə dönüş başlayacaq 852 00:51:03,550 --> 00:51:07,510 biz növ semster sonuna hazırlamaq kimi reallıq bir daha çox, 853 00:51:07,510 --> 00:51:09,280 biz web proqramlaşdırma dünya tanıtmaq kimi 854 00:51:09,280 --> 00:51:11,530 istifadəçilər üçün gedir çünki yerləşir həqiqətən, performans saymaq gedir 855 00:51:11,530 --> 00:51:14,880 yoxsul dizayn qərarları hiss təşəkkür başlayın. 856 00:51:14,880 --> 00:51:19,950 >> Bir bağlı həyata haqqında Belə ki, necə getmək yoxdur - bir hash table 31 elementləri ilə? 857 00:51:19,950 --> 00:51:22,600 Və əvvəlki Məsələn ad günləri haqqında əsassız idi. 858 00:51:22,600 --> 00:51:26,190 Kimsə 1 Yanvar və ya Fevral 1 ad varsa, bu bucket onları qoymaq lazımdır. 859 00:51:26,190 --> 00:51:28,960 Yanvar 2, 2 fevral, 2 mart varsa, bu bucket onları qoymaq lazımdır. 860 00:51:28,960 --> 00:51:32,220 31 səbəb olmuşdur. Necə bir hash table bəyan edirsiniz? 861 00:51:32,220 --> 00:51:37,480 Bu olduqca sadə ola bilər, node * masa üçün mənim ixtiyari adı, [31] edir. 862 00:51:37,480 --> 00:51:42,400 Bu qovşaqlarının mənə 31 göstəricilərinə verir 863 00:51:42,400 --> 00:51:45,370 və mənə bağlı siyahıları 31 göstəricilərinə üçün imkan verir ki, 864 00:51:45,370 --> 00:51:48,800 o zəncirlər ilkin NULL, hətta əgər. 865 00:51:48,800 --> 00:51:54,860 Mən saxlamaq istəyirsinizsə, mən "Bob", "Charlie" "Alice" qoymaq üçün nə istəyirsiniz? 866 00:51:54,860 --> 00:51:57,010 Bəli, biz bir quruluş olan şeyi kesmek lazımdır 867 00:51:57,010 --> 00:52:00,530 biz Alice, Bob qeyd etmək Charlie qeyd etmək və s. lazımdır, çünki 868 00:52:00,530 --> 00:52:04,940 Biz yalnız tək adları ola bilməz, belə ki, mən burada node adlı yeni struktur yarada bilər. 869 00:52:04,940 --> 00:52:08,310 >> Faktiki node nədir? Bu yeni bağlı siyahısında node nədir? 870 00:52:08,310 --> 00:52:11,840 Söz adlı ilk şey, bu şəxsin adı üçün. 871 00:52:11,840 --> 00:52:14,340 BOY, ehtimalla, bir insan adı maksimum uzunluğu aiddir 872 00:52:14,340 --> 00:52:18,210 ki, nə olursa olsun, 20, crazy künc hallarda 30, 40 simvol 873 00:52:18,210 --> 00:52:22,680 və +1 nə üçün vacibdir? Bu, sadəcə əlavə NULL xarakteri, \ 0 var. 874 00:52:22,680 --> 00:52:27,410 Belə ki, bu düyün, içərisində özünü "bir şey" wrapping edir 875 00:52:27,410 --> 00:52:29,640 lakin sonrakı adlı göstərici bəyan 876 00:52:29,640 --> 00:52:32,580 biz Charlie Bob üçün zəncir Alice bilər və s edir. 877 00:52:32,580 --> 00:52:36,700 NULL ola bilər amma mütləq olmalıdır deyil. 878 00:52:36,700 --> 00:52:40,110 Bu hash masalar hər hansı suallar? Evet? 879 00:52:40,110 --> 00:52:46,190 [Tələbə anlaşılmaz, sualı] Bir sıra - yaxşı sual. 880 00:52:46,190 --> 00:52:50,120 Niyə bir sıra daha çox yalnız char * Bu char söz? 881 00:52:50,120 --> 00:52:53,830 Bu qədər əsassız Məsələn, mən müraciət etmək istəmir 882 00:52:53,830 --> 00:52:56,190 orijinal adları hər malloc üçün. 883 00:52:56,190 --> 00:52:59,530 Mən string üçün yaddaş maksimum məbləği bəyan istədi 884 00:52:59,530 --> 00:53:06,020 Mən Alice \ 0 və malloc və pulsuz və kimi ilə məşğul olan strukturu surəti bilər ki. 885 00:53:06,020 --> 00:53:11,710 I yer istifadə daha şüurlu olmaq istəyirdi, lakin mən bunu bilər. Sual Yaxşı. 886 00:53:11,710 --> 00:53:14,780 Belə ki, bu uzaq ümumiləşdirmək üçün cəhd edək 887 00:53:14,780 --> 00:53:18,350 və ümumiyyətlə data strukturları bu gün qalan diqqət 888 00:53:18,350 --> 00:53:21,170 və eyni əsaslar istifadə həll edə bilər ki, digər problemləri 889 00:53:21,170 --> 00:53:24,590 hətta data strukturları baxmayaraq öz özəllikləri fərqlənə bilər. 890 00:53:24,590 --> 00:53:27,910 >> Belə ki, kompüter çıxır, ağaclar çox rast gəlinir. 891 00:53:27,910 --> 00:53:29,760 Və siz, bir ailə ağac kimi bir ağac növ hesab edə bilər 892 00:53:29,760 --> 00:53:31,830 bəzi kökləri, bəzi matriarch ya patriarx var olduğu 893 00:53:31,830 --> 00:53:34,540 nənə və ya baba və ya əvvəllər geri, 894 00:53:34,540 --> 00:53:38,880 hansı altında ana və dad və ya müxtəlif bacı və ya bu kimi var. 895 00:53:38,880 --> 00:53:42,500 Belə ki, bir ağac strukturu qovşaqlarının var və övladı var 896 00:53:42,500 --> 00:53:45,260 hər node üçün adətən 0 və ya daha çox uşaq. 897 00:53:45,260 --> 00:53:47,320 Və jarqon bəzi burada bu şəkil bax 898 00:53:47,320 --> 00:53:50,630 edir kənarları haqqında kiçik uşaq və ya grandkids hər hansı 899 00:53:50,630 --> 00:53:52,330 kim onlardan qaynaqlanan heç bir oxlar var 900 00:53:52,330 --> 00:53:55,070 o deyilən yarpaq, və daxili hər kəs var 901 00:53:55,070 --> 00:53:58,790 daxili node edir; siz bu xətt bir şey zəng edə bilərsiniz. 902 00:53:58,790 --> 00:54:01,430 Amma bu quruluşu olduqca ümumi. Bu bir az ixtiyari var. 903 00:54:01,430 --> 00:54:04,930 Biz sağ üç övladı var, sol bir uşaq var 904 00:54:04,930 --> 00:54:06,830 altındakı iki övladı qaldı. 905 00:54:06,830 --> 00:54:10,740 Belə ki, biz hər şeyi standartlaşdırmaq başlamaq əgər müxtəlif ölçülü ağaclar var, ancaq 906 00:54:10,740 --> 00:54:15,330 və bir əvvəlki qısa olan binar axtarış Patrick video bu xatırlayıram bilər 907 00:54:15,330 --> 00:54:19,490 online, ikili axtarış bir sıra ilə həyata keçiriləcək yoxdur 908 00:54:19,490 --> 00:54:21,410 bir yazı taxtası üzrə kağız və ya ədəd. 909 00:54:21,410 --> 00:54:25,490 Bir daha mürəkkəb data strukturunda nömrələri saxlamaq istədiyini düşünək. 910 00:54:25,490 --> 00:54:27,680 Bu kimi bir ağac yarada bilər. 911 00:54:27,680 --> 00:54:35,290 Siz C elan node ola bilər ki, node daxilində bu ən azı iki elementləri ola bilər. 912 00:54:35,290 --> 00:54:39,470 Bir siz saxlamaq istədiyiniz nömrə və digər - yaxşı, biz bir daha lazımdır. 913 00:54:39,470 --> 00:54:41,540 Digər onun uşaqlar var. 914 00:54:41,540 --> 00:54:45,150 Belə ki, burada başqa data strukturu var. Bu dəfə bir node n bir sıra saxlanılması kimi müəyyən edilir 915 00:54:45,150 --> 00:54:49,060 və sonra iki göstəricilərinə; sol uşaq və sağ uşaq. 916 00:54:49,060 --> 00:54:52,100 Onlar özbaşına deyilik. Bu ağac haqqında maraqlı var? 917 00:54:52,100 --> 00:55:00,550 >> Biz Patrick onun video onu müəyyən necə bu müəyyən və ya sonra necə model nədir? 918 00:55:00,550 --> 00:55:02,790 O, burada bəzi çeşidlənməsi olduğunu cür Aşkar var 919 00:55:02,790 --> 00:55:04,460 lakin sadə qayda var? Evet? 920 00:55:04,460 --> 00:55:08,350 [Tələbə cavab anlaşılmaz] 921 00:55:08,350 --> 00:55:12,040 Mükəmməldir. Bu nəzər, siz, sol kiçik nömrələri bax 922 00:55:12,040 --> 00:55:14,690 böyük sol nömrələri, lakin hər node üçün doğru. 923 00:55:14,690 --> 00:55:20,370 Hər node üçün, artıq onun sol uşaq az və çox hüququ uşaq daha. 924 00:55:20,370 --> 00:55:25,210 Mən sayı 44, demək, bu data structure axtarmaq istəyirsinizsə, Bu artıq o deməkdir ki, 925 00:55:25,210 --> 00:55:29,320 Mən, çünki indi bu daha mürəkkəb data strukturları bütün kimi, kök başlamaq üçün 926 00:55:29,320 --> 00:55:31,910 biz yalnız başlanğıcdır, bir şey bir göstərici yoxdur. 927 00:55:31,910 --> 00:55:35,010 Və bu halda, əvvəlində kök edir. O, sol son deyil 928 00:55:35,010 --> 00:55:39,530 Bu struktur kökü var. Mən burada 55 var bax, mən 44 arıyorum. 929 00:55:39,530 --> 00:55:41,430 Hansı istiqamətdə mən getmək istəyirəm? 930 00:55:41,430 --> 00:55:45,680 Aydındır ki, doğru çox böyük olacaq, çünki Bəli, mən, sol getmək istəyirəm. 931 00:55:45,680 --> 00:55:49,050 Belə ki, burada qeyd, siz konseptual yarısında ağac Doğrama növ istəyirik 932 00:55:49,050 --> 00:55:51,700 Siz sağ enən heç etdiyiniz çünki. 933 00:55:51,700 --> 00:55:55,410 Belə ki, indi mən 55-dən 33-gedin. Bu bir sıra çox kiçik. 934 00:55:55,410 --> 00:56:01,590 Mən 44 arıyorum, indi mən 44 bu ağac olsa, mən sağa aşkar edə bilərsiniz bilirik. 935 00:56:01,590 --> 00:56:04,460 Belə ki, yenə, mən budama yarısında ağac edirəm. 936 00:56:04,460 --> 00:56:06,780 Bu telefon kitab konseptual olduqca çox eyni deyil. 937 00:56:06,780 --> 00:56:09,510 Bu, biz yazı taxtası üzrə sənədləri ilə nə eyni deyil 938 00:56:09,510 --> 00:56:13,940 amma bu bizə həqiqətən imkan verir ki, bir daha mürəkkəb strukturu var 939 00:56:13,940 --> 00:56:16,880 Bu, bölmək və alqoritmi dizayn fəth 940 00:56:16,880 --> 00:56:19,420 və əslində, belə bir struktur traversing - whoops. 941 00:56:19,420 --> 00:56:22,870 Bu kimi bir quruluş traversing, yalnız olduğu "bu yolla getmək və ya yol getmək" 942 00:56:22,870 --> 00:56:26,870 bölməsində bu həyata keçirərkən ilk fikrinizi əyilmiş bütün kod deməkdir 943 00:56:26,870 --> 00:56:31,270 və ya, recursion ya iteration istifadə edərək, ikili axtarışı üçün, evdə vasitəsilə gəzinti 944 00:56:31,270 --> 00:56:35,060 bu boyun bir ağrı var. Orta element tap, sonra yuvarlaqlaşdırma yuxarı və ya aşağı edin. 945 00:56:35,060 --> 00:56:39,230 >> İndi yenidən recursion istifadə edə bilərsiniz, çünki bir gözəllik, bu var 946 00:56:39,230 --> 00:56:43,760 lakin daha çox pakizə. Həqiqətən, siz sayı 55 istəyirik və 44 tapmaq istəyirsinizsə, 947 00:56:43,760 --> 00:56:48,450 Bu halda sola getmək, sonra nə etməliyəm? Siz eyni alqoritmi axır. 948 00:56:48,450 --> 00:56:51,560 Siz node dəyəri yoxlamaq, sonra sol və ya sağ getmək. 949 00:56:51,560 --> 00:56:53,670 Sonra sol və ya sağ gedin node dəyəri yoxlayın. 950 00:56:53,670 --> 00:56:56,710 Bu mükəmməl recursion uyğun. 951 00:56:56,710 --> 00:57:00,920 Belə ki, hətta keçmişdə biz recursion cəlb bəzi ədalətli ixtiyari nümunələri etdik 952 00:57:00,920 --> 00:57:03,430 ki, data stuctures ilə recursive olmalıdır etməyib 953 00:57:03,430 --> 00:57:07,820 xüsusən ağaclar, bir problem alaraq bu fikri mükəmməl bir proqram var 954 00:57:07,820 --> 00:57:12,920 bu daralır və sonra eyni tipli, lakin kiçik, proqram həlli. 955 00:57:12,920 --> 00:57:14,590 >> Belə ki, təqdim edə bilər ki, başqa data strukturu var. 956 00:57:14,590 --> 00:57:18,760 Bu sirli baxmaq ilk baxışda nəzərdə, lakin bu, bir gözəl edir. 957 00:57:18,760 --> 00:57:25,090 Belə ki, bu, söz axtarış miras olan trie, trie adlı data strukturu 958 00:57:25,090 --> 00:57:30,210 yenidən cəhd-val elan, lakin dünyada bunlar çağırır nə deyil. Çalışır. T-r-i-e. 959 00:57:30,210 --> 00:57:35,190 Bəzi növ ağac strukturu, lakin trie ildə qovşaqlarının hər 960 00:57:35,190 --> 00:57:41,280 nə görünür? Bu qısaldılmış növü var, çünki bu bir az yanlışdır. 961 00:57:41,280 --> 00:57:45,960 Lakin bu trie hər node həqiqətən bir sıra kimi görünür. 962 00:57:45,960 --> 00:57:48,840 Və baxmayaraq bu diaqram müəllifidir, o, göstərilən deyil 963 00:57:48,840 --> 00:57:54,130 Bu halda, bu trie kimin məqsədi həyat sözlər saxlamaq üçün bir data strukturu 964 00:57:54,130 --> 00:57:57,330 A-l-i-c-e və ya B-o-b kimi. 965 00:57:57,330 --> 00:58:02,480 Və yol olan s Bu data mağazalar Alice və Bob və Charlie və Anita və 966 00:58:02,480 --> 00:58:06,970 ki, bir trie Alisa saxlamaq vasitəsi bir sıra istifadə edir 967 00:58:06,970 --> 00:58:09,820 biz bir sıra kimi görünür olan kök node-da başlayacaq 968 00:58:09,820 --> 00:58:12,080 və stenoqrafiya notation yazılı oldu. 969 00:58:12,080 --> 00:58:15,070 Ilə heç bir adı var idi, çünki müəllif abcdefg çıxarılmışdır. 970 00:58:15,070 --> 00:58:19,150 Onlar yalnız M və P və T göstərdi, lakin bu halda, 971 00:58:19,150 --> 00:58:22,780 nin burada olan bəzi adların səfərdə Alice və Bob və Charlie hərəkət edək. 972 00:58:22,780 --> 00:58:25,670 Maxwell bu sxemdə əslində. 973 00:58:25,670 --> 00:58:29,570 Belə ki, necə müəllifi mağaza etdi M-a-x-w-e-l-l? 974 00:58:29,570 --> 00:58:36,990 O, kök node başladı və getdi [M], belə ki, təxminən 13-sıra 13 yer. 975 00:58:36,990 --> 00:58:40,750 Sonra oradan bir göstərici yoxdur. 976 00:58:40,750 --> 00:58:42,760 Başqa array gedən bir göstərici. 977 00:58:42,760 --> 00:58:47,880 Oradan müəllifi, sol üst orada təsvir kimi, yer A ki massivinə dizine 978 00:58:47,880 --> 00:58:52,250 və o, və ya o, başqa bir sıra ki, pointer sonra 979 00:58:52,250 --> 00:58:55,460 və yeri X. da pointer getdi 980 00:58:55,460 --> 00:58:59,840 Sonra s növbəti array yeri W, E, L, L, və, 981 00:58:59,840 --> 00:59:03,090 və nəhayət, in əslində bu şəkil qoymaq edək. 982 00:59:03,090 --> 00:59:05,380 Kodu kimi bir node baxmaq nə? 983 00:59:05,380 --> 00:59:11,820 Bir trie bir node daha qovşaqlarının üçün göstəricilər bir sıra var. 984 00:59:11,820 --> 00:59:16,090 Amma ən azı bu həyata, boolean dəyər bir növ var var. 985 00:59:16,090 --> 00:59:18,770 Mən bunu is_word zəng etmək üçün baş verir. Niyə? 986 00:59:18,770 --> 00:59:22,670 Siz Maxwell daxil olduğunuz zaman daxil deyilik Çünki 987 00:59:22,670 --> 00:59:25,300 Bu data strukturu şey. 988 00:59:25,300 --> 00:59:27,480 Siz X. yazılı deyilik M. yazılı deyilik 989 00:59:27,480 --> 00:59:30,240 Siz yapýyorsun bütün göstəricilər aşağıdakı edir. 990 00:59:30,240 --> 00:59:33,360 Sonra M, A təmsil göstəricisidir təmsil edən göstərici 991 00:59:33,360 --> 00:59:36,310 sonra X, W, E, L, L, təmsil göstəricisidir 992 00:59:36,310 --> 00:59:41,950 lakin nə sonunda nə etmək lazımdır kontrol getmək növ, mən bu yeri çatıb. 993 00:59:41,950 --> 00:59:45,560 Məlumat strukturunda burada bitir bir söz var idi. 994 00:59:45,560 --> 00:59:48,190 >> Belə ki, nə bir trie həqiqətən dolu və müəllif təmsil seçdi olunur 995 00:59:48,190 --> 00:59:51,880 az üçbucaq bu terminuses. 996 00:59:51,880 --> 00:59:56,470 Əsl Bu yalnız faktı bu üçbucağı burada o deməkdir ki, bu boolean dəyər 997 00:59:56,470 --> 00:59:59,200 Siz ağac geri getmək əgər deməkdir 998 00:59:59,200 --> 01:00:02,420 ki Maxwell bu deyil adlı bir söz deməkdir. 999 01:00:02,420 --> 01:00:04,870 Məsələn Amma söz foo, 1000 01:00:04,870 --> 01:00:07,970 , ağac deyil mən üst qədər burada kök node-da başlayacaq əgər, çünki 1001 01:00:07,970 --> 01:00:14,030 Heç bir f pointer, heç o pointer, heç o göstərici var. Foo bu lüğət bir ad deyil. 1002 01:00:14,030 --> 01:00:22,460 Amma əksinə, turing, t-u-r-i-n-g. Yenə t və ya u və ya r ya i və ya n və ya g saxlaya bilmədi. 1003 01:00:22,460 --> 01:00:29,820 Amma aşağı burada bu node doğru yol dəyəri Bu data tərkibində mağaza idi - ağac ilə 1004 01:00:29,820 --> 01:00:33,030 doğru üçün is_word bu boolean dəyər yaradılması. 1005 01:00:33,030 --> 01:00:35,740 Belə bir trie, bu çox maraqlı meta strukturunun növ 1006 01:00:35,740 --> 01:00:39,810 həqiqətən lüğət bu cür sözləri özləri saxlanılması deyilik yerləşir. 1007 01:00:39,810 --> 01:00:45,100 Aydın olmaq üçün, yalnız bəli ya heç saxlanılması edirik, burada bitir bir söz var. 1008 01:00:45,100 --> 01:00:46,430 >> İndi dolayısı nə var? 1009 01:00:46,430 --> 01:00:51,120 Siz yaddaşında saxlamaq üçün çalışdığınız bir lüğətdə 150,000 sözlər varsa 1010 01:00:51,120 --> 01:00:53,400 bir bağlı siyahısı kimi bir şey istifadə edərək, 1011 01:00:53,400 --> 01:00:56,870 Siz bağlı siyahısında 150,000 qovşaqlarının üçün gedir. 1012 01:00:56,870 --> 01:01:00,250 Və əlifba sırası ilə bu sözlər bir tapmaq O (n) vaxt bilər. 1013 01:01:00,250 --> 01:01:04,370 Xətti vaxt. Amma trie burada halda, 1014 01:01:04,370 --> 01:01:09,210 bir söz tapmaq çalışan zaman nə var? 1015 01:01:09,210 --> 01:01:17,390 Burada gözəllik çıxır ki, siz artıq bu lüğətdə 149.999 sözlər, olsa belə 1016 01:01:17,390 --> 01:01:20,170 Bu data strukturu ilə həyata 1017 01:01:20,170 --> 01:01:25,560 ki, daxil, Alice kimi, Alice bir daha şəxs tapmaq və ya əlavə etmək üçün nə qədər vaxt lazımdır? 1018 01:01:25,560 --> 01:01:30,640 Yaxşı, bu arxada xarakter üçün bəlkə 6 addımlar yalnız 5 var. 1019 01:01:30,640 --> 01:01:32,880 Çünki tərkibində digər adları presense 1020 01:01:32,880 --> 01:01:35,340 Alice daxil yolu ilə almaq deyil. 1021 01:01:35,340 --> 01:01:39,640 Bundan başqa, Alice tapmaq bu lüğətdə 150,000 sözlər var dəfə 1022 01:01:39,640 --> 01:01:41,960 , bütün Alice tapmaq yolla almaq deyil 1023 01:01:41,960 --> 01:01:46,880 Alice çünki. . . . . burada, çünki mən bir boolean dəyər tapdı. 1024 01:01:46,880 --> 01:01:50,920 Və heç boolean doğru, sonra Alice olduqda sözlər Bu data struktur deyil. 1025 01:01:50,920 --> 01:01:56,220 Başqa sözlə, bu yeni daxil şeyi şeyi tapmaq və daxil olan çalışan zaman 1026 01:01:56,220 --> 01:02:01,920 trie data strukturu O - bu n deyil. 1027 01:02:01,920 --> 01:02:05,730 150,000 nəfər presense Alice heç bir təsiri var, çünki görünür. 1028 01:02:05,730 --> 01:02:11,560 Nin bu k İngilis söz maksimum uzunluğu olduğu k, zəng Belə bildirin 1029 01:02:11,560 --> 01:02:14,050 hansı adətən artıq 20-bir simvol çoxdur. 1030 01:02:14,050 --> 01:02:17,940 Belə ki, k sabit deyil. Müqəddəs grail Beləliklə, biz artıq aşkar görünür 1031 01:02:17,940 --> 01:02:26,000 edər bir trie, daimi vaxt ki silme üçün lookups üçün edir. 1032 01:02:26,000 --> 01:02:29,170 Çünki artıq strukturunda şeyi sayı 1033 01:02:29,170 --> 01:02:32,600 hətta fiziki yoxdur. Yenə yalnız off yoxlanılır və sort edirik, bəli və ya xeyr, 1034 01:02:32,600 --> 01:02:35,050 gələcək çalışan zaman heç bir təsiri yoxdur. 1035 01:02:35,050 --> 01:02:37,940 >> Amma tutmaq olmalıdır var, əks halda biz çox vaxt sərf olmazdı 1036 01:02:37,940 --> 01:02:41,460 Bütün bu digər strukturlar üzrə yalnız nəhayət gözəl olan gizli bir almaq. 1037 01:02:41,460 --> 01:02:46,410 Yaxşı qiymət biz burada bu böyüklük nail ödəyir? Space. 1038 01:02:46,410 --> 01:02:49,010 Bu şey kütləvi deyil. Və səbəbi müəllifi 1039 01:02:49,010 --> 01:02:52,400 burada təqdim etməmiş, qeyd seriallarda kimi baxmaq ki, bu şeyi ki, 1040 01:02:52,400 --> 01:02:55,400 O ağac istirahət trie qalan, cəlb etməyib 1041 01:02:55,400 --> 01:02:58,060 onlar yalnız hekayə müvafiq deyilik, çünki. 1042 01:02:58,060 --> 01:03:01,870 Lakin bu qovşaqlarının bütün geniş super və ağac hər node tutur 1043 01:03:01,870 --> 01:03:07,780 26 və ya faktiki olaraq, bu halda mən apostrof üçün yer daxil olmaqla, çünki 27 simvol ola bilər 1044 01:03:07,780 --> 01:03:09,980 belə ki, biz apostrophized sözləri ola bilər. 1045 01:03:09,980 --> 01:03:14,450 Bu halda, bu geniş Diziler var. Onlar picutured deyilik Belə ki, baxmayaraq ki, 1046 01:03:14,450 --> 01:03:18,190 Bu RAM kütləvi məbləği alır. 1047 01:03:18,190 --> 01:03:20,670 Hansı müasir hardware especilly, gözəl ola bilər 1048 01:03:20,670 --> 01:03:25,650 ancaq tradeoff var. Biz daha çox yer xərcləyərək az vaxt almaq. 1049 01:03:25,650 --> 01:03:28,580 Belə ki, bu bütün gedir? 1050 01:03:28,580 --> 01:03:32,640 Yaxşı, nə edək - burada bax edək. 1051 01:03:32,640 --> 01:03:39,510 Burada bu oğlan bir jump etmək edək. 1052 01:03:39,510 --> 01:03:43,450 >> Iman və ya, C indi bir neçə dəfə olub kimi çox fun, 1053 01:03:43,450 --> 01:03:48,130 daha müasir şeyə keçid zaman olduğu dövr çatma nöqtəsində edirik. 1054 01:03:48,130 --> 01:03:50,950 Yüksək səviyyədə şeylər. Və hətta həftə növbəti neçə olsa 1055 01:03:50,950 --> 01:03:54,580 biz hələ göstəricilərinə və yaddaş idarə dünyada özümüzü batırmaq davam edəcəyik 1056 01:03:54,580 --> 01:03:57,210 biz sonra qurmaq bilər ki, rahat almaq üçün, 1057 01:03:57,210 --> 01:04:01,270 sonunda oyun Bu dil, istehzayana deyil, təqdim etmək, son nəticədə edir. 1058 01:04:01,270 --> 01:04:03,330 Biz HTML söhbət 10 dəqiqə kimi xərcləmək lazımdır. 1059 01:04:03,330 --> 01:04:05,950 HTML bütün biçimlendirme dili, və nə bir biçimlendirme dili 1060 01:04:05,950 --> 01:04:10,220 "Bu qalın edin 'deyə açıq Mötərizədə və qapalı Mötərizədə bu sıra 1061 01:04:10,220 --> 01:04:12,000 "Bu mərkəzli etmək 'Bu italik etmək'. ' 1062 01:04:12,000 --> 01:04:14,250 Bu bütün intellektual maraqlı deyil, lakin faydalı super deyil. 1063 01:04:14,250 --> 01:04:16,650 Və əlbəttə, bu gün hər yerdə var. 1064 01:04:16,650 --> 01:04:19,450 Amma nə HTML dünya haqqında güclü və web proqramlaşdırma ümumiyyətlə, 1065 01:04:19,450 --> 01:04:25,910 dinamik şeylər qurur; PHP və ya Python və ya Ruby və ya Java və ya C # kimi dillərdə kodu yazmaq. 1066 01:04:25,910 --> 01:04:30,360 Həqiqətən, hər hansı seçdiyiniz dil və dinamik HTML yaradan. 1067 01:04:30,360 --> 01:04:32,960 Dinamik CSS deyilən bir şey yaradan. 1068 01:04:32,960 --> 01:04:35,810 Cascading stillər, estetik də edir. 1069 01:04:35,810 --> 01:04:41,360 Və baxmayaraq, bu gün mən tanış Google.com kimi bəzi veb getmək əgər 1070 01:04:41,360 --> 01:04:46,100 və mən, bəlkə əvvəl görülən etdiyiniz geliştirici, görünüşü mənbə, keçirmək üçün getmək 1071 01:04:46,100 --> 01:04:49,800 lakin mənbə keçirmək üçün gedir, bu məhsulları yəqin ki, olduqca sirli görünür. 1072 01:04:49,800 --> 01:04:55,320 Amma bu Google.com həyata keçirir əsas kodu. 1073 01:04:55,320 --> 01:04:57,940 Ön sonuna. Və həqiqətən bütün bu qabarıq estetik stuff deyil. 1074 01:04:57,940 --> 01:05:01,740 Burada CSS edir. Mən aşağı scrolling saxlamaq, biz bir renk kodlu məhsulları almaq lazımdır. 1075 01:05:01,740 --> 01:05:06,890 Bu HTML edir. Google kodu mess kimi görünür, amma əslində fərqli bir pəncərə açmaq əgər 1076 01:05:06,890 --> 01:05:09,380 biz bu bəzi struktur bilərsiniz. 1077 01:05:09,380 --> 01:05:12,640 Mən bu açmaq varsa, burada qeyd, bir az daha oxunaqlı deyil. 1078 01:05:12,640 --> 01:05:16,850 Biz əvvəl bu tag görmək olacaq, [söz] bir tag edir 1079 01:05:16,850 --> 01:05:23,520 HTML, baş, bədən, div, script, mətn sahəsi, span, mərkəzi, div. 1080 01:05:23,520 --> 01:05:26,770 Bu da, ilk baxışdan sirli görünüşlü və sort edir 1081 01:05:26,770 --> 01:05:30,890 lakin bu mess bütün müəyyən nümunələri və repeatable nümunələri aşağıdakı 1082 01:05:30,890 --> 01:05:33,850 bir dəfə biz əsasları aşağı almaq, belə ki, bu kimi kod yazmaq edə bilərsiniz 1083 01:05:33,850 --> 01:05:37,550 və sonra JavaScript adlı başqa bir dil istifadə edərək, bu kimi kodu manipulyasiya. 1084 01:05:37,550 --> 01:05:40,440 Və JavaScript browser daxilində çalışan bir dil 1085 01:05:40,440 --> 01:05:44,380 Google xəritələri istifadə edir ki, əlbəttə alver alət Harvard kursları, istifadə ki, bu gün 1086 01:05:44,380 --> 01:05:48,660 siz dinamizm bütün dəstə vermək, Facebook, ani statusu yenilikləri göstərmək verir 1087 01:05:48,660 --> 01:05:51,430 Twitter anında tweets göstərmək üçün istifadə edir. 1088 01:05:51,430 --> 01:05:53,820 Bütün bu özümüzü daxil batırmaq başlayacaq 1089 01:05:53,820 --> 01:05:57,190 Amma almaq üçün biz Internet haqqında bir az bir şey anlamaq lazımdır. 1090 01:05:57,190 --> 01:06:01,130 Burada Bu klip yalnız uzun bir dəqiqə və indi bu əslində kəsb edək, 1091 01:06:01,130 --> 01:06:08,380 İnternet gəlmək haqqında nə üçün bir iltifat kimi çalışır. Mən sizə "Net və Warriors". Vermək 1092 01:06:08,380 --> 01:06:14,720 >> [♫ Slow xor musiqi ♫] 1093 01:06:14,720 --> 01:06:20,450 [Kişi dastançı] O bir mesaj gəldi. 1094 01:06:20,450 --> 01:06:23,770 Protokol bütün öz ilə. 1095 01:06:23,770 --> 01:06:37,270 [♫ Faster elektron musiqi ♫] 1096 01:06:37,270 --> 01:06:41,330 O, yönlendirici uncaring, sərin firewall dünya gəldi 1097 01:06:41,330 --> 01:06:45,690 və ölüm çox pis təhlükələr. 1098 01:06:45,690 --> 01:06:55,400 O, sürətli. O, güclü deyil. O, TCP / IP, və o ünvan var. 1099 01:06:55,400 --> 01:06:59,250 Net və Warriors. 1100 01:06:59,250 --> 01:07:05,290 [Malan] Sonrakı həftə sonra. İnternet. Web proqramlaşdırma. Bu CS50 edir. 1101 01:07:05,290 --> 01:07:08,290 [CS50.TV]