İpuçları ve açıklamalarla ücretsiz Veri yapıları çoktan seçmeli alıştırma soruları, üç seviyede: temel terimler ve bilgiler, kavramları uygulama, vakalar ve analiz.
Veri yapısı, verileri bellekte, belirli işlemler hızlı olsun diye düzenlemenin bir yoludur: bir öğeyi bulmak, eklemek, silmek.
Hiçbir yapı her şeyde hızlı değildir. Birini seçmek hangi işlemlerin ucuz olacağını seçmektir. Maliyetleri Büyük O ile yazılır, n öğe sayısıdır.
İki temel yapı taşı dizi ve bağlı listedir.
Dizi öğelerini belleğin tek bir bloğunda art arda saklar. Bilgisayar i. öğenin yerini hesaplayabilir, bu yüzden a[i] okumak O(1) sürer. Başa eklemek her öğeyi kaydırmak demektir: O(n).
Bağlı liste, her öğeyi bir sonraki düğüme işaretçisi olan bir düğümde saklar. Son işaretçi null’dır. Başa (h) eklemek yalnızca bir işaretçiyi değiştirir: O(1). Ama i. öğeye ulaşmak için i işaretçiyi izlemeniz gerekir: O(n).
Çift bağlı liste ayrıca önceki düğüme bir işaretçiye sahiptir, böylece iki yönde de yürüyebilirsiniz.
Kendini sına Hangi işlem dizi için O(1), tek bağlı liste için O(n)’dir?
Başa yeni bir öğe eklemek
Her öğeyi bir kez ziyaret etmek
i indeksindeki öğeyi okumak
Öğeleri tek tek saymak
Cevap: i indeksindeki öğeyi okumak. Dizi, i. öğenin adresini doğrudan hesaplar. Bağlı liste başlangıçtan i işaretçi izlemek zorundadır. Başa eklemek tersi bir durumdur: liste için ucuz, dizi için pahalı.
2Yığınlar ve kuyruklar
Yığın (stack) bir tabak yığını gibidir: yalnızca üstten eklersiniz ve çıkarırsınız. İlk giren son çıkar: LIFO.
push bir öğeyi üste koyar, pop üstteki öğeyi çıkarır, peek üsttekini çıkarmadan okur. Hepsi O(1)’dir.
Kullanımlar: bir editörün geri al işlevi, bir programın çağrı yığını, parantezlerin dengeli olduğunu denetlemek, derinlik öncelikli arama.
Kuyruk (queue) bir kasanın önündeki sıra gibidir: arkadan katılır, önden ayrılırsınız. İlk giren ilk çıkar: FIFO.
enqueue arkaya ekler, dequeue önden çıkarır. İkisi de O(1)’dir.
Deque (çift uçlu kuyruk), her iki uçta ekleme ve çıkarmaya izin verir. Öncelik kuyruğu her zaman önce en yüksek öncelikli öğeyi çıkarır; genellikle bir yığın (heap) olarak kurulur.
Kendini sına Hangi veri yapısı bir metin editörünün “geri al” düğmesine en uygundur?
Bir graf
Bir karma tablosu
Bir kuyruk
Bir yığın (stack)
Cevap: Bir yığın (stack). Geri al, en son eylemi önce geri almalıdır: son giren ilk çıkar. Kuyruk en eski eylemi önce geri alırdı.
3Ağaçlar, yığınlar (heap), karma tabloları ve graflar
Ağacın bir üst düğümü vardır, kök. Diğer her düğümün tam olarak bir ebeveyni vardır. Çocuğu olmayan düğümlere yaprak denir. n düğümlü bir ağacın n − 1 kenarı vardır.
İkili ağaçta her düğümün en fazla iki çocuğu vardır. İkili arama ağacı (BST) bir kural ekler: sol alt ağaçtaki anahtarlar düğümden küçük, sağ alt ağaçtakiler büyüktür.
BST’de arama aşağı tek bir yolu izler, bu yüzden maliyeti O(yükseklik)’tir. Dengeli bir ağaç (AVL, kırmızı-siyah) yüksekliği log₂ n civarında tutar. Sıralı eklenen anahtarlar n yüksekliğinde bir zincir oluşturur.
Yığın (heap), her ebeveynin çocuklarından küçük (min-heap) ya da büyük (max-heap) olduğu ikili ağaçtır. Minimum ya da maksimum kökte durur ve ekleme ile çıkarma O(log n) maliyetlidir.
Karma tablosu anahtar–değer çiftlerini saklar. Bir karma işlevi anahtarı bir indekse çevirir, bu yüzden ekleme ve arama ortalamada O(1) sürer. Aynı indeksli iki anahtar bir çakışmadır ve zincirleme (her göz için bir liste) ya da açık adresleme (başka bir göz deneme) ile çözülür.
Graf, yönü veya ağırlığı olabilen kenarlarla birleşen düğümlere (vertex) sahiptir. Bir komşuluk matrisi (O(V²) bellek) veya komşuluk listeleri (O(V + E)) olarak saklanır.
Kendini sına 50, 30, 70, 20 ve 40 anahtarları bu sırayla boş bir ikili arama ağacına ekleniyor. 30’un sol çocuğu nedir?
20
40
70
Sol çocuğu yoktur
Cevap: 20. 20, 50’den küçüktür, bu yüzden sola, 30’a gider. 30’dan da küçüktür, bu yüzden yine sola gider. 40, 30’dan büyüktür ve onun sağ çocuğu olur.
4Adım adım yöntem
Sorular çoğu zaman bir görevi anlatıp hangi yapının uyduğunu sorar ya da bazı işlemlerden sonra bir yapının nasıl göründüğünü sorar.
Hızlı olması gereken işlemi bulun: konuma, anahtara göre erişim, en yeni öğe, en eski öğe, en küçük öğe ya da bir aralık.
Bir yapıyla eşleştirin: indeks → dizi, anahtar → karma tablosu, en yeni → yığın (stack), en eski → kuyruk, en küçük ya da en büyük → heap, sıralı düzen ya da aralıklar → dengeli arama ağacı.
Görevin ihtiyaç duyduğu diğer işlemlerin maliyetini Büyük O ile kontrol edin.
İzleme (trace) sorusunda işlemleri tek tek uygulayın ve her birinden sonra durumu yazın.
Son durumu yapının kuralına göre kontrol edin: LIFO, FIFO, BST sırası ya da heap sırası.
5Çözümlü bir örnek
Her adımı izleyin. Açmadan önce bir sonrakini tahmin etmeye çalışın.
Çözümlü örnek
50, 30, 70, 20, 40 ve 60 anahtarları bu sırayla boş bir ikili arama ağacına ekleniyor. Ortadan sıralı (in-order) dolaşım nedir ve 60 için arama kaç karşılaştırma gerektirir?
1
Kökü ekleyin
İlk anahtar, 50, kök olur.
2
30 ve 70’i ekleyin
30, 50’den küçüktür, bu yüzden sola gider. 70, 50’den büyüktür, bu yüzden sağa gider.
3
20, 40 ve 60’ı ekleyin
20: 50’den küçük, 30’dan küçük, bu yüzden 30’un soluna. 40: 50’den küçük, 30’dan büyük, bu yüzden 30’un sağına. 60: 50’den büyük, 70’den küçük, bu yüzden 70’in soluna.
4
Ortadan sıralı dolaşın
Ortadan sıralı (in-order) dolaşım önce sol alt ağacı, sonra düğümü, sonra sağ alt ağacı ziyaret eder.
Bu 20, 30, 40, 50, 60, 70 verir: anahtarlar sıralı, BST için her zaman olduğu gibi.
5
60’ı arayın
50 ile karşılaştırın: büyük, sağa gidin. 70 ile karşılaştırın: küçük, sola gidin. 60 ile karşılaştırın: bulundu.
Arama 3 karşılaştırma gerektirir, her düzey için bir tane.
Cevap
Ortadan sıralı: 20, 30, 40, 50, 60, 70. 60 için arama 3 karşılaştırma gerektirir.
6Sık yapılan hatalar
LIFO ile FIFO’yu karıştırmak. Yığın en yeni öğeyi, kuyruk en eskisini döndürür.
Bağlı listenin indekse göre hızlı erişim verdiğini sanmak. Başlangıçtan yürümek zorundadır.
BST’nin her zaman O(log n) olduğunu varsaymak. Yalnızca dengeli ağaç öyledir; sıralı eklemeler O(n) verir.
Karma tablosunda çakışmaları unutmak. O(1) ortalamadır, en kötü durum değil.
Büyük seyrek bir graf için komşuluk matrisi kullanmak. O(V²) bellek israf eder.
Kendini sına Boş bir kuyruğa sırayla 1, 2 ve 3’ü ekliyorsunuz (enqueue). İlk dequeue hangi öğeyi döndürür?
1, 2 ve 3 birlikte
1
2
3
Cevap: 1. Kuyruk ilk giren ilk çıkar (FIFO) olduğundan 1 ilk ayrılır. 3, en yeni öğeyi döndüren bir yığın (pop) için cevap olurdu.
7Sınav soruları nasıl görünür
Kolay: anahtar terimler ve olgular. LIFO ve FIFO, düğüm, kök ya da yaprağın ne olduğu, BST kuralı, bir karma işlevinin ne yaptığı.
Orta: kavramları uygulama. Bir göreve hangi yapının uyduğu, push ve pop ya da BST eklemelerinin sonucu, ağaç dolaşımları, doğrusal yoklamalı karma tablosu, Büyük O maliyetleri.
Zor: olgular ve analiz. Dengeli ağaçlar, dizilerde heap, B-ağaçları, trie’ler, union-find, Bloom filtreleri ve LRU önbelleği gibi tasarımlar.
0 indeksinden başlayarak bir dizide saklanan heap için i indeksinin çocukları 2i + 1 ve 2i + 2’dedir, ebeveyni ⌊(i − 1) / 2⌋’dedir.
Statik dizi ile dinamik dizi arasındaki temel fark nedir?
AStatik dizi daha yavaş indeks erişimine izin verir
BDinamik dizi daha büyük bir bellek bloğuna taşınarak büyüyebilir
CDinamik dizi elemanlarını bağlı düğümlerde saklar, bu yüzden birer birer büyüyebilir
DStatik dizi yalnızca sayı saklayabilir
İpuçlarını göster
Python listeleri ve Java ArrayList'leri bunlardan birinin örneğidir.
İki yanlış cevap artık üstü çizili. Kalan ikisinden biri doğru.
Cevabı ve açıklamayı göster
Cevap neden bu
Statik dizinin boyutu sabittir; dinamik dizi dolduğunda daha büyük bir dizi ayırır ve elemanları kopyalar.
Cevap
B · Dinamik dizi daha büyük bir bellek bloğuna taşınarak büyüyebilir
Örnek 2Orta
İkili min-heap'te extract-min nasıl çalışır?
ADizinin son elemanı çıkarılır
BSon eleman köke taşınır ve aşağı kaydırılır
CKök çıkarılır ve tüm elemanlar bir konum sola kaydırılır
DYeni en küçük eleman için tüm yapraklar aranır
İpuçlarını göster
Ağacı tam tutun, sonra düzeni onarın.
İki yanlış cevap artık üstü çizili. Kalan ikisinden biri doğru.
Cevabı ve açıklamayı göster
Cevap neden bu
Son eleman kökteki boşluğu doldurur ve öbek özelliği sağlanana kadar küçük çocuğuyla yer değiştirir; bu O(log n) sürer.
Cevap
B · Son eleman köke taşınır ve aşağı kaydırılır
Örnek 3Zor
Rütbeye göre birleştirme (union by rank) veya yol sıkıştırma olmadan, n elemanlı bir union-find yapısında tek bir find işleminin en kötü durum maliyeti nedir?
AO(1)
BO(α(n))
CO(log n)
DO(n)
İpuçlarını göster
Ağaçlar yozlaşabilir.
İki yanlış cevap artık üstü çizili. Kalan ikisinden biri doğru.
Cevabı ve açıklamayı göster
Cevap neden bu
Saf birleştirmeler ağaçları uzun bir zincire bağlayabilir, bu nedenle find n − 1 ebeveyn işaretçisini izleyebilir; iki sezgisel yöntem bunu sabite yaklaştırır.
Cevap
D · O(n)
Sorular ve cevaplar
Veri yapıları nedir?
Hiçbir yapı her şeyde hızlı değildir. Birini seçmek hangi işlemlerin ucuz olacağını seçmektir. Maliyetleri Büyük O ile yazılır, n öğe sayısıdır.
İki temel yapı taşı dizi ve bağlı listedir.
Veri yapıları adım adım nasıl öğrenilir?
Veri yapısı nedir
Yığınlar ve kuyruklar
Ağaçlar, yığınlar (heap), karma tabloları ve graflar
Adım adım yöntem
Çözümlü bir örnek
Sık yapılan hatalar
Sınav soruları nasıl görünür
Veri yapıları alıştırmaları neleri kapsar?
Kolay: temel terimler ve bilgiler
Orta: kavramları uygulama
Zor: vakalar ve analiz
Her sorunun dört seçeneği vardır ve yalnızca biri doğrudur. Takıldınız mı? Önce küçük bir ipucu açın, tam açıklamayı ise yalnızca gerektiğinde.
Çalışma nasıl işler
Her sorunun dört seçeneği vardır ve yalnızca biri doğrudur.
Takıldınız mı? Önce küçük bir ipucu açın, tam açıklamayı ise yalnızca gerektiğinde.
İlerlemeniz, hatalarınız ve kaydettiğiniz sorular saklanır; böylece sınavdan önce gözden geçirebilirsiniz.