Veri Yapılarında Önemli İsimler

Bu dersteki birçok yapı ve algoritma hâlâ onu bulanların adını taşır: Dijkstra algoritması, AVL ağacı, Kruskal algoritması. Aşağıdaki tanıtımlar dersin bölüm sırasını izler ve her katkıyı işlendiği bölüme bağlar.

Dizilerden ve bağlı listelerden kümelere ve çizgelere Amaç yaşam öyküsü anlatmak değil; her ismi somut bir yapıya, algoritmaya, değişmeze ya da performans fikrine bağlamaktır.

Öne çıkan katkılar

NW

Niklaus Wirth

Program: veri üzerinde çalışan algoritma

Pascal dilini tasarladı ve Algorithms + Data Structures = Programs (Algoritmalar + Veri Yapıları = Programlar, 1976) kitabını yazdı.

Mühendislik açısından önemi

Kitabın adı bu dersin ana fikrini özetler: program, iyi seçilmiş bir veri yapısı üzerinde çalışan bir algoritmadır.

Derste: Bölüm 1 · Giriş

PascalAlgoritmalarVeri yapıları
BL

Barbara Liskov

Soyut veri tipleri

Stephen Zilles ile birlikte soyut veri tipi (abstract data type, ADT) kavramını ortaya koydu (1974) ve bu kavramı CLU dilinin temeline yerleştirdi. 2008 Turing Ödülü'nü aldı.

Mühendislik açısından önemi

ADT, işlemlerin ne yaptığını nasıl gerçeklendiklerinden ayırır. Derste yığın, kuyruk, liste, eşleme ve küme tam da bu yolla tanımlanır.

Derste: Bölüm 1 · Giriş

ADTArayüzlerKapsülleme
DK

Donald E. Knuth

Algoritma analizi

The Art of Computer Programming (Bilgisayar Programlama Sanatı) dizisini yazdı. Algoritmaların matematiksel analizini, O, Ω ve Θ gösterimleriyle birlikte, standart bir uygulama hâline getirdi.

Mühendislik açısından önemi

Arama, sıralama, ağaçlar ve hash'leme (hashing) konularını sistemli biçimde ele aldı; gerçekleme teknikleri böylece bir mühendislik disiplinine dönüştü. Doğrusal yoklamada (linear probing) beklenen yoklama sayıları da onun sonuçlarıdır.

Derste: Bölüm 2 · Algoritma Analizi, Bölüm 12 · Eşlemeler ve Hash Tabloları

Büyük OAnalizHash'leme
JN

John von Neumann

Sıralama · Birleştirme sıralaması

Birleştirme sıralamasını (merge sort) 1945'te tanımladı. Bu algoritma, programı bellekte saklayan bir bilgisayar için yazılmış ilk algoritmalardan biridir.

Mühendislik açısından önemi

Birleştirme sıralaması, böl ve fethet (divide and conquer) yaklaşımının ve kararlı (stable) bir O(n log n) sıralamanın standart örneğidir.

Derste: Bölüm 3 · Sıralama Algoritmaları

Birleştirme sıralamasıBöl ve fethetKararlı sıralama
CH

C. A. R. Hoare

Sıralama · Hızlı sıralama

Hızlı sıralamayı (quicksort) 1959–1961 yıllarında geliştirdi. Daha sonra program doğruluğunu kanıtlamak için Hoare mantığını kurdu.

Mühendislik açısından önemi

Hızlı sıralama; bölümleme (partitioning), özyineleme, yerinde düzenleme ve pivot seçiminin ortalama ve en kötü durum maliyetine etkisini bir arada gösterir.

Derste: Bölüm 3 · Sıralama Algoritmaları

Hızlı sıralamaBölümlemeÖzyineleme
NS

Allen Newell, Cliff Shaw ve Herbert A. Simon

Bağlı listeler

Bağlı listeyi (linked list) 1955–1956'da geliştirdikleri Information Processing Language (IPL) dilinde ilk kez kullandılar.

Mühendislik açısından önemi

Referanslarla birbirine bağlanan düğümler, çalışma anında büyüyüp küçülen yapıları mümkün kıldı. Bağlı listeler, bağlı yığınlar, kuyruklar ve ağaçlar bu fikrin üzerine kurulur.

Derste: Bölüm 5 · Bağlı Listeler

Bağlı listeDüğümlerReferanslar
RF

Robert W. Floyd

Döngü tespiti · Heap oluşturma

Kaplumbağa ve tavşan döngü tespiti algoritması ona atfedilir. 1964 tarihli Treesort 3 algoritması heap'i aşağıdan yukarıya kurar.

Mühendislik açısından önemi

Farklı hızlarda ilerleyen iki işaretçi, döngüyü O(n) sürede ve O(1) ek bellekle bulur. Aşağıdan yukarıya heap oluşturma (bottom-up heap construction) O(n log n) yerine O(n) sürer.

