İçeriğe atla

Dizi arama algoritması

Dizi eşleme algoritmaları olarak da adlandırılan dizi arama algoritmaları, bir ya da birkaç dizinin (örüntü) daha büyük bir dizi ya da metin içindeki yerinin bulunmasını konu edinen önemli bir dizi algoritması sınıfıdır.

Σ bir alfabe (sonlu küme) olmak üzere örüntü ve aranan metin Σ kümesinin elemanlarından oluşan bir zincir olarak tanımlanabilmektedir. Σ olağan bir alfabe (Türkçede yer alan harfler kümesi) olabileceği gibi ikili alfabe (Σ = {0,1}) ve DNA alfabesi (Σ = {A,C,G,T}) biçiminde de bulunabilmektedir.

Dizinin kodlanma biçimi dizi arama algoritmalarının başarımını etkilemektedir. Değişken uzunluklu kodlama yöntemi kullanıldığında n. karakteri bulmak güçleşmekte; bu, gelişmiş dizi algoritmalarını yavaşlatıcı bir etken olarak öne çıkmaktadır. Bu sorunun üstesinden gelmenin yolu belirli karakterler yerine kod dizilerini eşleştirmektedir ancak bu yöntem, kodlamanın yanlış sonuçların önüne geçecek biçimde tasarlanmadığı durumlarda pek güvenilir değildir.

Temel sınıflandırma

Algoritmalar kullandıkları örüntü sayısına göre sınıflandırılabilmektedirler.

Tek örüntülü algoritmalar

m örüntünün, n aranan metnin uzunluğu olsun.

Algoritma Önişlem süresi Eşleme süresi1
Saf dizi arama algoritması 0 Θ((n-m+1) m)
Rabin-Karp dizi arama algoritması Θ(m) ortalama: Θ(n+m)
en düşük: Θ((n-m+1) m)
Sonlu durum makinesi tabanlı arama Θ(m |Σ|) Θ(n)
Knuth-Morris-Pratt algoritması Θ(m) Θ(n)
Boyer–Moore dizi arama algoritması Θ(m + |Σ|) Ω(n/m), O(n)
Bitkin algoritma (Baeza-Yates-Gonnet) Θ(m + |Σ|) O(mn)

1Sonuşmaz süreler O, Ω, and Θ gösterimi biçiminde ifade edilmektedir.

Boyer–Moore dizi arama algoritması, ilgili yazında kullanılan başlıca algoritma olarak kabul edilmektedir.[1]

Sonlu örüntü kümesi kullanan algoritmalar

  • Aho-Corasick algoritması
  • Commentz-Walter algoritması
  • Rabin-Karp dizi arama algoritması

Sonsuz sayıda örüntü kullanan algoritmalar

Doğal olarak sayılamayan örüntüler genellikle düzenli dilbilgisi ya da düzenli ifadeler biçiminde gösterilmektedir.

İkincil sınıflandırma

En sık kullanılan sınıflandırma yöntemlerinden biri önişlemi ana ölçüt olarak kabul etmektedir.

Dizi arama algoritması sınıfları
Önişlem gerektirmeyen metin Önişlem gerektiren metin
Önişlem gerektirmeyen örüntüler Temel algoritmalar Dizin yöntemleri
Önişlem gerektiren algoritmalar Yapısal arama motorları İmza yöntemleri

Saf dizi arama

Bir dizinin başka bir dizi içinde yer alıp almadığını anlamanın en basit olmasına karşın en verimsiz yolu dizinin her karakterini sırayla eşleştirmeye çalışmaktır. Bu yöntemde aranan dizi metnin ilk karakteriyle karşılaştırılır. Bu karakterlerin birbiriyle uyuşmaması durumunda aynı işlem metnin ikinci karakteri için yinelenir. Olağan koşullarda karakterlerin eşleşmediğini anlamak için ortalama olarak O(n + m) adım gerekliyken (n metnin, m örüntünün uzunluğunu göstermektedir) en elverişsiz durumda ("aaaab" dizisini "aaaaaaaaab" içinde aramak gibi) gerekli ortalama adım sayısı O(nm)'ye eşittir.

Sonlu dizi makinesi tabanlı arama

"MOMMY" sözcüğünü fark edebilen bir DFA

Bu yöntemde geri dönüşler, istenen diziyi içeren örüntüleri fark edebilen bir gerekirci sonlu durum makinesi (DFA) oluşturularak ortadan kaldırılabilmektedir. Üstküme yapımı yöntemiyle tasarlanan bu gereçlerin tutarı yüksek olsa da kullanımları görece kolaydır. Bu yöntem gelişigüzel düzenli ifadelere ilişkin aramalarda sıklıkla kullanılmaktadır.

Kısa yöntemler

