Düz Desen Arama
Deseni metnin her konumuna yerleştirip harf harf karşılaştıran en basit desen arama yöntemi.
Önce bunlara göz at
#Nasıl çalışır?
Desen arama (string matching), bir metin içinde bir desenin geçtiği tüm konumları bulma problemidir. En basit yöntem deseni metnin her olası başlangıç konumuna yerleştirip harf harf karşılaştırmaktır.
Her konumda karşılaştırma desenin başından başlar ve ilk uyuşmazlıkta durur; desen bir sağa kaydırılır ve her şey baştan yapılır. Tüm harfler tutarsa bir eşleşme bulunmuştur.
Bu yöntem çoğu gerçek metinde hızlıdır, çünkü uyuşmazlıklar genellikle ilk birkaç harfte çıkar. Ama AAAA…AB gibi tekrarlı metinlerde aynı harfler defalarca karşılaştırılır ve maliyet O(n · m)'ye çıkar.
#Kendin dene
Desen metnin altında soldan sağa kaydırılıyor. Her konumda harfler baştan tek tek karşılaştırılıyor.
#Adım adım
- 01Deseni metnin ilk konumuna hizala.
- 02Harfleri baştan karşılaştır; ilk uyuşmazlıkta dur.
- 03Tüm harfler tuttuysa eşleşmeyi kaydet.
- 04Deseni bir sağa kaydır ve son konuma kadar tekrarla.
#Örnek kod
Aynı algoritma 8 dilde. Her program derlenip çalıştırılarak test edildi ve hepsi aynı çıktıyı veriyor.
def search(text: str, pattern: str) -> list:
"""Every 0-based position where pattern starts in text."""
n, m = len(text), len(pattern)
found = []
for s in range(n - m + 1): # every shift of the pattern
j = 0
while j < m and text[s + j] == pattern[j]:
j += 1
if j == m:
found.append(s)
return found
print(" ".join(map(str, search("AABAACAADAABAABA", "AABA"))))#Karmaşıklık
| İşlem | Süre |
|---|---|
| En kötü durum | O(n · m) |
| Ortalama (rastgele metin) | O(n) |
| Ön hazırlık | Yok |
| Bellek | O(1) |
n metin, m desen uzunluğudur. Desen n − m + 1 konumda denenir ve her konumda en fazla m karşılaştırma yapılır. Ön hazırlık gerektirmediği için kısa desenlerde ve tek seferlik aramalarda hâlâ iyi bir seçimdir.
#Ne zaman kullanılır?
Kısa desenler ve kısa metinler, tek seferlik aramalar ve basitliğin önemli olduğu yerler. Birçok standart kütüphanenin indexOf / find fonksiyonu kısa girdiler için bu yöntemin optimize edilmiş bir hâlini kullanır.
#Alıştırma
Soruları cevaplamak ve ilerlemeni kaydetmek için giriş yap.
Kolay
Düz arama bir uyuşmazlıktan sonra ne yapar?
- 1Deseni bir sağa kaydırıp karşılaştırmaya desenin başından başlar
- 2Metnin sonuna atlar
- 3Deseni iki konum kaydırır
- 4Aramayı bitirir
n harflik metinde m harflik desen kaç konumda denenir?
- 1n − m + 1
- 2n
- 3m
- 4n · m
Düz aramanın en kötü durum karmaşıklığı nedir?
- 1O(n · m)
- 2O(n + m)
- 3O(n log m)
- 4O(m)
Orta
Hangi metin ve desen düz arama için en kötü durumu oluşturur?
- 1Metin AAAA…A, desen AAA…AB
- 2Metin ve desen tamamen farklı harflerden oluşuyor
- 3Desen metnin başında geçiyor
- 4Desen tek harf
Zor
Düz arama neden hâlâ birçok kütüphanede kullanılır?
- 1Ön hazırlık gerektirmez ve kısa desenlerde pratikte çok hızlıdır
- 2En kötü durumda en hızlı algoritmadır
- 3Bellek kullanımı O(n · m)'dir
- 4Yalnızca sıralı metinde çalışır
#Bundan sonra
Bu dersi bildiğini varsayan dersler: