Final tekrarı: hangi yapı, hangi algoritma, hangi Big-O
Dönemin tamamı tek sayfada: problem tipine göre yapı/algoritma seçme tablosu, bütün işlemlerin Big-O özeti ve her konudan birer karışık final sorusu.
Bu sayfa finalden önceki son tur. Konu anlatımı yok; her konunun “bunu bilmeden sınava girme” kısmını, karar tablolarını ve Big-O özetini bir araya topluyor. Her bölümün ayrıntısı kendi haftasında. Final soruları genelde iki tür: iz soruları (ağaç, heap dizisi, hash tablosu, graf sırası, Dijkstra tablosu, Huffman kodu, MST kenarları) ve seçim soruları (“bu problem için hangi yapı, neden, karmaşıklığı ne?”). Aşağıdaki 12 soru her konudan birer tane.
Altın kurallar:
- İz sorusunda her adımı yaz. Ara durum puan getirir, son cevap yanlış olsa bile.
- Eşitlik kuralını yaz. Soru belirtmiyorsa “ties by smallest label” gibi bir satır ekle.
- Big-O sorarken en kötü mü ortalama mı, sor. BST ve hash’te ikisi çok farklı.
- Dengeli/dengesiz ayrımını unutma. “BST’de arama O(log n)” sadece dengeliyse doğru.
Problem → yapı / algoritma karar tablosu
| İhtiyaç | Seç | Neden |
|---|---|---|
| Anahtara göre ara/ekle/sil, sıra önemsiz | Hash tablosu | Ortalama |
| Sıralı tut, aralık sorgusu, min/max, k. eleman | AVL / kırmızı-siyah ağaç | En kötü , inorder sıralı |
| Diskte çok büyük sıralı veri (veritabanı indeksi) | B-ağacı | Düğüm başına çok anahtar, az disk erişimi |
| Son erişilenlere tekrar tekrar erişim | Splay ağacı | Erişilen köke gelir, amortize |
| Hep en küçüğü/en acili al | Binary heap (PriorityQueue) | findMin , deleteMin |
| n elemandan en küçük k tanesi | Boyutu k olan max-heap ya da buildHeap + k deleteMin | ya da |
| Genel sıralama, kararlı | Merge sort | garanti |
| Yerinde sıralama, ortalama en hızlı | Quicksort | ortalama |
| Küçük aralıklı tam sayılar | Counting / radix sort | , |
| Ağırlıksız en kısa yol | BFS | |
| Ağırlık ≥ 0 en kısa yol | Dijkstra | |
| Negatif kenar olabilir | Bellman-Ford | |
| Görev sırası, bağımlılıklar | Topolojik sıralama (Kahn / DFS) | |
| Tüm düğümleri en ucuza bağla | Prim / Kruskal | |
| İki düğüm aynı bileşende mi | Union-find | Neredeyse |
| Metni sıkıştır | Huffman | |
| Çakışmayan en çok etkinlik | Greedy: en erken biten |
Big-O özeti
Sıralama
| Algoritma | En iyi | Ortalama | En kötü | Ek bellek | Kararlı |
|---|---|---|---|---|---|
| Insertion | evet | ||||
| Merge | evet | ||||
| Quick | hayır | ||||
| Heap | hayır | ||||
| Counting | evet | ||||
| Radix (LSD) | evet |
Karşılaştırmaya dayalı her sıralamanın en kötü durumu : karar ağacının yaprağı var, yüksekliği en az .
Ağaçlar, heap, hash
| Yapı | Arama | Ekleme | Silme | Not |
|---|---|---|---|---|
| BST | ort. , en kötü | aynı | aynı | Sıralı girdide zincire döner |
| AVL | Yükseklik ≈ | |||
| Kırmızı-siyah | Yükseklik ≤ , daha az rotasyon | |||
| B-ağacı (derece m) | disk erişimi | aynı | aynı | Tüm yapraklar aynı seviyede |
| Splay | amortize | aynı | aynı | Tek işlem olabilir |
| Binary heap | deleteMin | findMin , buildHeap | ||
| Hash tablosu | ort. , en kötü | aynı | aynı | Rehash , amortize |
Graf ve greedy
| Algoritma | Süre | Hatırlatma |
|---|---|---|
| BFS / DFS | Matrisle | |
| Topolojik sıralama | Sadece DAG | |
| Dijkstra (heap) | Negatif kenar yok | |
| Bellman-Ford | V−1 tur, V. tur negatif döngü testi | |
| Prim (heap) | Tek ağaç büyür | |
| Kruskal | Sıralama + union-find | |
| Huffman | n−1 birleştirme | |
| Etkinlik seçimi | Bitişe göre sırala |
TUZAK · “heap’te arama O(log n)”. Heap sadece kök için sıra garantisi verir. Rastgele bir anahtarı aramak . Arama gerekiyorsa dengeli BST ya da hash.
Konu konu kontrol listesi
Ağaçlar (2-4. hafta). Preorder: kök-sol-sağ. Inorder: sol-kök-sağ, BST’de sıralı çıkar. Postorder: sol-sağ-kök. Level-order: kuyrukla. Yükseklik: boş ağaç −1, tek düğüm 0. BST silmede üç durum: yaprak (sil), tek çocuk (çocuğu bağla), iki çocuk (ardılı kopyala, ardılı sil).
Dengeli ağaçlar (5-6). AVL’de ekleme yolundaki ilk dengesiz düğümde rotasyon yap. Yeni anahtar dengesiz düğümün sol çocuğunun solundaysa LL (sağa tek rotasyon), sağ çocuğunun sağındaysa RR (sola tek), iç taraflardaysa LR/RL (çift). Kırmızı-siyah: kök siyah, kırmızının çocuğu kırmızı olamaz, her yolda eşit sayıda siyah. Amca kırmızıysa renk değiştir, siyahsa rotasyon.
Heap ve öncelik kuyruğu (7-8). Yapı özelliği: tam ağaç (complete). Sıra özelliği: ebeveyn ≤ çocuk (min-heap). Ekleme sonda başlar ve yukarı çıkar; deleteMin son elemanı köke koyar, küçük çocukla aşağı iner. buildHeap n/2’den 1’e percolateDown, . Java PriorityQueue varsayılan olarak min-heap’tir.
Hashing (9). Load factor . Ayrı zincirleme (separate chaining) ile iyi çalışır. Açık adreslemede (open addressing) tut. Doğrusal yoklama birincil kümelenme, karesel yoklama ikincil kümelenme yapar. Çift hash’te ikinci fonksiyon asla 0 döndürmemeli. Tablo dolunca yaklaşık iki katı büyüklükte bir asal boyuta rehash.
Graflar (10-11). BFS kuyruk, DFS yığın/özyineleme. Dijkstra her adımda en küçük bilinmeyeni seçer. Yönlü döngü = gri düğüme kenar.
Greedy ve MST (12-13). Greedy’nin yanlışlığı tek karşı örnekle gösterilir. Kruskal döngü kuran kenarı reddeder. Prim’in tablosunda değer kenar ağırlığıdır, yol toplamı değil.
Sınav sabahı ipuçları
1. min-heap mi max-heap mi? kök 0 mı 1 mi?
2. Hash: M, h(k), yoklama türü?
3. Graf: yönlü mü? komşu sırası? başlangıç?
4. Huffman/Kruskal: eşitlik kuralı?
5. Ara durumları yaz, cevabı kutuya al
Sık yapılan hatalar
| Yanlış düşünce | Doğrusu |
|---|---|
| BST’de arama her zaman | Sadece dengeliyse; en kötü |
| AVL’de kökte rotasyon yapılır | Ekleme yolundaki ilk dengesiz düğümde |
| deleteMin’de büyük çocukla yer değiştir | Min-heap’te KÜÇÜK çocukla |
| buildHeap | Floyd yöntemi |
| Hash’te silinen hücreyi boş yap | Açık adreslemede “silindi” işareti (lazy deletion) |
| Dijkstra negatif kenarla çalışır | Bellman-Ford kullan |
| Prim tablosunda d[v] + w | Prim’de sadece w |
| Radix sort her geçişte herhangi bir sıralama kullanabilir | Geçişler KARARLI olmalı |
| Counting sort da ile sınırlı | Karşılaştırma yapmaz, sınıra tabi değil |
Kendini test et
Sınavdaki gibi İngilizce sorular. Önce kâğıt kalemle çöz, sonra cevabı aç.
Insert 50, 30, 70, 20, 40, 60, 80, 35 into an empty BST. Give the preorder traversal. Then delete 30 (two children: replace with the inorder successor) and give the new preorder.
Cevabı göster
50
/ \
30 70
/ \ / \
20 40 60 80
/
3530'un iki çocuğu var. Ardılı (successor) sağ alt ağacın en küçüğü: 35. 30'un yerine 35 yazılır, 35 eski yerinden silinir (yaprak). Yeni preorder: 50 35 20 40 70 60 80. Inorder her zaman sıralı: 20 35 40 50 60 70 80.Insert 10, 20, 30, 40, 50, 25 into an empty AVL tree. Which rotations happen, and what is the final preorder traversal?
Cevabı göster
30 eklenince 10'un BF'si -2, sağ-sağ: 10'da sola tek rotasyon, kök 20.
50 eklenince 30'un BF'si -2, sağ-sağ: 30'da sola rotasyon, 20(10, 40(30, 50)).
25 eklenince 20'nin BF'si h(10) - h(40) = 0 - 2 = -2. 25, 40'ın SOL alt ağacına girdi: sağ-sol (RL). Önce 40'ta sağa, sonra 20'de sola rotasyon:
30
/ \
20 40
/ \ \
10 25 50Insert 15, 9, 12, 4, 7, 10, 2 one by one into an empty binary min-heap (array, root at index 1). Give the final array.
Cevabı göster
Her eklemede sona koy, ebeveyninden küçük oldukça yukarı çık (percolate up):
15 [15]
9 [9, 15]
12 [9, 15, 12]
4 [4, 9, 12, 15]
7 [4, 7, 12, 15, 9]
10 [4, 7, 10, 15, 9, 12]
2 [2, 7, 4, 15, 9, 12, 10]Son adımda 2 indeks 7'ye girer, ebeveyn 3 (10) ile, sonra ebeveyn 1 (4) ile yer değiştirir.On the heap [2, 7, 4, 15, 9, 12, 10], perform deleteMin twice. Give the array after each.
Cevabı göster
1. deleteMin: 2 çıkar, son eleman 10 köke gelir, küçük çocukla aşağı iner: 4 ile yer değiştirir, sonra 12 ile karşılaştırılır, 10 < 12 durur. 2. deleteMin: 4 çıkar, 12 köke gelir; çocuklar 7 ve 10, 7 yukarı; 12'nin yeni çocukları 15 ve 9, 9 yukarı. Sonuç [7, 9, 10, 15, 12].
Run buildHeap (min-heap, Floyd's method, root at index 1) on [9, 4, 7, 1, 8, 2, 6]. Give the array after each percolateDown call and the final heap.
Cevabı göster
n/2 = 3'ten 1'e geriye doğru percolateDown. İndeks 3 (7): çocuklar 2 ve 6, 2 yukarı. İndeks 2 (4): çocuklar 1 ve 8, 1 yukarı. İndeks 1 (9): çocuklar 1 ve 2, 1 yukarı; 9 indeks 2'de, çocuklar 4 ve 8, 4 yukarı; 9 indeks 4'te yaprak. Toplam süre ; tek tek eklemek olurdu.
Hash table of size M = 11, h(k) = k mod 11, linear probing. Insert 22, 13, 35, 4, 46, 15. At which index does each key end up?
Cevabı göster
h değerleri: 22→0, 13→2, 35→2, 4→4, 46→2, 15→4. 35: 2 dolu, 3. 46: 2, 3, 4 dolu, 5. 15: 4, 5 dolu, 6. Doğrusal yoklama 2-6 arasında bir küme (primary clustering) oluşturdu.
Same keys and table, but quadratic probing (h(k) + i², i = 0, 1, 2, ...). Where do 46 and 15 go?
Cevabı göster
46: 2 dolu, 2+1 = 3 dolu, 2+4 = 6 boş. 15: 4 dolu, 4+1 = 5 boş. Diğerleri doğrusal ile aynı: 22→0, 13→2, 35→3, 4→4. Karesel yoklama kümeyi dağıtır; M asal ve λ ≤ 0.5 iken boş yer bulmak garanti.
LSD radix sort (base 10) on [213, 85, 402, 77, 160, 39, 518]. Give the array after the first pass (ones digit) and after the second pass (tens digit).
Cevabı göster
Her geçiş KARARLI (stable) kova dağıtımıdır. Birler: 0 (160), 2 (402), 3 (213), 5 (85), 7 (77), 8 (518), 9 (39). Onlar: 0 (402), 1 (213, 518), 3 (39), 6 (160), 7 (77), 8 (85). Üçüncü geçiş sıralı diziyi verir: 39 77 85 160 213 402 518. Süre .
DAG on 0..6 with edges 0→2, 1→2, 1→3, 2→4, 3→4, 4→5, 3→6, 6→5. Run Kahn's algorithm, always removing the smallest vertex with in-degree 0. Give the topological order.
Cevabı göster
Başta in-degree 0 olanlar: 0, 1. 0 çıkar (2'nin derecesi 1). 1 çıkar: 2 ve 3 sıfıra iner. 2 çıkar (4 → 1). 3 çıkar: 4 ve 6 sıfır. 4 çıkar (5 → 1). 6 çıkar: 5 sıfır. 5 çıkar.
Directed graph: S→A 7, S→B 2, B→A 3, A→C 1, B→C 8, C→D 2, B→D 9. Dijkstra from S: final distances to A, B, C, D?
Cevabı göster
Sıra S, B, A, C, D. B (2) A'yı 7'den 5'e, C'yi 10, D'yi 11 yapar. A (5) C'yi 6'ya indirir. C (6) D'yi 8'e indirir. Doğrudan kenarlar (S→A 7, B→D 9) daha pahalı.
Huffman coding with frequencies 3, 5, 6, 8, 20. What is the total number of encoded bits?
Cevabı göster
Birleştirmeler: 3+5 = 8, 6+8 = 14, 8+14 = 22, 20+22 = 42. Toplam bit = iç düğüm ağırlıkları toplamı = 8+14+22+42 = 86. Eşitlikte (6 ile hangi 8 birleşir) kodlar değişebilir, toplam bit değişmez.
Choose the best structure for each task: (a) repeatedly get the most urgent job, (b) check membership of a word in a dictionary in average O(1), (c) keep keys sorted with guaranteed O(log n) insert and search, (d) print all keys in sorted order and find the k-th smallest quickly.
Cevabı göster
(a) findMin , deleteMin . (b) Hash tablosu ortalama ama sırayı tutmaz. (c) Düz BST sıralı girdide 'e bozulur; dengeli ağaç en kötü durumda . (d) Inorder dolaşım sıralı verir; heap ve hash sıralı çıktı vermez.
Doğrulama: Tüm iz cevapları (BST ekleme/silme dolaşımları, AVL rotasyonları, heap ekleme/deleteMin/buildHeap dizileri, doğrusal ve karesel yoklamalı hash tabloları, LSD radix geçişleri, Kahn topolojik sırası, Dijkstra mesafeleri, Huffman toplam biti) verify/SEN2212/W14.java ile çalıştırılıp çıktıdan alındı (java W14.java).