Mülakat soruları · Kitap 12
Veri Yapıları mülakat soruları
36 sayfadan 144 soru, her birinin kısa bir cevabıyla. Önce kendi cevabınızı söyleyin, sonra soruyu açıp kontrol edin.
s. 1 · 4 soru
Açgözlü Algoritma
1
Açgözlü algoritma (greedy algorithm) nedir?
Açgözlü algoritma, önceki kararları yeniden düşünmeden her adımda o an en iyi görünen seçimi yaparak çözümü adım adım kuran bir algoritmadır.
2
Açgözlü algoritma ne zaman optimal cevabı verir?
Problem açgözlü seçim özelliğine, yani yerel olarak en iyi bir seçimin en iyi genel çözümü asla dışarıda bırakmadığı bir yapıya ve optimal alt yapıya sahip olduğunda. Aralık zamanlaması, minimum kapsayan ağaçlar ve Huffman kodlaması kanıtlanmış durumlardır; diğer birçok problemde açgözlü yöntem yalnızca bir yaklaşık çözüm verir.
3
Açgözlü algoritma ile dinamik programlama arasındaki fark nedir?
Açgözlü algoritma, o an en iyi görünene göre adım başına geri döndürülemez tek bir seçim yapar. Dinamik programlama ise alt problemlerin saklanmış cevaplarını kullanarak tüm seçimleri değerlendirir; bu daha çok zaman ve bellek harcar ama açgözlü seçimlerin başarısız olduğu yerde optimumu bulur.
4
Dijkstra algoritması açgözlü müdür?
Evet. Her adımda bilinen en küçük uzaklıklı ziyaret edilmemiş düğümü kesinleştirir; bu açgözlü bir seçimdir ve hiçbir kenar ağırlığı negatif olmadığı sürece doğru olduğu kanıtlanmıştır.
s. 2 · 4 soru
Ağaç
1
Ağaç (tree) veri yapısı nedir?
Ağaç, kenarlarla bağlı düğümlerden oluşan hiyerarşik bir veri yapısıdır; en üstte tek bir kök düğüm ve altında dallanan çocuk düğümler bulunur.
2
Ağaç ile çizge arasındaki fark nedir?
Ağaç kısıtlı bir çizgedir: bağlantılıdır, döngü içermez ve herhangi iki düğüm arasında tam olarak bir yol vardır. Çizge ise döngülere, kopuk parçalara ve herhangi bir bağlantı örüntüsüne sahip olabilir.
3
İkili ağaç ile ikili arama ağacı arasındaki fark nedir?
İkili ağaç yalnızca her düğümü en fazla iki çocukla sınırlar. İkili arama ağacı ise küçük değerlerin solda, büyük değerlerin sağda olması kuralını ekler; hızlı aramayı mümkün kılan da budur.
4
Bir ağacın dengeli olması ne demektir?
Dengeli ağaç, her düğümün alt ağaçlarının yüksekliğini benzer tutar; böylece tüm ağaç yaklaşık log n seviye yüksekliğinde kalır. Bu, O(log n) işlemleri garanti eder; dengesiz bir ağaç ise n seviye yüksekliğe çıkıp bir bağlı liste gibi davranabilir.
s. 3 · 4 soru
B-Tree
1
B-tree nedir?
B-tree, düğümleri çok sayıda sıralı anahtar ve çocuk tutan, kendini dengeleyen arama ağacıdır; sığ kaldığından aramalar çok az disk ya da sayfa okuması ister.
2
B-tree ile ikili arama ağacı arasındaki fark nedir?
İkili arama ağacı düğümü bir anahtar tutar ve en fazla iki çocuğu vardır; bu yüzden büyük bir ağaç çok sayıda seviye derinliğindedir. B-tree düğümü ise çok sayıda anahtar tutar ve çok sayıda çocuğu vardır; bu da ağacı yalnızca birkaç seviye derinlikte tutar ve depolamadan yapılan yavaş okumaları en aza indirir.
3
B-tree ile B+ tree arasındaki fark nedir?
B-tree'de anahtarlar ve değerleri herhangi bir düğümde bulunabilir. B+ tree'de iç düğümler yalnızca aramaya yön verir ve tüm değerler, sıralı olarak bağlı yapraklarda yaşar; bu da aralık taramalarını hızlandırır. Çoğu veritabanı indeksi B+ tree'dir.
4
B-tree'deki B neyi ifade eder?
Kimse tam olarak bilmiyor. Yapıyı 1970 civarında icat eden Rudolf Bayer ve Edward McCreight bunu hiçbir zaman tanımlamadı; yaygın tahminler arasında balanced (dengeli), broad (geniş), Bayer ve o sırada çalıştıkları yer olan Boeing bulunuyor.
s. 4 · 4 soru
Bağlı Liste
1
Bağlı liste (linked list) nedir?
Bağlı liste, öğeleri ayrı düğümlerde saklayan bir veri yapısıdır; her düğüm bir değer ile zincirdeki sonraki düğüme bir referans tutar.
2
Ne zaman dizi yerine bağlı liste kullanmalıyım?
Uçlara sık sık öğe ekliyor ya da uçlardan öğe siliyorsanız, ya da referansını zaten elinizde tuttuğunuz düğümlerin yanına ekleme yapıyorsanız ve nadiren bir indekse atlamanız gerekiyorsa bağlı liste kullanın. Günlük işlerin çoğunda dizi ya da dilinizin yerleşik listesi daha basit ve daha hızlıdır.
3
Tek yönlü ile çift yönlü bağlı liste arasındaki fark nedir?
Tek yönlü bağlı listede her düğüm yalnızca sonraki düğüme işaret eder. Çift yönlü bağlı listede her düğüm ayrıca öncekine de işaret eder; bu daha fazla bellek kullanır ama geriye doğru yürümenize ve bilinen bir düğümü O(1)'de silmenize olanak tanır.
4
Bağlı listeye ekleme O(1) mi yoksa O(n) mi?
Kendisinden önceki düğümün referansına zaten sahipseniz ya da başa ekliyorsanız yeni bir düğümü bağlamak O(1)'dir. Rastgele bir konumu bulmak önce O(n) sürer; dolayısıyla belirli bir indekse eklemek toplamda O(n)'dir.
s. 5 · 4 soru
Bloom Filter
1
Bloom filter nedir?
Bloom filter, çok az bellek kullanarak bir öğenin kümede kesinlikle olmadığını ya da büyük olasılıkla olduğunu söyleyen kompakt, olasılıksal bir veri yapısıdır.
2
Bloom filter yanlış negatif verebilir mi?
Hayır. Bir öğe eklendiyse tüm bitleri 1 olarak ayarlanmıştır; bu yüzden filtre onu her zaman olası var olarak bildirir. Yalnızca, başka öğelerin tesadüfen aynı bitlerin hepsini ayarlamış olması durumunda yanlış pozitifler mümkündür.
3
Bloom filter ne kadar büyük olmalı?
Kaç öğe beklediğinize ve hangi yanlış pozitif oranını kabul edebileceğinize bağlıdır. Genel bir kural olarak öğe başına yaklaşık 10 bit ve 7 hash fonksiyonu yüzde 1'in hemen altında bir oran verir ve öğe başına eklenen her 5 bit bu oranı yaklaşık on kat düşürür.
4
Bloom filter ile hash set arasındaki fark nedir?
Hash set her öğeyi saklar ve üyeliği kesin olarak yanıtlar, ancak tüm öğeler için bellek ister. Bloom filter yalnızca bit sakladığı için çok daha küçüktür, ancak yanlış pozitif döndürebilir ve temel biçimiyle öğeleri listeleyemez ya da silemez.
s. 6 · 4 soru
Böl ve Yönet
1
Böl ve yönet (divide and conquer) nedir?
Böl ve yönet, bir problemi daha küçük bağımsız parçalara bölen, her birini özyinelemeyle çözen ve sonuçları birleştiren bir algoritma tasarım tekniğidir.
2
Böl ve yönet ile dinamik programlama arasındaki fark nedir?
İkisi de bir problemi alt problemlere böler, ancak böl ve yönet alt problemler bağımsız olduğunda çalışır ve her biri bir kez çözülür. Dinamik programlama çakışan alt problemler içindir ve yeniden hesaplanmasınlar diye cevaplarını saklar.
3
İkili arama böl ve yönet midir?
Evet, basit bir biçimde: arama aralığını ikiye böler ve birleştirme adımı olmadan yalnızca bir yarıda devam eder. Bazı ders kitapları bu özel duruma decrease and conquer der.
4
Hangi sıralama algoritmaları böl ve yönet kullanır?
Klasik olanlar merge sort ve quicksort'tur. Merge sort asıl işini birleştirirken, sıralı yarıları birleştirerek yapar; quicksort ise bölerken, öğeleri bir pivot etrafında bölümleyerek yapar.
s. 7 · 4 soru
Bubble Sort
1
Bubble sort nedir?
Bubble sort (kabarcık sıralaması), sırası bozuk komşu öğeleri yer değiştiren basit bir sıralama algoritmasıdır; her geçiş kalan en büyük değeri sona taşır.
2
Bubble sort neden yavaştır?
Çünkü öğeleri bir seferde yalnızca bir konum taşır ve n öğe üzerinde yaklaşık n geçişe ihtiyaç duyabilir; bu da O(n²) karşılaştırma demektir. Girdiyi iki katına çıkarmak işi kabaca dört katına çıkarır.
3
Bubble sort kararlı mı?
Evet. Komşuları yalnızca soldaki kesinlikle daha büyük olduğunda yer değiştirir; bu yüzden eşit öğeler asla birbirinin önüne geçmez ve ilk sıralarını korur.
4
Bubble sort ile insertion sort arasındaki fark nedir?
İkisi de en kötü durumda O(n²)'dir. Bubble sort her geçişte bütün liste boyunca komşuları yer değiştirir; insertion sort ise sıralı bir ön kısım kurar ve her yeni öğeyi yerine yerleştirir; bu da genellikle çok daha az işlem yapar.
s. 8 · 4 soru
Çizge
1
Çizge (graph) veri yapısı nedir?
Çizge, kenarlarla bağlı düğümlerden (köşelerden) oluşan ve yollar, arkadaşlıklar ve bağımlılıklar gibi ilişkileri modellemekte kullanılan bir veri yapısıdır.
2
Çizge ile ağaç arasındaki fark nedir?
Ağaç, ek kuralları olan bir çizgedir: bağlantılıdır, döngü içermez ve genellikle tek bir kökü vardır. Çizge ise döngülere, birkaç kopuk parçaya ve herhangi bir bağlantı örüntüsüne sahip olabilir.
3
Döngüsüz yönlü çizge (DAG) nedir?
DAG, döngüsü olmayan yönlü bir çizgedir; yani kenarları izlemek sizi asla başladığınız yere geri götüremez. DAG'lar derleme adımları, veri pipeline'ları ve Git'teki commit geçmişi gibi bağımlılıkları modeller.
4
Ne zaman DFS yerine BFS kullanmalıyım?
Başlangıçtan uzaklık sırasına göre düğümleri keşfettiği için kenar sayısına göre en kısa yola ihtiyaç duyduğunuzda genişlik öncelikli aramayı kullanın. Tüm yolları keşfetmek, döngüleri bulmak ya da bağımlılıkları sıralamak için derinlik öncelikli aramayı kullanın; ikisi de O(V + E) sürede çalışır.