Knuth–Morris–Pratt, aranan diziyi sonek biçiminde algılayabilen bir DFA oluştururken Boyer–Moore aramaya örüntünün sonundan başlamakta, böylece her adımda örüntü uzunluğu ölçüsünde yol kat edebilmektedir. Baeza–Yates önceki j karakterin aranan dizinin bir öneki olup olmadığını takip edebildiğinden bulanık dizi aramayla bağdaştırılabilmektedir. Bitkin algoritma Baeza-Yates'in bir uygulamasıdır.

Dizin yöntemleri

Görece hızlı çalışan arama algoritmaları metnin önişlemden geçirilmesini gerektirmektedir. Sonek ağacı ya da sonek dizisi gibi altdizi dizinleri oluşturularak örüntü daha kolay biçimde bulunabilmektedir. Bir sonek ağacı sürede hazırlanabilmekte ve metin içinde yer alan sayıdaki örüntü sürede bulunabilmektedir (alfabe büyüklüğü sabit olmak koşuluyla).

Diğer yöntemler

Üçlük arama gibi bazı arama yöntemleri metin ve örüntüyü birebir eşlemek yerine bu iki dizi arasında bir "yakınlık" değeri hesaplamayı amaçlamaktadır. Bu tür yöntemler "bulanık" aramalar olarak da adlandırılmaktadır.

Notlar

  1. ^ Hume and Sunday (1991) Fast String Searching Software—Practice and Experience, Cilt 21(11), 1221–1248 (Kasım 1991)

Kaynakça

Dış bağlantılar

İlgili Araştırma Makaleleri

<span class="mw-page-title-main">Kriptografi</span>

Kriptografi, kriptoloji ya da şifreleme, okunabilir durumdaki bir verinin içerdiği bilginin istenmeyen taraflarca anlaşılamayacak bir hale dönüştürülmesinde kullanılan yöntemlerin tümüdür. Kriptografi bir matematiksel yöntemler bütünüdür ve önemli bilgilerin güvenliği için gerekli gizlilik, aslıyla aynılık, kimlik denetimi ve asılsız reddi önleme gibi şartları sağlamak amaçlıdır. Bu yöntemler, bir bilginin iletimi esnasında ve saklanma süresinde karşılaşılabilecek aktif saldırı ya da pasif algılamalardan bilgiyi –dolayısıyla bilginin göndericisi, alıcısı, taşıyıcısı, konu edindiği kişiler ve başka her türlü taraf olabilecek kişilerin çıkarlarını da– koruma amacı güderler.

<span class="mw-page-title-main">Arama motoru</span>

Web arama motoru veya internet arama motoru, web'de sistematik bir şekilde internet kullanıcılarının istedikleri bilgilere anında erişebilmek için sıkça kullandıkları bir yazılım türüdür. Birincil işlevi internette veya internetin bir kısmında bulunmuş olan verileri bir araya getirmek ve raporlamaktır. Arama sonuçları genellikle satırlara ayrılmış sonuç sayfaları şeklinde sunulur. Bulunan bilgiler arasında web sayfası bağlantıları, görseller, videolar, infografikler, yazılar, akademik makaleler ve diğer dosya türleri yer alabilir. Arama motoru, çıktı olarak elde edilmiş kayıtlar ve bilgilerin hepsini birbiriyle karşılaştırarak sorgulayan, bir sorgunun kabul edilebilmesi için gerekli faaliyetleri gerçekleştiren, elde edilen verilerin performanslarının en yüksek olmasını amaçlayan bir sorgulama ve bulma mekanizmasıdır. Bazı arama motorları, veri tabanlarında ve kamuya açık dizinlerde bulunan bilgileri de indeksler. Bu noktada toplanan veriler, web sitesi URL’sini, web sitesinin içeriğini açıklayan bazı anahtar kelimeleri veya anahtar kelime gruplarını, web sayfasını oluşturan kod yapısını ve web sitesinde verilen bağlantıları içerir. Arama motorları, insanlar tarafından derlenen web dizinlerinin aksine, "örümcek" denilen botlar tarafından toplanan bilgileri belirli bir algoritma yardımıyla gerçek zamanlı olarak yansıtabilirler. Ve de günümüzde World Wide Web ile çok iyi bir hale gelen arama motorları, giderek profesyonelleşmeye devam etmektedir.

Aşağıdaki tarihsel sıralama genel olarak algoritmaların ilk kökenlerinden başlayarak gelişimlerini ana hatlarıyla gösterir.

Veri yapısı, bilgisayar ortamında verilerin etkin olarak saklanması ve işlenmesi için kullanılan yapı.

<span class="mw-page-title-main">Normal dağılım</span> sürekli olasılık dağılım ailesi