Derste: Bölüm 5 · Bağlı Listeler, Bölüm 11 · Öncelikli Kuyruklar ve Heap

Döngü tespitiİki işaretçiHeap oluşturma
JB

Joshua Bloch

Java Collections Framework

Java 1.2 (1998) ile gelen Java Collections Framework'ü (Java koleksiyonlar çerçevesi) tasarladı.

Mühendislik açısından önemi

List, Set, Map ve Iterator arayüzleri ile ArrayList, LinkedList ve HashMap gibi sınıflar, tıpkı derste olduğu gibi ADT'yi onu gerçekleyen veri yapısından ayırır.

Derste: Bölüm 6 · Liste

ListIteratorJava koleksiyonları
BS

Friedrich L. Bauer ve Klaus Samelson

Yığınlar

Aritmetik formülleri çevirmek ve hesaplamak için yığın (stack) ilkesini ortaya koydular (Kellerprinzip, 1955–1957).

Mühendislik açısından önemi

Son giren ilk çıkar (LIFO) ilkesiyle çalışan yığın; ifade hesaplama, derleyiciler ve metot çağrılarının yönetimi için standart araç oldu.

Derste: Bölüm 7 · Yığınlar

YığınLIFOİfadeler
JŁ

Jan Łukasiewicz

Önek gösterimi

1920'lerde Polonya gösterimini, yani önek (prefix) gösterimini ortaya koydu. Ters Polonya gösterimi, yani sonek (postfix) gösterimi bundan türetildi.

Mühendislik açısından önemi

Önek ve sonek ifadeler parantez gerektirmez; tek bir yığınla tek geçişte hesaplanır.

Derste: Bölüm 7 · Yığınlar

ÖnekSonekGösterim
ED

Edsger W. Dijkstra

Shunting-yard · En kısa yollar

Ara ek (infix) ifadeyi sonek ifadeye çeviren shunting-yard (manevra sahası) algoritmasını (1961) ve ağırlıklı çizgelerde en kısa yol algoritmasını (1959) geliştirdi.

Mühendislik açısından önemi

Shunting-yard bir işleç yığını ve öncelik kurallarıyla çalışır. En kısa yol algoritması ise gevşetmeyi (relaxation) en küçük öncelikli öğeyi veren bir öncelikli kuyrukla birleştirir.

Derste: Bölüm 7 · Yığınlar, Bölüm 14 · Çizgeler

Ara ek → sonekEn kısa yolÖncelikli kuyruk
AL

Georgy Adelson-Velsky ve Evgenii Landis

AVL ağaçları

İlk kendini dengeleyen ikili arama ağacı olan AVL ağacını 1962'de ortaya koydular.

Mühendislik açısından önemi

Denge faktörü (balance factor) ile tek ya da çift döndürmeler (rotation) yüksekliği O(log n) tutar. Böylece arama, ekleme ve silme logaritmik kalır.

Derste: Bölüm 10 · Arama Ağaçları

AVLDenge faktörüDöndürmeler
GS

Leonidas J. Guibas ve Robert Sedgewick

Kırmızı-siyah ağaçlar

Kırmızı-siyah ağacı 1978'de ortaya koydular. Çalışmaları Rudolf Bayer'in simetrik ikili B-ağaçlarına (1972) dayanır.

Mühendislik açısından önemi

Düğüm renkleri ve birkaç döndürme ağacı dengede tutar. Java'daki TreeMap ve TreeSet kırmızı-siyah ağaçla gerçeklenir.

Derste: Bölüm 10 · Arama Ağaçları

Kırmızı-siyah ağaçDengelemeTreeMap
ST

Daniel D. Sleator ve Robert E. Tarjan

Splay ağaçları

Splay ağacını 1985'te ortaya koydular.

Mühendislik açısından önemi

Splay ağacı denge bilgisi tutmaz. Erişilen her düğümü köke taşır; bu sayede işlemler amortize O(log n) sürer ve yakın zamanda kullanılan anahtarlara erişim hızlanır.

Derste: Bölüm 10 · Arama Ağaçları

Splay ağacıAmortize analizYerellik
BM

Rudolf Bayer ve Edward M. McCreight

B-ağaçları

B-ağacını Boeing Scientific Research Labs'ta geliştirdiler (1970; yayımlanışı 1972).

Mühendislik açısından önemi

Düğüm başına çok sayıda çocuk (fan-out) ağacı sığ tutar; bu yüzden her aramada az sayıda disk bloğu okunur. B-ağaçları ve B+ ağaçları, veritabanı ve dosya sistemi indekslerinin temelidir.

Derste: Bölüm 10 · Arama Ağaçları

B-ağacıB+ ağacıİndeksleme
JW

J. W. J. Williams

İkili heap · Heap sort

İkili heap'i (binary heap) ve heap sort algoritmasını 1964'te ortaya koydu.

Mühendislik açısından önemi

Diziyle tutulan tam ikili ağaç, O(log n) sürede ekleme ve en küçük (ya da en büyük) öğeyi çıkarma sağlar. Aynı yapı, yerinde (in-place) çalışan O(n log n) bir sıralama da verir.

