Veri yapıları: açıklamalı alıştırma soruları

İ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.

Ücretsiz alıştırma sorusuKolay

Max-heap özelliği nedir?

Sonraki soru →

Neler çalışırsınız

  1. Kolaytemel terimler ve bilgiler
  2. Ortakavramları uygulama
  3. Zorvakalar ve analiz

Veri yapıları konusunu sıfırdan öğrenin

Bundan önce: Algoritmalar ve karmaşıklık

1Veri yapısı nedir

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.

a7[0]3[1]9[2]4[3]7394∅h

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?
  1. Başa yeni bir öğe eklemek
  2. Her öğeyi bir kez ziyaret etmek
  3. i indeksindeki öğeyi okumak
  4. Öğ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.
  • Kullanımlar: yazdırma işleri, işlenmeyi bekleyen mesajlar, genişlik öncelikli arama.

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?
  1. Bir graf
  2. Bir karma tablosu
  3. Bir kuyruk
  4. 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?
  1. 20
  2. 40
  3. 70
  4. 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.

  1. 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.
  2. 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ı.
  3. Görevin ihtiyaç duyduğu diğer işlemlerin maliyetini Büyük O ile kontrol edin.
  4. İzleme (trace) sorusunda işlemleri tek tek uygulayın ve her birinden sonra durumu yazın.
  5. 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.

503070
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.

503070204060
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.

503070204060

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.
  • Dolaşımları karıştırmak. Önce-kök (preorder): düğüm ilk. Ortadan sıralı (in-order): düğüm ortada. Sonra-kök (postorder): düğüm son.
  • 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. 1, 2 ve 3 birlikte
  2. 1
  3. 2
  4. 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.

Uygulamada adım adım öğreninUygulamada adım adım öğrenin

Örnek sorular

Örnek 1Kolay

Statik dizi ile dinamik dizi arasındaki temel fark nedir?

  1. AStatik dizi daha yavaş indeks erişimine izin verir
  2. BDinamik dizi daha büyük bir bellek bloğuna taşınarak büyüyebilir
  3. CDinamik dizi elemanlarını bağlı düğümlerde saklar, bu yüzden birer birer büyüyebilir
  4. DStatik dizi yalnızca sayı saklayabilir
İpuçlarını göster
  1. Python listeleri ve Java ArrayList'leri bunlardan birinin örneğidir.
  2. İ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?

  1. ADizinin son elemanı çıkarılır
  2. BSon eleman köke taşınır ve aşağı kaydırılır
  3. CKök çıkarılır ve tüm elemanlar bir konum sola kaydırılır
  4. DYeni en küçük eleman için tüm yapraklar aranır
İpuçlarını göster
  1. Ağacı tam tutun, sonra düzeni onarın.
  2. İ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?

  1. AO(1)
  2. BO(α(n))
  3. CO(log n)
  4. DO(n)
İpuçlarını göster
  1. Ağaçlar yozlaşabilir.
  2. İ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?
  1. Veri yapısı nedir
  2. Yığınlar ve kuyruklar
  3. Ağaçlar, yığınlar (heap), karma tabloları ve graflar
  4. Adım adım yöntem
  5. Çözümlü bir örnek
  6. Sık yapılan hatalar
  7. 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.

Bu konudan önceki ve sonraki konular

Önce öğrenin

Bu konuyu içeren dersler

Bilgisayar bilimi alanında diğer konular

Yazdırılabilir çalışma kâğıdı