Konuşma notu: Hafta 13 bize sıralı bir dosya ve kova-hashli bir dosya verdi. Bu hafta soruyor: küçük bir dizin aramayı ucuzlatabilir mi, dizinin kendisi sonsuza dek dengeli kalabilir mi, ve hashlenmiş bir dosya hiç yeniden kurulmadan büyüyebilir mi?
Konuşma notu: On bir animasyon tüm dersi taşıyor; her çizim disk sayfalarını numarayla etiketler ve sağda okuma/yazma sayacı tutar.
Konuşma notu: Her terim ilk geçtiğinde tam olarak tanımlanır; bu tablo yalnızca onu tekrar bulacağınız yeri söyler.
Konuşma notu: external_merge_sort ve replacement_selection gerçek çalışma dosyaları yaratır, ama her zaman kendi yarattıkları ve sildikleri bir klasörün içinde.
Konuşma notu: Bu haftaki her şey ya sıralı dosyayı bir dizinle hızlandırır, ya da hashlenmiş dosyanın sabit kova sayısını çözer.
Konuşma notu: Bugünün B-ağacı ailesi, Hafta 4'ün ağaç fikrini, tek anahtar değil birçok anahtar tutan sayfalara genelliyor.
Konuşma notu: Bu haritadaki her kutu aşağıda kendi slaytlarını alır, her biri adım adım bir animasyon ve tam bir C/Java programıyla.
Konuşma notu: Bölüm 1 dizinleme ailesini açıyor: sayfa sayfa aramayı tek bir sayfa okumasına dönüştüren, belleğe sığan küçücük bir yapı.
Konuşma notu: Evet — yapı diske hiç dokunmayacak kadar küçükse, geriye yalnız TEK bir veri sayfası okuması kalır.
Konuşma notu: Sekmeler elinizden (bellekten) hiç çıkmaz; yalnızca doğru bölümü açmak gerçek bir "sayfa çevirme" (disk okuma) maliyetidir.
Konuşma notu: Sayfa başına tek girdi tuttuğundan (kayıt başına değil), devasa bir dosya için bile küçücük kalır.
Konuşma notu: "Aralığın altında" uç durumunda, dizinin kendisi bile bir anahtarın yokluğunu sıfır disk G/Ç'siyle kanıtlayabilir.
Konuşma notu: Normal örnek: 12 anahtar, block=4 — dizin taramasının (bedava) tek bir sayfa okumasına nasıl devrettiğini izleyin.
Konuşma notu: Her tek sorgu en küçük anahtardan küçük: tüm senaryo boyunca sıfır disk okuması.
Konuşma notu: Dizin sıralıdır, bu yüzden bir girdinin first_key'i hedefi aştığı an döngü durabilir.
Konuşma notu: page == -1, herhangi bir disk erişiminden önce kısa devre yapar; aksi halde tam olarak bir sayfa okunur ve taranır.
Konuşma notu: Daha büyük bir kurulum dizini de ikili ararardı, ama disk maliyeti her iki durumda da O(1) kalır.
Konuşma notu: Üçüncü hata, sırada gelen ISAM'ın çok seviyeli dizin için tam gerekçesidir.
Konuşma notu: Hangi sayfayı okuyacağınızı bildiğinizde, bir sayfa okumasının ve sayfa-içi taramanın ne verdiğini düşünün.
Konuşma notu: "Seyrek"in işe yaramasının tam nedeni bu: dizin yalnız "hangi sayfa"yı cevaplamalı, "hangi yuva"yı değil.
Konuşma notu: Bölüm 2, dizinlemeyi, birçok kayıtta tekrar eden biri dahil, herhangi bir özniteliğe genelliyor.
Konuşma notu: Evet — ikincil anahtarın kendisine göre sıralı, yoğun bir dizin, tekrarların yan yana kümelenmesini sağlar.
Konuşma notu: Katalog yoğundur (kitap başına bir kart) ve raflardan FARKLI bir anahtara göre sıralıdır.
Konuşma notu: Yoğun dizin, seyrek dizinin O(n/B)'sinden daha fazla yer (O(n)) kaplar, herhangi bir özniteliği desteklemenin doğrudan bedeli.
Konuşma notu: Aynı sayfayı paylaşan iki eşleşme toplamda yalnız bir okumaya mal olur — arama bu sorguda ziyaret edilen sayfaları izler.
Konuşma notu: Normal örnek: 12 kayıt, block=4 — veri dosyası bu anahtara göre sıralı olmasa bile eşleşmelerin nasıl kümelendiğini izleyin.
Konuşma notu: Dizinin tamamı tek bir dev küme — arama yine de tek geçişte her eşleşmeyi bulur.
Konuşma notu: "else if (count > 0) break" kilit satırdır: yalnızca bir küme gerçekten başlayıp bittiğinde durur.
Konuşma notu: Yoğun dizin, seyrek dizinin küçük ayak izini, tekrarlar dahil HERHANGİ bir özniteliği arayabilme yeteneğiyle takas eder.
Konuşma notu: Veri dosyasının fiziksel sırası ile yoğun dizinin sıralama sırası genelde tamamen ilgisizdir.
Konuşma notu: Seyrek dizinin "sayfa başına bir girdi" hilesinin neye dayandığını düşünün.
Konuşma notu: Seyrek dizinin hilesi yalnızca dosyanın kendisi tam olarak o anahtara göre sıralı olduğu için işe yarar.
Konuşma notu: Bölüm 3, çok seviyeli bir dizini bir büyüme mekanizmasıyla, taşma alanıyla, birleştiriyor.
Konuşma notu: ISAM iki fikirle cevap verir: dizini küçük tutmak için SEVİYELER, ve büyümeyi ucuz tutmak için bir TAŞMA ALANI.
Konuşma notu: ISAM, B-ağacından (1972) yaklaşık on yıl önce gelir — dosya organizasyonu sorununun ilk endüstriyel cevabıdır.
Konuşma notu: Ev sayfası ve dizin girdisi hiç yer değiştirmez; yalnızca onun taşma zinciri büyür.
Konuşma notu: Bu takas — ucuz büyüme, bozulan arama — gerçek ISAM dosyalarının neden zamanlanmış bakıma ihtiyaç duyduğudur.
Konuşma notu: Normal örnek: 12 anahtar, block=4, fill=3 — iki doğrudan eklemeyi, sonra taşan üçüncüyü izleyin.
Konuşma notu: Üç ekleme aynı, zaten dolu sayfayı hedefliyor; üçüncüsü eklenmeden önce iki taşma düğümünü geçmek zorunda.
Konuşma notu: İki seviyeli iniş (önce find_group, sonra find_page) tüm "dizinin dizini" fikridir, dört satırda.
Konuşma notu: L (dizin seviyeleri), koca bir dosya için bile küçük kalır, tam olarak seviye-2'yi seviye-1 altında gruplamanın amacı.
Konuşma notu: Yeni kayıt her zaman KENDİ ev sayfasının zincirine eklenir — en kısa zincire değil, komşuya değil.
Konuşma notu: Gerçekten koca bir dosya üzerinde tek seviyeli bir seyrek dizine ne olacağını düşünün.
Konuşma notu: Tıpkı bir telefon rehberinin sekmeli bölümlerinin, altındaki sıralı sayfadan önce yaptığı gibi.
Konuşma notu: Bölüm 4, B-ağacı ailesini açıyor: dizinin kendisi disk sayfalarından oluşan kendi kendini dengeleyen bir ağaç OLUYOR.
Konuşma notu: O yapı B-ağacıdır — her "düğüm" koca bir disk sayfası, dengeli kalmak için bölünüp birleşiyor.
Konuşma notu: Bir B-ağacının yüksekliği, dosya nasıl büyür ya da küçülürse küçülsün O(log n) kalır — hiç ayrı bir yeniden dengeleme adımı olmadan.
Konuşma notu: Büyüme her zaman tepede (kökte) olur, asla yeni bir alt raf ekleyerek değil.
Konuşma notu: Bu haftanın örneklerinde m=4 (karışık veri) ve m=3 (en kötü durum, bölünmeleri görünür kılmak için).
Konuşma notu: Bu kaskad bölünme, ağaç yüksekliğini O(log_m n) tutan tüm mekanizmadır.
Konuşma notu: Normal örnek: order=4, 12 karışık anahtar — ilk bölünmenin bir ortancayı yukarı ittiğini, sonra bir kök bölünmesini izleyin.
Konuşma notu: n'ye göre büyük bir order ile, tüm ağaç tek bir yaprak düğüm olarak kalır — bölünen durumlarla temiz bir zıtlık.
Konuşma notu: Sıralı bir diziye düz bir kaydır-ekle — zaten gördüğünüz her ekleme sıralamasıyla aynı fikir.
Konuşma notu: while döngüsü kaskaddır: bir düğüm taşmayana ya da kök bölünene kadar yukarı doğru kontrol etmeye devam eder.
Konuşma notu: Her seviyeye ulaşan kaskadlar pratikte nadirdir — çoğu ekleme yalnız bir yaprak yazmasına mal olur.
Konuşma notu: Gerçek B-ağaçları, bir düğümün tam olarak bir disk sayfasını doldurduğu, yüzlerce mertebesinde bir derece kullanır.
Konuşma notu: Büyümenin nerede ve ne sıklıkla olduğunu düşünün.
Konuşma notu: Dengesiz bir İAA'nın aksine, her yaprak her zaman diğer her yaprakla aynı derinliktedir.
Konuşma notu: Bölüm 5 daha basit soruyu soruyor: zaten var olan bir ağaçta, tek bir arama kaça mal olur?
Konuşma notu: Cevap, ağacın yüksekliğiyle, artı bir, sınırlı çıkacak, ne olursa olsun.
Konuşma notu: Bir B-ağacı her anahtarı doğru yönlendirilmiş bir inişin izleyeceği bir yerde tutar; bir yaprağa eşleşmeden düşmek yokluğu kanıtlar.
Konuşma notu: Normal örnek: order=4, 12 anahtar, 3 arama — kök seviyesinde bir isabeti daha derin, daha pahalı bir aramayla karşılaştırın.
Konuşma notu: order=12 ve yalnız 10 anahtarla, tüm dosya tek sayfaya sığar — bulunsun ya da bulunmasın, her arama tam bir okumaya mal olur.
Konuşma notu: Yaprak kontrolü eşleşme kontrolünden SONRA ama inmeden ÖNCE gelmeli — bir yaprakta inmek çöp okur.
Konuşma notu: "Bulunamadı" BEDAVA DEĞİLDİR — arama yine de emin olmak için bir yaprağa kadar iner.
Konuşma notu: Yanlış bir çocuk indeksi aramayı tamamen yanlış alt ağaca gönderir — çökmez, sessizce yanlıştır.
Konuşma notu: Bir B-ağacında her yaprağın derinliği hakkında ne doğru olduğunu düşünün.
Konuşma notu: Bu, Bölüm 4'ün kökten böl-ve-büyü mekanizmasının doğrudan sağladığı yapısal garanti.
Konuşma notu: Bölüm 6, eklemenin bölünmesini, silmenin iki onarım hamlesiyle yansıtıyor: ödünç al, ya da birleş.
Konuşma notu: Evet — minimumun az altına düşen bir sayfa, çoğu zaman bunun yerine bir komşusundan tek bir yedek anahtar ödünç alabilir.
Konuşma notu: Her silme, bir şekilde, bir yaprak silme artı üzerindeki olası bir düzeltme zincirine indirgenir.
Konuşma notu: Ödünç alma tek adımda çözülür, 3 sayfaya dokunur; birleştirme ebeveynden bir sayfa ve bir anahtar kaldırır.
Konuşma notu: Bir B-ağacının bir seviye kaybetmesinin tek yolu budur — her zaman tepede, asla bir yaprağı budayarak değil.
Konuşma notu: Normal örnek: order=4, 12 anahtar, 3 silme — hiç düzeltme gerektirmeyen bir yaprak silmesini izleyin.
Konuşma notu: order=3 bir ağaçta yedi silme, her biri bir birleşme, ta ki kök boşalıp ağaç bir seviye kaybedene dek.
Konuşma notu: Ödünç alma hemen döner (çözüldü); birleştirme node = parent yapıp döngüye devam eder (kaskad olabilir).
Konuşma notu: Bir ödünç alma kesinlikle daha ucuzdur — tek adımda çözülür, daha fazla yayılma riski olmadan.
Konuşma notu: Gerçek silme her zaman ÖNCÜLÜN orijinal yaprağında gerçekleşir, asla iç düğümde değil.
Konuşma notu: Her seçeneğin kaç sayfaya dokunduğunu ve kaskad olup olamayacağını düşünün.
Konuşma notu: Dinamik bir dizinin tam bir yeniden ayırmadan önce yerinde büyümeyi tercih etmesiyle aynı "önce daha ucuz yerel çözüm" ruhu.
Konuşma notu: Bölüm 7 aralık sorgularını soruyor — ve tek bir yapısal değişiklikle cevaplıyor: her yaprağı bağlayan bir zincir.
Konuşma notu: Evet — her yaprak zaten sırada hangi yaprağın geldiğini biliyorsa, bir daha hiç tırmanmaya gerek kalmaz.
Konuşma notu: Zincir, "her eşleşme için yeniden in"i "yana doğru yürü"ye dönüştürür, büyük sonuç kümeleri için devasa bir kazanç.
Konuşma notu: `next`i, üzerine yazmadan önce eklemeyi unutmak, bölünme noktasından sonraki her yaprağı sessizce kaybeder.
Konuşma notu: Normal örnek: order=4, 12 anahtar, 3 aralık sorgusu — turuncu zincir oklarının sorguyu yana taşıdığını izleyin.
Konuşma notu: Sorgu tüm zinciri sonuna kadar yürür — bir kez bile köke tırmanmadan.
Konuşma notu: TEK bir iniş (find_leaf), sonra saf bir yana yürüyüş — özyineleme yok, iç düğümleri yeniden ziyaret etmek yok.
Konuşma notu: Sonuç kümesi ne kadar büyürse, B+-ağacının sıradan bir B-ağacına üstünlüğü o kadar büyür.
Konuşma notu: Üçüncü hata doğru çalışır, ama yaprak zincirinin tüm kazancını çöpe atar.
Konuşma notu: Bir B+-ağacı yaprağının, sıradan bir B-ağacı yaprağının sahip olmadığı hangi bilgiye sahip olduğunu düşünün.
Konuşma notu: Yaprak başına bu tek işaretçi, B+-ağacının aralık-sorgusu hızının arkasındaki tüm yapısal fark.
Konuşma notu: Bölüm 8 hashlemeye dönüyor, artık kova sayısının kendisinin talep üzerine büyümesine izin vererek.
Konuşma notu: Genişleyebilir hashlemenin cevabı: küçük, bellekte duran bir dizini, diskteki veri kovalarından ayırmak.
Konuşma notu: Bu dizin/veri ayrımı, sonradan dinamik ve dağıtık hash tablolarının yeniden kullandığı tasarım kalıbıdır.
Konuşma notu: Katlama saf bellek işidir — sıfır disk maliyeti — yalnızca yönlendirecek daha fazla, daha ince taneli işaretçi yaratır.
Konuşma notu: Yeniden deneme şarttır — onsuz, yeni bitle her şeyi paylaşan bir anahtar kaybedilirdi.
Konuşma notu: Normal örnek: capacity=2, 10 anahtar — bir kovanın local_depth'i yetiştiğinde dizinin ilk kez katlanmasını izleyin.
Konuşma notu: Her anahtar 8 mod 16 — anahtarlar nihayet ayrılmadan önce dizin derinlik 7'ye kadar büyür.
Konuşma notu: Sondaki özyineli yeniden deneme, "tek bölünme yetmedi" kaskad durumunu ele alan şeydir.
Konuşma notu: Her katlama, bir sonrakine ihtiyaç duyulmadan önce iki kat daha fazla gelecekteki ekleme yapılmasına izin verir.
Konuşma notu: Şanssız bir bölünme, yepyeni bir kovayı sıfır anahtarla, gelecekteki bir eklemeyi bekler hâlde bırakabilir.
Konuşma notu: Bir bölünmeden hemen sonra kaç dizin yuvasının YENİ kovaya işaret edebileceğini düşünün.
Konuşma notu: Önce katlamak, bölünmenin sonra kullanacağı tam olarak o ek yuvaları yaratır.
Konuşma notu: Bölüm 9, Bölüm 8 ile aynı dinamik büyümeyi, ama hiç dizin olmadan başarıyor.
Konuşma notu: Doğrusal hashlemenin cevabı: önceden, sabit, öngörülebilir bir bölünme sırasına bağlanmak.
Konuşma notu: Litwin'in planı, genişleyebilir hashlemenin dizinini tek bir sayaçla, n, takas etti.
Konuşma notu: Adres kuralının tek "düzeltme" şartı, kovalar bölündükçe adreslemeyi doğru tutan tüm hiledir.
Konuşma notu: Bu, doğrusal hashlemenin en karakteristik — ve en sık yanlış gerçeklenen — kuralıdır.
Konuşma notu: Normal örnek: N0=4, capacity=2, 10 anahtar — bir taşmanın FARKLI bir kovanın bölünmesini tetiklemesini izleyin.
Konuşma notu: N0=2, capacity=1 — bölünmeler o kadar sık olur ki tam bir tur tamamlanır, n sıfırlanır, level artar.
Konuşma notu: split() her zaman h->n üzerinde çalışır — çağrıyı tetikleyen kova ne olursa olsun.
Konuşma notu: Sadelik (dizin yok), herhangi bir tekil kovanın en kötü durumu üzerinde daha gevşek bir sınırla ödenir.
Konuşma notu: Bölünme hedefi her zaman "sıralı düzende sırada gelen kova"dır — tamamen öngörülebilir.
Konuşma notu: Bir sonraki bölünme hedefinin ne kadar öngörülebilir olduğunu düşünün.
Konuşma notu: Bedel: bir kova, kendi bölünme sırası gelene kadar kapasitesinin ötesinde büyüyebilir.
Konuşma notu: Bölüm 10, RAM'e sığmayan bir dosyayı sıralamayı ele alıyor — Hafta 10'unkinden gerçekten farklı bir algoritma.
Konuşma notu: Böl adımı kolayca uyarlanır; birleştir adımı temelden farklı bir gerçekleme ister.
Konuşma notu: İki-fazlı çalışma-sonra-birleştir yapısı doğrudan bu bant çağına uzanır.
Konuşma notu: RAM her zaman yalnız FAN_IN arabellek artı bir çıktı arabelleği tutar, dosya ne kadar dev olursa olsun.
Konuşma notu: Bu, bu haftanın programlarının gerçeklediği küçük ama gerçek bir iyileştirmedir.
Konuşma notu: Normal örnek: 12 değer, RUN_SIZE=4, FAN_IN=2 — ilk birleştirmenin çalışma başına küçük arabelleklerinin tüketildikçe küçülmesini izleyin.
Konuşma notu: Her değer kendi çalışması olarak başlar — normal durumdan çok daha fazla birleştirme geçişi gerekir.
Konuşma notu: Yalnız her çalışmanın ŞU ANKİ ön değeri RAM'de olmalı — asla tüm bir çalışma birden değil.
Konuşma notu: Hem external_merge_sort hem replacement_selection aynı güvenli lab-klasörü örüntüsünü izler.
Konuşma notu: Tüm dosyayı tek seferde belleğe yüklemeye çalışan saf bir yaklaşımdan çarpıcı biçimde daha az.
Konuşma notu: FAN_IN arabellek, aynı anda birleştirilen çalışma başına bir — kolaylıkla değil, gerçek bellekle sınırlı.
Konuşma notu: k-yollu bir birleştirmenin bir seferde bir çalışmanın ne kadarını gerçekten görmesi gerektiğini düşünün.
Konuşma notu: Hafta 10'un iki-yollu birleştirmesinin genellenmiş hâli, o da her zaman yalnız iki "şu anki" elemana bakar.
Konuşma notu: Bölüm 11 soruyor: Faz 1'in çalışmaları AYNI RAM kullanarak RAM'den daha uzun yapılabilir mi?
Konuşma notu: Yerine koyarak seçimin cevabı: son YAZILAN'dan küçük bir kayıt, bunun yerine bir sonraki çalışmayı başlatır.
Konuşma notu: Karşılaştırma son YAZILAN değere karşıdır, asla pencerenin kendi şu anki minimumuna karşı değil.
Konuşma notu: En kötü durum, Bölüm 10'un düz sabit-boyutlu parçalamasından daha iyi değildir — kazanç ortalama-durum, garanti değil.
Konuşma notu: Normal örnek: RAM=4, 12 karışık değer — pencere kutularının "current" ile "next" arasında geçiş yapmasını izleyin.
Konuşma notu: Her şeyi tutacak kadar büyük RAM ile, sonuç girdi sırasına bakılmaksızın her zaman TEK, tam sıralı bir çalışmadır.
Konuşma notu: Hiçbir şey CURRENT etiketli değilse -1 döner — bu çalışmanın bittiğinin sinyalidir.
Konuşma notu: Buradaki kod, açıklık için pencereyi kayıt başına O(m) doğrusal tarar — bir heap O(log m) yapar.
Konuşma notu: Bu ortalama-durum kazancı, gerçek veritabanı ve işletim sistemi sıralama araçlarının yerine koyarak seçim kullanmasının tam nedenidir.
Konuşma notu: Önceki çalışmanın son değerini taşımak, yeni çalışmanın en erken kayıtlarından bazılarını yanlış etiketlerdi.
Konuşma notu: Herhangi bir anda pencerenin ne kadarının tipik olarak CURRENT etiketli olduğunu düşünün.
Konuşma notu: Knuth'un TAOCP, Cilt 3'ünde tam olarak incelenen klasik bir sonuç.
Konuşma notu: Kapanış bölümü, bu haftanın kapsadığı her şeyi tek bir karar tablosuna dönüştürüyor.
Konuşma notu: Dizin satırları çoğunlukla statik bir dosyayı varsayar; ISAM'ın taşma alanı eklemeleri katlanılabilir kılan şeydir.
Konuşma notu: "Asla yeniden düzenleme", B-ağacı ailesinin logaritmik aramanın yanındaki diğer büyük özelliğidir.
Konuşma notu: Bu, Hafta 13'ün ilk sorduğu, bu haftanın eklediği her şeyle keskinleşen aynı sorudur.
Konuşma notu: B-ağacı ailesindeki her işlem ağacı ilerledikçe dengeli tutar — hiçbir ayrı yeniden dengeleme geçişi olmadan.
Konuşma notu: Her iki hashleme planı da tek seferde bir kova, talep üzerine, hiç yeniden düzenleme geçişi olmadan büyür.
Konuşma notu: On soru, haftanın notlarından yeniden ifade edilmiş, her biri bir slayt çifti.
Konuşma notu: Bölüm 1'i hatırlayın.
Konuşma notu: Yalnızca işaret ettiği tek veri sayfası gerçek bir disk okumasıdır.
Konuşma notu: Bölüm 2'yi hatırlayın.
Konuşma notu: Yoğun bir dizinde tekrar eden değerlerin kümelenmesini sağlayan şey budur.
Konuşma notu: Bölüm 3'ü hatırlayın.
Konuşma notu: Bu takas, gerçek ISAM dosyalarının neden periyodik yeniden düzenlemeye ihtiyaç duyduğudur.
Konuşma notu: Bölüm 4'ü hatırlayın.
Konuşma notu: Anahtarların yarısı kalır, yarısı yeni bir kardeşe geçer, ve ortanca ikisini ebeveynde ayırır.
Konuşma notu: Bölüm 5'i hatırlayın.
Konuşma notu: Bir arama ya anahtarını erken bulur, ya da bir yaprağa iner — asla ötesine değil.
Konuşma notu: Bölüm 6'yı hatırlayın.
Konuşma notu: Bir B-ağacı yalnız hiçbir kardeşin yedek anahtarı olmadığında birleşir.
Konuşma notu: Bölüm 7'yi hatırlayın.
Konuşma notu: Sıradan bir B-ağacında komşu yapraklar arasında böyle bir kısayol yoktur.
Konuşma notu: Bölüm 8'i hatırlayın.
Konuşma notu: Katlama, bir bölünmenin sonra ihtiyaç duyduğu yedek, daha özgül yuvaları yaratır.
Konuşma notu: Bölüm 9'u hatırlayın.
Konuşma notu: Bu öngörülebilirlik, dizin ihtiyacını tamamen ortadan kaldıran şeydir.
Konuşma notu: Bölüm 11'i hatırlayın.
Konuşma notu: Knuth'un TAOCP, Cilt 3'ünde incelenen klasik bir sonuç.
Konuşma notu: Bu haftanın her yapısı günlük üretimde kullanılmaya devam ediyor — B+-ağaçları neredeyse her ilişkisel veritabanında, dış birleştirmeli sıralama her veritabanının sıralama/dizin-kurma aracında.
Konuşma notu: Bunlar, haftanın yazılı notlarının sonunda listelenen aynı kaynaklardır.
Konuşma notu: Tarihsel kaynaklar — Bayer/McCreight, Fagin vd., Litwin — bugünün "kısa tarihçe" slaytlarının dayandığı kaynaklardır.