HOPARLÖR 1: Bütün sağ, belə ki, bu deyil CS50 Bu həftə beş sonu. Və son dəfə xatırlayıram, biz açılmış meraklısı data baxaraq həll başladı strukturları təqdim başladı problemlər, yeni problemlər, lakin bu əsas Threading cür idi ki, biz node node etməyə başladı. Belə ki, əlbəttə, bu bir story bağlı siyahı. Və story, bağlı Mən yalnız bir var deməkdir bu qovşaqlarının hər arasında mövzu. Siz meraklısı edə bilərsiniz çıxır ikiqat bağlı siyahıları kimi şeylər bir arrow var qovuşdurmağımız hər iki istiqamətdə gedir ki, müəyyən verim ilə kömək edə bilər. Amma bu problemi həll? Bu nədir problem həll etdi? Biz bazar ertəsi Niyə qayğı idi? Niyə, nəzəri, biz bazar ertəsi qayğı idi? O nə edir? Auditoriya: Biz dinamik boyutlandır bilər. HOPARLÖR 1: OK, biz belə dinamik boyutlandır. Yaxşı Siz də aparılır. Belə ki, dinamik bu boyutlandır bilər data structure, bir sıra halbuki, Xatırladaq ki, bir bilmək lazımdır priori nə qədər yer istədiyiniz və bir az daha lazımdır, əgər space, siz uğurlar cür istəyirik. Siz yeni bir sıra yaratmaq lazımdır. Siz bütün hərəkət var sizin bir digər məlumatlar, nəticədə köhnə sıra pulsuz Siz, sonra davam edin. Hansı yalnız çox bahalı hiss və çox səmərəsiz və həqiqətən ola bilər. Amma bu, bütün yaxşı deyil. Biz qiymət ödəmək, bir nə idi daha aydın qiymətləri biz bir bağlı siyahı istifadə edərək ödəmək? Auditoriya: Biz istifadə etmək lazımdır hər biri üçün ikiqat yer. HOPARLÖR 1: Bəli, belə ki, biz lazımdır ən azı iki dəfə çox yer kimi. Əslində, mən həyata bu şəkil nin hətta bir az yanlış, çünki müasir bir çox CS50 IDE haqqında kompüter, bir pointer və ya bir ünvan Əslində dörd bytes deyil. Bu, çox tez-tez bu var gün səkkiz bytes olan alt deməkdir ən əslində orada düzbucaqlı iki dəfə kimi növ Mən tərtib etdik nə kimi böyük, siz üç dəfə kimi istifadə edirik deməkdir biz başqa ola bilər kimi çox yer. İndi eyni zamanda, biz istəyirik hələ bayt söhbət, sağ? Biz mütləq söhbət deyilik megabayt və ya gigabayt, Bu məlumatlara halda strukturları böyük almaq. Və belə ki, bu gün biz hesab başlamaq biz data araşdırmaq bilər necə daha səmərəli əgər fakt data daha böyük olur. Amma canonicalize edək ilk əməliyyatları bu edə bilərsiniz ki, data strukturları növləri. Bir bağlı kimi belə bir şey siyahısı, ümumiyyətlə dəstəkləyir əməliyyatlar silmək istəyirəm, daxil edin və axtarış. Və mən ki, nə deməkdir? Bu yalnız, adətən deməkdir insanlar bağlı siyahı istifadə əgər, onlar və ya başqası həyata keçirdi sil, insert kimi funksiyaları, və axtarış, siz belə həqiqətən bir şey data strukturu ilə faydalı. Belə ki, tez nəzər salaq biz həyata bilər necə bir bağlı siyahı bəzi kodu kimi belə. Belə ki, bu yalnız bir C kodu, belə tam bir proqramdır Mən, həqiqətən, tez çırpılmış ki. Bu paylanmasında online deyil kodu, bu, həqiqətən run deyil, çünki. Amma yalnız var fark Şərh dedi, dot dot dot, bir şey var var, orada bir şey dot dot dot. Və yalnız baxaq şirəli hissələri nə. Belə ki, xətt üç, bu artıq Xatırladaq ki, Biz son bir node elan təklif vaxt, o düzbucaqlı obyektlərindən biri. Bu, biz n zəng edəcəyik int var lakin biz bir şey zəng edə bilər, və sonra bir struct node ulduz növbəti çağırıb. Və yalnız, ikinci aydın olmaq line line altı on ki, nədir? Bu, bizim üçün nə edir? Bu, əlbəttə, daha görünür, çünki bizim adi dəyişənlər çox sirli. Auditoriya: Bu artıq hərəkət edir. HOPARLÖR 1: Bu artıq hərəkət edir. Və daha dəqiq olmalıdır Bu ünvan saxlamaq olacaq üçün nəzərdə node semantically yanında, sağ? Belə ki, etmək niyyətində deyil mütləq bir şey hərəkət. Bu, sadəcə olacaq olan bir dəyər saxlamaq Ünvan olacaq bəzi digər node, biz struct bildirib etdik niyə və ki node ulduz, star belirten bir göstərici və ya ünvanı. OK, belə ki, indi biz güman əgər bizə mövcud bu N, və edək başqasının var ki, güman integers bütün dəstə daxil bir bağlı siyahısına daxil. Və bağlı siyahısı bir nöqtədə ilə işarə bir dəyişən adlı siyahısı bir parametri kimi burada keçdi, necə xətti haqqında getmək yoxdur 14 axtarış həyata? Başqa sözlə, mən həyata edirəm kimin məqsədi həyat funksiyası sonra bir int və almaq üçün bir bağlı siyahı başlayan, ki bağlı siyahı bir göstəricisidir. Ilk kimi, mən David kim hesab edirəm ki, könüllü, Bazar ertəsi günü idi O işarə edildi bütün bağlı siyahı, biz keçən etdiyiniz kimi bu David burada arqument kimi. Necə ki, biz bu siyahı traversing haqqında getmək yoxdur? Bəli, bu çıxır ki, baxmayaraq ki, göstəricilərinə, bizə indi nisbətən yeni biz nisbətən bunu edə bilərsiniz straightforwardly. Mən irəli getmək üçün gedirəm və müvəqqəti dəyişən elan ki, Konvensiya ilə yalnız gedir üçün, PTR pointer çağırıb, və ya lakin siz istədiyiniz bir şey zəng edə bilər. Mən başlamaq üçün gedirəm Bu siyahıda başlaması. Belə ki, siz cür bu hesab edə bilər Mənə müəllim kimi digər gün, cür kimsə işarə könüllü olaraq insanlar arasında. Belə ki, bir müvəqqəti dəyişən deyiləm yalnız eyni şey işarə bizim təsadüfən adlı könüllü David də işarə etdi. İndi göstərici isə null deyil, çünki geri ki null bəzi xüsusi sentinel dəyəri siyahı sonunda ayırır Mən işarə deyiləm isə son könüllü kimi torpaq idi nin irəli gedək və aşağıdakı. Göstərici Əgər indi cür istəyirəm biz tələbə ilə nə etmək quruluşu pointer dot növbəti əgər bərabərdir pointer dot N bərabərdir olduqca əgər dəyişən N bərabərdir qəbul edilmişdir dəlil, sonra irəli getmək istəyirəm və doğru qayıtmaq deyirlər. Mən daxili sayı N gördük Mənim bağlı siyahı qovşaqlarının biri. Amma dot artıq bu çərçivədə işləyir, pointer, PTR, çünki həqiqətən bir göstərici, bir ünvan, Biz, həqiqətən, gözəl edə bilərsiniz sintaksis nəhayət bir parça istifadə markalı belə intuitiv mənada və həqiqətən getmək deməkdir ki, burada bir arrow istifadə orada tam ki, ünvanı. Belə ki, çox oxşar dot operator ruhu, lakin pointer bir göstərici deyil, çünki və faktiki struct özü, biz yalnız arrow istifadə edin. Belə ki, cari node ki, mən, müvəqqəti dəyişən işarə edirəm N, mən nə istəyirəm deyil? Bəli, mənim insan könüllüləri ilə biz gün burada idi ki, Mənim ilk insan bir mən deyil istəyirik və bəlkə ikinci insan deyil Mən istəyirəm biri və üçüncü, mən hərəkət fiziki saxlamaq lazımdır. Kimi necə bir siyahısını addım edirsiniz? Biz bir sıra idi, siz yalnız i plus plus kimi etdi. Lakin bu halda, bu kifayətdir növbəti göstərici olur, göstərici yoxdur. Başqa sözlə, növbəti sahəsində sol əlində bütün kimi ki, bazar ertəsi insan könüllü bəzi digər node qeyd etmək üçün istifadə idi. Həmin onların növbəti qonşuları idi. Mən bu siyahıda gezinmek üçün istəyirsinizsə Belə ki, Mən artıq mən bunu plus plus bilməz Mən əvəzinə demək lazımdır Mən pointer, gedir növbəti sahəsində nə bərabər, növbəti sahəsində, növbəti sahəsində var o sol əlləri aşağıdakı biz mərhələ işarə idi ki, bir sonrakı dəyərlərə. Mən vasitəsilə almaq əgər ki, bütün iteration, və nəhayət, mən olmayan null edib aşkar N hələ, mən yalnız yalan qayıtmaq. Belə ki, yenə, biz burada edirik ki, bütün, bir an əvvəl şəkil kimi, işarə ilə başlayır ehtimalla siyahısı başlayan. Və sonra mən yoxlamaq, dəyəri nə Mən doqquz bərabər arıyorum? Əgər belədirsə, mən doğru qayıtmaq və mən bitirdim. Əgər, əlimi yeniləmə AKA pointer, qeyd etmək növbəti Ok'un yeri, və sonra yanındakı arrow yeri, və növbəti. Mən sadəcə bu array vasitəsilə gəzinti edirəm. Belə ki, yenə, kimin umurunda? Like bu bir tərkib hissəsi nədir? Yaxşı, biz təqdim ki, xatırlayıram bir yığın anlayışı olan bu kimi mücərrəd data insofar yazın bir C şey, bir CS50 şey deyil, Bu mücərrəd fikir, bu fikir bir-birinə üst şeyi yığma ki, həyata keçirilə bilər müxtəlif yollarla dəstələri. Və biz təklif bir yolu idi bir sıra, və ya bir bağlı siyahısı ilə. Və bu ki, canonically çıxır yığını ən azı iki əməliyyatları dəstəkləyir. Və buzz sözləri, push var yığını üzərinə bir şey təkan, yeni tray kimi yemekhane, və ya pop, olan topmost aradan qaldırılması deməkdir yemək yığını tray zalı, sonra bəlkə bəzi digər əməliyyatlar həmçinin. Belə ki, necə biz strukturu müəyyən edə bilər biz indi bir yığın zəng edirik ki? Bəli, biz zəruri bütün var deyirəm C. bizim sərəncamında syntax, Mənə bir növü tərif vermək bir yığın daxilində struct, Mən, bir sıra edir demək gedirəm bütün nömrələri dəstə və sonra ölçüsü. Belə ki, başqa sözlə, mən istəyirəm kodu bu həyata keçirilməsi üçün, Mənə getmək və yalnız cür imkan bu söyləyərək nə cəlb edir. Bu deyib ki, mənə vermək bir sıra var quruluşu, və mən gücü nə bilmirəm Mən etdik ki, yəqin bəzi daimi var başqa müəyyən ki, gözəl var. Lakin, yalnız bir Güman iki, üç, dörd, beş. Belə ki, gücü 5-dir. Daxilində bu element mənim strukturu nömrələri adlanacaq. Və sonra mən bir ehtiyac digər dəyişən yəqin əvvəlcə mən gedirəm adlı ölçüsü sıfır başlanır müəyyən etmək. Heç bir şey varsa yığını ölçüsü, sıfır və nömrələr zibil dəyərlər var. Mən hələ orada nə heç bir fikrim yoxdur. Mən basmaq istəyirsinizsə Belə ki, yığını üzərinə bir şey, Mən funksiyası təkan zəng Güman, və Mən sayı 50 kimi 50 təkan demək burada təklif edirəm Mən bu array onu cəlb? Beş müxtəlif mümkün cavab var. Harada sayı 50 basmaq istəyirsiniz? Burada məqsəd varsa, yenə zəng funksiyası push, bir dəlil keçmək 50, mən bunu harada qoymaq bilərəm? Beş mümkün var 20% şans düzgün təxmin. Bəli? Auditoriya: Far hüququ. HOPARLÖR 1: Far hüququ. 25% şans artıq var düzgün təxmin. Belə ki, həqiqətən gözəl olardı. Konvensiya, mən bir sıra ilə demək lazımdır, biz ümumiyyətlə, sol başlayacaq lakin biz, əlbəttə bilər sağ başlamaq. Belə ki, burada spoyler Mən olardı yəqin ki, sol onu cəlb, yalnız bir normal sıra olduğu kimi Mən soldan sağa gedən başlamaq. Amma flip bilər, əgər hesab, gözəl. Bu, yalnız şərti deyil. OK, Mən bir etmək lazımdır baxmayaraq daha dəyişiklik. İndi mən bir şey sövq etdik ki, yığını üzərinə, nə gələn var? Bütün sağ, mən ölçüsü arttırmayı var. Mənə irəli və yalnız gidelim sıfır olan bu yeniləmə. Əvəzinə indi mən gedirəm dəyəri bir qoymaq üçün. İndi başqa bir təkan güman yığını üzərinə sayı 51 kimi. Bəli, mən bir daha etmək lazımdır ölçüsü iki qədər dəyişiklik. Və sonra mən bir daha təkan güman 61 kimi yığını üzərinə sayı, indi ölçüsü güncellemeniz lazımdır daha bir vaxtı və ölçüsü kimi dəyər 3 almaq. İndi pop zəng güman edirlər. İndi Konvensiya ilə, pop, bir dəlil deyil. Bir yığını ilə bütün tray məcaz point Siz mülahizə yoxdur ki, ki, tray almaq getmək, bütün edə bilərsiniz olan topmost bir pop edir yığını yalnız çünki. Yəni bu data structure nə var. Ki məntiqi Belə ki, pop, nə off gəlir demək? Belə ki, 61. Belə ki, həqiqətən, kompüter nə yaddaş nə edəcək? Mənim code nə var? Nə təklif edirəm biz ekranda dəyişdirmək? Nə dəyişdirmək lazımdır? Bağışlayın? Beləliklə, biz 61 durun. Beləliklə, mən mütləq bunu edə bilərsiniz. Mən 61 xilas edə bilər. Və sonra nə digər dəyişiklik baş etmək lazımdır? Size yəqin ki, iki geri getmək üçün var. Və belə ki, gözəl. Amma bir dəqiqə, ölçüsü gözləyin bir an əvvəl üç idi. Yalnız tez ağlı başında olma çek edək. Biz necə ki, bilirdinizmi 61 qurtarmaq istəyirdi? Biz yaratma edirik, çünki. Və mən bu ikinci əmlak ölçüsü var. Mən, bir dəqiqə gözləyin həftə iki geri düşüncə Biz söhbət açılmış zaman Bu yer sıfır idi Diziler, Bu yer bir idi, bu yer idi iki, bu yer üç, dörd, bu kimi görünür ölçüsü arasında əlaqələr və mən istəyirəm element aradan qaldırılması üçün array yalnız nə ola görünür? Size minus biridir. Və belə ki, necə insanlar kimi deyil biz 61 birinci gəlir bilirik. Necə kompüter bilmək olacaq? Zaman kodu harada siz yəqin ki, ölçüsü minus bir etmək istəyirəm, Belə ki, üç minus iki, və ki, biz 61 qurtarmaq istəyirəm deməkdir. Və sonra biz həqiqətən təkmilləşdirə bilər ki, ölçüsü belə ölçüsü indi yalnız iki üç gedir. Və yalnız xırdaçı olmaq üçün gedirəm Mən, bitirdim ki, təklif üçün necə? Siz daxilən təklif Düzgün Mən 61 qurtarmaq lazımdır. Amma yox I növ sort 61 xilas kazanılmış? Mən səmərəli unuttuysanız ki, həqiqətən var. Siz oxumaq sonra əgər, geri pset4 düşünmək Suclari haqqında məqalə, PDF biz ki, uşaqlar oxumaq, və ya pset4 üçün bu həftə oxumaq olacaq. Bu həqiqətən ilgili Xatırladaq ki kompüter Suclari bütün fikir. Hansı bir kompüter ümumiyyətlə yoxdur edir bir şey olduğu yalnız, unudur lakin bu getmək və kimi deyil onu və ya yalnış danışıq üçün cəhd edin adet sıfır və olanları olanlar bit və ya digər təsadüfi model Sizin halda özünüz belə qəsdən yoxdur. Belə ki, intuisiya idi sağ, 61 xilas edək. Lakin əslində, biz narahat yoxdur. Biz yalnız ki, unutmaq lazımdır bu, bizim ölçüsü dəyişən var. İndi bu yığını ilə bir problem var. Mən hər şeyi basmaqla saxlamaq yığını üzərinə, nə açıq-aydın baş verəcək yalnız bir neçə dəqiqə vaxt? Biz yer tökülmək olacaq. Və biz nə etməliyəm? Biz cür berbat edirik. Bu həyata imkan vermir istifadə edərək, çünki bizə sıra ölçüsünü Bu syntax, əgər həftə iki geri hesab edirəm ki, Siz bəyan sonra bir sıra ölçüsü, biz harada bir mexanizm görmədim Siz serialın ölçüsünü dəyişə bilərsiniz. Həqiqətən C xüsusiyyət yoxdur. Desəniz mənə beş vermək Nths, onlara zəng nömrələri, ki, siz onu almaq olacaq bütün var. Beləliklə, biz Bazar ertəsi kimi indi var həll ifadə etmək qabiliyyəti baxmayaraq ki, biz yalnız çimdik lazımdır Bizim yığını müəyyən bəzi ağır kodlu array ola, lakin yalnız bir ünvan saxlamaq üçün. İndi niyə bu? İndi biz yalnız rahat olmalıdır fakt mənim proqram çalışır ki, Mən güman gedirəm insan soruşmaq lazımdır, neçə ədəd saxlamaq istəyirsiniz? Belə ki, giriş bir yerdən gəlmək var. Amma bir dəfə sayı, sonra mən yalnız bilərsiniz vermək fəaliyyət nə istifadə Mənə yaddaş yığın? Mən malloc istifadə edə bilərsiniz. Mən hər hansı bir sayı demək olar bytes geri bu Nths üçün istəyirəm. Və bütün nömrələri saxlamaq üçün bu struct daxilində burada dəyişən nə olmalıdır? Nə həqiqətən gider Bu ssenari nömrələri? Bəli, ilk bir göstərici yaddaş ki, yığın byte, və ya daha çox xüsusi, ünvan o bayt ilk. Bu bir, əgər Fərq etməz byte və ya bir milyard bytes, Mən ilk haqqında qayğı lazımdır. Çünki nə malloc zəmanətləri və Mənim əməliyyat sistemi zəmanət, ki, yaddaş I yığın almaq, bu bitişik olacaq. Boşluqlar var olacaq deyil. Mən 50 xahiş etdik Belə ki bytes və ya 1000 bytes, onlar bütün olacaq geri geri geri. Və belə uzun mən necə böyük xatırlayıram qədər mən bilmək lazımdır bütün istədi ilk ünvan. Belə ki, indi biz kodu imkanı var. Olsa da, bu, bizi almaq olacaq çox vaxt bu qədər yazmaq indi ki, yaddaş təkrar bölüşdürə bilər yalnız orada fərqli bir ünvan saxlanılması biz hətta daha böyük və ya istəyirsinizsə yaddaş kiçik bir yığın. Belə ki, burada bir ticarət off. İndi biz dinamizm almaq. Biz hələ var contiguousness Mən iddia edirəm. Malloc bizə verəcək, çünki yaddaş bitişik yığın. Amma bu bir ağrı olacaq bizim üçün boyun, proqramçı, həqiqətən kod. Bu, yalnız daha çox iş var. Biz nə yaxın kodu lazımdır Yalnız bir an əvvəl həyata tarpıltı. Çox doable, lakin bu mürəkkəbliyi edər. Və belə geliştirici zaman, proqramçı vaxt başqa bir resurs deyil biz sərf etmək lazımdır bilər ki, bir müddət yeni funksiyalar almaq üçün. Və sonra əlbəttə bir sıra var. Biz bu girməyəcəyəm çox ətraflı bir. Amma bu ruhunda çox oxşar. Mən bir sıra həyata və bilər müvafiq əməliyyatlar, enqueue və ya dequeue, əlavə və ya aradan qaldırılması kimi, Bu, deyərək bir meraklısı yoldur enqueue və ya dequeue kimi edir. Mən yalnız özümü bir struct verə bilər ki, yenə bir sıra nin sıra var, ki, yenə bir ölçüsü var, amma niyə indi lazımdır bir sıra qarşısında takip? Mən bilmək lazım deyil Mənim yığını qarşısında. Yaxşı, əgər mən yenə bir Sıraya yalnız ağır edək Beş kimi olan kimi kod burada potensial da integers. Belə ki, bu sıfır, bir, iki, üç, dörd edir. Bu olacaq yenidən çağırıb nömrələri. Bu size adlanacaq. Niyə kifayət deyil yalnız ölçüsü var? Yaxşı, o eyni nömrələr təkan edək. Mən enqueued, və ya basdı pushed--. İndi sonra 50 enqueue və lazımdır 51, sonra 61, və dot dot dot. Belə ki, enqueue var. Mən sonra 61, sonra 50, 51 enqueued. Və eyni görünür indiyə qədər bir yığını, istisna olmaqla, mən bir dəyişiklik etmək lazımdır. Bu ölçüsü güncellemeniz lazımdır, belə ki, mən getmək İndi üç iki bir sıfırdan. Necə dequeue edirsiniz? Nə dequeue olur? Kim ilk bu siyahı off gəlmək lazımdır Apple Store xətt var, əgər? Belə ki, 50. Belə ki, bu cür trickier bu vaxt var. Son dəfə isə bu super idi asan yalnız, ölçüsü minus bir etmək Mən səmərəli mənim serialın sonuna almaq ədəd olduğu, bu 61 rədd et. Amma 61 çıxarmaq istəmirəm. Mən 50 etmək istəyən 5:00 AM var idi üçün sıraya girdi Yeni iPhone və ya etajer. Və mən, 50 qurtarmaq üçün sağ, bunu edə bilməz? Mən 50 silmək olar. Amma biz yalnız biz bildirib belə anal olmaq yoxdur kimi danışıq və ya məlumat gizlətmək. Olduğu Biz yalnız unuda bilər. Amma indi mənim ölçüsünü dəyişdirmək əgər iki, bu kifayət qədər məlumat var Mənim növbə gedir nə bilirik? Həqiqətən. Mənim ölçüsü, iki Like lakin queue harada başlayır, xüsusilə Mən hələ varsa yaddaş həmin nömrələri. 50, 51, 61. Belə ki, xatırlamaq lazımdır İndi ön olduğu. Və mən qədər təklif orada biz yalnız çağırıb lazımdır Onun ilkin Nth ön, dəyəri nə olmalıdır? Zero siyahı yalnız başlanğıcıdır. Amma indi əlavə decrementing üçün ölçüsü, biz yalnız ön arttırmayı. İndi burada bir problem var. Belə ki, davam bir. Bu sayı düşünək kimi 121, 124, sonra dammit, Mən kosmik həyata deyiləm. Amma deyiləm, bir dəqiqə gözləyin. Hekayə bu nöqtədə, belə ki, size bir iki Güman, üç, dörd, belə ki, güman ölçüsü, ön biridir, dörd belə 51 qarşısında deyil. Mən burada bir sıra qoymaq istəyirəm, lakin, dammit, mən kosmik həyata deyiləm. Amma sağ, həqiqətən deyiləm? Mən harada qoymaq bilər 171 kimi əlavə dəyər? Bəli, mən biləcəyi yalnız cür sağ, üzərində geri getmək? Və sonra 50 silmək, və ya yalnız 171 ilə üzerine. Və niyə merak edirsinizsə Bizim nömrələri, belə ki, təsadüfi var Bu adətən kompüter alınır CS50 sonra Harvard elm kursları. Amma yaxşı bir optimallaşdırma idi, İndi, çünki mən yer israf deyiləm. Mən hələ yadda var necə böyük bu şey ümumi edir. Bu beş ümumi var. Mən istəmirəm, çünki 51 yadda başlayın. Belə ki, indi mən hələ kosmik həyata am, belə ki, eyni problem əvvəlki kimi. Amma necə indi görə bilərsiniz Sizin kodu, yəqin ki, bir az daha yazmaq lazımdır mürəkkəbliyi baş etmək üçün. Və əslində, nə operator C yəqin ki, imkan verir ki, Siz magically bu circularity edirsiniz? Bəli modulo operator, faiz işarəsi. Belə ki, bir sıra haqqında sərin cür nə, biz rəsm serialların saxlamaq, baxmayaraq ki, bu kimi düz xətləri kimi, əgər cür Eğme kimi bu barədə düşünmək ətrafında bir dairə kimi, sonra yalnız daxilən bu cür əqli işləri Mən daha çox pakizə bir az düşünmək. Siz hələ həyata keçirmək olardı kodu ki, ruhi model. Belə ki, çətin, nəticədə, həyata keçirmək üçün lakin biz hələ deyil, size-- itirmək Bunu halda qabiliyyəti, boyutlandır. Biz serialın qurtarmaq üçün var, biz bir göstərici ilə əvəz, və sonra bir yerdə mənim kodu I var bir həqiqətən yaratmaq üçün fəaliyyət nə zəng array adlı nömrələri? Malloc, və ya bəzi oxşar funksiyası, dəqiq. Bacalar və ya sıralarında hər hansı bir sual. Evet? Yaxşı sualdır. Nə modulo burada istifadə edir. Belə ki, ümumiyyətlə, istifadə edərkən mod, siz bunu ölçüsü ilə bütün data structure. Belə ki, bir şey beş və ya gücü, əgər kimi daimi var, yəqin ki, iştirak edir. Amma yalnız modulo beş edir yəqin ki, kifayət qədər deyil Biz bilmək lazımdır, çünki biz nə burada və ya burada və ya burada ətrafında kesmek. Beləliklə, siz yəqin ki, həmçinin istəyirik cəlb etmək istəyirəm olacaq şey ölçüsü, və ya eləcə də ön dəyişən. Belə ki, yalnız bu nisbətən var sadə hesab ifadə edərək, lakin modulo əsas tərkib hissəsi olacaq. Belə ki, qısa film olacaq əgər. Bir animasiya ki, bəzi başqa universitetdə insanlar biz birlikdə qoymaq Bu müzakirə üçün uyğunlaşdırılmışdır. Bu Jack öyrənmək daxildir sıralarında və stats haqqında faktlar. FILM: Bir zamanlar, Jack adlı bir oğlan var idi. Bu dostlar edilməsi gələndə, Jack bir bacarıq yox idi. Belə ki, Jack danışmaq üçün getdi ən məşhur oğlan bilirdi. O, Lou getdi və mən nə etməliyəm, xahiş? Lou yoldaşı gördüm ki, həqiqətən çətin idi. Bəli, o, yalnız başladı Siz geyimli etdiyiniz necə baxmaq. Əgər hər hansı bir paltar yoxdur fərqli bir göz ilə? Bəli, Jack bildirib. Mən əminəm ki, yoxdur. Evimə gəlin və Mən sizə onlara göstərmək lazımdır. Belə ki, onlar Jack çıxdı. Və Jack Lou qutusu göstərdi o, bütün köynək saxlanılır və onun şalvar və onun corab. Lou Mən görmək olduğunu ifadə edərək, bir qalaq bütün paltar. Niyə bəzi geymək deyil biraz dəfə başqaları? Jack, dedi yaxşı, mən , paltar və corab aradan qaldırılması Mən onları yumaq və qoymaq onlara üz qutusuna. Sonra gələn gəlir səhər və mən hop. Mən qutusu getmək və almaq üst off mənim paltar. Lou tez həyata Jack ilə problem. O, paltar, CD saxlanılır və yığını kitablar. O çatdıqda bir şey oxumaq və ya geymək, O top kitab və ya alt seçmək istədiyiniz. Sonra o, görülən zaman, o, sağ geri qoymaq olardı. Geri yığını üst, getmək olardı. Mən həll bilirik, bir zəfər Loud bildirib. Siz öyrənmək lazımdır bir sıra istifadə edərək başlayın. Lou Jack paltar götürüb gizli onlara asdı. O, boşaldılmış zaman box, o, yalnız onu tossed. Sonra o, Jack sonunda keçdiyini ifadə edərək, gün, sol paltar qoymaq Əgər siz onları üz qoymaq zaman. Sonra sabah səhər zaman Sizin paltar almaq, günəş görmək xəttinin sonunda sağ, on. Siz görmürlərmi? Lou bildirib. Bu, belə gözəl olacaq. Siz bir dəfə hər şeyi geymək lazımdır əvvəl iki dəfə bir şey köhnəlir. Və sıralarında hər şeyi ilə onun gizli və şelfində, Jack hiss etməyə başlayıb özü kifayət qədər əmin. Lou Bütün thanks və onun gözəl queue. HOPARLÖR 1: Yaxşı, bu sitayişə layiq deyil. Belə ki, həqiqətən gedir nə İndi başlıq altında? Biz göstəricilərinə var ki, biz malloc var ki, biz yaratmaq imkanı var ki, özümüz üçün yaddaş chunks dinamik. Belə ki, bu şəkil biz yalnız gün glimpsed. Biz, həqiqətən, əbədi etməyib bu, ancaq bu şəkil altında var davam İndi həftə başlıq. Və bu, yalnız təmsil Biz tərtib etdik düzbucaqlı, kompüter yaddaş. Və bəlkə sizin kompüter və ya CS50 ID, yaddaş və ya RAM gigabayt var və ya iki qiqabayt və ya dörd. Bu, həqiqətən etməz. Sizin əməliyyat sistemi Windows və ya Mac OS və ya Linux, mahiyyətcə proqram imkan verir Bu çıxışı var hesab edirəm ki, tam üçün kompüter yaddaş, hətta çalışan bilər, baxmayaraq Eyni anda birdən çox proqramları. Belə ki, əslində, həqiqətən işləmir. Lakin bir illüziya növü var proqramları bütün verilir. Belə ki, bu RAM iki gigs var idi Kompüter hesab edə bilər necə. İndi təsadüfən, bu bir şeyi, yaddaş bu seqmentləri biri bir yığın adlanır. Həqiqətən heç bir zaman indiyə qədər yazılı kodu Siz çağırıb ki, instansiya əsas funksiyası. Heç bir zaman mən var Xatırladaq ki, tərtib kompüter yaddaş, Mən həmişə sort çəkmək burada düzbucaqlı yarım və söhbət narahat etmir Yuxarıda nə haqqında. Əsas adlanır zaman, mən iddia çünki Siz yaddaş bu qəlpə almaq burada enir. Əsas əgər bir funksiyası adlanır svop kimi, yaxşı svop burada gedir. Və bu ki, çıxır harada sona oldu. Bir yığın adlı bir şey On Sizin kompüter yaddaş daxilində. İndi günün sonunda, Bu yalnız müraciət edir. Bu byte sıfır kimi byte bir byte 2 milyard. Amma bu barədə düşünmək Bu düzbucaqlı obyekt kimi, bütün biz hər edirik dəfə biz bir funksiyası zəng yaddaş yeni bir dilim layering. Biz dilim funksiyası ötürür öz yaddaş ilə işləmək üçün. Bu əhəmiyyətli olduğunu indi xatırlayıram. Biz var, çünki svop kimi bir şey A və B və kimi və iki yerli dəyişənlərin biz bir və iki həmin dəyərləri dəyişdirmək iki və bir geri üçün svop qaytarır zaman, Bu dilim sanki var yaddaş yalnız getdi. Əslində, bu, hələ də var orada forensically. Və bir şey həqiqətən var hələ də var. Amma konseptual, bu kimi deyil baxmayaraq ki, tamamilə getdi. Və belə ki, əsas iş hər hansı bir bilmir ki, ki, mübadilə funksiyası edildi Bu, həqiqətən o keçdi halda pointer ya istinadən dəlilləri. İndi fundamental həll svop ilə problem ünvanı şeyi keçir. Amma bu da nə var, çıxır bir hissəsi yuxarıda davam düzbucaqlı bütün bu vaxt hələ daha çox yaddaş orada var. Və zaman dinamik yaddaş ayrılması, Bu GetString, daxilində olub ki, biz CS50 sizin üçün bunu etdik kitabxana, və ya uşaqlar əgər malloc zəng və xahiş bir yığın üçün əməliyyat sistemi yaddaş, bu yığını deyil. Bu başqa yerə gəlir kompüter yaddaş ki, yığın deyirlər. Və hər hansı bir fərqli deyil. Bu eyni RAM var. Bu eyni yaddaş var. Bu qədər yalnız RAM var orada əvəzinə aşağı burada. Və belə ki, nə deməkdir? Yaxşı, sizin kompüter varsa yaddaş məhdud məbləği və yığını, belə ki, böyüyür danışmaq, və yığın, görə bu arrow aşağı artır. Başqa sözlə, hər zaman malloc zəng Bir dilim veriləcək edirik yaddaş yuxarıda, Bir az sonra, aşağı sonra bəlkə bir az aşağı, siz malloc zəng hər zaman, yığın, bu istifadə var, cür artır, nə daha yaxın və daha artan? yığını. Belə ki, bu yaxşı bir fikir kimi görünür? Bu, həqiqətən, açıq-aydın deyil Mən demək, başqa nə yalnız edə bilərsiniz yaddaş məhdud miqdarı var. Amma bu, şübhəsiz ki, pis. Bu iki oxlar bir var bir-birinə kurs qəza. Və bu pis oğlan, insanlar çıxır , proqramlaşdırma ilə xüsusilə yaxşı və kompüter hack çalışır, Bu həqiqəti istifadə edə bilərsiniz. Əslində, hesab edək bir az parçasını. Belə ki, bu oxuya bilərsiniz bir nümunəsidir haqqında Wikipedia daha ətraflı. Biz sizə qeyd edəcəyik Məqalədə əgər maraqlı. Amma bir hücum ümumiyyətlə var bufer daşqın kimi tanınan insanlar kimi uzun üçün mövcud manipulyasiya etmək imkanı var xüsusilə C. kompüter yaddaş, Belə ki, bu, çox özbaşına proqram, lakin alt qədər oxumaq bildirin. Argc char star argv daxil Main. Belə ki, edir ki, bir proqram command line dəlilləri. Və bütün əsas yəqin zəng etmir bir funksiyası, sadəlik üçün F çağırırıq. Və nə keçir? Bir argv. Belə ki, F keçir nə Word istifadəçi tipli ki, sonra sətirinə Proqramın adı bütün. Belə ki, çox Sezar və ya Vigenere kimi olan Siz argv ilə məşğul xatırlayıram bilər. Belə ki, F nədir? F simli edir onun yeganə arqument kimi, AKA bir char ulduz, eyni şey, bir string kimi. Və bu özbaşına deyirlər Bu misalda bar. Və sonra char c 12 yalnız layman nin baxımından, bizim üçün bunu char c bracket 12 nədir? Nə olub? Xüsusi, yaddaş ayrılması 12 chars 12 bytes. Məhz. Və sonra son xətt, tərpənmək və surəti, yəqin ki, görmədim etdik. Bu string surəti kimin məqsədi həyat funksiyası ikinci arqument surəti deyil ilk mübahisəyə, lakin yalnız bir qədər bayt müəyyən sayda. Belə ki, üçüncü arqument deyir Necə bir çox bytes surəti lazımdır? bar uzunluğu, nə Yığdığınız istifadəçi. Və məzmunu ki, ki, simli bar yaddaş daxil sitemizi C işarə Belə ki, bu cür axmaq görünür, o da olur. Bu göstərdi misal var, lakin bu nümayəndəsi var hücum istiqamətini sinfinin, bir proqram hücum bir yol. Bütün gözəl və istifadəçi əgər yaxşı 11 simvol bir sözlə növləri az, plus backslash sıfır və ya. Daha istifadəçi növləri daha əgər 11 və ya 12 və ya 20 və ya 50 simvol? Edəcəyimiz bu proqram nədir? Potensial seg günah. Gedir kor-koranə up bar hər şeyi surəti onun uzunluğu sanki bar hər şey Ünvan daxil C. Lakin C işarə yalnız preemptively 12 bayt kimi verdi. Amma heç bir əlavə çek var. Şərtləri əgər heç bir var. Burada yoxlanılması heç bir səhv var. Və bu proqram nə edəcəyimiz yalnız kor-koranə deyil digər bir şey surəti. Və belə ki, biz bu aparsaq bir şəkil kimi, burada yaddaş alanı yalnız bir sliver. Belə ki, biz, altındakı qeyd yerli dəyişən bar var. Store-- olacaq ki, pointer So ki, yerli dəlil deyil, string bar saxlamaq üçün gedir. Və sonra yalnız qeyd Yuxarıda bir yığını, çünki xahiş hər zaman yığını yaddaş üçün, Bu bir az gedir pictorially yuxarıda, biz orada 12 bytes var bildiriş. sol üst bir C bracket sıfır və sağ alt bir C bracket 11. Bu necə kompüter var onu qoymaq niyyətindədir. Belə ki, yalnız daxilən, bar daha var, əgər olmaq üzrə cəmdə 12 simvol daha var backslash sıfır, 12 və ya C bracket 12 getmək üçün gedir? Və ya daha burada 12-ci xarakter və ya 13 xarakteri, gedir yüzüncü xarakter şəkil başa? Yuxarıda və ya aşağıda? Sağ, baxmayaraq ki, çünki yığını özü yuxarı artır Siz məhsulları qoymaq sonra Bu, dizayn səbəblərə görə, üstdən-aşağı yaddaş qoyur. Siz 12-dən çox bayt var Belə ki, Siz bar üzerine başlamaq olacaq. İndi bir səhv var, lakin bu həqiqətən böyük. Var, çünki Lakin bu, böyük edir yaddaş gedən daha stuff. Belə ki, burada biz necə güc var aydın olmaq, salam qoydu. Mən sətirinə salam çap edin. H-E-L-L-O backslash sıfır ərzində başa o 12 bytes, biz super təhlükəsiz edirik. Hər şey yaxşıdır. Amma bir şey yazın əgər artıq potensial bu bar kosmosa dırmaşmaq gedir. Amma pis hələ, bu çevrilir Bütün bu müddət həyata, Biz söhbət heç etdik olsa da bu yığını digər məhsulları üçün istifadə olunur. Bu, sadəcə yerli dəyişənlərin deyil. C çox aşağı səviyyədə dilidir. Və bu cür gizli də yığını istifadə zaman xatırlamaq bir funksiyası, nə adlanır ünvan, əvvəlki funksiyası var belə ki, geri funksiyası atlayabilirsiniz. Belə ki, əsas zənglər arasında mübadilə zaman şeyi yığını üzərinə basdı yalnız yerli dəyişənlərin svopları deyil və ya onun dəlilləri də gizli basdı yığını üzərinə təmsil Burada qırmızı dilim ilə, əsas ünvanı fiziki Sizin kompüter yaddaşında, ki, svop edilir, kompüter Mən əsas geri getmək lazımdır bilir və əsas funksiyası həyata tamamlayın. Belə ki, bu, indi təhlükəli, çünki salam daha yaxşı daha çox istifadəçi, İstifadəçi girişi clobbers ki, belə və ya, qırmızı bölmə üzerine yazır məntiqi əgər kompüter yalnız kor-koranə güman gedir ki, qırmızı dilim bytes var ki, Bu qaytarmalıdır olan ünvan, rəqib nə varsa kifayət qədər ağıllı və ya bayt ardıcıllığı qoymaq üçün kifayət qədər şanslı orada bir ünvan kimi görünür ki, lakin bu kodu ünvanı var o kompüter istəyir ki, əvəzinə əsas icra? Başqa sözlə, nə əgər istifadəçi tez at yazaraq yalnız bir şey deyil , salam xətərsiz kimi lakin bu ekvivalent var code həqiqətən Bu istifadəçinin bütün faylları silmək üçün? Və ya mənə öz parol e-poçt? Və ya giriş başlamaq onların tuş vuruşlarını, sağ? Bir yol yoxdur, bu gün müəyyən edək Onlar salam yalnız yazın bilər ki, dünya və ya onların adı, onlar mahiyyətcə bilər indeksi, adet sıfır keçmək və olanlar, kompüter kodu və ünvanı üçün səhvlər. Olsa belə qədər mücərrəd, əgər kifayət qədər çəkişmə kodu istifadəçi Biz burada kimi ümumiləşdirmək lazımdır ki, A. A hücum və ya düşmən edir. Belə ki, yalnız pis stuff. Biz haqqında qayğı yoxdur nömrələri və ya adet sıfır və ya olanları bu gün belə başa ki, qırmızı bölmə yadda, bayt ki, ardıcıllıqla qeyd. O 835 C sıfır səkkiz sıfır. İndi burada Wikipedia məqalə İndi həqiqətən başlamaq əgər, təklif edib Sizin kompüter-ci ildə bayt etiketleme yaddaş, Wikipedia article nə təklif edir ki, nə ünvan əgər ki, sol üst byte 80 C 0 3508 edir. Başqa sözlə, pis adam əgər onun kodu ilə kifayət qədər ağıllı həqiqətən, burada bir sıra qoymaq ki, kodu ünvanı uyğundur o vurulub kompüter, siz kompüter bezemek bilər bir şey bunu nəzərə. , Faylları aradan qaldırılması e-poçt şeyi, trafik koklama, sanki bir şey ola bilər Kompüter enjekte. Və belə bir bufer daşqın onun əsas hücum Yalnız bir axmaq, axmaq bir sıra əsas ki, onun sərhədləri yoxlanılır yox idi. Bu super təhlükəli nə və eyni zamanda super güclü C biz həqiqətən var ki, yaddaş yerdə çıxış. Bu, bizim üçün var, proqramçılar, olan orijinal kodu yazmaq hər hansı bir darn uzunluğu yoxlamaq üçün biz manipulyasiya edirik Diziler. Belə ki, aydın olmaq, fix nə var? Bu geri gəzmək kodu, mən olmalıdır yalnız bar uzunluğu dəyişdirmək, nə başqa mən yoxlanılması lazımdır? Nə mən bunu etmək lazımdır tamamilə bu hücumun qarşısını? Mən yalnız kor-koranə demək istəmirəm Siz kimi bir çox bytes surəti lazımdır ki, kimi bar uzunluğu. Mən surəti, demək istəyirəm kimi bir çox bytes bar var ayrılan qədər yaddaş, və ya maksimum 12. Beləliklə, mən vəziyyətdə əgər bir növ lazımdır ki, bar uzunluğu yoxlamaq yoxdur, lakin bu 12, biz yalnız ağır kodu artıq olduqda Maksimum məsafə 12. Əks halda qondarma bufer daşqın hücum ola bilər. Bu slaydlar altında, daha çox oxumaq maraqlı olduğunuz halda faktiki orijinal məqalə Bir nəzər istəyirsinizsə. Amma indi, qiymətlər arasında qeyri-səmərəli burada idi etmişdir. Belə ki, tez idi aşağı səviyyədə baxmaq nə problemlər ki, biz indi yarana bilər kompüter yaddaş girmə imkanı vardır. Amma bir problem biz Artıq bazar ertəsi stumbled yalnız təsirsizlik idi bir bağlı siyahı. Biz geri xətti vaxt var. Biz artıq bir bitişik array var. Biz təsadüfi çıxışı yoxdur. Biz kvadrat mötərizə notation istifadə edə bilməz. Biz sözün bir müddət loop istifadə etmək lazımdır kimi mən bir an əvvəl yazmışdır. Lakin bazar ertəsi, biz əlimizdən iddia etdi səmərəliliyinin sahəsində geri dırmaşmaq ki, bir şey əldə logarithmic bəlkə, və ya ən yaxşı hələ, bəlkə hətta bir şey daimi vaxt qondarma. Beləliklə, biz bu yeni istifadə edərək necə edə bilərik alətlər, bu ünvanları, bu göstəricilər, və öz şeyi Threading? Yaxşı ki, güman Burada, bu bir dəstə var Biz saxlamaq istədiyiniz nömrələri səmərəli data strukturu və axtarış. Biz tamamilə həftə geri bilər iki, bir sıra bu atmaq və ikili axtarış istifadə edərək, onları axtarmaq. Bölün və fəth. Və əslində siz yazdı pset3 ikili axtarış, harada tapmaq proqramını həyata keçirmişdir. Amma bilirik. Daha növü var bunu ağıllı yol. Bu bir az daha çox inkişaf etmiş və bəlkə Bizi niyə ikili görmək üçün imkan verir Axtarış çox daha sürətli belə deyil. Birincisi, təqdim edək bir ağac anlayışı. Hansı hətta baxmayaraq reallıq ağaclar cür Kompüter dünyada, bu kimi inkişaf Onlar cür aşağı bitir elm bir ailə ağac kimi Sizin grandparents və ya böyük babası və ya etajer üst patriarxı və ailə matriarch yalnız bir kök, node, aşağıdakı qondarma onun uşaqlar olan var, Aşağıda onun uşaqlar, və ya onun nəvələri ümumiyyətlə. Və hər kəs off asma ailə alt ağac, olmaqla yanaşı ailə gənc, də yalnız generically ola bilər Onun yarpaqları çağırıb. Belə ki, bu, yalnız bir dəstə sözlər və anlayışlar bir şey üçün kompüter bir ağac adlı elm, bir ailə ağac kimi. Amma maraqlısı incarnations var ağac, biri bir ikili axtarış ağac adlanır. Və siz tease cür Bu şey yoxdur ayrı nə. Bəli, bu nə mənada ikili var? Harada ikili buradan gəlir? Bağışlayın? Bu, çox bir və ya deyil. Bu qovşaqlarının hər bir var ki, daha çox daha iki uşaq, biz burada görürük. Ümumiyyətlə, bir ağac və valideynlər və grandparents kimi bir çox uşaq ola bilər və ya grandkids onlar həqiqətən istədiyiniz kimi, və belə məsələn, orada biz üç ki, sağ node off uşaqlar, lakin bir ikili ağac, bir node var maksimum sıfır, bir, ya iki uşaqlar. Və, bir gözəl əmlak var Bu iki başıbağlı əgər çünki, biz mümkün olacaq bir az log bazası almaq iki Fəaliyyət burada nəticədə gedir. Beləliklə, biz logarithmic bir şey var. Amma bir an ki, daha çox. Axtarış ağac nömrələri o deməkdir ki, təşkil, belə ki, sol uşaq dəyəri kök daha böyükdür. Və onun sağ uşaq kök daha böyük. Başqa sözlə, siz hər hansı bir əgər qovşaqlarının, bu şəkil dairələr, və onun sol baxır uşaq və sağ uşaq, ilk, az olmalıdır ikinci daha çox olmalıdır. Belə ki, ağlı başında olma 55 oldu. Bu uşaq qalan 33. Bu az deyil. 55, onun sağ uşaq 77. Bu daha çox var. Və bir recursive müəyyən edir. Biz o hər bir yoxlamaq bilər qovşaqlarının və saxlayın ki, eyni model. Belə ki, bir gözəl nə var ikili axtarış ağac ki, bir, biz bunu həyata keçirə bilər bir struct ilə, yalnız bu kimi. Və biz atma edirik, baxmayaraq ki, Sizin at strukturlarının çox, onlar bir qədər istəyirik intuitiv indi inşallah. syntax hələ əmin üçün gizli deyil lakin bu bir node məzmunu kontekstdə və biz saxlamaq söz node istifadə edərək, bu bir düzbucaqlı olub ekran və ya bir dairə üzrə, Bu, yalnız bir ümumi konteyner var kimi bir ağac bu halda, Biz bir tam lazımdır, gördüm qovşaqlarının hər və sonra mən iki göstəricilərinə işarə lazımdır sol uşaq və sağ uşaq, olaraq təyin olundu. Ki Belə ki, necə biz bilər bir struct ki, həyata keçirir. Və necə kodu bunu həyata bilər? Yaxşı, tez götürək Bu kiçik nümunə oldu. Bu funksional deyil, lakin mən var sitemizi və strukturu yapışdırılır. Əgər bir ikili üçün funksiyası axtarış ağac, axtarış adlanır və bu iki dəlilləri edir, bir tam N və bir pointer ağac bir node, belə bir göstərici və ya bir ağac kök bir göstərici, necə N üçün axtarış haqqında getmək yoxdur? Bəli, ilk, mən deyiləm, çünki göstəricilər ilə məşğul, Mən ağlı başında olma çek etmək gedirəm. Ağac bərabər null bərabərdir əgər, N Bu ağac və ya bu ağac? Bu doğru ola bilər? Mən null keçmiş am varsa, orada heç nə yoxdur. Mən güc həmçinin yalnız kor-koranə saxta qayıtmaq deyirlər. Mənə heç bir şey versələr, mən mütləq bilməz hər hansı bir sayı N. tapmaq başqa Belə ki, nə mən bilər İndi yoxlamaq? Mən də başqa N əgər demək gedirəm ağac node nə az Mən N dəyər təqdim etdik ki. Başqa sözlə, sayı Ben əgər N axtarır, node az Mən baxıram ki. Və node I arıyorum ağac adlanır at, və əvvəlki Məsələn geri bir pointer dəyəri almaq üçün, Mən arrow notation istifadə edin. N ağac arrow az olduqda belə N, mən konseptual sol getmək istəyirəm. Necə sol axtarış ifadə edirsiniz? Bu halda, aydın olmaq sual şəkil, Mən qəbul etdik topmost ki ki, aşağı işarə arrow. Bu mənim ağac göstərici var. Mən ağac kökü işarə edirəm. Və mən, demək arıyorum özbaşına sayı 44. Daha az və ya 44 açıq-aydın 55-dən çox? Belə ki, az deyil. Və bu halda vəziyyət tətbiq edilir. Belə ki, konseptual, mən nə istəyirəm Mən 44 arıyorum əgər növbəti axtarış? Evet? Məhz, Mən istəyirəm sol uşaq axtarış və ya bu şəkil sol alt ağac. Və əslində, məni vasitəsilə bildirin aşağı burada şəkil yalnız bir an üçün,-ci ildən Mən bu danışıq bilməz. Mən 55 burada başlamaq və əgər Mən bilirəm ki, dəyəri 44 Etmək üçün mən arıyorum Sol, bu cür bir telefon kitab qoparmaq kimi yarım və ya yarısında ağac qoparmaq. Mən artıq qayğı var ağac bütün bu yarısı. Və hələ, maraqla baxımından strukturu, burada bu şey 33 ilə başlayır özü ki, bir ikili axtarış ağac. Çünki əvvəl söz recursive bildirib Həqiqətən, bu data structure ki, müəyyən recursive edir. Bu bir ağac ola bilər böyük, lakin onun uşaqların hər biri kiçik bir az bir ağac təmsil edir. Əvəzində bu baba olan və ya nənə, indi yalnız ana var or-- Mən ana deyil demək olmaz və ya dad, ki, qəribə olardı. Əvəzinə iki uşaq qardaşı və qardaşı kimi olacaq. Ailə ağac yeni nəsil. Amma struktur, eyni fikirdir. Və mən bir funksiyası var çıxır olan bir ikili axtarış axtarış edə bilərsiniz ağac. Bu axtarış adlanır. Mən ağac arrow sol N üçün axtarış N dəyərindən artıq başqa əgər Mən hazırda edirəm. Bir an əvvəl hekayə 55. Mən adlı funksiyası var Axtarış ki, mən yalnız bilərsiniz N bu keçir və recursively axtarış sub-ağac və yalnız qaytarılması nə ki, cavab. Else Mən burada bir final baza halda var. Son işi nədir? Tree ya null edir. Mən ya arıyorum dəyəri daha bu daha az və ya daha çox və ya ona bərabər. Mən bərabər deyə bilər bərabər, lakin məntiqi bu yalnız burada başqa deyərək bərabərdir. Belə ki, doğru, mən bir şey tapmaq necə. Belə ki, inşallah bu bir deyil daha çekici nümunə axmaq sigma funksiyası daha Biz bir neçə mühazirə etdi harada bir loop istifadə etmək kimi asan idi biri bütün nömrələri saymaq bir veri strukturu Burada N. özü recursively ki, biz indi, müəyyən və recursively tərtib özümüzü ifadə etmək imkanı var kodu özü recursive edir. Belə ki, burada eyni kodu. Beləliklə, biz nə digər problemləri həll edə bilər? Uzaq Belə ki, tez addım yalnız bir an üçün ağaclar. Burada, Alman bayrağı deyirlər. Və aydın var bir Bu bayraq model. Və çox var Dünyada bayraqları ki, baxımından bu kimi sadə Onların rənglər və nümunələri. Amma bu kimi saxlanılır ki, güman GIF və ya JPEG, və ya bitmap və ya ping, hər hansı bir qrafik fayl format olan siz, tanış olduğunuz Biz istəyirik ki, bəzi pset4 ilə oynayır. Bu saxlamaq üçün dəyərli görünmür qara pixel, qara pixel, qara pixel, nöqtə, nöqtə, nöqtə, bütün dəstə ilk scanline qara piksel, və ya satır, sonra bütün dəstə eyni, sonra bütün dəstə sonra eyni və qırmızı piksel bütün dəstə, qırmızı piksel, qırmızı piksel, sonra bütün sarı sarı piksel dəstə, sağ? Belə səmərəsizlik burada var. Necə daxilən siz ki Alman bayraq kompres bir fayl olaraq həyata əgər? Nə məlumat kimi biz bilməz məqsədilə disk saxlanılması narahat kimi bizim fayl ölçüsü azaltmaq üçün bir kilobayt, bir şey üçün bir MB kiçik? Orada redundancy yatır Burada aydın olmaq? Siz nə edə bilər? Evet? Məhz. Niyə daha çox xatırlayıram hər darn pixel rəng yalnız pset4 etdiyini etdiyiniz kimi bitmap fayl formatı ilə, niyə yalnız təmsil etmir məsələn piksel leftmost sütun, qara piksel bir dəstə, bir dəstə qırmızı və sarı bir dəstə, və sonra yalnız birtəhər kodlar təkrar ideyası bu 100 dəfə və ya bu 1000 dəfə təkrar? Harada 100 və ya 1000 yalnız bir tam, belə ki, yalnız bir sıra üz əldə edə bilərsiniz əvəzinə yüzlərlə və ya minlərlə əlavə piksel. And olsun ki, necə biz var Alman bayrağı kompres bilər. Və Fransız bayrağı haqqında indi nə? Bəzi sort və bir az ruhi həyata olan bayraq disk haqqında daha çox sıxılmış bilər? German flag və ya Fransız bayraq, biz ki, yanaşma, əgər? Alman bayraq, var, çünki daha üfüqi ixtisar. Və dizayn bir çox qrafik fayl formatları həqiqətən kimi scan xətləri çalışır yatay. Onlar işləmək bilər şaquli, yalnız insanlıq qərar il əvvəl biz lazımdır ümumiyyətlə şeyi sıra hesab sütun cərgə əvəzinə sütun. Belə ki, həqiqətən olsaydı fayl baxmaq Alman bayrağı və bir Fransız ölçüsü bayraq, belə uzun qətnamə kimi eyni, eyni eni və hündürlüyü, bu Burada böyük olacaq çünki Özünüz üç dəfə təkrar etmək lazımdır. Siz mavi, təkrar daxil etmək özünüzü, ağ, qırmızı, özünüzü təkrar Özünüzü deyirəm. Siz yalnız bütün getmək bilməz sağ yol. Və bir kənara kimi, etmək sıxılma sil Bu halda, hər yerdə bir video-- dörd çərçivəsində siz bir film olduğunu xatırlayıram bilər və ya video ümumiyyətlə saniyədə 29 və ya 30 kadr kimi. Bu bir az flip kitab kimi harada yalnız image, şəkil, şəkil, şəkil görmək, image yalnız super sürətli belə ki, kimi görünür Ekranda aktyorlar hərəkət edir. Burada Bumble Bee var gül bir dəstə üst. Və bu cür ola bilər, baxmayaraq ilk baxışda görmək çətin, hərəkət tək şey Bu film arı edir. Nə saxlanılması haqqında lal video sıkıştırılmamış? Bu video saxlamaq üçün tullantıların növü var Dörd təxminən eyni images kimi yalnız insofar arı olduğu kimi fərqlənir. Siz üz atmaq ən ki, informasiya və yalnız xatırlayıram, məsələn, ilk çərçivəsində və son çərçivəsində, Siz var əgər əsas çərçivəsində heç söz eşitdim və yalnız saxlamaq arı orta. Və yoxdur , çəhrayı bütün saxlamaq mavi, və və yaşıl dəyərlər həmçinin. Belə ki, bu yalnız ki, demək deyil sıxılma hər yerdə var. Bu tez-tez istifadə bir texnika var bu gün verilən və ya almaq. Amma necə mətn kompres edirsiniz? Necə mətn kompressor haqqında getmək yoxdur? Bəli, simvol hər Ascii bir byte, səkkiz bit edir. Və bu cür lal, doğru? Yəqin ki, bir növü, çünki və E və mən və O və U bir çox daha tez-tez W və ya Q ya Z kimi çox, dil asılı olaraq hansı Siz əlbəttə ki, yazılı etdiyiniz. Və belə ki, niyə biz istifadə olunur hər hərf üçün səkkiz bit, ən azı, o cümlədən Məşhur məktublar, sağ? Nə üçün az bit istifadə super məşhur məktublar, E kimi şeylər tapmaq ilk Fortune Təkər ilə, və daha çox bit istifadə az məşhur məktublar? Niyə? Biz yalnız olacaq, çünki az tez-tez istifadə edin. Bəli, bu var ki, həyata çevirir Bunu etmək üçün edilən cəhdlər olmuşdur. Və grade geri əgər məktəb və ya orta məktəb, Morse kodu. Morse kodu nöqtələr var və tire ola bilər ki, bir tel kimi boyunca ötürülən səslər və ya bir növ siqnalları. Amma Morse kodu super təmiz. Bu bir ikili sistem növü var ki, nöqtə və ya tire var. Amma, məsələn, iki nöqtələr görürsünüzsə. Yoxsa operator geri düşünüyorsanız kim, beep, beep, beep kimi gedir beep, bir az trigger vuruş ki, bir siqnal ötürür, əgər, alıcı, iki qəbul nöqtələr, nə mesaj almış? Tamamilə əsassız. Mən? Mən? Və ya nə about-- ya mən? Bəlkə yalnız iki E sağ idi? Belə ki, bu problem var Morse ilə decodability of indeksi, vasitəsi halda sizə göndərməklə şəxs həqiqətən belə ki, sıralayabilirsiniz duraklamalar və ya məktubları arasında boşluqlar eşitmək, yalnız kifayət qədər deyil adet sıfır və olanları bir axın göndərmək, və ya nöqtə və tire, qeyri var, çünki. E bir dot, belə ki, əgər iki nöqtələr və ya iki nöqtələr eşitmək, bəlkə iki E-nin və ya bəlkə bir I. var Beləliklə, biz bir var bir sistem lazımdır daha ağıllı az. Belə ki, bir adam adına Huffman il bundan məhz bu ilə gəldi. Belə ki, biz yalnız olacaq sürətli bir nəzər almaq necə ağaclar bu ilgili var. Bu bir olduğunu düşünək göndərmək istədiyiniz axmaq mesaj, yalnız A, B ibarət C D's və E-nin, lakin ixtisar bir çox burada var. İngilis olmaq üçün nəzərdə deyil. Bu şifrelenmiş deyil. Bu, sadəcə bir axmaq mesaj var təkrar çox. Siz həqiqətən saymaq əgər Belə ki, bütün A, B, C, D's, və E-nin, burada tezliyi. Məktubları 20% A, məktublar 45% E-nin və digər üç tezliklərin. Biz əl orada sayılır və yalnız riyaziyyat etdi. Belə ki, çıxır ki, Huffman, bir müddət əvvəl, Bilirsiniz ki, həyata nə, mən bina başlamaq əgər bir ağac və ya ağac meşə, Siz, Aşağıdakı kimi, mən aşağıdakıları edə bilərsiniz. Mən hər bir node vermək gedirəm Mən qayğı məktubları Mən saxlamaq üçün gedirəm ki, node daxilində üzən nöqtəsi kimi tezliklərin dəyəri, və ya siz də bir N istifadə edə bilər lakin biz burada bir float istifadə edəcəyik. Və alqoritm ki, o ki, təklif bir node bu meşə almaq ağac, belə ki, super qısa ağacları, və onları birləşdirən başlayın yeni qruplar, yeni valideynlər, Siz. Və seçerek bunu bir zamanda iki kiçik tezliklərin. Belə ki, 10% və 10% etdi. Mən yeni node yaratmaq. Mən yeni node 20% çağırırıq. Hansı iki qovşaqlarının mən növbəti birləşdirmək? Bu bir az qeyri-müəyyən var. Belə ki, bəzi künc hallarda var hesab, lakin olduqca şeyi saxlamaq üçün, Mən 20% seçmək gedirəm - İndi uşaqlar bilməz. Mən 20% seçmək gedirəm və 15% və iki yeni kənarları cəlb edir. Və indi iki qovşaqlarının Mən məntiqi birləşdirmək edirsiniz? Bütün uşaqlar, bütün Yoksay nəvələri, yalnız kökləri baxmaq indi. Hansı iki qovşaqlarının mən birlikdə bağlamaq edirsiniz? Point iki 0.35. Belə ki, mənə iki yeni kənarları cəlb edək. Və sonra mən yalnız bir sol var. Belə ki, burada bir ağac var. Və qəsdən tərtib edilmişdir cür olduqca baxmaq üçün, lakin kənarları olduğunu fark də sıfır və bir etiketlendi. Belə ki, sol kənarları bütün sıfır var özbaşına, lakin ardıcıl. Bütün hüquqlar kənarları olanlardır. Və belə Hoffman, təklif olunan nə Bir B təmsil etmək istəyirsinizsə, kimi sayı 66 təmsil daha çox səkkiz bütün bit bir Ascii, nə, yalnız mağaza bilirik model sıfır, sıfır, sıfır, sıfır ki, yol, çünki Mənim ağacdan, cənab Huffman nin ağac, kökündən yarpaq. Bir saxlamaq istəyirsinizsə E, əksinə, deyil bir E. təmsil səkkiz bit göndər Əksinə, bit nə model göndərmək? Biri. Və bu barədə gözəl nə var ki, E ən məşhur məktub, və istifadə etdiyiniz bunun üçün ən qısa kodu. növbəti ən məşhur məktub kimi görünür A. idi Və neçə bit o istifadə təklif etdi? Zero, bir. Və həyata çünki bu ağac kimi, indi Mənə var müəyyən edək Morse kimi heç bir qeyri kodu bütün çünki siz qayğısına məktubları bu kənarları sonunda var. Belə ki, yalnız biri bir ağac tətbiqi. Bu is-- və mən dalğa lazımdır Bu mənim əl necə C strukturu kimi bu həyata bilər. Biz yalnız birləşdirmək lazımdır simvolu, bir char kimi, və tezlik sol və sağ. Amma iki baxaq son nümunələri will sonra olduqca tanış problem viktorina sıfır beş seçin. Belə ki, data strukturu var bir hash masa kimi tanınır. Və bir hash table cür deyil Bu buketler var ki, sərin. Və dörd buketler var güman Burada yalnız dörd boş fəzalarında. Burada burada kartlar göyərtə, və klub, bel, klub, brilyant, klub, brilyant, klub, brilyant, clubs-- bu təsadüfi deyil. Hearts, hearts-- mən deyiləm burada vəsaitlərin bütün bucketizing. Və bir hash table ehtiyacları Sizin giriş baxmaq, və sonra müəyyən qoyun Siz görmək nə əsasında yer. Bu alqoritm var. Mən bir super istifadə sadə vizual alqoritmi. ən ağır hissəsi idi şəkillər idi nə xatırlayaraq. Və sonra dörd ümumi şeylər var. İndi çıxarıcı borular, artan olan Burada qəsdən dizayn şeydir. Amma başqa nə edə bilər? Belə ki, həqiqətən, burada biz bir köhnə məktəb imtahan kitab dəstə. Bir dəstə Tutaq ki, tələbələr adları burada var. Burada böyük bir hash masa var. Əvəzində dörd buketler, Mən 26 deyək var. Və biz 26 borc getmək istəmədi kənarda [olan şeylər? Annenberg?], Belə ki, burada təmsil ki, beş deyil A Z. vasitəsilə və əgər mən , adı A ilə başlayır bir tələbə görmək Mən orada onun viktorina qoymaq üçün gedirəm. Kimsə C başlayır, orada, A-- həqiqətən, bunu istəmədi. B burada gedir. Beləliklə, mən var A və B və C. Və İndi burada başqa bir şagird var. Amma bu hash table əgər bir sıra ilə həyata keçirilən, I növ berbat alıram bu nöqtədə, sağ? I növ bu yerdə qoymaq lazımdır. Mən bu həll edə bilər bir yolu bütün var sağ, A C məşğul, B məşğul, məşğul olur. Mən Belə ki, D. onu qoymaq gedirəm ilk, mən təsadüfi anında erişim tələbələr üçün buketler hər. Amma indi bu cür keçir ki, bir şey xətti daxil, Mən kimsə üçün axtarmaq istəyirsinizsə, çünki onun adı ilə başlayır, mən burada yoxlayın. Amma bu deyil I arıyorum tələbə, I növ yoxlanılması başlamaq üçün buketler, mən nə çünki bir xətti sort idi data strukturu sonda. Yalnız baxmaq deyərək bir axmaq yol ilk mövcud açılması üçün, və, belə danışmaq, bir B planı kimi qoymaq və ya bu halda plan D, dəyəri əvəzinə yeri. Bu ki, varsa, yalnız belə 26 yeri və heç bir tələbə var Adı Q ya Z, ya bir şey kimi ilə ki, ən azı kosmik istifadə edirik. Amma biz artıq gördük burada ağıllı həllər, sağ? Əvəzinə nə edərdiniz Bir toqquşma varsa? Iki nəfər varsa adı A, nə olardı asan və ya daha çox olmuşdur Yalnız intuitiv həll D olması ehtimal edilir A qoyulması? Niyə yalnız getmək deyil kənarda [? Annenberg?], malloc, başqa node kimi, qoyun Burada və sonra burada bir tələbə qoymaq. Mən mahiyyətcə var ki, bir sıra bir növ, və ya biz etdiyiniz kimi bəlkə daha zərif bir bağlı siyahısını görmək üçün başlayır. Və belə bir hash table bir strukturu ki, yalnız bu kimi baxmaq bilər lakin daha ağıllı, bir şey deyilən ayrı-ayrı chaining, qovuşdurmağımız bir hash table sadəcə bir sıra hər edir Onun elementləri bir sıra deyil, bir bağlı siyahı özü edir. Siz super sürətli çıxış almaq ki, olduğu üçün dəyər hash qərar. Çox kartları misal ilə kimi, Mən super sürətli qərar qəbul edib. Hearts brilyant burada gedir, burada gedir. Burada eyni, A burada gedir, D B burada gedir, burada gedir. Belə ki, super sürətli göz-up, və əgər Bir halda daxil ola Siz var toqquşma, iki eyni adlı insanlar, yaxşı, sonra Yalnız birlikdə onları birləşdirən başlayın. Və bəlkə onlara sıralanır saxlamaq əlifba sırası ilə, bəlkə deyil. Amma ən azı indi dinamizm var. Belə ki, bir tərəfdən biz super sürətli var daimi vaxt, və xətti vaxt növ bu bağlı siyahıları əgər cəlb bir az uzun almaq üçün başlamaq. Belə ki, bir silly bu cür, bundan geeky zarafat il. CS50 hack-a-Thon da, tələbələr yoxlamaq zaman, bir TF və ya CA hər il düşünür onu qoymaq komik Bu kimi bir ibrət, burada yalnız adı A ilə başlayır əgər o deməkdir ki, Bu yol getmək. Adınızı başlayır B ilə şeylərdir OK getmək, bəlkə daha sonra dövr komik. Amma başqa bir var də bunu yol. Geri gəlir. Belə ki, bu quruluş var. Bu da son Bu gün strukturu, olan trie deyilən bir şey var. Nədənsə qısa T-R-I-E, alınması üçün, lakin trie deyirlər. Belə ki, bir trie bir maraqlı bu ideyaların bir çox amalgam. Biz əvvəl gördüm bir ağac var. Bu ikili axtarış ağac deyil. Bu uşaqların hər hansı bir sayı ilə bir ağac var lakin trie uşaqların hər bir sıra edir. Ölçüsü bir sıra, 26 və ya bəlkə 27 demək Siz hyphenated adları dəstək istəyirsinizsə və ya insanların adları apostrophes. Və bu bir data strukturu. Və üst baxsaq alt, kimi, əgər , var top node, M baxmaq orada leftmost şey işarə edərək, daha sonra A, X, W, E, L, L. Bu edir yalnız bir data strukturu ki, özbaşına insanların adları saxlanılması edir. Və Maxwell yalnız aşağıdakı saxlanılır array array serialın bir yol. Bir trie haqqında Amma gözəl nə var ki, bir bağlı siyahı isə hətta bir sıra, biz heç kazanılmış etdik ən yaxşı xətti vaxt və ya logarithmic vaxt axtarır kimsə. Bir trie Bu data strukturu, əgər Mənim data structure bu bir adı var və mən Maxwell arıyorum, Mən olduqca tez onu tapmaq üçün gedir. Mən yalnız M-A-X-W-E-L-L axtarmaq. Əgər Bu data strukturu, əksinə, bir var, əgər N, bir milyon əgər Bu data strukturu milyon adları, Maxwell hələ olacaq discoverable yalnız M-A-X-W-E-L-L sonra addımlar. Və, David D-A-V-I-D addımlar. Başqa sözlə, tikinti bir data strukturu var bu serialların bütün olan özləri təsadüfi giriş dəstək Mən insanların axtarır başlaya bilərsiniz ki, bir zaman məbləği istifadə edərək ad Biz sayına proporsional məlumat strukturu şeyi, kimi bir milyon mövcud adları. Bu tapmaq üçün mənə lazım vaxt məbləği M-A-X-W-E-L-L Bu data strukturu deyil proporsional deyil məlumat strukturu ölçüsü, lakin adı uzunluğu. Və real adları biz aradığınız heç uzun crazy olacaq. Bəlkə kimsə 10 xarakter daşıyır 20 xarakter adı. Bu hüququ, əlbəttə məhdud var? Yer üzündə bir insan var olan uzun mümkün adı var, lakin adı sabit deyil dəyəri uzunluğu, sağ? Hər hansı bir mənada fərqli deyil. Belə ki, bu şəkildə, biz bir veri strukturu əldə ki, daimi vaxt göz-up edir. Bu addımlar bir sıra almaq yoxdur giriş uzunluğu asılı olaraq, adı, lakin sayı data strukturu. Biz adları sayı ikiqat Belə ki bir milyard iki gələn il, tapıntı Maxwell etmək niyyətindədir yeddi addımlar eyni sayı onu tapmaq üçün. Və belə ki, biz əldə etdik görünür zaman çalışan bizim müqəddəs grail. Belə ki, tez elanlar bir neçə. Quiz sıfır gəlir. Kurs saytında ki, daha çox gün növbəti neçə üzərində. Bazar ertəsi nin bir bayram məruzə burada Harvard bazar ertəsi. Bu, New Haven deyil belə ki, biz sinif alaraq edirik bazar ertəsi mühazirə üçün New Haven üçün. Hər şey film olur və həmişə olduğu kimi canlı axın lakin bu gün son qoy 30 ikinci clip ilə qondarma "Deep düşüncələr" Daven Farnham tərəfindən hansı Şənbə tərəfindən keçən il ilham Night Live "Deep düşüncələr" Jack Handy tərəfindən hansı İndi mənada etməlidir. FILM: İndi "Deep Daven Farnham tərəfindən düşüncələr ". Hash masa. HOPARLÖR 1: Yaxşı ki, indi üçün var. Biz gələn həftə görəcəksiniz. DOUG: aksiyada görmək üçün. Belə ki, indi ki, bir nəzər salaq. Odur ki, biz çeşidlənməmiş sıra var. IAN: Doug, siz irəlidə və yenidən getmək bilər yalnız bir ikinci bu edin. Bütün sağ, kameralar, belə ki, yuvarlanan olunur fəaliyyət Doug, hazır zaman, OK? DOUG: Bütün sağ, belə nə biz burada var çeşidlənməmiş sıra edir. Mən elementləri bütün rəngli etdik əslində olduğunu göstərir qırmızı, çeşidlənməmiş. Belə ki, ilk şey ki, geri Biz serialın sol yarım sort edir. Sonra biz hüququ sort serialın yarısı. Və ya-da, ya-da, ya-da, biz onları birlikdə birləşməsi. Və biz tamamilə sıralanır array var. Belə ki, işləri sort daxil necə. IAN: Vay, Vay, Whoa, cut kəsilmiş, cut, kəsdi. Doug, yalnız ya-da bilməz, ya-da, ya-da, birləşməsi növ vasitəsilə yol. DOUG: Mən yalnız etdi. Bu yaxşıdır. Biz getmək iyi. Yalnız yayma saxlamaq edək. Belə ki, hər halda, IAN: Siz izah etmək Bu daha tam daha. Bu yalnız kifayət deyil. DOUG: Ian, biz deyil biri geri getmək lazımdır. Bu yaxşıdır. Belə ki, hər halda, biz merge-- ilə davam Ian, biz çəkiliş ortasında istəyirik. IAN: Mən bilirəm. Və biz yalnız ya-da bilməz, ya-da, bütün prosesi vasitəsilə ya-da. Siz necə izah etmək iki tərəf birlikdə birləşdi almaq. DOUG: Amma biz artıq var izah necə iki sides-- IAN: Siz yalnız göstərilən etdik onlara birləşməsi array. DOUG: Onlar prosesi bilirik. Onlar gözəl istəyirik. Biz artıq on dəfə getdi etdik. IAN: Siz yalnız sağ üzərində atlandı. Biz bir geri olacaq, siz artıq siz ya-da, ya-da bilməz. Geri bir bütün hüququ. DOUG: Mən geri getmək üçün var slaydlar bütün vasitəsilə? My God. Bu altıncı dəfə, Ian kimi. Bu yaxşıdır. IAN: Bütün hüququ. Hazır edirsiniz? Great. Fəaliyyət.