Derste: Bölüm 11 · Öncelikli Kuyruklar ve Heap

İkili heapHeap sortÖncelikli kuyruk
FT

Michael L. Fredman ve Robert E. Tarjan

Fibonacci heap'leri

Fibonacci heap'i 1984'te ortaya koydular.

Mühendislik açısından önemi

Anahtar küçültme (decrease-key) işleminin amortize O(1) maliyeti, özel bir heap'in en kısa yol gibi çizge algoritmalarını nasıl hızlandırabileceğini gösterir.

Derste: Bölüm 11 · Öncelikli Kuyruklar ve Heap

Fibonacci heapAmortizeÖncelikli kuyruk
HL

Hans Peter Luhn

Hash'leme

Zincirlemeli hash'leme fikrini 1953'te IBM içinde yazdığı bir notta önerdi.

Mühendislik açısından önemi

Anahtarı doğrudan bir kovaya (bucket) eşlemek, aramayı beklenen O(1) süreye indirir. Ayrı zincirleme (separate chaining) bugün de çakışmaları çözmenin standart yollarından biridir.

Derste: Bölüm 12 · Eşlemeler ve Hash Tabloları

Hash'lemeZincirlemeKovalar
GF

Bernard A. Galler ve Michael J. Fischer

Ayrık küme ormanları

Ayrık kümelerin orman gösterimini (disjoint-set forest) 1964'te ortaya koydular.

Mühendislik açısından önemi

Her küme bir ağaçtır ve ağacın kökü kümenin temsilcisidir. Bu yüzden birleştirme (union) ve bulma (find) işlemleri için yalnız ebeveyn bağlantıları yeter.

Derste: Bölüm 13 · Kümeler ve Ayrık Kümeler

Ayrık kümelerBirleştir-bulOrmanlar
RT

Robert E. Tarjan

Ayrık kümelerin analizi

Rütbeye göre birleştirme ile yol kısaltma birlikte kullanıldığında m işlemin O(m·α(n)) sürede bittiğini 1975'te kanıtladı.

Mühendislik açısından önemi

Ters Ackermann fonksiyonu α(n) o kadar yavaş büyür ki her işlem pratikte sabit süre alır.

Derste: Bölüm 13 · Kümeler ve Ayrık Kümeler

Rütbeye göre birleştirmeYol kısaltmaAmortize
EM

Edward F. Moore

Genişlik öncelikli arama

Genişlik öncelikli aramayı (breadth-first search, BFS) 1959'da bir labirentteki en kısa yolu bulma yöntemi olarak yayımladı.

Mühendislik açısından önemi

BFS, bir kuyruk yardımıyla düğümleri düzey düzey gezer ve ağırlıksız çizgelerde en kısa yolları O(V + E) sürede bulur.

Derste: Bölüm 14 · Çizgeler

BFSKuyrukEn kısa yol
AK

Arthur B. Kahn

Topolojik sıralama

Giriş derecesine (in-degree) dayanan topolojik sıralama algoritmasını 1962'de yayımladı.

Mühendislik açısından önemi

Giriş derecesi sıfır olan düğümleri art arda çıkarmak, yönlü döngüsüz bir çizgenin (directed acyclic graph, DAG) düğümlerini sıralar ve varsa döngüyü ortaya çıkarır.

Derste: Bölüm 14 · Çizgeler

Topolojik sıralamaDAGGiriş derecesi
JK

Joseph B. Kruskal

Minimum kapsayan ağaçlar

Minimum kapsayan ağaç (minimum spanning tree, MST) algoritmasını 1956'da yayımladı.

Mühendislik açısından önemi

Kruskal algoritması kenarları ağırlığa göre sıralar. Döngü oluşturacak kenarları ayrık kümeler (union-find) yapısıyla eler.

Derste: Bölüm 14 · Çizgeler

MSTAçgözlüAyrık kümeler
RP

Robert C. Prim

Prim algoritması

Bell Laboratuvarları'nda çalışırken minimum kapsayan ağacı tek bir düğümden başlayıp büyüten algoritmayı “Shortest connection networks and some generalizations” (1957) makalesiyle yayımladı. Aynı yöntemi Vojtěch Jarník 1930'da, Edsger W. Dijkstra da 1959'da bağımsız olarak verdi.

Mühendislik açısından önemi

Prim algoritması her adımda ağaçla ağacın dışındaki düğümler arasındaki en hafif kenarı ekler; kesim özelliği bu kenarın bir minimum kapsayan ağaçta bulunduğunu güvenceye alır. Aday kenarlar min-öncelikli kuyrukta tutulduğunda algoritma O(m log n) sürer.

Derste: Bölüm 14 · Prim Algoritması, Bölüm 14 · Kruskal ve Prim

MSTKesim özelliğiÖncelikli kuyruk
Eşleşen isim bulunamadı.