Text işlemlerinde, bir dizgi içerisinde dizgi aramadaki en basit çözümü inceleyeceğiz.
txt[] = "THIS IS A TEST TEXT"
pat[] = "TEST"
Output: 10
txt[] = "AABAACAADAABAAABAA"
pat[] = "AABA"
Output: 0,9,13
Çözüm aşağıdaki gibi olacaktır.
def search(text, pattern):
m, n = len(pattern), len(text)
for i in range(n - m + 1):
for j in range(m):
if text[i + j] != pattern[j]:
break
if j + 1 == m:
print(i)
if __name__ == '__main__':
txt = "AABAACAADAABAAABAA"
pat = "AABA"
search(txt, pat)
En iyi durum nedir?
txt[] = "AABCCAADDEE"
pat[] = "FAA"
Desenin ilk karakteri arana text içerisinde bulunmadığı zamandır ve karmaşıklık O(n)
olur.
En kötü durum nedir?
txt[] = "AAAAAAAAAAAAAAAAAA"
pat[] = "AAAAA"
Yani tüm karakterler aynı olduğunda ve
txt[] = "AAAAAAAAAAAAAAAAAB"
pat[] = "AAAAB"
son karakterler aynı olursa. Bu durumda da karmaşıklık O(m*(n-m+1))
olur.
String arama işlemlerinin önemli olduğunu söylemiştim. Bu gördüğünüz algoritma adı üstünde en kaba,basit çözümdür. Çok daha efektif algoritmalar bulunmaktadır.
Comments
comments powered by Disqus