📐 Problem Kategorileri
Bu sayfada otomata teorisinde sıkça karşılaşılan pratik problemleri ve çözüm tekniklerini bulabilirsiniz.
🤖 1. DFA Tasarım Problemleri
Problem 1: Belirli Bir Sembolle Başlayan Kelimeler
Soru: Σ = {0, 1} alfabesi üzerinde, 1 ile başlayan tüm kelimeleri kabul eden DFA tasarlayın.
Çözüm:
Durum Kümesi: Q = {q₀, q₁, q₂}
Başlangıç: q₀
Kabul Durumları: F = {q₁}
Geçiş Fonksiyonu:
- δ(q₀, 0) = q₂ (reddedildi, 0 ile başladı)
- δ(q₀, 1) = q₁ (kabul, 1 ile başladı)
- δ(q₁, 0) = q₁ (kabul durumunda kal)
- δ(q₁, 1) = q₁ (kabul durumunda kal)
- δ(q₂, 0) = q₂ (red durumunda kal)
- δ(q₂, 1) = q₂ (red durumunda kal)
✅ 3 durumlu DFA: İlk sembolü kontrol et ve sonuç durumda kal
Problem 2: Çift Sayıda Belirli Sembol
Soru: Σ = {a, b} üzerinde, çift sayıda 'a' içeren kelimeleri kabul eden DFA tasarlayın.
Çözüm:
Durum Kümesi: Q = {q₀, q₁}
• q₀ = çift sayıda 'a' (kabul)
• q₁ = tek sayıda 'a' (red)
Geçiş Fonksiyonu:
- δ(q₀, a) = q₁ (çift → tek)
- δ(q₀, b) = q₀ (çift → çift)
- δ(q₁, a) = q₀ (tek → çift)
- δ(q₁, b) = q₁ (tek → tek)
✅ 2 durumlu DFA: 'a' sayısının paritesini tut
Problem 3: 3'e Bölünebilen Sayılar
Soru: İkili sayı sisteminde yazılan, 3'e tam bölünebilen sayıları kabul eden DFA tasarlayın.
Çözüm:
Fikir: Her durumu "mod 3" değerine göre tanımla
Durum Kümesi: Q = {q₀, q₁, q₂}
• q₀: sayı ≡ 0 (mod 3) - KABUL
• q₁: sayı ≡ 1 (mod 3)
• q₂: sayı ≡ 2 (mod 3)
Geçiş Fonksiyonu:
Yeni bit eklendiğinde: yeni_değer = (eski_değer × 2 + bit) mod 3
- δ(q₀, 0) = q₀ (0×2+0 = 0 mod 3 = 0)
- δ(q₀, 1) = q₁ (0×2+1 = 1 mod 3 = 1)
- δ(q₁, 0) = q₂ (1×2+0 = 2 mod 3 = 2)
- δ(q₁, 1) = q₀ (1×2+1 = 3 mod 3 = 0)
- δ(q₂, 0) = q₁ (2×2+0 = 4 mod 3 = 1)
- δ(q₂, 1) = q₂ (2×2+1 = 5 mod 3 = 2)
✅ 3 durumlu DFA: Mod 3 değerini takip et
🔄 2. Düzenli İfade Problemleri
Problem 4: Düzenli İfadeden Dil Çıkarma
Soru: (a+b)*abb düzenli ifadesinin tanıdığı dili açıklayın.
Çözüm:
Analiz:
- (a+b)* → a ve b'lerden oluşan herhangi bir kelime (ε dahil)
- abb → 'abb' ile bitme zorunluluğu
Dil: L = {w | w, 'abb' ile biten kelimelerdir}
Örnekler:
- ✅ abb
- ✅ aabb
- ✅ babbabb
- ✅ aababb
- ❌ ab (abb ile bitmiyor)
- ❌ abba (abb ile bitmiyor)
✅ 'abb' ile biten tüm kelimeler
Problem 5: Dile Düzenli İfade Yazma
Soru: Σ = {0, 1} üzerinde, en az bir 0 ve en az bir 1 içeren kelimeler için düzenli ifade yazın.
Çözüm:
Yaklaşım: Hem 0 hem 1 içermeli
Yöntem 1: (0+1)*0(0+1)*1(0+1)* + (0+1)*1(0+1)*0(0+1)*
• Önce 0, sonra 1 VEYA önce 1, sonra 0
Yöntem 2 (Basit):
0*(10*)*1(0+1)* + 1*(01*)*0(0+1)*
Test:
- ✅ 01 → kabul
- ✅ 10 → kabul
- ✅ 001 → kabul
- ✅ 1100 → kabul
- ❌ 000 → red (1 yok)
- ❌ 111 → red (0 yok)
✅ Birden fazla doğru cevap var
Problem 6: Düzenli İfade Eşitliği
Soru: (a*b*)* = (a+b)* eşitliği doğru mudur? İspatlayın.
Çözüm:
Sol Taraf: (a*b*)*
- a*b* → önce a'lar, sonra b'ler (aaabbb gibi)
- (a*b*)* → bunların tekrarı
- Üretebilir: ε, a, b, aa, ab, ba, bb, aab, abb, ...
Sağ Taraf: (a+b)*
- a ve b'lerin herhangi bir sırada tekrarı
- Üretebilir: ε, a, b, aa, ab, ba, bb, aab, abb, ...
Karşılaştırma:
Her iki ifade de Σ = {a, b} üzerindeki TÜM kelimeleri üretir.
Örnek: "aba" kelimesi:
- Sol: (a*b*)* → (a)()(b)()(a) ✅
- Sağ: (a+b)* → a·b·a ✅
✅ DOĞRU: (a*b*)* = (a+b)*
🔀 3. NFA ve Dönüşüm Problemleri
Problem 7: NFA Tasarımı
Soru: "ab" veya "ba" içeren kelimeleri kabul eden NFA tasarlayın.
Çözüm:
NFA Avantajı: Nondeterminizm sayesinde daha basit
Durum Kümesi: Q = {q₀, q₁, q₂, q₃, q₄, q₅}
Strateji: İki paralel yol
- Yol 1: "ab" arıyor (q₀ → q₁ → q₂)
- Yol 2: "ba" arıyor (q₀ → q₃ → q₄)
Geçişler:
- δ(q₀, a) = {q₀, q₁} (devam et veya "ab" yoluna gir)
- δ(q₀, b) = {q₀, q₃} (devam et veya "ba" yoluna gir)
- δ(q₁, b) = {q₂} ("ab" bulundu!)
- δ(q₂, a) = {q₂} (kabul durumunda kal)
- δ(q₂, b) = {q₂}
- δ(q₃, a) = {q₄} ("ba" bulundu!)
- δ(q₄, a) = {q₄} (kabul durumunda kal)
- δ(q₄, b) = {q₄}
Kabul: F = {q₂, q₄}
✅ NFA ile DFA'dan daha az durumla çözülebilir
Problem 8: ε-NFA Kullanımı
Soru: (a+b)*c düzenli ifadesini ε-NFA'ya çevirin.
Çözüm (Thompson İnşası):
Adım 1: a ve b için temel NFA'lar
Adım 2: a+b (birleşim) için ε-geçişlerle birleştir
Adım 3: (a+b)* için döngü ekle (ε-geçişle)
Adım 4: ...c ekle
Sonuç NFA:
- q₀ --ε--> q₁ (a veya b döngüsüne)
- q₁ --a--> q₂ --ε--> q₁ (döngü)
- q₁ --b--> q₃ --ε--> q₁ (döngü)
- q₁ --ε--> q₄ (döngüden çık)
- q₄ --c--> q₅ (kabul durumu)
✅ Thompson metoduyla sistematik inşa
🔍 4. Pompalama Lemması Problemleri
Problem 9: Düzenli Olmayan Dil İspatı
Soru: L = {aⁿbⁿ | n ≥ 0} dilinin düzenli olmadığını pompalama lemmasıyla gösterin.
Çözüm:
Varsayım: L düzenli olsun.
Adım 1: p (pompalama uzunluğu) var olsun.
Adım 2: w = aᵖbᵖ seçelim (|w| = 2p ≥ p)
Adım 3: Pompalama lemmasına göre w = xyz şeklinde ayrılabilir:
- |y| > 0
- |xy| ≤ p
- ∀i ≥ 0, xy^iz ∈ L
Adım 4: |xy| ≤ p olduğundan, xy sadece a'lardan oluşur.
Dolayısıyla y = aᵏ (k > 0)
Adım 5: i = 2 için xy²z'yi kontrol edelim:
xy²z = aᵖ⁺ᵏbᵖ (a sayısı p+k, b sayısı p)
p+k > p olduğundan, xy²z ∉ L
Çelişki! Dolayısıyla L düzenli değildir.
✅ L = {aⁿbⁿ} düzenli DEĞİLDİR
Problem 10: Palindrom Kontrolü
Soru: L = {w | w = wᴿ} (palindromlar) dilinin düzenli olmadığını gösterin.
Çözüm:
Örnekler: aba, abba, aa, ε (palindromlar)
Varsayım: L düzenli olsun.
Kelime seçimi: w = aᵖbaᵖ (|w| = 2p+1 ≥ p)
Bu kelime palindromdur: tersinden okunduğunda aᵖbaᵖ = aᵖbaᵖ
Pompalama: w = xyz ve |xy| ≤ p
Yine, xy sadece ilk a'lardan oluşur: y = aᵏ (k > 0)
i = 2: xy²z = aᵖ⁺ᵏbaᵖ
Bu palindrom mu? Tersinden: aᵖbaᵖ⁺ᵏ
aᵖ⁺ᵏbaᵖ ≠ aᵖbaᵖ⁺ᵏ → Palindrom değil!
✅ Palindromlar düzenli değildir
🎯 5. Karışık ve İleri Seviye Problemler
Problem 11: Minimizasyon
Soru: Verilen DFA'yı minimize edin.
DFA: Q = {q₀, q₁, q₂, q₃}, F = {q₂, q₃}
Çözüm (Tablo Doldurma Yöntemi):
Adım 1: Kabul ve red durumlarını ayır
• Grup 1: {q₀, q₁} (red)
• Grup 2: {q₂, q₃} (kabul)
Adım 2: Her grup içinde geçişleri kontrol et
Eğer aynı gruptaki iki durum farklı gruplara geçiyorsa, ayır.
Adım 3: Eşdeğer durumları birleştir
Eğer q₂ ve q₃ her sembol için aynı gruplara geçiyorsa birleştir.
✅ Minimum DFA: Eşdeğer durumlar birleştirilir
Problem 12: Kapama Özellikleri
Soru: L₁ ve L₂ düzenli diller ise, L₁ ∩ L₂'nin de düzenli olduğunu gösterin.
Çözüm (Çarpım İnşası):
Verilen: M₁ = (Q₁, Σ, δ₁, q₁, F₁) ve M₂ = (Q₂, Σ, δ₂, q₂, F₂)
İnşa edelim: M = (Q, Σ, δ, q₀, F)
- Q = Q₁ × Q₂ (durum çiftleri)
- q₀ = (q₁, q₂)
- F = F₁ × F₂ (her iki otomatada da kabul)
- δ((p,q), a) = (δ₁(p,a), δ₂(q,a))
Neden çalışır?
M, w kelimesini kabul eder ⟺
Hem M₁ hem M₂ w'yi kabul eder ⟺
w ∈ L₁ ∩ L₂
✅ Düzenli diller kesişim altında kapalıdır
💡 Tasarım İpuçları
DFA Tasarımı:
- ✅ Her durumun anlamını netleştir (örn: "çift sayıda a görüldü")
- ✅ Minimum durum sayısıyla başla, gerekirse ekle
- ✅ Tüm (durum, sembol) çiftleri için geçiş tanımla
- ✅ Red durumunu unutma (çöp durumu)
NFA Tasarımı:
- ✅ Nondeterminizmi kullan, daha basit ol
- ✅ ε-geçişlerini akıllıca kullan
- ✅ Paralel yollar oluşturabilirsin
Düzenli İfadeler:
- ✅ Basit parçalardan başla, birleştir
- ✅ Operatör önceliğine dikkat et
- ✅ Test kelimeleriyle doğrula
Pompalama Lemması:
- ✅ Stratejik kelime seç (p parametresi kullan)
- ✅ y'nin nerede olacağını tahmin et
- ✅ i = 0, 1, 2 için kontrol et
- ✅ Çelişki bul
📝 Hızlı Referans
DFA vs NFA:
- DFA: Deterministik, her (q,a) için TAM BİR geçiş
- NFA: Nondeterministik, ε-geçişli, birden fazla geçiş olabilir
- Güç: Eşittir! Her NFA → DFA'ya dönüştürülebilir
Düzenli Dil Testleri:
- ✅ DFA/NFA tasarlanabiliyorsa → Düzenli
- ✅ Düzenli ifade yazılabiliyorsa → Düzenli
- ❌ Pompalama lemması başarısızsa → Düzenli değil
Klasik Düzenli Olmayan Diller:
- ❌ {aⁿbⁿ | n ≥ 0} - Eşit sayıda a ve b
- ❌ {w | w = wᴿ} - Palindromlar
- ❌ {aⁿ² | n ≥ 0} - Kare sayıda a
- ❌ {aᵖ | p asal} - Asal sayıda a