Normal dağılım, aynı zamanda Gauss dağılımı veya Gauss tipi dağılım olarak isimlendirilen, birçok alanda pratik uygulaması olan, çok önemli bir sürekli olasılık dağılım ailesidir.

<span class="mw-page-title-main">Genetik algoritma</span>

Genetik algoritmalar, doğada gözlemlenen evrimsel mekanizmalara benzer mekanizmalar kullanarak çalışan eniyileştirme yöntemidir. Çok boyutlu uzayda belirli bir maliyet fonksiyonuna göre en iyileştirme amacıyla iterasyonlar yapan ve her iterasyonda en iyi sonucu üreten kromozomun hayatta kalması prensibine dayanan en iyi çözümü arama yöntemidir.

Soundex, İngilizcedeki keliemelerin teleffuz biçimlerine göre hazırlanmış bir fonetik algoritmadır. Bu algoritmanın hazırlanmasındaki temel amaç; teleffuzları benzeşen kelimelerin bu yolla aynı karakter katarına (string) dönüştürülmeleri ve bu yolla benzer kelimelerin -yazımlarında fark olsa bile- tespit edilmesidir. Bunun yanında Soundex algoritması, fonetik algoritmalardan en bilineni ve en sık kullanılanı olup, bazı çevreler tarafından -yanlış bir şekilde- fonetik algoritma terimiyle aynı anlamda kullanılamaktadır.

<span class="mw-page-title-main">Ayırıcı im</span>

Ayırıcı im, fonetik işaret veya diyakritik; telaffuz, ton ve diğer ayırıcı unsurları belirtmek için gliflere eklenen imdir. Örneğin Latin harflerine geçiş döneminde Türkçedeki ötümsüz artdişyuvasıl sürtünmeli ünsüz sesini karşılamak için yeni arayışlara gidilmiş ve mevcut S harfine sedil eklenerek Ş harfi elde edilmiştir. O > Ö veya A > Â ya da Y > Ý gibi harflerde ayırıcı imlere örnekler görülebilir.

<span class="mw-page-title-main">Makine öğrenimi</span> algoritmaların ve istatistiksel modellerin kullanımıyla bilgisayarların yapacakları işleri kendileri çözebilmeleri

Makine öğrenimi (ML), veriden öğrenebilen ve görünmeyen verilere genelleştirebilen ve dolayısıyla açık talimatlar olmadan görevleri yerine getirebilen istatistiksel algoritmaların geliştirilmesi ve incelenmesiyle ilgilenen, yapay zekâda akademik bir disiplindir. Makine öğrenimi, bilgisayarların deneyimlerinden öğrenerek karmaşık görevleri otomatikleştirmeyi sağlayan bir yapay zeka alanıdır. Bu, veri analizi yaparak örüntüler tespit etme ve tahminlerde bulunma yeteneğine dayanır. Son zamanlarda yapay sinir ağları, performans açısından önceki birçok yaklaşımı geride bırakmayı başardı.

<span class="mw-page-title-main">Çoklu dizi hizalaması</span> üç ya da çok biyolojik dizinin hizalaması

Çoklu dizi hizalaması, üç ya da çok biyolojik dizinin dizi hizalamasıdır. Çoğu durumda, girdi kümesindeki sorgu dizilerinin evrimsel bir ilişkiye sahip olduğu, yani ortak bir ataya sahip oldukları varsayılır. Elde edilen çoklu dizi hizalamasından homoloji olduğu çıkarımı yapılabilir ve filogenetik analiz ile dizilerin evrimsel kökenleri değerlendirilebilir. Hizalamanın sağdaki resimdeki gibi gösterimiyle noktasal mutasyonlar, hizalamadaki sütunlardan birinde farklı bir harf olarak, ensersiyon ve delesyonlar ise hizalamadaki satırlardan bir veya daha fazlasında tire şeklinde beliren eklemeler şeklinde mutasyon olayları görülebilir. Protein bölgelerinde, ikincil veya üçüncül yapılarda ve hatta bireysel amino asit veya nükleotitlerin dizi korunumunu değerlendirmek için çoklu dizi hizalamaları sıkça kullanılır.

Yunancanın romanizasyonu, genelde Yunan alfabesi ile yazılan Yunanca metinlerin, Latin alfabesi ile temsili veya bunu yapmayı sağlayan bir sistemdir. Yunancanın romanizasyonu için çeşitli yöntemler kullanılmaktadır. Bu yöntemler, kaynak metnin Eski Yunanca mı Modern Yunanca mı olduğuna ve arzu edilen dönüştürmenin transkripsiyon mu transliterasyon mu olduğuna bağlı olarak değişiklik göstermektedir.

