Konuşma notu: Hafta bire hoş geldiniz — bugün, sonraki her haftanın üzerine kurulduğu iki temeli atıyoruz: maliyeti ölçmek ve belleğin gerçekten nasıl çalıştığı.
Konuşma notu: On dört kısa animasyon bugünün dersinin çoğunu taşıyor; her biri bir kez gösteriliyor, en zorlu durumuna ikinci bir bakışla.
Konuşma notu: Her terim ilk geçtiğinde tam olarak tanımlanır; bu tablo yalnızca onu tekrar nerede bulacağınızı söylüyor.
Konuşma notu: Canlı çalıştırmak isterseniz şimdi bir terminal açın; bugünün her kod parçası tam olarak gösterildiği gibi derlenir ve çalışır.
Konuşma notu: Derste yalnızca ana hatlara değiniyoruz — izlenceyi, proje kılavuzunu ve ön koşullar sayfasını önümüzdeki haftaya kadar okuyun.
Konuşma notu: Takımınızı erken seçin — bu kural, bir takımın işi kilitlenmeden önce ivme kazansın diye var.
Konuşma notu: Veri yapıları, tam olarak iki şeyle ilgili bir ders: veriyi bellekte nasıl düzenlediğiniz ve bu düzenlemenin size ne kadara mal olduğu.
Konuşma notu: Bölüm 1, hiç koda dokunmadan önce, tüm dersin en temel sorusunu soruyor.
Konuşma notu: İsimlerin bellekte diziliş biçimi FARKIN ta kendisi — işte bu diziliş biçimine veri yapısı diyoruz.
Konuşma notu: Ne-nasıl ayrımı, bu dersin sürekli dayandığı bir ayrım — bugünden itibaren gayri resmi olarak başlıyor.
Konuşma notu: Bir tepsi yığını üstten eklemek/almak için hızlıdır, ortadan bir şey bulmak için berbattır — fikrin tamamı bu.
Konuşma notu: "Bilinen, çözümlenebilir maliyet" kısmı, "veriyi düzenlemek" gibi bulanık bir fikri bu dersin ölçebileceği bir şeye çeviriyor.
Konuşma notu: Aynı yapıda genelde bu dört işlemin hepsini birden hızlı yapamazsınız — bugünkü gerçek konu tam olarak bu ödünleşim.
Konuşma notu: Sınıfın cevaplamasını bekleyin, sonra ilerleyin.
Konuşma notu: Bu tek cümle, dönemin geri kalanının her hafta bir yeni yapı tanıtmasının nedeni.
Konuşma notu: Bu dönem göreceğiniz her yapı, tam olarak bu iki aileden birine giriyor — bu harita hatırlanmaya değer.
Konuşma notu: Bu fark, hangi işlemlerin ucuz hangilerinin pahalı olduğunu değiştiriyor — bugünkü ikinci bölümün tam konusu bu.
Konuşma notu: Bir ağaç düğümünün birden çok çocuğu olabilir; bir çizge düğümü birden çok başkasına bağlanabilir — artık tek bir "sonraki" yok.
Konuşma notu: Dördü de doğrusal — her eleman hâlâ tam olarak tek bir sonrakine sahip.
Konuşma notu: Hash tabloları ve dosyalar, yuvalarının diziliş biçiminde hâlâ doğrusal — yalnızca anahtarla erişim yeni; Hafta 7 bunu açıkça gösteriyor.
Konuşma notu: Bir ağaç ve bir çizge son derece yapılandırılmıştır — yalnızca birden çok "sonraki"ye izin verirler.
Konuşma notu: Sınıfın cevaplamasını bekleyin, sonra ilerleyin.
Konuşma notu: Her iki yönde de tek, belirsizliksiz bir sonraki — bu tam olarak doğrusal tanımı.
Konuşma notu: Sınıfın cevaplamasını bekleyin, sonra ilerleyin.
Konuşma notu: Bu, iki slayt önceki org şemasıyla aynı dallanma fikri.
Konuşma notu: Bu bugünün en büyük bölümü — sonraki her haftanın bir yapıyı değerlendirmek için kullandığı araç, Big-O.
Konuşma notu: İstediğimiz şey algoritmanın kendisinin bir özelliği: işi, girdi büyüdükçe nasıl büyüyor.
Konuşma notu: Gösterim, bilgisayarlardan on yıllarca önce var — başlangıçta bir fonksiyonun başka birine ne kadar yakın olduğunu tanımlıyordu.
Konuşma notu: Bu sayı yalnızca algoritmaya ve n'ye bağlıdır — makineye, dile ya da bugünkü CPU yüküne asla.
Konuşma notu: 11 elemanlı bir dizide, ortadaki bir değeri ararken karşılaştırmaları sayışını izleyeceğiz.
Konuşma notu: Normal örnek: 11 değer, hedef ortada. Karşılaştırma sayacının kutu kutu tırmanışını izleyin.
Konuşma notu: Hedef yokken doğrusal arama, bunu söyleyebilmek için yine de her kutuyu kontrol eder — gerçek en kötü durum bu.
Konuşma notu: Her yinelemede bir karşılaştırma, açıkça sayılıyor — bu, animasyonun ekranda az önce saydığı şeyin ta kendisi.
Konuşma notu: Milyon elemanlı bir dizi, en kötü durumda milyon karşılaştırma gerektirir — bu doğrudan büyüme O(n) demek.
Konuşma notu: Doğrusal aramanın az önce 9 karşılaştırma harcadığı aynı hedefi, 42'yi, arayacağız.
Konuşma notu: Normal örnek: 16 sıralı değer, hedef bulundu. lo, hi ve mid'in cevaba nasıl yaklaştığını izleyin.
Konuşma notu: Bu kez 31 değer var; aralık, kontrol edilecek hiçbir şey kalmayana, lo hi'dan büyük olana kadar yarılanır.
Konuşma notu: Tek bir karşılaştırma, kalanın YARISINI eler — bütün numara bu.
Konuşma notu: Ödünleşim: ikili arama önce sıralı bir dizi ister, sıralamanın kendisi bir aramadan daha pahalıdır.
Konuşma notu: Çok daha büyük bir ölçekte iki nokta — bu animasyon ölçeğin tamamını bir kerede gösteriyor.
Konuşma notu: Normal örnek: n, 1'den 512'ye ikiye katlanarak. n-kare ve 2^n'in diğerlerinden nasıl koptuğunu izleyin.
Konuşma notu: n = 400'den başlarken 2^n, diğerleriyle aynı grafiğe çizilemeyecek kadar büyük çoktan.
Konuşma notu: n = 100.000'de n-kare, n log n'den 6.000 kattan fazla büyük — küçük girdide anlık, büyük ölçekte çok farklı.
Konuşma notu: Bu, az önce gördüğünüz tabloyu beş gerçekçi büyüklük için üreten döngünün ta kendisi.
Konuşma notu: Sabitleri resmi olarak nadiren hesaplarsınız — adımları sayar, en hızlı büyüyen terimi okursunuz.
Konuşma notu: Örüntü şu: en hızlı büyüyen terimi tutun, daha küçük olan her şeyi ve her sabiti atın.
Konuşma notu: O(1), işaretçi aritmetiğinden gelen sabit zamanlı dizi erişimi; O(log n) ikili arama; O(n) doğrusal arama.
Konuşma notu: Tabloya güvenmek yerine, gerçek, sayılmış bir programı sayalım ve n-kareyi kendimiz görelim.
Konuşma notu: Normal örnek: kare bir döngü (j < n), n = 3 ayrıntılı, sonra dokuz n değeri daha.
Konuşma notu: Üçgen bir döngü (j < i) iç gövdeyi yine n(n-1)/2 kez çalıştırır — yine O(n kare), farklı bir sabit.
Konuşma notu: Ölçülen sayı, denenen her n için n*n ile tam eşleşti — T(n) = n kare, artı atılan daha küçük terimler.
Konuşma notu: En kötü durum, girdiyi kontrol edemediğinizde en çok işe yarayan garanti.
Konuşma notu: Özyinelemeli bir fonksiyon her çağrıda bir yığın çerçevesi iter — bu, bir döngünün asla ihtiyaç duymadığı ek bellek.
Konuşma notu: Normal örnek: 10 değer. Çağrı yığınının çağrı başına bir çerçeve büyümesini, sonra çözülmesini izleyin.
Konuşma notu: 22 eleman, zirvede 23 çerçeve demek — yeterince büyük n için yığın gerçekten tükenebilir.
Konuşma notu: İkisi de aynı toplamı döndürür. sum_recursive O(n) yığın belleği kullanır; sum_iterative her zaman tam olarak O(1).
Konuşma notu: Bir satırın içindeki gizli bir döngü (arr.contains(x) gibi) sessizce O(n)'i O(n kare)'ye çevirebilir.
Konuşma notu: Sınıfın cevaplamasını bekleyin, sonra ilerleyin.
Konuşma notu: Bu, "en büyük terimi oku" tablosunun doğrudan uygulanması.
Konuşma notu: Sınıfın cevaplamasını bekleyin, sonra ilerleyin.
Konuşma notu: Hafta 2 tam olarak bu yapıyı kuruyor, bu yüzden bu soru önümüzdeki haftayı doğrudan önizliyor.
Konuşma notu: Sınıfın cevaplamasını bekleyin, sonra ilerleyin.
Konuşma notu: En iyi durumlar algoritmalar arasında birbirine benzer, bu yüzden karşılaştırmak için en kötü durum daha yararlı.
Konuşma notu: Bir işaretçi, bir değişkenin konumudur, yalnızca değeri değil — bugün bu fikri tamamen somutlaştırıyoruz.
Konuşma notu: Çağıranın değişkenlerine geri ulaşmak için fonksiyonun her birinin KONUMUNA ihtiyacı var, değerine değil — o konum bir işaretçi.
Konuşma notu: İki Java değişkeni yine aynı nesneyi adlandırabilir — yalnızca keyfi bir adres hesaplayamazsınız.
Konuşma notu: int x = 3, 3'ü bir posta kutusuna, diyelim 1000 numaraya, koyar — &x size o 1000'i verir.
Konuşma notu: Bunların her biri O(1) — bir işaretçiyi izlemek her zaman tek bir sıçrama, asla bir arama değil.
Konuşma notu: Normal örnek: beş işlem — adres-al, üzerinden yaz, kopyala (takma ad), taşı, takma ad üzerinden ekle.
Konuşma notu: NULL bir işaretçi üzerinden yazma burada asla çalıştırılmaz — bunun yerine tanımsız davranış olarak işaretlenir.
Konuşma notu: q = p, DEĞERİ değil ADRESİ kopyalar — q ve p artık aynı değişkenin takma adı.
Konuşma notu: alias, box ile AYNI dizinin ikinci adı; y ise x'in bağımsız bir KOPYASI — aynı sözdizimi, tam tersi davranış.
Konuşma notu: Bu, dizi indekslemesinin, arr[i]'nin, derlendiği O(1) aritmetik.
Konuşma notu: Normal örnek: bir int dizisi, beş geçerli offset. Her hesaplanan adresi ve dereferans edilen değerini izleyin.
Konuşma notu: Negatif bir offset ve sondan bir sonrası, ikisi de tanımsız davranış olarak işaretlenir, hiç dereferans edilmez.
Konuşma notu: Java'da işaretçi aritmetiği hiç yok — yalnızca a[k], aralık dışı bir k net bir istisna fırlatır.
Konuşma notu: Struct'a bir işaretçi, ORİJİNAL struct'a ulaşmanızı — ve onu değiştirmenizi — sağlar, bir kopyasına değil.
Konuşma notu: Normal örnek: 10 öğrenci, 2 not güncellemesi. (*p).id, p->grade ve p++'ın sizeof(Student) kadar ilerlemesini izleyin.
Konuşma notu: p, "dizinin hemen sonrasına" anında ulaşır — TUTMAK yasaldır, ama asla dereferans etmek değil.
Konuşma notu: (*p).id ve p->id aynı değer — ok işareti yalnızca bir kısayol, başka hiçbir şey değil.
Konuşma notu: Java her dereferansı kontrol eder ve gürültülü şekilde başarısız olur; C, kötü bir adresle donanım ne yaparsa onu yapar.
Konuşma notu: Sınıfın cevaplamasını bekleyin, sonra ilerleyin.
Konuşma notu: Aynı değişken, dereferans edip etmediğinize göre tamamen farklı iki soru.
Konuşma notu: Sınıfın cevaplamasını bekleyin, sonra ilerleyin.
Konuşma notu: C hem . (değerler için) hem -> (işaretçiler için) ister; Java'nın yalnızca birine ihtiyacı var.
Konuşma notu: Bu, tüm dönem kullanacağınız bellekle ilgili en önemli tek gerçek.
Konuşma notu: İki sorunun tamamen farklı yanıtları var — bu fark bugünün tüm konusu.
Konuşma notu: Çöp toplama çoğu kişinin sandığından çok daha eski — Java'dan 36 yıl önce var.
Konuşma notu: Bir yığın çerçevesini itmek ya da çekmek yalnızca bir işaretçiyi taşımak — bu kadar hızlı olmasının nedeni bu.
Konuşma notu: Yığın taşması, derin özyinelemenin küçük, sabit bir bölgeyi aşması; öbek çok daha büyük ama daha yavaş.
Konuşma notu: Normal örnek: 10 blok, düzgün sahiplenilmiş, bir kısmı serbest. main'in blocks[] sütununun her öbek satırına işaret edişini izleyin.
Konuşma notu: İkinci bir takma ad hâlâ serbest bırakılmış bir bloğun eski adresini tutuyor; onu kullanmak UB olarak işaretlenir, hiç çalıştırılmaz.
Konuşma notu: p, alloc_block'un kendi çerçevesine özel — o çerçeve çekildiğinde yalnızca DÖNDÜRÜLEN adres ayakta kalır.
Konuşma notu: Bir nesne, çöp toplayıcı hiçbir şeyin ona ulaşamadığını kanıtlayana kadar öbekte yaşar.
Konuşma notu: Normal örnek: bir referans zinciri, sıradan toplama. Nesnelerin erişilemez hale gelip süpürülmesini izleyin.
Konuşma notu: İki nesne birbirini gösteriyor, ama hiçbir kök hiçbirine ulaşamayınca ikisi de toplanır — referans sayımı değil, erişilebilirlik.
Konuşma notu: C'de tam bu örüntü sonsuza dek sızardı — C'de döngünün erişilemez olduğunu fark edecek bir çöp toplayıcı yok.
Konuşma notu: Gereksiz tuttuğunuz bir referans toplanamaz ve etkide yine "sızar".
Konuşma notu: Önümüzdeki hafta tam olarak bu bağlı yapıyı kuracaksınız — bugün yalnızca önizleme.
Konuşma notu: Normal örnek: 10 değer, k = 4. Tek hesaplanan adresi, next üzerinden dört sıçramayla karşılaştırın.
Konuşma notu: Dizi son elemana yine tek adımda ulaşır; bağlı liste baştan itibaren her tek sıçramaya ihtiyaç duyar.
Konuşma notu: Aynı n değer, tam ters erişim maliyeti: dizi O(1), bağlı liste O(n) — aynı veri, tamamen farklı düzen.
Konuşma notu: Sınıfın cevaplamasını bekleyin, sonra ilerleyin.
Konuşma notu: Çözüm: bunun yerine malloc ile ayırın, böylece bellek fonksiyon dönse de hayatta kalır.
Konuşma notu: Sınıfın cevaplamasını bekleyin, sonra ilerleyin.
Konuşma notu: Sıra bir stil tercihi değil — tersine çevirmek sessizce bir bellek sızıntısı yaratır.
Konuşma notu: Sınıfın cevaplamasını bekleyin, sonra ilerleyin.
Konuşma notu: Erişilebilir bir referansın çoktan geri alınmış belleği gösterdiği bir an asla yok.
Konuşma notu: İki tamamen farklı program, bayt bayt, yapılandırılmış bir kayıt üzerinde nasıl anlaşır?
Konuşma notu: Derleyici, platform ve dolgu kuralları bir struct'ın tam bayt düzenini etkiler — iki tarafın da anlaştığı bir şey gerekiyor.
Konuşma notu: BER'li ASN.1, HTTPS'in temeli olan X.509 sertifikalarının, LDAP'ın ve SNMP'nin altında görünmez biçimde hâlâ duruyor.
Konuşma notu: Kaydınızı hiç görmemiş bir çözücü bile onu doğru gezebilir: etiketi oku, uzunluğu oku, o kadar baytı atla, tekrarla.
Konuşma notu: INTEGER etiket 0x02, UTF8String etiket 0x0C, SEQUENCE etiket 0x30 — gerçek ASN.1 evrensel sınıf numaraları.
Konuşma notu: Normal örnek: 10 alan — tamsayılar, kısa metinler, mantıksal değerler — her biri Etiket, Uzunluk, Değer oluyor.
Konuşma notu: 300 karakterlik bir metnin uzunluğu artık tek bayta sığmıyor — uzun biçim yalnızca "kaç tane" demek için fazladan bayt harcıyor.
Konuşma notu: Kısa biçim tek bayt; uzun biçimde en üst bit "sıradaki n bayt UZUNLUĞUN kendisi" demek.
Konuşma notu: İkisi de aynı soyut bilgiyi kodlar — BER boyutu kendini tanımlamaya, PER de tersini feda eder.
Konuşma notu: BER ile aynı türden kayıt, bu kez bayt bayt değil bit bit paketleniyor.
Konuşma notu: Normal örnek: 10 alan — isim harfleri, bir yaş, birkaç kısıtlı sayı — birkaç bayta paketlendi.
Konuşma notu: min, max'a eşitken olası tek bir değer var — alıcı bunu zaten biliyor, bu yüzden HİÇBİR ŞEY gönderilmiyor.
Konuşma notu: PER çıktısı yalnızca en sonda bayta hizalanır, alan alan değil — bitler birbirine sıkı sıkıya yaslanır.
Konuşma notu: Bir PER çözücü BER baytlarını okuyamaz, ya da tersi — aynı şema için iki farklı bayt biçimi.
Konuşma notu: Sınıfın cevaplamasını bekleyin, sonra ilerleyin.
Konuşma notu: Bir çözücü asla bir boyutu tahmin etmek zorunda kalmaz — uzunluk öneki her zaman tam olarak söyler.
Konuşma notu: Sınıfın cevaplamasını bekleyin, sonra ilerleyin.
Konuşma notu: İkilikte 00 1 10000, tam olarak 0x30 — kurulu bit, 0x10'u 0x30'a çeviren şey.
Konuşma notu: Bugünkü her fikir, derlenip çalışana kadar değersiz — bu bölüm tüm dönem için akışı bir kez kuruyor.
Konuşma notu: Bu atölye, tüm dönem tekrarlayacağınız akışı bir kez kuruyor: derle, çalıştır, hata ayıkla.
Konuşma notu: Bir derleyici kaynağı makine koduna çevirir; bir bağlayıcı bunu C standart kütüphanesiyle birleştirir.
Konuşma notu: gcc, hello_workshop.c'yi x'e derler; && yalnızca derleme başarılıysa çalıştırır.
Konuşma notu: Bir uyarı, derleyicinin muhtemelen bir hata olduğunu, çalışma zamanında zor yoldan öğrenmeden önce söylemesidir.
Konuşma notu: Yazdırdığı ortalama yanlış — sum ve n doğru görünüyor, ama son satırdaki bir şey değil.
Konuşma notu: Bu yöntem, şimdi bulacağımızdan çok daha ince hatalara ölçeklenir.
Konuşma notu: Normal örnek: 10 eleman. İzleme panelinde i, sum ve n'yi adımlarken, sonra sum / n'yi yazdırırken izleyin.
Konuşma notu: n == 0, programı tam koruma satırında durdurur — sıfıra bölmek tanımsız davranış olurdu.
Konuşma notu: sum/n 7 verir (tam sayı bölmesi); (double) sum/n gerçek yanıtı, 7.666...'yı verir — hata yalnızca son bölmedeydi.
Konuşma notu: İlk komut YAPILANDIRIR: CMakeLists.txt'yi okur, derleyiciyi kontrol eder. İkincisi DERLER: derler ve bağlar.
Konuşma notu: Visual Studio bir CMakeLists.txt'yi doğrudan açabilir — bir önceki slayttaki aynı dosya değişmeden çalışır.
Konuşma notu: Çalıştırmayı her zaman && ile zincirleyin, böylece başarısız bir derleme sizi yanlışlıkla dünkü ikiliği çalıştırmaz.
Konuşma notu: Sınıfın cevaplamasını bekleyin, sonra ilerleyin.
Konuşma notu: Sonradan, çalışma zamanında, zor yoldan keşfedilmeden.
Konuşma notu: Sınıfın cevaplamasını bekleyin, sonra ilerleyin.
Konuşma notu: Yapılandırma genelde bir kez, derleme kaynağı her değiştirdiğinizde.
Konuşma notu: Sonraki her hafta bir yapı daha ekliyor, tam olarak bu aynı araçlarla değerlendirilerek.
Konuşma notu: İşaretçiler, yığın ve öbek, sonraki her haftanın sizde zaten var saydığı bellek resmi.
Konuşma notu: Bir öğrenci bugünden yalnızca tek bir cümle hatırlayacaksa, hatırlanmaya değer olan bu.
Konuşma notu: Bunlar, yazılı notların sonundaki öz-değerlendirme quizini yansıtıyor, burada slayt başına bir soru, daha kısa bir küme.
Konuşma notu: Sorun, bekleyin, sonra ilerleyin.
Konuşma notu: Doğruluk ve maliyet tamamen ayrı iki soru.
Konuşma notu: Sorun, bekleyin, sonra ilerleyin.
Konuşma notu: Bu tam sıra, dönemin geri kalanında her hafta tekrar geliyor.
Konuşma notu: Sorun, bekleyin, sonra ilerleyin.
Konuşma notu: Sıralı düzen olmadan, bir yarıyı atmak bir garanti değil, bir tahmin olurdu.
Konuşma notu: Sorun, bekleyin, sonra ilerleyin.
Konuşma notu: Uzunluk, Etiket baytını ya da kendi Uzunluk bayt(lar)ını asla saymaz.
Konuşma notu: Sorun, bekleyin, sonra ilerleyin.
Konuşma notu: Önce-dereferans-sonra-eriş o kadar sık bir örüntü ki C ona kendi operatörünü verdi.
Konuşma notu: Bugünün önizlemesindeki O(1)-her-yere-ekleme, O(n)-erişim ödünleşimi, artık tam olarak: ekleme, silme, gezinme, ölçülmüş.
Konuşma notu: Bunlar, haftanın yazılı notlarının sonunda listelenen aynı kaynaklar.
Konuşma notu: Tarihsel kaynaklar — Bachmann, Landau, Knuth, Liskov — bugünün "kısa tarihçe" slaytlarının dayandığı kaynaklar.