Biyoenformatikte dizi hizalaması, DNA, RNA veya protein dizilerini düzenleyerek benzer bölgelerin tespit edilmesidir. Bu bölgelerin benzer olması, diziler arasında işlevsel, yapısal veya evrimsel bir ilişki olduğu anlamına gelir. Hizalanmış nükleotit veya aminoasit kalıntı dizileri tipik olarak bir matriksin satırları olarak gösterilir. Kimyasal kalıntıları temsil eden harflerin arasına boşluklar konarak ardışık sütunlarda yer alan aynı veya benzer harflerin bir hizada olması sağlanır.

<span class="mw-page-title-main">Hesaplamalı fizik</span>

Hesaplamalı fizik, fizik sorunlarını çözebilmek için sayısal algoritmaların üretilmesi ve gerçeklenmesini içerir. Genelde kuramsal fizikin bir alt dalı olarak değerlendirilir ancak bazen de kuramsal ve deneysel fizik arasında orta bir dal olarak da düşünülür.

<span class="mw-page-title-main">Kriptografik özet fonksiyonu</span>

Kriptografik özet fonksiyonu çeşitli güvenlik özelliklerini sağlayan bir özet fonksiyonudur. Veriyi belirli uzunlukta bir bit dizisine, (kriptografik) özet değerine, dönüştürür. Bu dönüşüm öyle olmalıdır ki verideki herhangi bir değişiklik özet değerini değiştirmelidir. Özetlenecek veri mesaj, özet değeri ise mesaj özeti veya kısaca özet olarak da adlandırılır.

Probabilistik kriptosistem şifreleme algoritması içinde rastgeleselliğin kullanımıdır böylece aynı mesaj birçok kez şifrelendiğinde genel olarak farklı şifreli metinler üretecektir.

Goldwasser–Micali (GM) kriptosistemi 1982 yılında Shafi Goldwasser ve Silvio Micali tarafından geliştirilmiş bir asimetrik anahtar şifreleme algoritmasıdır. GM standart kriptografik varsayımlar altında güvenliği kanıtlanmış ilk probabilistik açık anahtar şifreleme yöntemidir. Bununla birlikte başlangıç düz metinden yüzlerce kez daha geniş olan şifreli metinler olduğundan verimli bir kriptosistem değildir. Kriptosistemin güvenlik özelliğini kanıtlamak için Shafi Goldwasser ve Silvio Micali anlamsal güvenliğin geniş alanda kullanılan bir tanımını önerdiler.

<span class="mw-page-title-main">Karakter kodlaması</span> yazıdaki karakterleri rakamsal değerlerle temsil etmek

Bilişimde karakter kodlaması kavramı bir çeşit kodlama sistemi kullanılarak kodlanmış karakter gruplarını temsil etmektedir. Soyutlama düzeyi ve kullanıldığı bağlama bağlı olarak karakterlere karşılık gelen kod noktaları ve bunların oluşturdukları kod alanı, bit örüntüleri, oktetler, doğal sayılar, elektrik sinyalleri vb. şeklinde algılanabilir. Metinsel verilerin işlenmesi, depolanması ve iletimi esnasında karakter kodlamaları kullanılır. Karakter seti, karakter eşlem veya kod sayfası gibi ifadeler karakter kodlaması kavramıyla eş anlamlıymış gibi kullanılsa da aralarında bazı anlam farkları bulunmaktadır.

Otomatik kümeleme algoritmaları, veri kümeleri hakkında önceden bilgi sahibi olmadan kümeleme yapabilen algoritmalardır. Diğer küme analizi tekniklerinin aksine, otomatik kümeleme algoritmaları, gürültü ve aykırı noktaların varlığında bile en iyi küme sayısını belirleyebilir.

<span class="mw-page-title-main">ROT13</span> Sezar şifrelemesinin özel bir hali

ROT13, Latin alfabesinde bir harfi kendisinden sonraki 13. harfle değiştiren basit bir harf ikame şifresidir. ROT13, antik Roma'da geliştirilen Sezar şifresinin özel bir durumudur.

Affine şifreleme veya Doğrusal şifreleme, bir tür monoalfabetik ikame şifresi olup, bir alfabedeki her harf sayısal eşdeğeriyle eşleştirilir, basit bir matematiksel fonksiyon kullanılarak şifrelenir ve tekrar bir harfe dönüştürülür. Kullanılan formül, her harfin başka bir harfe şifrelendiği ve tekrar geri döndüğü anlamına gelir, yani şifre esasen hangi harfin hangisine gideceğini düzenleyen bir kurala sahip standart bir ikame şifresidir. Bu nedenle, tüm ikame şifrelerinin zayıflıklarına sahiptir. Her harf (ax + b) mod 26 fonksiyonu ile şifrelenir, burada b kaydırmanın büyüklüğüdür.