T.C TRAKYA ÜNĠVERSĠTESĠ FEN BĠLĠMLERĠ ENSTĠTÜSÜ

Ebat: px
Şu sayfadan göstermeyi başlat:

Download "T.C TRAKYA ÜNĠVERSĠTESĠ FEN BĠLĠMLERĠ ENSTĠTÜSÜ"

Transkript

1 T.C TRAKYA ÜNĠVERSĠTESĠ FEN BĠLĠMLERĠ ENSTĠTÜSÜ DĠZGĠ EġLEME ALGORĠTMALARININ ĠNCELENMESĠ VE YENĠ BĠR DĠZGĠ EġLEME ALGORĠTMASI Abdul Kadir ERSĠN Yüksek Lisans Tezi Bilgisayar Mühendisliği Anabilim Dalı DanıĢman: Yrd. Doç. Dr. Aydın CARUS Edirne 2008

2 T.C TRAKYA ÜNĠVERSĠTESĠ FEN BĠLĠMLERĠ ENSTĠTÜSÜ DĠZGĠ EġLEME ALGORĠTMALARININ ĠNCELENMESĠ VE YENĠ BĠR DĠZGĠ EġLEME ALGORĠTMASI Abdul Kadir ERSĠN Yüksek Lisans Tezi Bilgisayar Mühendisliği Anabilim Dalı Bu tez 30/07/2008 tarihinde aşağıdaki juri tarafından kabul edilmiştir. Yrd. Doç.Dr. Aydın CARUS Danışman Yrd. Doç.Dr. Hilmi KUŞÇU Üye Yrd. Doç.Dr. Altan MESUT Üye

3 iii ÖZET Yüksek Lisans Tezi, Dizgi Eşleme Algoritmalarının İncelenmesi ve Yeni Bir Dizgi Eşleme Algoritması, Fen Bilimleri Enstitüsü, Bilgisayar Mühendisliği Anabilim Dalı. Bu tezde; günümüzde birçok alanda kullanılmakta olan dizgi eşleme algoritmaları incelenmiş, bu algoritmaların farklı alfabeler üzerindeki performansları belirlenerek, doğal dillerin yapısal farklılığının dizgi eşleme algoritmaları üzerindeki etkileri araştırılmıştır. Ayrıca alfabeyi oluşturan karakterleri gruplayarak bu grupların kullanım frekansına bağlı yeni ve hızlı bir dizgi eşleme algoritması sunulmuştur. Dördüncü bölümde verilen deneme sonuçlarına göre, algoritmalar alfabeler üzerinden ele alındığında ortalamada DNA alfabesi üzerinde en etkin algoritma Shift Or, rakam alfabesi üzerinde Berry-Ravindran, doğal dil alfabesi üzerinde ise en etkili algoritma Tuned Boyer Moore algoritması olarak tespit edilmiştir. Ortalamada DNA alfabesinde en kötü performansı Reverse Factor, rakam ve doğal dil alfabesinde ise en kötü performansı Forward Dawg Matching algoritması sergilemiştir. Araştırmada seçilen 8 farklı doğal dil için yapılan denemelerden elde edilen sonuçlara göre alfabe eleman sayısının algoritmaları etkilemesinin yanı sıra kullanılan doğal dillerin de algoritmaların performansını etkilediği belirlenmiştir. Bu çalışmada sunulan, kullanılan alfabedeki karakterleri gruplayarak arama işlemi gerçekleştiren ve doğal diller üzerinde dizgi eşleme yapabilen yeni dizgi eşleme algoritması, doğal diller üzerinde en etkin performans gösteren diğer algoritmalardan daha etkin bir performans sergilemiştir. Bu tez 2008 yılında yapılmıştır ve 128 sayfadan oluşmaktadır. ANAHTAR KELİMELER: Dizgi Eşleme, Dizgi Eşleme Algoritmaları, Yaklaşık Dizgi Eşleme, Doğal Dil, Karakter Gruplama.

4 iv ABSTRACT Graduate Thesis, Research into String Matching Algorithms and a New String Matching Algorithm, Graduate School of Natural and Applied Sciences, Department of Computer Engineering. In this thesis; pattern matching algorithms are examined, their efficiencies over different alphabets are determined and the effects of structural differences of natural languages over pattern matching algorithms are researched. Besides, a fast pattern matching algorithm, which depends on group frequency of alphabet characters is presented. According to the tests given in Section 4, the most efficient algorithms are; Shift Or for DNA alphabet, Berry-Ravindran for numeral alphabet and Tuned Boyer Moore for natural language alphabet. The worst algorithms are; Reverse Factor for DNA alphabet and Forward Dawg Matching for both numeral and natural language alphabets. According to the test results of 8 different natural languages, it is identified that a pattern matching algorithm performance is affected not only with the total number of alphabet characters but also with structures of natural languages. The new pattern matching algorithm that is presented in this thesis, which can make searching by grouping the alphabet characters and perform string matching on natural languages, had shown better performance on natural languages than other effective pattern matching algorithms. This thesis was published in 2008 and consists of 128 pages. KEYWORDS: String Matching, String Matching Algorithms, Approximate String Matching, Natural Language, Character Groupping.

5 v TEġEKKÜR Bu çalışmanın hazırlanmasında bana yol gösteren, her an ufkumu yeni bir bilgiyle açmaya çalışan, destek ve yardımlarını esirgemeyen değerli danışman hocam Yrd. Doç. Dr. Aydın CARUS a, çalışmalarımda ve tez yazımında bana yardımcı olan değerli hocam Yrd. Doç. Dr. Altan MESUT a, Yüksek Lisans eğitimi boyunca, gerek yayınlamış olduğum bildirilerimde gerek tezim için yapmış olduğum her türlü araştırmaların gerçekleştirilmesinde gerekli olan her türlü maddi ihtiyaçlarımın ve buna bağlı manevi ihtiyaçlarımın karşılanmasında büyük rol oynayan TÜBİTAK a ve her an yanımda olan sevgili eşim ve aileme sonsuz teşekkürlerimi sunarım.

6 vi ĠÇĠNDEKĠLER ÖZET... iii ABSTRACT... iv TEġEKKÜR... v ĠÇĠNDEKĠLER... vi KISALTMALAR LĠSTESĠ... viii 1. GĠRĠġ DĠZGĠ EġLEME ALGORĠTMALARI Brute Force Algoritması Research with an Automaton Algoritması Karp-Rabin Algoritması Shift Or Algoritması Morris-Pratt Algoritması Knuth-Morris-Pratt Algoritması Simon Algoritması Colussi Algoritması Galil-Giancarlo Algoritması Apostolico-Crochemore Algoritması Not So Naive Algoritması Forward Dawg Matching Algoritması Boyer-Moore Algoritması Turbo-BM Algoritması Apostolico-Giancarlo Algoritması Reverse Colussi Algoritması Horspool Algoritması Quick Search Algoritması Tuned Boyer-Moore Algoritması Zhu-Takaoka Algoritması Berry-Ravindran Algoritması Smith Algoritması Raita Algoritması Reverse Factor Algoritması Turbo Reverse Factor Algoritması Backward Oracle Matching Algoritması... 57

7 vii Galil-Seiferas Algoritması Two Way Algoritması String Matching On Ordered Alphabet Algoritması Optimal Mismatch Algoritması Maximal Shift Algoritması Skip Search Algoritması KMP Skip Search Algoritması Alpha Skip Search Algoritması Diğer Algoritmalar YAKLAġIK DĠZGĠ EġLEME Shift Or Algoritması k uyuşmama sayısı ile dizgi eşleme k farklı sayısı ile dizgi eşleme Wu-Manber Algoritması DĠZGĠ EġLEME ALGORĠTMALARININ ALFABEYE BAĞLI ETKĠNLĠKLERĠNĠN ARAġTIRILMASI DNA Alfabesi Açısından Sonuçlar Rakam Alfabesi Açısından Sonuçlar Doğal Dil Alfabesi Açısından Sonuçlar DĠZGĠ EġLEME ALGORĠTMALARININ DOĞAL DĠLLER ÜZERĠNDEKĠ DAVRANIġLARI KARAKTER GRUPLARININ FREKANSINI KULLANAN HIZLI YENĠ BĠR DĠZGĠ EġLEME ALGORĠTMASI (GF ALGORĠTMASI) Grup Frekansı Algoritması Ön işlem aşaması Dizgi arama aşaması Denemeler ve Sonuçlar SONUÇLAR KAYNAKLAR ÖZGEÇMĠġ EKLER

8 viii KISALTMALAR LĠSTESĠ ASCII BM DAWG DFA DNA GB GCC GF K-NN KB KMP MAX MB MS MIN ODTÜ OM XML American Standard Code for Information Interchange Boyer-Moore Directed Acyclic Word Graph Deterministic Finite Automata Deoxyribonucleic Acid Gigabyte GNU C Compiler Grup Frekansı Algoritması K-Nearest Neighbor Kilobyte Knuth-Morris-Pratt Maksimum Megabyte Maximal Shift Algoritması Minimum Orta Doğu Teknik Üniversitesi Optimal Mismatch Algoritması Extensible Markup Language

9 1 1. GĠRĠġ Dizgi eşleme algoritmaları, metin işlemenin yaygın olarak kullanıldığı alanlarda çok önemli bir yere sahiptir. Dahası, sistem ve yazılım tasarımı gibi diğer bilgisayar bilimleri alanlarında kullanılan programlama yöntemlerinde sıkça kullanılmaktadırlar [Crochemore ve Rytter, 2002]. Verilerin metin dosyası şekli, bilgi alışverişinde büyük önem teşkil etmektedir. Özellikle çok büyük derlemlerin ve sözlüklerin kullanıldığı edebiyat ve dil bilimleri alanlarında bu durum daha önemli hale gelmektedir. Boyutları bu denli büyük dosyalar ile çalışıldığında bilgisayar kullanılması önemli performans artışı sağlamaktadır. Bu durum moleküler biyolojide de büyük önem teşkil etmektedir. Biyolojik moleküller deyince akla ilk aminoasitlerin ve nükleotidlerin dizilimi gelmektedir. Bu dizilimler bazen çok büyük boyutlara ulaşabilmektedir. İşte bu ve bunun gibi alanlarda istenen verilerin kolayca aranabilmesi problemi, dizgi eşleme algoritmalarına duyulan ihtiyacı ön plana çıkarmaktadır [Crochemore ve Lecroq, 1997]. Bilgisayar teknolojisi ne kadar gelişmiş olursa olsun, veri boyutu arttıkça etkili sonuçların alınabilmesi için daha hızlı ve kabul edilebilir bellek büyüklüklerinde çalışan algoritmalara ihtiyaç duyulmaktadır. Dizgi eşlemede ile temsil edilen σ adet sonlu sayıda karakterden oluşan alfabe, hem x=x[0, 1,, m-1] ile gösterilen uzunluğu m olan dizgi hem de uzunluğu n olan y=y[0, 1,..., n-1] ile temsil edilen metnin oluşturulmasında kullanılır. Dizgi eşleme, metin içinde aranan dizginin en az bir ve genellikle tüm bulunduğu konumları bulmayı kapsamaktadır. Dizgi eşlemede, metnin hazırlanmasında kullanılan alfabe önem teşkil etmektedir. Dizgi eşleme algoritmalarının performansları kullanılan alfabeye göre farklılık gösterebilmektedir. Aranılan dizginin sahip olmuş olduğu metin alanına pencere ismi verilmektedir ve bu pencere uzunluğu dizgi uzunluğu ile aynıdır ve m dir. Örneğin kitap dizgisinin penceresi k ve p karakterleri dahil olmak koşulu ile bu iki karakter arasındaki tüm alandır ve uzunluğu 5 tir. Dizginin, metin üzerinde eşlenme mantığı şu şekildedir:

10 2 Pencerenin en soldaki karakteri, yani ilk karakterden itibaren, üzerinde eşleme yapılacak olan metin ile hizalanır. Sonra karşılaştırma işlemi birbirleri ile hizalanan karakterler arasında gerçekleştirilir. Bu karşılaştırma işlemine deneme adı verilmektedir ve bütün bir uyuşma sonrası ya da uyuşmama sonrası pencere sağa doğru kaydırılır. Bu işlem metin sonuna kadar bu şekilde sürdürülür. Bu mekanizmaya kayan pencere mekanizması adı verilmektedir [Charras ve Lecroq, 2004]. Dizgi eşleme algoritmalarının tümü, eşleme yaparken bu mekanizma üzerinden çalışmaktadır. Dizgi eşleme algoritmalarında, iki önemli kıstas, eşleme süresi ve karakter karşılaştırma sayısıdır [Carus vd., 2007]. Bu kıstaslar dizgi eşlemeyi gerçekleştiren algoritmanın performansını ortaya koymaktadır. Uygulamanın kullanılabilirliğine göre bu iki kıstas ayrı ayrı önem teşkil etmektedir. Fakat dizgi eşlemede performansın arttırılması yönündeki çalışmalar çoğunlukla eşleme süresi üzerinde gerçekleştirilmiştir. Eşleme süresi olarak bahsedilen kavram ise, aslında arama süresidir. Yani dizginin kayan pencere mekanizmasıyla eşleme yaparak, metinin sonuna kadar ulaşma süresidir. Karşılaştırma sayısı, algoritma üzerinde istisna bir mantığın çalışmaması koşuluyla, arama süresi ile doğru orantılıdır. Yani arama süresinin performansı çoğu zaman, karşılaştırma sayısının azlığı ya da çokluğu ile ilgilidir. Karşılaştırma sayısı ise, eşleme esnasındaki geri dönüşler ile birebir orantılıdır. Yani bir algoritma geri dönüşlere ne kadar az yer veriyorsa, karakter karşılaştırma sayısı da o kadar azdır ve buna bağlı olarak eşleme süresi de o kadar hızlıdır denebilir. Buraya kadar bahsedilen dizgi eşleme, tam dizgi eşleme olarak da bilinmektedir. Bunun dışında, aranılan dizgiye yakın dizgiler bulmaya çalışan yaklaşık dizgi eşleme yöntemi de bulunmaktadır. Bu yöntem ise bir k yaklaşık değeri üzerinden gerçekleştirilmektedir. k yaklaşık değeri benzemenin, yani yaklaşıklılığın ne kadar olması gerektiğini belirleyen bir sayıdır. Günümüzde birçok arama motorunda yaklaşık dizgi eşleme kullanılmaktadır. Bu çalışmada, tam dizgi eşleme üzerine geliştirilen algoritmalar ele alınarak, farklı alfabeler ve farklı dizgi uzunlukları üzerinde algoritmaların performanslarının araştırılması ve birbirleri ile kıyaslanmasının yanı sıra, yaklaşık dizgi eşleme konusuna

11 3 da değinilip, bu konuda geliştirilmiş algoritmalar da kapsanmaktadır. Ayrıca dizgi eşleme algoritmalarının farklı doğal diller üzerindeki davranışlarının da incelendiği bu çalışma, doğal dilin yapısal farklılıklarının, dizgi eşleme algoritmalarını etkilediğini ortaya koymaya çalışmaktadır [Ersin vd., 2007]. Çalışmada ayrıca metni oluşturan alfabedeki karakterleri frekansına göre gruplayarak arama yapan hızlı ve etkin yeni bir dizgi eşleme algoritması sunulmuş ve sunulan yeni algoritma, mevcut diğer algoritmalarla kıyaslanarak sunulan algoritmanın performansı belirlenmeye çalışılmıştır. Algoritmanın tüm dizgi uzunluklarında diğer tüm dizgi eşleme algoritmalarından daha hızlı olduğu saptanmıştır.

12 4 2. DĠZGĠ EġLEME ALGORĠTMALARI Metin üzerinde eşleme yapmak amacıyla birçok algoritma geliştirilmiştir. Bu algoritmaların bir kısmı dizgiyi ön işlemeye yarayan ön işlem safhasını içerirken, bir kısmı ise bu safhayı içermemektedir. Ön işlem safhası aramayı daha etkin hale getirmek için dizgi üzerinde gerçekleştirilen işlemleri kapsamaktadır. Dizgi eşleme algoritmaları dizgi eşlerken dizgi üzerinde sağdan sola, soldan sağa, herhangi bir konumdan başlayarak ya da özel bir konumdan başlayarak karşılaştırma işlemini gerçekleştirmektedirler. Bütün bu konum tekniklerinin algoritmaya özgü etkinlikleri vardır. Dizgi eşleme algoritmalarının performansı karmaşıklık olarak da bilinen Büyük O (Big Oh) gösterimi ile ifade edilmektedir. Bu gösterim matematiksel bir gösterim olup fonksiyonların davranışlarını tarif etmek için kullanılır. Bilgisayar biliminde ise algoritmaların bilgi işlemsel karmaşıklığının çözümlemesi için kullanılmaktadır [Krone ve Ogden, 2003]. Dizgi eşleme algoritmalarında Büyük O genellikle karakter, dizgi ve alfabe uzunluğu (m, n, σ) üzerinden ele alınmaktadır. Alfabe üzerinden ele alınmasının sebebi ise, birçok algoritmada alfabe uzunluğunun algoritma performansı üzerindeki büyük etkisinden dolayıdır. Dizgi eşlemede sabit alan ve doğrusallık diye bahsedilen terimler de mevcuttur. Sabit alandan aslında algoritmanın gerekli çalışma alanını tanımlamaktadır. Bu alan O(1) olduğunda sabit alan sağlanmış demektir ve O(n) olduğunda algoritma doğrusal zamanlıdır denmektedir. Bu özelliklere sahip bir algoritma etkindir denebilir. Sadece sabit alan ve doğrusallık üzerine yapılmış çalışmalar da mevcuttur [Rytter, 2002]. Çalışmamız sabit alanda çalışan algoritmaların yanında ekstra alana ihtiyaç duyan algoritmaları da kapsamaktadır. Dizgi eşleme algoritmalarının performansı daha önce de belirtildiği üzere, arama süresi veya karşılaştırma sayısı ölçütleri üzerinden belirlenmektedir. Çoğu algoritmada

13 5 karşılaştırma sayısı ve arama süresi arasındaki bağıntı doğru orantılı olmaktadır. Fakat farklı bir teknik kullanan bazı algoritmalar bu orantıyı koruyamamaktadır. Bu sebepten dolayı her zaman için karşılaştırma sayısı arama süresi ile aynı oranda değişmektedir denemez. Aşağıda ele alınmış olan dizgi eşleme algoritmaları tüm özellikleri ve çalışma prensipleriyle anlatılmaktadır. Buna ek olarak algoritmaların kaba koduna (Pseudo) da yer verilmiştir Brute Force Algoritması Genel özellikleri Önişlem safhası yok, Ekstra sabit alan gereksinimi, Her zaman kaydırma sağa doğru 1 birim, Herhangi bir düzende karşılaştırma, Arama fazında zaman karmaşıklığı O(mn), 2n beklenen metin karakter karşılaştırması Tanımı Brute Force algoritması metin içindeki 0 ve n-m arasındaki bütün pozisyonlarda, dizginin başlangıcından itibaren eşleşme olup olmadığını kontrol etmeye dayanmaktadır. Her deneme sonunda dizgi tam anlamıyla sağa doğru bir birim kaydırılır. Brute Force algoritması hiçbir önişlem safhası gerektirmez, dizgi ve metine ek olarak ekstra sabit alana ihtiyacı vardır. Arama safhasında karşılaştırma işlemi herhangi bir düzende yapılabilir. Bu safhadaki zaman karmaşıklığı O(mn) (örneğin arama (a n )

14 6 üzerinde (a m-1 Lecroq, 2004]. b) dir). Beklenen metin karakter karşılaştırması 2n dir [Charras ve Kaba kodu Arama Safhası for j 0 to metin_uzunluğu-dizgi_uzunluğu do for i 0 to dizgi_uzunluğu ve dizgi[i]=metin[i+j] do if i >= dizgi_uzunluğu then Dizgi Bulundu 2.2. Research with an Automaton Algoritması Genel özellikleri * x (dizgiye ait karakterlerin oluşturduğu alfabe) dilinin tanımlanmasıyla en düşük deterministik otomatı inşa eder, Eğer otomat direk erişim tablosunda saklanıyorsa O(mσ) karmaşıklıkta ekstra alana ihtiyaç duyar, Önişlem safhası O(mσ) zaman karmaşıklığına sahiptir, Eğer otomat direk erişim tablosunda saklanıyorsa arama safhasında zaman karmaşıklığı O(n), diğer durumlarda ise O(nlog(σ)) Tanımı Bir x kelimesinin bir otomat üzerinden aranması işlemi, öncelikle * x dilinin tanımlanmasıyla elde edilen en düşük deterministik sonlu durum otomatının (DFA) A(x) oluşturulmasına dayanmaktadır.

15 7 * x dilinin tanımlanmasıyla elde edilen DFA A(x)= (Q, q 0, T, E) sırasıyla şu şekilde tanımlanmaktadır: Q, x e ait tüm öneklerin kümesi Q={, x[0], x[0.. 1],..., x[0.. m-2], x} q 0 = ; başlangıç durum T={x}; aranılacak dizgi kümesi q, Q için ( q, x in bir öneki) ve a, için, (q, a, qa) E ye ait, eğer sadece qa x in öneki ise, diğer durumlarda ise (q, a, p) E ye ait, p, x in öneki olan qa nın en uzun sonekidir. DFA A(x), O(m+σ) zamanda ve O(mσ) alanda düzenlenmektedir. DFA A(x) nın ilk düzenlenme aşaması, y metninin içerisinde x kelimesi aranırken DFA A(x) y metinin üzerinde başlangıç konumunu hazırlar. Son durumun oluştuğu her durumda x in eşleşme durumu tutulur. Eğer otomat direk erişim tablosunda saklanıyorsa arama safhasında zaman karmaşıklığı O(n), diğer durumlarda ise O(nlog(σ)) dir [Crochemore ve Hancart, 1997] Kaba kodu ÖniĢlem Safhası for durum=başlanıca_hazırla (otomat) ve i 0 to dizgi_uzunluğu do eski_hedef hedefi_al (otomat, durum, dizgi[i]) hedef yeni_zirve(otomat) hedefi_ayarla (otomat, durum, dizgi[i], hedef) zirveyi_kopyala (otomat, hedef, eski_hedef) durum hedef son_durumu_ayarla (otomat, durum) Arama Safhası otomat yeni_otomat(dizgi_uzunluğu+1, (dizgi_uzunluğu+1)*alfabe_uzunluğu) for durum=başlangıca_hazırla (otomat), j 0 to metin_uzunluğu do durum hedefi_al (otomat, durum, metin[j])

16 8 if (son_düğüm (otomat, durum)) then Dizgi Bulundu 2.3. Karp-Rabin Algoritması Genel özellikleri Bir hash(anahtar) fonksiyonu kullanır, Önişlem safhası O(m) zaman karmaşıklığı ve sabit alan, Arama safhası O(mn) zaman karmaşıklığı, O(m+n) beklenen çalışma zamanı Tanımı Anahtarlama (hashing) çoğu pratik durumda kuadratik karakter karşılaştırmalarından sakınmak için kullanılan basit bir yöntemdir. Dizginin metin üzerindeki her pozisyonunun kontrolü yerine, eşleşen anahtar (hash) değer kümesinin karşılaştırılması, durumu daha etkili hale getirmektedir. Anahtar fonksiyonu benzer iki kelime arasında uygulanır. Dizgi eşleme algoritmalarında kullanılan anahtar fonksiyonundaki hash değeri aşağıdaki özelliklere sahip olmalıdır: Etkili hesaplama, Dizgiler için yüksek seçicilik, hash(y[j+1..j+m]), hash(y[j..j+m-1]) ve y[j+m]: hash(y[j+1.. j+m])= rehash(y[j], y[j+m], hash(y[j.. j+m-1]) durumundan daha kolay hesaplanabilir olması. m uzunluktaki w kelimesi için hash (w) şu şekilde tanımlanır: hash(w[0.. m-1])=(w[0]*2 m-1 + w[1]*2 m w[m-1]*2 0 ) mod q, q çok büyük sayı ve rehash(a,b,h)= ((h-a*2 m-1 )*2+b) mod q.

17 9 Karp-Rabin algoritmasının önişlem safhası hash (x) in hesabına dayanmaktadır. Bu işlem sabit alanda ve O(m) zamanda yapılmaktadır. Arama safhası süresince hash (x) ve hash(y[j.. j+m-1]) değerlerini 0 j < n-m için karşılaştırmak yeterli olmaktadır. Eşitlik olması durumunda ise eşitlik x=y[j.. j+m- 1] üzerinden karakter karakter karşılaştırılması gerekmektedir. Arama safhasındaki zaman karmaşıklığı O(mn), beklenen karakter karşılaştırması O(n+m) dir [Karp ve Rabin, 1987] Kaba kodu Arama Safhası dizgiyi_belirli_bir_anahtarlama_fonksiyonuna_uyarla hx dizgiye_uyarlanan_anahtar_değeri dizgi_uzunluğu_kadar_metinin_ilk_parçasını_anahtarlama_fonksiyonuna_uyarla hy metin_parçasına_uyarlanan_anahtar_değeri while j <=metin_uzunluğu-dizgi_uzunluğu do if (hx=hy) then karakterleri_karşılaştır, eşitlik sağlandığında, Dizgi_Bulundu hy değerini sonraki metin parçası için yeniden düzenle j Shift Or Algoritması Genel özellikleri Bitwise tekniğini kullanır, Dizgi uzunluğunun makinenin kelime uzunluğundan kısa olduğu durumlarda etkilidir,

18 10 Önişlem safhasında O(m + σ) zaman ve alan karmaşıklığı, Arama safhasında O(n) zaman karmaşıklığı (dizgi uzunluğu ve alfabe boyutuna bağlı), Yaklaşık dizgi eşlemeye kolayca uyum sağlar Tanımı Shift Or algoritması bitwise (bitler üzerinden mantıksal operatörlerle çalışma) tekniğini kullanır. Şekil 2.1 de görüldüğü gibi R, m uzunluğundaki dizi parçası olmak üzere R j vektörü y[j] metin karakterin işlenmesinden sonra ortaya çıkan R dizisinin değeridir. Bu değer metin içindeki y nin en son pozisyonunda bulunan xe ait uyuşan tüm öneklerin bilgisini içerir. 0 i m-1 için: ġekil 2.1: R j vektörünün ifadesi R j+1 vektörü R j vektöründen sonra şu şekilde hesaplanır. Her R j [i] =0 için: ve

19 11 Eğer R j+1 [m-1]=0 ise tüm eşleşme rapor edilebilir. R j den R j+1 e geçiş şu şekilde daha hızlı hesaplanabilir. içindeki her c için S c, m uzunluğundaki dizi parçası olsun. Bu durumda 0 i < m-1 için S c [i]=0 iff x[i]=c olur. S c dizisi x dizgisi içerisindeki c karakterine ait pozisyonları ifade eder. Her S c aramadan önce önişleme tabi tutulabilir. Ve R j+1 in hesabı iki operasyona dönüşür, shift ve or : R j+1 =SHIFT(R j ) OR S y[j+1]. Dizgi uzunluğunun makine kelime uzunluğundan uzun olmaması durumunda önişlem safhasındaki zaman ve alan karmaşıklığı O(m + σ) dir. Arama safhasında ise zaman karmaşıklığı dizgi uzunluğu ve alfabe boyutuna bağlı olarak O(n) olur [Baeza- Yates ve Gonnet, 1992] Kaba kodu ÖniĢlem Safhası for i 0 to alfabe_uzunluğu do S[i] ~0 for lim i 0 to dizgi_uzunluğu j 1, j<<=1 do S[dizgi[i]] &=~j lim =j lim=~(lim>>1) RETURN lim Arama Safhası if dizgi_uzunluğu>bellek kelime uzunluğu then HATAYI_BİLDİR lim Önişlem_lim_değeri for durum=~0, j 0 to metin_uzunluğu do durum (durum<<1) S[metin[j]] if durum<limit değeri then Dizgi_Bulundu

20 Morris-Pratt Algoritması Genel özellikleri Karşılaştırma işlemi soldan sağa doğru, Önişlem safhasında alan ve zaman karmaşıklığı O(m), Arama safhasında zaman karmaşıklığı O(m+n) (alfabe uzunluğuna bağlı), Arama safhası esnasında en fazla 2n-1 metin karakter karşılaştırması, Gecikme m tarafından sınırlandırılmış Tanımı Morris-Pratt algoritmasının tasarımı Brute Force algoritmasının iyi bir analizine dayanmaktadır ve özellikle bundan sonraki yöntem ise metin üzerindeki tarama esnasında biriktirilen bilginin tüketilmesine dayanır. Brute Force algoritması daha yakından incelendiğinde, kaydırma uzunluğunu arttırmanın ve metin üzerindeki dizginin uyuşma sağladığı bazı parçaların eş zamanlı olarak hatırlamanın mümkün olduğu görülebilir. Bu durum, metin karakterleri ve dizgi karakterleri arasındaki karşılaştırma işlemini saklamakta ve bu durumun sonucunda arama hızını arttırmaktadır. y üzerindeki bir sol j pozisyonda pencerede konumlanmış y[j..j+m-1] metin elemanını baz alan denemeyi göz önünde bulunduralım. İlk uyuşmazlığın 0<i<m koşulunda x[i] ile y[i+j] arasında olduğunu farz edelim. Ve sonra x[0..i-1]=y[j..i+j-1]=u ve a=x[i] y[i+j]=b. Kaydırma sırasında dizgi üzerindeki v önekinin metin parçası üzerindeki u soneki ile uyuşmanın beklenmesi muhtemeldir. En uzun v soneki u nun sınırı olarak isimlendirilir. Bu durum şu sonucu ortaya koyar: 0 < i m için mpnext[i], x[0...i-1] in en uzun sınır uzunluğu. Bir kaydırmadan sonra karşılaştırma metin üzerindeki dizginin

21 13 kayıpsız eşleşmesi ve metin üzerindeki geri dönüşlere yer vermeyerek şu şekilde devam eder: c=x[mpnext[i]] ve y[i+j]=b (Şekil 2.2). Sonra mpnext[0] =-1 yapılır. ġekil 2.2: Morris-Pratt algoritmasında kaydırma işlemi (v u nun sınırı) mpnext tablosu önişlem safhasında O(m) zaman ve alan karmaşıklığında hesaplanabilir. Arama safhası ise O(m+n) zaman karmaşıklığına sahiptir. Morris-Pratt algoritması arama safhası esnasında en fazla 2n-1 metin karakter karşılaştırması sağlamaktadır. Tek bir karakter için maksimum karşılaştırma sayısı (gecikme ) m ile sınırlıdır [Morris ve Pratt, 1970] Kaba kodu ÖniĢlem Safhası i 0, j mpnext[0] -1 while i < dizgi_uzunluğu do while j > -1 ve dizgi[i] dizgi[j] do j mpnext[j] mpnext[i++] ++j Arama Safhası i j 0 while j<metin_uzunluğu do while i>-1 ve dizgi[i] metin[j] do i mpnext[i] i++, j++ if i >=dizgi_uzunluğu then Dizgi Bulundu i mpnext[i]

22 Knuth-Morris-Pratt Algoritması Genel özellikleri Karşılaştırma işlemi soldan sağa doğru, Önişlem safhasında alan ve zaman karmaşıklığı O(m), Arama safhasında zaman karmaşıklığı O(m+n) (alfabe uzunluğuna bağlı), Gecikme log (m) tarafından sınırlandırılmış Tanımı y üzerindeki bir sol j pozisyonda pencerede konumlanmış y[j..j+m-1] metin elemanını baz alan denemeyi göz önünde bulunduralım. İlk uyuşmazlığın 0<i<m koşulunda x[i] ile y[i+j] arasında olduğunu farz edelim. Ve sonra x[0..i-1]=y[j..i+j-1]=u ve a=x[i] y[i+j]=b. Kaydırma sırasında dizgi üzerindeki v önekinin metin parçası üzerindeki u soneki ile uyuşmanın beklenmesi muhtemeldir. Bundan başka, eğer başka bir uyuşamazlıktan sakınmak isteniyorsa, dizgideki v önekini takip eden karakterin a dan farklı olması gerekmektedir. En uzun v öneki u nun etiketlenmiş sınırı olarak isimlendirilir [Knuth vd., 1977]. Bu durum şu sonucu ortaya koyar: 0 < i m için kmpnext[i], x[0...i-1] in en uzun sınır uzunluğu, c tarafından takip edilen ve x[i] ve -1 den faklı karakter. Bir kaydırmadan sonra karşılaştırma metin üzerindeki dizginin kayıpsız eşleşmesi ve metin üzerindeki geri dönüşlere yer vermeyerek şu şekilde devam eder: c=x[kmpnext[i]] ve y[i+j]=b (Şekil 2.3). Sonra kmpnext[0] =-1 yapılır.

23 15 ġekil 2.3: Knuth-Morris-Pratt algoritmasında kaydırma işlemi (v u nun sınırı ve c b) Kaba kodu ÖniĢlem Safhası i 0, j kmpnext[0] -1 while i < dizgi_uzunluğu do while j > -1 ve dizgi[i] dizgi[j] do j kmpnext[j] i++, j++ if dizgi[i]=dizgi[j] then kmpnext[i] kmpnext[j] else kmpnext[i] j Arama Safhası i j 0 while j< metin_uzunluğu do while i > -1 ve dizgi[i] metin[j] do i kmpnext[i] i++, j++ if i > dizgi_uzunluğu then Dizgi Bulundu i kmpnext[i]

24 Simon Algoritması Genel özellikleri * x dilinin tanımlanmasıyla en düşük deterministik sonlu otomatın, A(x) in ekonomik yorumlanması, Önişlem safhasında O(m) zaman ve alan karmaşıklığı, Arama safhasında O(m+n) zaman karmaşıklığı (alfabe uzunluğuna bağlı), Arama safhasında en fazla 2n-1 karakter karşılaştırması, Gecikme min{1 + log 2 m, σ } ile sınırlandırılmış Tanımı O(m σ). En küçük A(x) (DFA) ile arama işleminin temel sakıncası otomatın boyutudur: A(x) de kayda değer birkaç kenar değeri tespit edilmiştir. Bunlar; İlerdeki kenarlar 0 k < m için x in k uzunluğundaki önekinden k+1 uzunluğuna gitmektedir. m kenarları. Gerideki kenarlar x in k uzunluğundaki önekinden 0 (sıfır) olamayan uzunluktaki küçük öneke doğru gitmektedir. m ile sınırlanan kenarlar. Diğer kenarlar ise başlangıç durumuna öncülük etmektedir ve daha sonra işlem görmektedirler. Bu kayda değer kenarlar ise 2m ile sınırlanmaktadır. Sonra otomatın her durumu için sadece önemli dış kenarlarının listeye kaydedilmesi gerekmektedir. Her durum düzenli bir şekilde, -1 i m-1 için x[i] tarafından etiketlenen, her kenarın i durumuna öncülük ettiği, -1 öneki ile birleşen durumun uzunluğu ile temsil edilmektedir. Bu kenarların etiketlerinin saklanması gerekli değildir. İlerdeki kenarlar dizgi üzerinde kolayca anlaşılabilirler, bu nedenle saklanmazlar. Geriye sadece kayda değer geri kenarların saklanması kalır.

25 17 L tablosu m-2 uzunluğundaki bağlı liste olarak kullanılır. L[i] elementi i başlangıç durumuna ait kenarların hedef listesini verir. Düzenli olarak m-1 durumuna ait listeyi saklamaktan sakınmak için, L tablosunun hesaplanması sırasında l değeri x in en uzun sınırı olan l+1 şeklinde hesaplanır. Simon algoritmasının önişlem safhası L tablosunun ve l değerinin hesaplanmasını temel almaktadır. O(m) zaman ve alan karmaşıklığına sahiptir. Arama safhası bir otomat ile arama işlemi ile benzerdir. Dizgi üzerinde uyuşma bulunduğunda, geçerli durum l durumu ile güncellenir. Bu safha O(m+n) zaman karmaşıklığı ile sağlanır. Arama safhası boyunca en fazla 2n-1 karakter karşılaştırması yapılabilir. Gecikme (bir karakter için en fazla karşılaştırma sayısı) min{1+log 2 (m), σ} ile sınırlıdır [Simon, 1993] Kaba kodu ÖniĢlem Safhası memset (L, NULL, (dizgi_uzunluğu-2)*(listenin boyutu)) ell -1 for i 1 to dizgi_uzunluğu do k ell cell (ell -1? NULL : L[k]) ell -1 if dizgi[i]=dizgi[k+1] then ell k+1 else geçişi_ayarla (i-1, k+1, L) while cell NULL do k cell.element if dizgi[i]=dizgi[k] then ell k else geçişi_ayarla (i-1, k, L); cell cell.sonraki RETURN ell

26 18 Arama Safhası ell Önişlem_ell for durum -1, j 0 to metin _uzunluğu do durum geçişi_al (dizgi, dizgi_uzunluğu, durum, L, metin[j]) if durum >= dizgi_uzunluğu-1 then Dizgi Bulundu durum ell 2.8. Colussi Algoritması Genel özellikleri Knuth, Morris ve Pratt algoritmasının iyileştirilmiş halidir, Dizgi iki ayrı kümeye ayrılır; birinci küme eşleşme olmadığı sürece soldan sağa doğru taranırken diğer küme sağdan sola doğru taranır, Önişlem safhası O(m) zaman ve alan karmaşıklığına sahiptir, Arama safhası O(n) zaman karmaşıklığına sahiptir, En kötü durumda n metin karşılaştırması yapar Tanımı Colussi algoritmasının tasarımı Knuth, Morris ve Pratt algoritmasının sıkı bir analizine dayanmaktadır. Dizgi konumu iki ayrı kümeye bölünür. Sonra her deneme iki safhayı içerir: İlk safhada karşılaştırma kmpnext değerinin tam anlamıyla -1 den büyük olan değeri için dizgi pozisyonu ile hizalanmış metin karakterleri üzerinden soldan sağa doğru yapılır. Bu pozisyona deliksiz karģılaģtırma sıralaması denir.

27 19 İkinci safha ise diğer kümenin sağdan sola doğru karşılaştırmasını içerir. Bu pozisyon ise delikli karģılaģtırma sıralaması olarak isimlendirilir. Bu strateji iki avantajı ortaya çıkarmaktadır: İlk safhada bir uyuşmazlık olduğunda, uygun kaydırmadan sonra bir önceki deneme süresince karşılaştırılmış olan hizalı deliksiz metin karakterleri ile karşılaştırmaya gerek yoktur. İkinci safhada bir uyuşmazlık olduğunda, bu dizginin bir sonekinin metin faktörü üzerinde eşleştiği anlamına gelir, uygun kaydırmadan sonra dizginin öneki hala bir metin faktörüyle eşleşmektedir, sonra bu metin faktörünü tekrar karşılaştırmaya gerek yoktur. 0 i m-1: kmin[i]= d>0 için ancak ve ancak x[0.. i-1-d]=x[d.. i-1] ve x[id] x[i], diğer durumlarda 0 (sıfır). kmin 0 olduğunda bir frekans x içindeki i pozisyonu ile biter. delikli. 0 < i < m için eğer kmin[i-1] 0 ise i bir deliksiz, diğer durumda ise i bir nd+1, x içindeki deliksizlerin sayısı olsun. h tablosu ilk nd+1 deliksizlerini artan sırada ve sonra m-nd-1 deliklilerini azalan sırada içerir. 0 i nd için h[i] bir deliksiz ve 0 i<nd için h[i] < h[i+1]. nd < i < m için h[i] bir delikli ve nd < i < m-1 için h[i] > h[i+1]. Eğer i bir delikli ise rmin[i], i den büyük x in en küçük periyodudur. first[u] nin değeri u h[v] olarak en küçük v sayı değeri.

28 20 x in y[j.. j+m-1] ile hizalandığını farz edelim. 0 k < r < nd için eğer x[h[k]]=y[j+h[k]] ve x[h[r]] y[j+h[r]] ise j = j+kmin[h[r]] olsun. y[j.. j ] içerisindeki x in eşleşme durumu yoktur ve x, kmin[h[r]] konumu kadar sağa kaydırılabilir. (Şekil 2.4) Diğer taraftan 0 k < first[h[r]-kmin[h[r]]] için x[h[k]]=y[j +h[k]] durumu karşılaştırmanın x[h[first[h[r]-kmin[h[r]]]]] ve y[j +h[first[h[r]-kmin[h[r]]]]] şeklinde devam edebileceği anlamına gelmektedir. ġekil 2.4: Bir deliksiz ile uyuşmama. Deliksizler siyah daireler ve soldan sağa doğru karşılaştırılırlar. Bu durumda, kaydırmadan sonra, ilk iki deliksizi karşılaştırmaya gerek yoktur. 0 k < r için eğer x[h[k]]=y[j+h[k]] ve nd r < m için x[h[r]] y[j+h[r]] ise y[j.. j ] içerisinde x in uyuşmama durumu söz konusudur ve x, kmin[h[r]] konumu kadar sağa kaydırılır. Diğer taraftan x[0.. m-1-rmin[h[r]]]=y[j.. j+m-1 ] durumu karşılaştırmanın x[h[first[m-1-rmin[h[r]]]]] ve y[j +h[first[m-1-rmin[h[r]]]]] şeklinde devam edebileceği anlamına gelmektedir. (Şekil 2.5) ġekil 2.5: Bir delikli ile uyuşmama. Deliksizler siyah daireler ve soldan sağa doğru karşılaştırılırken, delikliler beyaz dairelerdir ve sağdan sola doğru karşılaştırılırlar. Bu durumda, kaydırmadan sonra, uyuşan dizgi önekinin tekrar karşılaştırılmasına gerek yoktur. kmin değerini hesaplamak için hmax tablosu kullanılır ve şu şekilde tanımlanır: hmax[k] öyle ki x[k.. hmax[k]-1]=x[0.. hmax[k]-k-1] ve x[hmax[k]] x[hmax[k]-k].

29 21 nhd0[i] değeri i değerinden tam anlamıyla küçük deliksizlerin sayısıdır. shift ve next isimli iki fonksiyon şu şekilde tanımlanmaktadır: i < nd için shift[i]=kmin[h[i]] ve next[i]=nhd0[h[i]-kmin[h[i]]]; nd i < m için shift[i]=rmin[h[i]] ve next[i]=nhd0[m-rmin[h[i]]] ; shift[m]=rmin[0] ve next[m]=nhd0[m-rmin[h[m-1]]]. Böylece, bir deneme esnasında pencerenin konumlanmış olduğu y[j.. j+m-1] metin faktörü üzerinde, x[h[r]] ve y[j+h[r]] arasında uyuşmama meydana geldiği zaman, pencere shift[r] kadar kaydırılır ve karşılaştırmalar h[next[r]] dizgi konumu boyunca devam edebilir. Algoritmanın önişlem safhası O(m) zaman ve alan karmaşıklığına sahiptir. Arama safhası O(n) zaman karmaşıklığına sahiptir. Ayrıca en kötü durumda n metin karşılaştırması yapar [Colussi, 1991] Kaba kodu ÖniĢlem Safhası dizgi uzunluğundaki hmax, kmin, nhd0 ve rmin dizilerini düzenle; dizgi üzerinde delikli_deliksiz durumlarını sapta ve hmax dizisini oluştur; hmax değerine bağlı olarak kmin dizisini oluştur; kmin ve hmax değerine bağlı olarak rmin dizisini oluştur; kmin değerine göre h dizisini oluştur; bütün bu değerler bağlı olarak ve delikli_deliksiz tüm konumları shift adlı kaydırma değerinde topla; RETURN nd Arama Safhası nd Önişlem_nd i j 0, son -1 while j <= dizgi_uzunluğu-metin_uzunluğu do while i< dizgi_uzunluğu ve son < j+h[i] ve dizgi[h[i]]=metin[j+h[i]] do i++ if i>= dizgi_uzunluğu veya son >= j+h[i] then Dizgi Bulundu i dizgi_uzunluğu if i> nd then

30 22 son j+dizgi_uzunluğu-1 j j+shift[i] i sonraki[i] 2.9. Galil-Giancarlo Algoritması Genel özellikleri Colussi algoritmasının iyileştirilmiş halidir, Önişlem safhası O(m) zaman ve alan karmaşıklığı, Arama safhası O(n) zaman karmaşıklığı, En kötü durumda n metin karakter karşılaştırması sağlar Tanımı Galil-Giancarlo algoritması Colussi algoritmasının bir varyantıdır. Değişiklik arama safhasında meydana gelmektedir. Yöntem x in tek karakter üssü olmadığı zaman uygulanır (x c m, c elemanıdır ). l, 0 i l, x[0]=x[i] ve x[0] x[l+1] için dizgi içindeki son indeks olsun. Bir önceki deneme süresince deliksizin eşleştiği ve dizgiye ait bir sonekin uyuştuğunu farz edersek bu, eş kaydırmadan sonra metin üzerindeki bir parçanın dizginin öneki ile uyuşacağı anlamına gelir. Böylece dizgi durumu y[j.. j+m-1] metin faktöründe konumlanır ve y[j.. son] parçası ile x[0.. son-j] uyuşma gösterir. Sonra bir sonraki deneme süresince algoritma y[son+1] ile başlayarak metin sonuna ulaşana dek ya da x[0] y[j+k] karakteri buluncaya kadar metini taramaya devam edecektir. Bu durumdan sonra iki alt durum meydana gelmektedir: x[l+1] y[j+k] veya en azından x[0] bulunur (k l) sonra dizgi konumu y[k+1.. k+m] metin faktörü kadar kaydırılır, metin taraması (Colussi

31 23 algoritmasında olduğu gibi) ilk deliksiz ile ve dizginin hafızada tutulan öneki boş kelime olacak şekilde devam eder. x[l+1]=y[j+k] ve x[0] yeterli olarak bulunur (k > l) sonra dizgi konumu y[k- l-1.. k- l+m-2] metin faktörü kadar kaydırılır, metin taraması (Colussi algoritmasında olduğu gibi) ikinci deliksiz ile (x[l+1] ilk deliksiz) ve dizginin hafızada tutulan x[0.. l+1] öneki olacak şekilde devam eder. Önişlem safhası aynen Colussi algoritmasında olduğu gibi O(m) zaman ve alan karmaşıklığına sahiptir. Arama safhası O(n) zaman karmaşıklığına sahipken ayrıca en kötü durumda n metin karakter karşılaştırması sağlar [Galil ve Giancarlo, 1992] Kaba kodu for ell 0 ve dizgi[ell]=dizgi[ell+1] do if ell=dizgi_uzunluğu-1 for j ell 0 to metin_uzunluğu do if dizgi[0]==metin[j] ell++ if ell>=dizgi_uzunluğu Dizgi Bulundu else ell 0 else ÖniĢlem Safhası Arama Safhası nd=önişlem_nd //Colussi Önişlem Aşaması i j ağır_karakter 0, son -1 while j<=metin_uzunluğu-dizgi_uzunluğu do if ağır_karater ve i=0 then k son-j+1 while dizgi[0]=metin[j+k] do k++ if k<=ell veya dizgi[ell+1] [j+k] then i 0, j j+ (k+1), son j-1;

32 24 else i 1, son j+k, j son-(ell+1) ağır_karakter 0 else while i< dizgi_uzunluğu ve son<j+h[i] dizgi[ h[i]] =metin[j+h[i]] do i++ if i>=dizgi_uzunluğu veya son>=j+h[i] then Dizgi Bulundu i dizgi_uzunluğu; if i>nd then son j+dizgi_uzunluğu-1 j j+shift[i]; i sonraki[i]; ağır_karakter (j< son? 0:1) Apostolico-Crochemore Algoritması Genel özellikleri Önişlem safhası O(m) zaman ve alan karmaşıklığı, Arama safhası O(n) zaman karmaşıklığı, En kötü durumda n metin karakter karşılaştırması Tanımı Apostolico-Crochemore algoritması kaydırma hesabı için Knuth-Morris-Pratt algoritmasındaki kmpnext kaydırma tablosunu kullanır. x tek bir karakterin üssü (x=c m ve c, nin bir elemanı) olmak üzere l=0 olsun ve l, x[0] dan farklı olarak x in ilk karakter pozisyonuna eşit olsun (x=a l bu için a, b elemanıdır, u elemanıdır * ve a b). Her deneme süresince karşılaştırma dizginin pozisyonları ile şu sırada gerçekleşmektedir: l, l+1,..., m-2, m-1, 0, 1,..., l -1.

33 25 Şekil 2.6 da görüldüğü üzere arama safhası süresince ise i,j,k üçlüsüne dikkat çekilmektedir ki; y[j.. j+m-1] metin faktörü zerinde konumlanmış; 0 k l ve x[0.. k-1]=y[j.. j+k-1]; l i < m ve x[l.. i-1]=y[j+ l.. i+j-1]. Başlangıç üçlüsü (l,0,0): ġekil 2.6: Apostolico-Crochemore algoritmasında her denemedeki i,j,k durumları açıklayalım. Şimdi i, j, k üçlüsü hesaplandıktan sonra sıradaki üçlünün nasıl hesaplandığını i değeri için 3 farklı durum ortaya çıkmaktadır: i = l Eğer x[i] = y[i+j] ise sıradaki üçlü (i+1, j, k). Eğer x[i] y[i+j] ise sıradaki üçlü (l, j+1, max{0, k-1}). l < i < m Eğer x[i] = y[i+j] ise sıradaki üçlü (i+1, j, k). Eğer x[i] y[i+j] ise kmpnext[i] değeri için iki farklı durum ortaya çıkmaktadır: kmpnext[i] l: ise sonraki üçlü (l, i+j-kmpnext[i], max{0, kmpnext[i]}) kmpnext[i] > l: ise sonraki üçlü (kmpnext[i], i+j-kmpnext[i], l)

34 26 i=m Eğer k < l ve x[k]=y[j+k] ise sonraki üçlü (i, j, k+1). Diğer durumda k< l ve x[k] y[j+k], veya k= l, eğer k= l olarak x üzerinde bir eşleşme olmuş ise. Her iki durumda da sıradaki üçlü l < i < m durumuna göre davranış gösterir. Önişlem safhası kmpnext tablosunun ve l sayı değerinin hesaplanmasını içermektedir. Bu safha O(m) zaman ve alanda yapılmaktadır. Arama safhası O(n) zaman karmaşıklığında yapılmakta ve en kötü durumda n metin karşılaştırması yapmaktadır [Apostolico ve Crochemore, 1991] Kaba kodu ÖniĢlem Safhası Knuth_Morris_Pratt_Önişlem_Safhası for ell 1 dizgi[ell-1]=dizgi[ell] do if ell=dizgi_uzunluğu then ell 0 Arama Safhası while j< metin_uzunluğu-dizgi_uzunluğu do while i< dizgi_uzunluğu ve dizgi[i]=metin[i+j] do i++ if i >=dizgi_uzunluğu then while k<ell ve dizgi[k]=metin[j+k] do k++ if k>=ell then Dizgi Bulundu j j+ (i- kmpnext[i] if i=ell then k MAX(0,k-1) else if kmpnext[i]<=ell then else k MAX(0, kmpnext[i]), i ell k ell, i kmpnext[i]

35 Not So Naive Algoritması Genel özellikleri Önişlem safhası sabit zaman ve alanda, Arama safhası O(nm) zaman karmaşıklığı, Ortalama durumda alt doğrusaldır Tanımı Not So Naive algoritmasının arama safhası süresince karakter karşılaştırması dizgi konumunda şu sırada yapılır: 1, 2,..., m-2, m-1, 0. Her denemede pencere y[j.. j+m-1] metin faktöründe konumlanmakta: eğer x[0]=x[1] ve x[1] y[j+1] ve eğer x[0] x[1] ve x[1]=y[j+1] ise dizgi 2 birim, diğer durumlarda ise 1 birim kaydırılır. Böylece önişlem safhası sabit zaman ve alanda yapılmaktadır. Not So Naive algoritmasının arama safhası en kötü durumda kuadratik zaman karmaşıklığına sahip fakat ortalama durumda alt doğrusaldır [Hancart, 1992] Kaba kodu ÖniĢlem Safhası if dizgi[0]=dizgi[1] then k 2, ell 1 else k 1, ell 2 Arama Safhası j 0 while j<=metin_uzunluğu- dizgi_uzunluğu do if dizgi[1] metin[j+1] then j j+k else if eşleşme tam ve dizgi[0]=metin[j] then Dizgi Bulundu, j j+ell

36 Forward Dawg Matching Algoritması Genel özellikleri x in sonek otomatlarını kullanır, En kötü durumda O(n) zaman karmaşıklığı, Tam anlamıyla n metin karakter karşılaştırması sağlar Tanımı Forward Dawg Matching algoritması metin içindeki sonlanan her pozisyon için en uzun dizgi elemanını hesaplar. Bu dizginin en küçük sonek otomatının kullanılmasını mümkün kılar. (DAWG olarak isimlendirilir. Directed Acyclic Word Graph-Çevrimsiz Kelime Grafiği). Bir kelimenin en küçük sonekli otomatı Deterministik Sonlu Otomattır S(w) = (Q, q 0, T, E). L(S(w))={u, * nın elemanı: w=vu öyle ki, v, * nın elemanı }. Forward Dawg Matching algoritmasının önişlem safhası x dizgisinin en küçük sonek otomatının hesaplanmasını içerir. Bu olay dizgi uzunluğu içerisinde, doğrusal zaman ve alanda yapılır. Arama safhası süresince Forward Dawg Matching algoritması q 0 başlangıç durumu ile S(x) otomatını kullanarak metin karakterlerinin soldan sağa doğru inceler. S(x) içerisindeki her q durumu için q 0 dan p ye en uzun yol length(q) olarak belirtilir. Bu yapı yaygın olarak sonek bağlantıları kavramını kullanır. Her p durumu için p nin sonek bağlantısı S[p] ile belirtilir. Bir p durumu için, Path(p)=(p 0,p 1,...,p l ) p nin sonek yolu olsun, öyle ki p 0 =p, 1 i l için, p i =S[p i-1 ] ve p l =q 0. Her y[j] metin karakteri için ardıl olarak, p geçerli durum olsun, sonra Forward Dawg Matching algoritması Path(p) nin ilk durumu için tanımlanmış bir geçiş olarak y[j] için tanımlanmış bir geçiş alır. P geçerli durumu eğer bir Path(p) durumundan y[j] ile etiketlenmiş bir geçiş yok ise bu geçişin hedef durumu veya q 0 başlangıç durumu ile güncellenir. length(p)=m olduğunda x e ait bir uyuşma bulunur.

37 29 Forward Dawg Matching algoritması tam anlamıyla n metin karakter karşılaştırması sağlar [Crochemore ve Ryteer, 1994] Kaba kodu ÖniĢlem Safhası otomat yenisonekotomatı (2*(dizgi_uzunluğu+2),2*(dizgi_uzunluğu+2)*Alfabe_Uzunluğu) SonekOtomatıİnşaEt (dizgi, dizgi_uzunluğu, otomat) hazırlık_değişkeni hazırlığı_al(otomat) Arama Safhası ell 0, durum hazırlık_değişkeni for j 0 to metin_uzunluğu do if hedefi_al (otomat, durum, metin[j] tanımlanmamış değilse) then ++ell, durum hedefi_al (otomat, durum, metin[j]) else while durum hazırlık_değişkeni ve hedefi_al ( otomat, durum, metin[j] tanımlanmamış) do durum SonekBağlantılarınıAl (otomat, durum) if hedefi_al (otomat, durum, metin[j] tanımlanmamış değilse) then ell uzunluğu_al (otomat, durum) +1 durum hedefi_al(otomat, durum, metin[j]) else ell 0, durum hazırlık_değişkeni if ell= dizgi_uzunluğu then Dizgi Bulundu

38 Boyer-Moore Algoritması Genel özellikleri Karşılaştırma işlemi sağdan sola doğru sağlanır, Önişlem safhası O(m+ σ) zaman ve alan karmaşıklığına sahiptir, Arama safhası O(mn) zaman karmaşıklığı, Periyodik olmayan dizgilerin aramasında en kötü durumda 3n metin karakter karşılaştırması, O(n / m) en iyi performans Tanımı Boyer-Moore algoritması alışılmış uygulamalar için çok etkili bir algoritma olarak bilinmektedir. Algoritmanın basitleştirilmiş hali metin editörlerinde sıkça ara ve yerleştir komutlarıyla yorumlanmaktadır. Algoritma dizgi karakterlerinin en sağındaki karakterden başlayarak sağdan sola doğru arama işlemini gerçekleştirir. Uyuşmama durumunda (ya da tüm karakterlerin uyuşması durumunda) önceden hesaplanmış iki kaydırma fonksiyonu kullanmaktadır. Bunlar iyi-sonek (ya da uyuşma kaydırması) ve kötü-karakter (oluş kaydırması) olarak isimlendirilirler. Bir denemede j pozisyonunda x[i]=a dizgi karakteri ve y[i+j]=b metin karakteri arasında bir uyuşmama meydana geldiğini farz edelim. Ve x[i+1.. m-1]=y[i+j+1.. j+m- 1]=u ve x[i] y[i+j] dir. İyi-sonek kaydırması x[i] den farklı bir karakterden önce gelen x içerisindeki en sağdaki uyuşma ile y[i+j+1.. j+m-1]=x[i+1.. m-1] bölümünün hizalanması işlemlerini içerir. (Şekil 2.7)

39 31 ġekil 2.7: İyi-sonek kaydırması, a dan farklı bir c karakterinden önce gelen tekrar uyuşan u. Eğer böyle bir bölüm yok ise, kaydırma x in uyuşan öneki ile, y[i+j+1.. j+m-1] nin en uzun v sonekinin hizalanmasını işlemini içerir. (Şekil 2.8) ġekil 2.8: İyi-sonek kaydırması, x içerisinde tekrar eden sadece u soneki. Kötü-karakter kaydırması, x[0.. m-2] in en sağ uyuşan elemanı ile y[i+j] metin karakterinin hizalanmasını içerir. (Şekil 2.9) ġekil 2.9: Kötü-karakter kaydırması, x içersindeki uyuşmayan a. Eğer y[i+j], x dizgisi içerisinde yoksa y içerisindeki x in uyuşmayanını y[i+j] içerebilir, pencerenin en son sol karakteri y[i+j+1] ile hizalanır. (Şekil 2.10)

40 32 ġekil 2.10: Kötü-karakter kaydırması, x içersinde yer almayan b. Kötü-karakter kaydırmasının negatif olabileceği göz önünde bulundurulmalıdır, bu yüzden kaydırma için, Boyer-Moore algoritması iyi-sonek ve kötü-karakter değerleri arasından maksimumu alır. Formül olarak bu iki fonksiyon şu şekilde tanımlanabilir: İyi-sonek kaydırma fonksiyonu m+1 uzunluğundaki bmgs tablosunda saklanır. İki şart tanımlanması gerekirse: Cs(i, s): her k için öyle ki i < k < m, s Co(i, s): eğer s <i ise x[i-s] x[i] k veya x[k-s]=x[k] ve Sonra, 0 i < m için: bmgs[i+1]=min{s>0 : Cs(i, s) ve Co(i, s)} ve bmgs[0], x in periyot uzunluğu olarak tanımlanır. bmgs hesabında suff tablosu kullanılır ki şu şekilde tanımlanır: 1 i < m için, suff[i]=max{k : x[i-k+1.. i]=x[m-k.. m-1]}. Kötü-karakter kaydırma fonksiyonu σ uzunluğundaki bmbc tablosunda saklanır. içindeki c için, bmbc[c] = min{i : 1 i <m-1 ve x[m-1-i]=c} eğer x in içinde c geçiyorsa, diğer durumlarda m. bmbc ve bmgs tablolarının önişlem hesabı O(m+ σ) zaman ve alan karmaşıklığına sahiptir. Arama safhasındaki zaman karmaşıklığı kuadratiktir fakat periyodik olmayan dizgide en fazla 3n metin karşılaştırması yapar. Geniş alfabelerde algoritma oldukça hızlıdır. En iyi performansta sadece O(n/ m) karşılaştırma yapar (b n için a m-1 b ) [Boyer ve Moore, 1977]. Bu iki önişlem safhasından hangisinin algoritma hızına olan etkisi daha çoktur? sorusu alt-dizgiler üzerinde ayrı bir çalışma konusu olarak ele alınmıştır. Bu

41 33 araştırmaya göre alt dizgileri (substring) kullanan ön işlem safhası yani iyi-sonek önişlem safhası çoğu zaman kötü karakter önişlem safhasına göre daha etkin bir kaydırma gerçekleştirmektedir [Stomp, 2003] Kaba kodu ÖniĢlem Safhası 1 for i 0 to alfabe_uzunluğu do bmbc[i] dizgi_uzunluğu for i 0 to dizgi_uzunluğu-1 do bmbc[dizgi[i]] dizgi_uzunluğu-i-1 ÖniĢlem Safhası 2 sonekleri_tespit_et ( dizgi, dizgi_uzunluğu, sonek) for i 0 to dizgi_uzunluğu do bmgs[i] dizgi_uzunluğu, j 0 for i dizgi_uzunluğu-1 down to -1 do if i=-1 veya sonek[i]=i+1 then for to j dizgi_uzunluğu-1-i do if bmgs[j]=dizgi_uzunluğu then bmgs[j] dizgi_uzunluğu -1-i for i 0 to dizgi_uzunluğu-2 do bmgs[dizgi_uzunluğu-1-sonek[i]] dizgi_uzunluğu-1-i Arama Safhası while j <=metin_uzunluğu-dizgi_uzunluğu do for i (dizgi_uzunluğu -1) down to 0 ve dizgi[i]=metin[i+j] do if i <0 then Dizgi Bulundu j j+bmgs[0] else j j+max(bmgs[i], bmbc[metin[i+j]-dizgi_uzunluğu+1+i)

42 Turbo-BM Algoritması Genel özellikleri Boyer-Moore algoritmasının bir varyantıdır, Boyer-Moore algoritmasına göre ekstra bir önişlem safhası gerektirmez, Boyer-Moore algoritmasına göre ekstra sabit alana ihtiyaç vardır, Önişlem safhası O(m+ σ) zaman ve alan karmaşıklığı, Arama safhası O(n) zaman karmaşıklığı, En kötü durumda 2n metin karakter karşılaştırması Tanımı Turbo-BM algoritması Boyer-Moore algoritmasının iyileştirilmiş halidir. Boyer- Moore algoritmasına göre ekstra sabit alan gerektirirken, ekstra bir önişlem safhasına ihtiyaç duymaz. Algoritma son deneme süresince dizginin soneki ile uyuşma gösteren metin faktörünü hatırlaması işlemine dayanmaktadır (ve eğer sadece iyi-sonek kaydırması sağlanmışsa). Bu teknik iki avantaj sunmaktadır: Bu faktörü atlamak mümkün olabilmektedir; Bir turbo-kaydırma işleminin sağlanmasına yardımcı olabilmektedir. Bir turbo-kaydırma, eğer geçerli deneme süresince dizgi soneki ile bununla uyuşan metin faktörü bir önceki denemeden hatırlanandan daha kısa olması durumunda gerçekleşmektedir. Bu durumda u hatırlanan faktör ve v geçerli deneme boyunca uyuşan soneki ve böylece uzv, x in bir soneki olsun. a ve b ise sırasıyla metin dizgi karakterleri üzerindeki uyuşmamaya sebep olan karakterler olsun. Sonra v < u olduğu sürece x in bir soneki olan av, u nun da soneki olur. a ve b karakterleri metin içinde p uzaklığında meydana gelir, uzv uzunluğundaki x in soneki, u, uzv nin bir sınırı olduğu sürece p= zv uzunluğundaki bir periyoda sahiptir, böylece metin içindeki p uzaklığındaki, iki

43 35 farklı a ve b karakterlerinin ikilisinin uyuşmasını aşamaz. En küçük kaydırma u - v uzunluğundadır ve turbo-kaydırma olarak isimlendirilir. (Şekil 2.11) ġekil 2.11: v < u durumunda meydana gelen bir turbo-kaydırma. v < u durumunda eğer kötü-karakter kaydırmasının uzunluğu, iyi-sonek kaydırması ve turbo kaydırma uzunluğundan daha uzun ise, güncel kaydırma u +1 ya eşit ya da büyük olmalıdır. Aslında bir önceki kaydırmanın iyi-sonek kaydırması olduğunu farz ettiğimiz sürece, bu durumda c ve d karakterleri birbirinden farklı iki karakterdir. (Şekil 2.12) ġekil 2.12: c d, böylece v içerisindeki aynı karakterle hizalanamaz. u +1 den küçük ve turbo-kaydırmadan büyük bir kaydırma, c ve d karakterleri v içerisindeki benzer karakter ile hizalanabilir. Böyle bir durum olduğunda ise güncel kaydırmanın uzunluğu en az u +1 olmalıdır. Önişlem safhası O(m+ σ) zaman ve alan karmaşıklığına sahiptir. Arama safhası O(n) zaman karmaşıklığına sahiptir. Metin karakter karşılaştırma sayısı 2n ile sınırlıdır [Crochemore vd., 1992].

44 Kaba kodu ÖniĢlem Safhası Boyer_Moore_Önişlem_Safhası_1 Boyer_Moore_Önişlem_Safhası_2 Arama Safhası j u 0, shift dizgi_uzunluğu while j<= metin_uzunluğu - dizgi_uzunluğu do i dizgi_uzunluğu-1; while i>=0 ve dizgi[i]= metin[i+j] do i-- if u 0 (sıfır) ve i= dizgi_uzunluğu-1-shift then i i-u if i< 0 then Dizgi Bulundu shift bmgs[0] u dizgi_uzunluğu-shift else v dizgi_uzunluğu-1-i, turboshift u-v bcshift bmbc[metin[i+j]]-dizgi_uzunluğu+1+i shift MAX(turboShift, bcshift) shift MAX(shift, bmgs[i]) if shift=bmgs[i] then u MIN(dizgi_uzunluğu-shift, v) else if turboshift< bcshift then shift MAX(shift,u+1) u 0 j j+shift

45 Apostolico-Giancarlo Algoritması Genel özellikleri Boyer-Moore algoritmasının varyantıdır, Önişlem safhası O(m+ σ) zaman ve alan karmaşıklığı, Arama safhası O(n) zaman karmaşıklığı, En kötü durumda n metin karakter karşılaştırması Tanımı Boyer-Moore algoritmasının analizi zordur çünkü her denemeden sonra uyuşma gösteren karakterler unutulmaktadır. Bu algoritma her deneme sonunda pencerenin en sağ sonundaki dizginin en uzun sonekini hatırlayabilen bir algoritmadır. Bu bilgi ise skip isimli bir tabloda tutulmaktadır. Bir deneme esnasında j den küçük bir konumda, algoritmanın 0 < i < m için i+j konumunda k uzunluğundaki x in soneki ile uyuşma gösterdiğini farz edersek, skip[i+j] tablo değeri k ya eşit olur. suff[i], 0 i < m için, x içerisindeki i konumu sonunda bulunan x in en uzun sonek uzunluğuna eşit olsun. Deneme esnasında j konumunda, eğer algoritma y[i+j+1.. j+m-1] metin faktörünü başarılı bir şekilde karşılaştırmışsa dört farklı durum ortaya çıkmaktadır: Durum1: k > suff[i] ve suff[i]=i+1. Bu, j konumunda x uyuşması bulunduğu anlamına gelmektedir ve skip[j+m-1] değeri m ye eşitlenir. Bir per(x) uzunluğundaki kaydırma sağlanmıştır.(şekil 2.13) ġekil 2.13: x e ait bir uyşma bulundu.

46 38 Durum 2: k > suff[i] ve suff[i] i. Bu, x[i-suff[i]] ve y[i+j-suff[i]] karakterleri arasında bir uyuşmama meydana geldiği anlamına gelmektedir ve skip[j+m-1] değeri m-1-i+suff[i] ye eşitlenir. bmbc[y[i+j-suff[i]]] ve bmgs[i-suff[i]+1] kullanılarak bir kaydırma sağlanmıştır. (Şekil 2.14) ġekil 2.14: y[i+j-suff[i]] ve x[i-suff[i]] arasında bir uyuşmama meydana geldi. Durum 3: k < suff[i]. Bu, x[i-k] ve y[i+j-k] karakterleri arasında bir uyuşmama meydana geldiği anlamına gelmektedir ve skip[j+m-1] değeri m-1-i+k ye eşitlenir. bmbc[y[i+j-k]] ve bmgs[i-k+1] kullanılarak kaydırma sağlanmıştır. (Şekil 2.15) ġekil 2.15: y[i+j-k] ve x[i-k] arasında bir uyuşmama meydana geldi. Durum 4: k=suff[i]. Bu durum sadece y[i+j-k+1.. i+j] metin faktörü üzerinden bir "jump" ile gerçekleştirildiğinde y[i+j-k] ve x[i-k] karakterleri arasında düzenli olarak karşılaştırmaya devam edildiğinde gerçekleşir. (Şekil 2.16)

47 39 ġekil 2.16: a b. Her durumda gereken bilgi sadece x üzerindeki i konumu sonunda bulunan x in en uzun sonek uzunluğudur. Apostolico-Giancarlo algoritması iki veri yapısı kullanmaktadır: Her deneme sonunda şu yolla güncellenen j, skip tablosu: skip[j+m- 1]=max{ k : x[m-k.. m-1]=y[j+m-k.. j+m-1]} bmgs tablosunun hesaplanması esnasında kullanılan suff tablosu: 1 i < msuff[i]=max{k : x[i-k+1.. i]=x[m-k.. m-1]} Apostolico-Giancarlo algoritmasının önişlem safhasındaki zaman ve alan karmaşıklığı Boyer-Moore ile aynıdır: O(m+ σ). Arama safhası esnasında her denemede skip tablosundaki sadece m bilgileri gerekmekte böylece skip tablosunun büyüklüğü O(m) olur. Apostolico-Giancarlo algoritması en kötü durumda n metin karşılaştırması yapar [Apostolico ve Giancarlo, 1986] Kaba kodu ÖniĢlem Safhası Boyer_Moore_Önişlem_Safhası_1 Boyer_Moore_Önişlem_Safhası_2 Arama Safhası j 0 for k 0 to metin_uzunluğu do skip[k] 0 while j <= metin_uzunluğu-dizgi_uzunluğu do i dizgi_uzunluğu

48 40 while i>0 ve ((skip[i+j] 0 ve (sonek[i]>=skip[i+j] veya i<=sonek[i])) veya (skip[i+j]=0 ve dizgi[i]=metin[i+j])) do i i-max(1, skip[i+j]) if i<=0 then Dizgi Bulundu skip[j+dizgi_uzunluğu] dizgi_uzunluğu j j+bmgs[0] else if skip[i+j] 0 then i i-sonek[i] skip[j+dizgi_uzunluğu] dizgi_uzunluğu-i j j+max(bmbc[metin[i+j]-dizgi_uzunluğu+j, bmgs[i]) Reverse Colussi Algoritması Genel özellikleri Boyer-Moore algoritmasının iyileştirilmiş halidir; Dizgi konum kümesini iki ayrı alt kümeye böler; Önişlem safhası O(m 2 ) zaman ve O(m σ) alan karmaşıklığı; Arama safhası O(n) zaman karmaşıklığı; En kötü durumda 2n metin karakter karşılaştırması Tanımı Karakter karşılaştırması h tablosu kullanılarak özel bir şekilde yapılmaktadır. 0 i m için her i sayı değeri için iki alt küme tanımlanır: Pos(i)={k : 0 k i ve x[i] = x[i-k]} Neg(i)={k : 0 k i ve x[i] x[i-k]} 1 k m için, l k-1 durumunda hmin[k] minimum l sayı değeri olsun ve l< i m-1 iken bütün i ler için k, Neg(i) içinde olmasın. 0 l m-1 için, hmin[k]= l k

49 41 durumunda eğer herhangi bir k varsa, kmin[l] minimum k sayı değeri olsun ve diğer durumda kmin[l]=0 olsun. 0 l m-1 için, r > l durumunda rmin[l] minimum k sayı değeri olsun ve hmin[r]=r-1 olsun. h[0] değeri m-1 e eşitlenir. Sonra kmin[h[i]] 0 için, kmin[l] artan düzende tüm indeksler h[1],..., h[d] şeklinde seçilir ve 1 i d için rcgs[i] değeri kmin[h[i]] değerine eşitlenir. Sonra h[d+1],..., h[m-1] indeksleri artan sırada seçilir ve d < i < m için rcgs[i] değeri rmin[h[i]] değerine eşitlenir. rcgs[m] değeri x in periyoduna eşitlenir. rcbc tablosu şu şekilde tanımlanmaktadır: rcbc[a, s]=min{k : (k=m or x[m-k- 1]=a) ve (k > m-s-1 veya x[m-k-s-1]=x[m-s-1])}. rcbc tablosunun hesaplanması için ise: içerisindeki her c için, locc[c], x[0.. m-2] içerisindeki c ye ait bütün en sağdaki eşleşen karakter (eğer c x[0.. m-2] içinde geçmiyorsa, locc[c], -1 e eşitlenir). Bir link tablosu her dizgi karakteri üzerindeki geriye doğru geçen karakterler için kullanılır. Önişlem safhası O(m 2 ) zaman ve O(m σ) alan karmaşıklığında sağlanmaktadır. Arama safhası O(n) zaman karmaşıklığına sahiptir [Colussi, 1994] Kaba kodu ÖniĢlem Safhası dizgi uzunlugundaki hmin, kmin, link ve rmin dizilerini düzenle alfabe uzunluğundaki locc dizisini düzenle link dizisine bağlı olarak dizgi_üzerinden locc dizi_değerlerini hesapla link ve locc dizilerine bağlı rc_kötü_karakter_dizisini (rcbc)hesapla hmin dizi değerlerini hesapla hmin dizisine bağlı kmin dizisini hesapla hmin dizisine bağlı rmin dizisini hesapla hmin, kmin, rmin dizilerine bağlı rc_iyi_sonek_dizisini (rcgs) hesapla

50 42 Arama Safhası j 0, s dizgi_uzunluğu while j<=metin_uzunluğu-dizgi_uzunluğu do while j < metin_uzunluğu-dizgi_uzunluğu ve dizgi[dizgi_uzunluğu-1] metin[j+dizgi_uzunluğu+1]) do s rcbc [metin[j+dizgi_uzunluğu-1]][s] j j+s for i 1 to dizgi_uzunluğu ve dizgi[h[i]=metin[j+h[i]]) do if i>=dizgi_uzunluğu then Dizgi Bulundu s rcgs[i], j j+s Horspool Algoritması Genel özellikleri Boyer-Moore algoritmasının sadeleştirilmiş halidir, Yorumlanması kolaydır, Önişlem safhası O(m+ σ) zaman ve O(σ) alan karmaşıklığına sahiptir, Arama safhası O(mn) zaman karmaşıklığına sahiptir, Bir karakter için ortalama karşılaştırma sayısı 1/ σ ile 2/( σ +1) arasındadır Tanımı Boyer-Moore algoritmasında kullanılan kötü-karakter kaydırma fonksiyonu küçük alfabeler için çok etkili değildir, fakat alfabe dizgi uzunluğu ile karşılaştırıldığında daha geniş ise, sıklıkla ASCII tablosundan karakterler varsa ve arama sıradan bir metin editörü altında yapılıyorsa çok kullanışlı olabilmektedir. Yalnız başına kullanıldığında pratikte çok etkili bir algoritma ortaya koymaktadır. Kaydırma sadece Boyer-Moore algoritmasındaki kötü-karakter kaydırma fonksiyonunu, pencerenin en sağındaki karakteri kullanarak yapılmaktadır.

51 43 Önişlem safhası O(m+ σ) zaman ve O(σ) alan karmaşıklığına sahiptir. Arama safhası en kötü durumda kuadratiktir fakat bir karakter için ortalama karşılaştırma sayısı 1/ σ ile 2/( σ +1) arasındadır [Horspool, 1980] Kaba kodu ÖniĢlem Safhası Boyer_Moore_Önişlem_Safhası_1 Arama Safhası j 0 while j<= metin_uzunluğu-dizgi_uzunluğu do c metin[j+dizgi_uzunluğu-1] if dizgi[dizgi_uzunluğu-1]=c ve memcmp (dizgi, metin+j, dizgi_uzunluğu-1)=0 then Dizgi Bulundu j j+bmbc[c] Quick Search Algoritması Genel özellikleri Boyer-Moore algoritmasının sadeleştirilmiş halidir, Sadece kötü-karakter kaydırma fonksiyonunu kullanır, Yorumlanması kolaydır, Önişlem safhası O(m+ σ) zaman ve O(σ) alan karmaşıklığına sahip, Arama safhası O(mn) zaman karmaşıklığına sahip, Kısa dizgi ve geniş alfabelerde pratik olarak çok hızlıdır.

52 Tanımı Quick Search algoritması sadece kötü-karakter kaydırma tablosunu kullanır. Her deneme sonunda pencerenin konumlandığı y[j.. j+m-1] metin faktörü üzerinde, kaydırma uzunluğu en az 1 e eşit olur. Bu nedenle y[j+m] karakteri zorunlu olarak sonraki deneme için gerekmekte, böylece bu geçerli denemenin kötü-karakter kaydırması için kullanılabilmektedir. Mevcut algoritmanın kötü-karakter kaydırması yavaşça x in son karakterinin şu hesabına dönüşmektedir: içinde c için, qsbc[c]=min{i : 0 i < m ve x[m-1-i]=c} eğer c, x içinde varsa, diğer durumlarda ise m. Önişlem safhası O(m+ σ) zaman ve O(σ) alan karmaşıklığına sahiptir. Arama safhasında karşılaştırma işlemi herhangi bir düzende yapılabilmektedir. Arama safhası kuadratik zaman karmaşıklığına sahiptir fakat pratik olarak iyi bir davranış göstermektedir [Sunday, 1990] Kaba kodu ÖniĢlem Safhası for i 0 to alfabe_uzunluğu do qsbc[i] dizgi_uzunluğu+1 for i 0 to dizgi_uzunluğu do qsbc[dizgi[i]] dizgi_uzunluğu-i Arama Safhası while j <=metin_uzunluğu-dizgi_uzunluğu do if memcmp(dizgi, metin+j, dizgi_uzunluğu)=0 then Dizgi Bulundu j j+qsbc[metin[j+dizgi_uzunluğu]]

53 Tuned Boyer-Moore Algoritması Genel özellikleri Boyer-Moore algoritmasının basitleştirilmiş hali, Yorumlanması kolay, Pratikte çok hızlıdır Tanımı Tuned Boyer-Moore algoritması pratikte çok hızlı olan, Boyer-Moore algoritmasının basitleştirilmiş bir hali olarak yorumlanmış bir algoritmadır. Dizgi eşleme algoritmalarında maliyet artışına neden olan durum dizgi karakteri ile o penceredeki karakterin eşleşip eşleşmediğini kontrol etmektir. Bundan sakınmak için, tam anlamıyla karakterleri karşılaştırmadan önce birkaç kaydırma işlemi yapmak mümkündür. Algoritma y içerisindeki x[m-1] derini bulmak için kötü-karakter kaydırma fonksiyonunu kullanır ve bir satırda üç kör kaydırma yaparak eşleşmeyi bulana kadar kaydırmaya devam eder. Bunun için bmbc[x[m-1]] değerini farklı bir shift değerinde saklanması ve bmbc[x[m-1]] değerinin 0 (sıfır) a eşitlenmesi gerekmektedir. Bu, y sonundaki x[m-1] uyuşmasına m değerinin eklenmesini gerektirmektedir. x[m-1] bulunduğunda m-1, pencerenin diğer karakterleri kontrol edilir ve shift uzunluk değeri kadar kaydırılır. Dizgi ve metin karakterleri arasındaki karşılaştırma işlemleri herhangi bir düzende yapılabilmektedir. Algoritma en kötü durumda kuadratik zaman karmaşıklığına sahiptir fakat iyi bir davranış göstermektedir [Hume ve Sunday, 1991] Kaba kodu ÖniĢlem Safhası Boyer_Moore_Önişlem_Safhası_1 shift bmbc[dizgi[dizgi_uzunluğu-1]] bmbc[dizgi[dizgi_uzunluğu-1]] 0

54 46 memset (metin+metin_uzunluğu, dizgi[dizgi_uzunluğu-1], dizgi_uzunluğu) Arama Safhası while j < metin_uzunluğu do k bmbc[metin[j+dizgi_uzunluğu-1]] while k 0 do j j+k, k bmbc[metin[j+dizgi_uzunluğu-1]] j j+k, k bmbc[metin[j+dizgi_uzunluğu-1]] j j+k, k bmbc[metin[j+dizgi_uzunluğu-1]] if memcmp (dizgi, metin+j, dizgi_uzunluğu-1)=0 ve j< metin_uzunluğu Dizgi Bulundu j j+shift Zhu-Takaoka Algoritması Genel özellikleri Boyer-Moore algoritmasının bir varyasyonudur, Kötü-karakter kaydırmasını hesaplamak için iki ardıl metin karakterini kullanır, Önişlem safhası O(m+ σ 2 ) zaman ve alan karmaşıklığı, Arama safhası O(mn) zaman karmaşıklığı Tanımı Zhu ve Takaoka ardıl iki metin karakteri için kötü-karakter kaydırmasını göz önünde bulundurarak kaydırma işlemini gerçekleştiren bir algoritma tasarladırlar. Arama safhası süresince karşılaştırma işlemi sağdan sola doğru ve y[j.. j+m-1] metin faktörü üzerinde pencerenin konumlandığı, x[m-k+1.. m-1]=y[j+m-k+1.. j+m-1] olduğu sürece eşleşmemenin x[m-k] ve y[j+m-k] arasında olması durumunda kaydırmanın kötü-karakter algoritması ile y[j+m-2] ve y[j+m-1] metin karakter

55 47 değerleri ile yapıldığı bir algoritmadır. İyi-sonek tablosu ise kaydırma hesabını yapmak için kullanılmaktadır. Algoritmanın önişlem safhası (a,b) karakter çiftinin içinde axb içerisindeki ab nin en sağdaki ab için x[0.. m-2] uyuşma hesabını içermektedir. içinde a,b için: ztbc[a, b]=k ancak ve ancak, k<m-2 ve x[m-k.. m-k+1]=ab ve ab, x[m-k+2.. m-2] içinde geçmediğinde veya k=m-1 ve x[0]=b ve ab, x[0.. m-2] içinde geçmediğinde veya k=m ve x[0] b ve ab, x[0.. m-2] içinde geçmediğinde. Ayrıca önişlem safhası iyi-sonek bmgs tablosunun hesabını da içermektedir. Önişlem safhası O(m+ σ 2 ) zaman ve alan karmaşıklığına sahip ve arama safhası en kötü durumda kuadratiktir [Zhu ve Takaoka, 1987] Kaba kodu ÖniĢlem Safhası for i 0 to alfabe_uzunluğu do for j 0 to alfabe_uzunluğu do ztbc[i][j] dizgi_uzunluğu for i 0 to alfabe_uzunluğu do ztbc[i][dizgi[0]] dizgi_uzunluğu-1 for i 1 to dizgi_uzunluğu-1 do ztbc[dizgi[i-1][dizgi[i]] dizgi_uzunluğu-1-i Boyer_Moore_Önişlem_Safhası_2 Arama Safhası while j <=metin_uzunluğu-dizgi_uzunluğu do i dizgi_uzunluğu-1 while i< dizgi_uzunluğu ve dizgi[i]=metin[i+j]) do --i if i < 0 then Dizgi Bulundu j j+bmgs[0] else j j+max(bmgs[i], ztbc[metin[j+dizgi_uzunluğu-2]][metin[j+dizgi_uzunluğu-1]]

56 Berry-Ravindran Algoritması Genel özellikleri Quick Search ve Zhu-Takaoka algoritmalarının birleşimidir, Önişlem safhası O(m+ σ 2 ) zaman ve alan karmaşıklığı, Arama safhası O(mn) zaman karmaşıklığı Tanımı Berry-Ravindran algoritması ardıl iki metin karakteri için Boyer-Moore algoritmasındaki kötü-karakter fonksiyonunu göz önünde bulundurarak kaydırmayı pencerenin en sağ tarafından gerçekleştiren bir algoritmadır. Algoritmanın önişlem safhası (a,b) karakter çiftinin içinde axb içerisindeki ab nin en sağdaki uyuşma hesabını içermektedir. içindeki a ve b için; Önişlem safhası O(m+ σ 2 ) zaman ve alan karmaşıklığına sahiptir. Her denemeden sonra pencerenin konumlandığı y[j.. j+m-1] metin faktörü brbc[y[j+m],y[j+m+1]] kaydırma uzunluğu ile sağlanmaktadır. y[n] metin karakteri 0 (sıfır) a eşittir ve y[n+1] karakteri en son kaydırmayı hesaplamak amacıyla 0 (sıfıra) eşitlenir. Berry-Ravindran algoritmasının arama safhası O(mn) zaman karmaşıklığına sahiptir [Berry ve Ravindran, 1999].

57 Kaba kodu ÖniĢlem Safhası for a 0 to alfabe_uzunluğu do for b 0 to alfabe_uzunluğu do brbc[a][b] dizgi_uzunluğu+2 for a 0 to alfabe_uzunluğu do brbc[a][dizgi[0]] dizgi_uzunluğu+1 for i 0 to alfabe_uzunluğu do brbc[dizgi[i]][dizgi[i+1]] dizgi_uzunluğu-i for a 0 to alfabe_uzunluğu do brbc[dizgi[dizgi_uzunluğu-1]][a] 1 Arama Safhası while j <=metin_uzunluğu-dizgi_uzunluğu do if memcmp(dizgi, metin+j, dizgi_uzunluğu)=0 then Dizgi Bulundu j j+brbc[metin[j+dizgi_uzunluğu] [metin[j+dizgi_uzunluğu+1]] Smith Algoritması Genel özellikleri Horspool algoritmasının kötü-karakter kaydırma fonksiyonu ile Quick Search algoritmasının kötü-karakter fonksiyonunun maksimum değerini kullanır, Önişlem safhası O(m+ σ) zaman ve O(σ) alan karmaşıklığına sahip, Arama safhası O(mn) zaman karmaşıklığına sahip.

58 Tanımı Kaydırma hesabında metin üzerindeki ilk sağ karakter değerinin bazen en sağdaki değerden kısa olabilmektedir. Bu nedenle iki değer arasındaki maksimumu kullanmak algoritmanın hızı açısından etkili olmaktadır. Smith algoritmasının önişlem safhası Boyer-Moore algortimasındaki kötükarakter kaydırma fonksiyonunu ve Quick Search algoritmasının kötü-karakter fonksiyonunu içermektedir. Bu safha O(m+ σ) zaman ve O(σ) alan karmaşıklığına sahiptir. Arama safhasında ise bu algoritma en kötü durumda kuadratik zaman karmaşıklığına sahiptir [Smith, 1991] Kaba kodu ÖniĢlem Safhası Boyer_Moore_Önişlem_Safhası_1 Quick_Search_Önişlem_Safhası Arama Safhası while j <=metin_uzunluğu-dizgi_uzunluğu do if memcmp(dizgi, metin+j, dizgi_uzunluğu)=0 then Dizgi Bulundu j j+ MAX(bmBc[metin[j+dizgi_uzunluğu- 1]], qsbc[metin[j+dizgi]]) Raita Algoritması Genel özellikleri İlk önce dizginin son karakterini, sonra ilk ve son olarak geriye kalanlardan önce orta karakteri karşılaştırır,

59 51 Kaydırma işlemini Horspool algoritmasındaki gibi yapar, Önişlem safhası O(m+ σ) zaman ve O(σ) alan karmaşıklığına sahip, Arama safhası O(mn) zaman karmaşıklığına sahip Tanımı Her denemede öncelikle dizginin ilk son karakteri ile buna karşılık gelen metinin en sağdaki karakterini karşılaştıran, sonra eğer eşleşme olursa dizginin ilk karakteri ile buna karşılık gelen metnin en soldaki karakterini karşılaştıran ve yine eşleşme olduğunda dizginin orta karakteri ile buna karşılık gelen metnin orta karakterini karşılaştıran bir algoritmadır. Son olarak ikinci karakterden itibaren son karaktere kadar diğer karakterleri de karşılaştıran bu algoritma da muhtemelen orta karakter tekrar karşılaştırılmaktadır. Algoritmanın İngilizce metinler üzerinde pratik olarak iyi bir davranışa sahiptir ve bu performans karakter bağlılığının varlığı ile ilgilidir. Raita algoritmasının önişlem safhası Boyer-Moore algortimasındaki kötükarakter kaydırma fonksiyonunu içermektedir. Bu safha O(m+ σ) zaman ve O(σ) alan karmaşıklığına sahiptir. Arama safhasında ise bu algoritma en kötü durumda kuadratik zaman karmaşıklığına sahiptir [Raita, 1992] Kaba kodu ÖniĢlem Safhası Boyer_Moore_Önişlem_Safhası_1 firstch dizgi[0], secondch dizgi+1, middlech dizgi[dizgi_uzunluğu/2], lastch dizgi[dizgi_uzunluğu-1] Arama Safhası while j <=metin_uzunluğu-dizgi_uzunluğu do c metin[j+dizgi-1] if lastch=c ve middlech=metin[j+dizgi_uzunluğu/2] ve firstch=metin[j]

60 52 ve memcmp (secondch, metin+j+1, dizgi_uzunluğu-2)=0 then Dizgi Bulundu j j+bmbc[c] Reverse Factor Algoritması Genel özellikleri x R otomat sonekini kullanır, Pratikte uzun dizgi ve küçük alfabelerde çok hızlıdır, Önişlem safhası O(m) zaman ve alan karmaşıklığı, Arama safhası O(mn) zaman karmaşıklığı, Ortalamada en iyi performans Tanımı Boyer-Moore tipi algoritmalar dizgi üzerinde bazı sonek uyuşmalarını sağlayabilirler fakat sağdan sola doğru aramada pencere üzerinde öneklerin uyuşma ve bunun kaydırma uzunluğunu arttırabileceği ihtimali de vardır. Bu, dizgi tersinin en küçük otomat sonekini kullanılarak yapılabilir. Sonuçlanan bu algoritma Reverse Factor algoritması olarak isimlendirilir. W kelimesinin en küçük sonek otomatı DFA ve S(w) =(Q,q 0,T,E). S(w), L(S(w))={ u elemanıdır * : v elemanıdır * öyle ki w=vu}. Reverse Factor algoritmasının önişlem safhası x R ters dizgisinin en küçük sonek otomatının hesaplanmasını içerir. Bu safha dizgi uzunluğu içersinde sabit zaman ve alanda doğrusaldır. Arama safhası esnasında, Reverse Factor algoritması pencere üzerindeki karakterleri sağdan sola doğru S(x R ) otomatı ile q0 başlangıç durumu olacak şekilde böler. Bu durum otomatın geçerli durumundan pencerenin geçerli karakteri için

61 53 tanımlanmış geçiş kalmayıncaya kadar devam eder. Bu noktada uyuşan en uzun dizgi önek uzunluğunun hangisi olduğunu bilmek çok kolaydır: bu S(x R ) içerisindeki q 0 başlangıç durumundan rastlanan son duruma kadar olan yolun uzunluğuna uyar. En uzun önekin uzunluğunu bilmek, sağa doğru sağlanan kaydırmayı önemsiz kılar. Reverse Factor algoritması en kötü durumda kuadratiktir fakat ortalamada en iyi performansı verebilmektedir. Ortalama olarak en iyi sınır olarak O( n.log σ (m) / m ) metin karakter karşılaştırması yapmaktadır [Lecroq, 1992] Kaba kodu ÖniĢlem Safhası otomat yenisonekotomatı ( 2*(dizgi_uzunluğu+2), 2*(dizgi_uzunluğu+2)*Alfabe_uzunluğu) xr tersini_al (dizgi, dizgi_uzunluğu) SonekOtomatıİnşaaEt (xr, dizgi_uzunluğu, otomat) Arama Safhası while j<= metin_uzunluğu-dizgi_uzunluğu do i dizgi_uzunluğu-1 durum başlangıç_hazırlık_değişkeni shift dizgi_uzunluğu while i+j>=0 ve hedefi_al( otomat, durum, metin[i+j] tanımlanmamış değilse) do durum hedefi_al ( otomat, durum, metin[i+j]) if terminal_mi (otomat, durum) then periyot shift, shift i i-- if i<0 then Dizgi Bulundu shift=periyot j j+kaydırma

62 Turbo Reverse Factor Algoritması Genel özellikleri Reverse Factor algoritmasının iyileştirilmiş halidir, Önişlem safhası O(m) zaman ve alan karmaşıklığı, Arama safhası O(n) zaman karmaşıklığı, En kötü durumda 2n metin karakter karşılaştırması sağlar, Ortalamada iyi performans sağlar Tanımı Reverse Factor algoritmasını doğrusal yapmak mümkündür. Bu, son denemede x in uyuşan u öneki hatırlanması ile yeterli olabilmektedir. Mevcut deneme esnasında u nun en sağ sonuna ulaşıldığında, u nun en fazla en sağ yarısının tekrar okunmasının başarılı olduğunu göstermek kolaydır. Bu Turbo Reverse Factor algoritması ile yapılmaktadır. Eğer bir z kelimesi bir w kelimesinin elemanı ise, disp(z,w), w içerisindeki z nin yerini alması olarak tanımlanır ve w[m-d- z -1.. m-d]=z olarak en az d>0 dır. Turbo Reverse Factor algoritmasının genel durumu, metin içerisinde son denemede bir u öneki bulunduğu zaman ve geçerli deneme için algoritma, u nun hemen sağındaki metin içerisindeki m- u uzunluğundaki v elemanının uyuşması için deneme yapar. Eğer v, x in elemanı değilse, kaydırma Reverse Factor algoritmasındaki gibi hesaplanır. Eğer v, x in bir soneki ise, x içerisinde bir uyuşma bulunmuştur. Eğer v, x in bir soneki değil fakat bir elemanı ise, u nun en sağ karakteri olan min(per(u), u /2) nin tekrar karşılaştırılması başarılıdır. Eğer u periyodik ise (örneğin per(u) u /2), z, per(u) uzunluğunda x in bir soneki olsun. Periyodik bir tanım olarak z bir çevrimsiz (acyclic) kelimedir ve Şekil 2.17 de görüldüğü gibi bir üst üste gelme işlemi imkânsızdır.

63 55 ġekil 2.17: z bir çevrimsiz (acyclic) kelime ise üst üste gelme imkânsızdır. Böylece z, u içerisinde per(u) katsayısı uzaklığında meydana gelir ki bu, x in bir öneki olan ve uzunluğu uv -disp(zv,x)=m-disp(zv,x) ye eşit olan uv nin en küçük tam soneki anlamına gelir. Böylece kaydırma disp(zv, x) ile sağlanır. Eğer u periyodik değilse (per(u)> u /2), x per(u) uzunluğundaki u nun sol parçası içerisinde tekrar meydana gelmez. Sonra otomat içresinde tanımlanmamış olan geçişi bulmak için, u -per(u) < u /2 uzunluğundaki u nun sağ parçasını taramak başarılı sonuç verir. disp fonksiyonu S(x) içerisinde kendisinin anlam karmaşıklığını değiştirmeden direkt olarak yorumlanmıştır. Turbo Reverse Factor algoritmasının önişlem safhası x R sonek otomatının hesaplanmasını içerir. Bu safha O(m) zaman karmaşıklığına sahiptir. Arama safhası O(n) zaman karmaşıklığına sahiptir. Turbo Reverse Factor algoritması ortalamada en iyi performansı verebilmektedir. Ortalama olarak en iyi sınır olarak O( n.log σ (m) / m ) metin karakter karşılaştırması yapmaktadır [Crochemore, 1997] Kaba kodu ÖniĢlem Safhası otomat yenisonekotomotı(2*(dizgi_uzunluğu+2), 2*(dizgi_uzunluğu+2)*Alfabe_uzunluğu) xr tersini_al (dizgi, dizgi_uzunluğu) SonekOtomatıİnşaaEt (xr, dizgi_uzunluğu, otomat) hazırla_değişkeni hazırlığı_al(otomat) Morris_Pratt_Önişlem periyot dizgi_uzunluğu-mpnext[dizgi_uzunluğu]

64 56 i 0 shift dizgi_uzunluğu Arama Safhası while j<=metin_uzunluğu-dizgi_uzunluğu do i dizgi_uzunluğu-1 durum hazırla_değişkeni u dizgi_uzunluğu-1-shift u_değişkenin_periyodu ( shift dizgi_uzunluğu? dizgi_uzunluğu-shiftmpnext [dizgi_uzunluğu-shift]:0) shift dizgi_uzunluğu görüntü_değişkeni 0 while i >u ve hedefi_al(otomat, durum, metin[i+j]) tanımlanmamış değilse) do görüntü_değişkeni görüntü_değişkeni + kaydırmayı_al(otomat, durum, metin[i+j]) durum hedefi_al(otomat, durum, metin[i+j]) if terminal_mi(otomat, durum) then shift i i-- if i<=u then if görüntü_değişkeni=0 then Dizgi Bulundu shift periyot else mu (u+1)/2 if u_değişkenin_periyodu<=mu then u u-u_değişkenin_periyodu while i>u ve hedefi_al (otomat, durum, metin[i+j]) tanımlanmamış değilse do görüntü_değişkeni görüntü_değişkeni+ kaydırmayı_al (otomat, durum, metin[i+j]) durum hedefi_al (otomat, durum, metin[i+j]) if terminal_mi(otomat, durum) then shift i i-- if i<=u then shift görüntü_değişkeni else u u-mu-1 while i>u ve hedefi_al(otomat, durum, metin[i+j] tanımlanmamış ise do görüntü_değişkeni görüntü_değişkeni+kaydırmayı_al

65 57 j j+shift (otomat, durum, metin[i+j]) durum hedefi_al(otomat, durum, metin[i+j]) if terminal_mi (otomat, durum, metin[i+j]) then shift i --i Backward Oracle Matching Algoritması Genel özellikleri Reverse Factor algoritmasının x R sonek otomatı yerine x R sonek ayrıcalık (oracle) kullanan bir versiyonudur, Çok uzun dizgilerde ve küçük alfabelerde pratik olarak çok hızlı, Önişlem safhası O(m) zaman ve alan karmaşıklığına, Arama safhası O(mn) zaman karmaşıklığı, Ortalamada en iyi performans Tanımı Boyer-Moore tipi algoritmalar dizgi üzerinde bazı sonek uyuşmalarını sağlayabilirler fakat sağdan sola doğru aramada pencere üzerinde öneklerin uyuşma ve bunun kaydırma uzunluğunu arttırabileceği ihtimali de vardır. Bu, dizgi tersinin en küçük otomat sonekini kullanılarak yapılabilir. Bir kelimenin en az bütün soneklerinin ve başka diğer kelimelerin de bütün soneklerinin tespit eden bu veri yapısı çok karmaşık bir otomattır. Ters dizgi üzerinde ayrıcalık (oracle) kullanan bu dizgi eşleme algoritması Backward Oracle Matching algoritması olarak isimlendirilmektedir. Bir w kelimesinin ayrıcalıklı soneki Deterministik Sonlu Otomattır O(w) =(Q, q 0, T, E). Öyle ki; O(w), L(O(w)) içerisinde {u elemanıdır * : v elemanıdır * öyle ki w = vu}.

66 58 Backward Oracle Matching algoritmasının önişlem safhası ters dizginin x R en küçük sonek ayrıcalığının (oracle) hesaplanmasını içerir. Dizgi elamanı olamayan kelimelerin tespit edilebilmesi gerçeğine rağmen, dizginin tersini ayrıcalık (oracle) tarafından kendi kendine tespit eden sonek ayrıcalık (oracle), kelime uzunluğu m e eşit ya da m den büyük olana kadar dizgi eşleme yapmak için kullanılmaktadır. Ayrıcalık hesabı dizgi uzunluğu içersinde sabit zaman ve alanda doğrusaldır. Arama safhası esnasında, Backward Oracle Matching algoritması pencere üzerindeki karakterleri sağdan sola doğru O(x R ) otomatı ile q0 başlangıç durumu olacak şekilde böler. Bu durum otomatın geçerli durumundan pencerenin geçerli karakteri için tanımlanmış geçiş kalmayıncaya kadar devam eder. Bu noktada uyuşan en uzun dizgi önek uzunluğunun hangisi olduğunu bilmek çok kolaydır: bu O(x R ) içerisindeki q 0 başlangıç durumundan rastlanan son duruma kadar olan yolun uzunluğuna uyar. En uzun önekin uzunluğunu bilmek, sağa doğru sağlanan kaydırmayı önemsiz kılar. Backward Oracle Matching algoritması en kötü durumda kuadratiktir, fakat ortalamada en iyi performansı verebilmektedir. Ortalama olarak en iyi sınır olarak: O( n.log σ (m) / m ) metin karakter karşılaştırması yapmaktadır [Allauzen vd., 1999] Kaba kodu ÖniĢlem Safhası S[dizgi_uzunluğu] dizgi_uzunluğu+1 for i dizgi_uzunluğu down to 0 do c dizgi[i-1], p S[i] while p<=dizgi_uzunluğu ve (q geçişi_al (dizgi, p,l, c)) tanımlanmamış ise do geçişi_ayarla (p, i-1, L), p S[p] S[i-1] ( p=dizgi_uzunluğu+1? dizgi_uzunluğu:q), p 0 while p<=dizgi_uzunluğu do T[p] TRUE, p S[p]

67 59 Arama Safhası while j<= metin_uzunluğu-dizgi_uzunluğu do i dizgi_uzunluğu-1, p dizgi_uzunluğu shift dizgi_uzunluğu while i+j>=0 ve (q geçişi_al( dizgi, p, L, metin[i+j])) tanımlanmamış değilse do p q if T[p]=TRUE then periyot shift shift i i-- if i<0 then Dizgi Bulundu shift periyot, j j+shift Galil-Seiferas Algoritması Genel özellikleri Sabit ekstra alan karmaşıklığı, Önişlem safhası O(m) zaman ve sabit alan karmaşıklığı, Arama safhası O(n) zaman karmaşıklığı, En kötü durumda 5n metin karakter karşılaştırması Tanımı Bu algoritma k sabiti üzerinde yoğunlaşmakta olup, bu sabitin 4 olabileceği kararı verilmiştir. 0 i < m için reach fonksiyonunu şu şekilde tanımlayalım: reach(i)=i+max{i m-i : x[0.. i ]=x[i+1.. i +i+1]}. x[0.. p], x in bir öneki ve eğer temel ve reach(p) kp ise önek periyodudur.

68 60 Galil-Seiferas algoritmasının önişlem safhası x e ait v içeren uv nin en fazla bir önek periyodu olan ve u =O(per(v)) olan ayrıştırmasının bulunmasını içermektedir. Bu tip ayrıştırma kusursuz çarpanlarına ayırma adı verilmektedir. Arama safhası ise v nin her uyuşanı için y metinin taranmasını ve v nin uyuşması sonrası y içersinde u nun da uyuşup uyuşmadığının kontrolünü içermektedir. newp1(), newp2(), parse fonksiyonlarını içeren önişlem safhasının amacı, x in u=x[0.. s-1] ve v=x[s.. m-1] için uv kusursuz çarpanlarını bulmaktır.(şekil 2.18) newp1() fonksiyonu x[s.. m-1] in en küçük önekini bulur. newp2() fonksiyonu ise x[s.. m-1] nin ikinci en kısa önekini bulur ve parse fonksiyonu s değerini arttır. Search fonksiyonunu çağırmadan önce elde olanlar: x[s.. m-1] en fazla bir önek periyoduna sahip, Eğer x[s.. m-1] bir önek periyoduna sahip değilse o halde uzunluğu p1 dir, x[s.. s+p 1 +q 1-1], p1 uzunluğunun en kısa periyoduna sahip, x[s.. s+p 1 +q 1 ], p1 uzunluğunda bir periyoda sahip değil. ġekil 2.18: x in kusursuz ayrıştırılması Yani y içersinde x[s.. m-1] aranması şu anlama gelmektedir: p1 uzunluğundaki bir kaydırma ile sağlanan x[s.. s+p 1 +q 1-1] uyuşması x[s+q 1 ] ile karşılaştırmaya devam eder. Eğer x[s+q] ile ve q p 1 +q 1 ile bir uyuşmama meydana gelmişse q/k+1 uzunluğunda bir kaydırma sağlanır ve karşılaştırma x[0] ile devam eder. Bu tam anlamıyla doğrusal bir metin karşılaştırması sunar.

69 61 Galil-Seiferas algoritmasının önişlem safhası O(m) zaman ve sabit alan karmaşıklığına sahiptir. Arama safhası ise O(n) zaman karmaşıklığına sahiptir. En kötü durumda 5n metin karakter karşılaştırması yapmaktadır [Galil ve Seiferas, 1983] Kaba kodu P1: while dizgi[s+q1]=dizgi[s+p1+q1] do ++q1 if p1+q1>=k*p1 then p2 q1, q2 0 P2() else if s+p1+q1=dizgi_uzunluğu then search() else p1 p1+(q1/k+1), q1 0 P1() P2: parse: while dizgi[s+q2]=dizgi[s+p2+q2] ve p2+q2<k*p2 do ++q2 if p2+q2=k*p2 then parse() else if s+p2+q2=dizgi_uzunluğu then search() else if q2=p1+q1 then p2 p2+p1, q2 q2-p1 else p2 p2+(q2/k+1), q2 0 P2() while 1 do while dizgi[s+q1]=dizgi[s+p1+q1] do ++q1 while p1+q1>=k*p1 do s s+p1, q1 q1-p1 p1 p1+(q1/k+1), q1 0 if p1>=p2 then BREAK P1()

70 62 search: while p<=metin_uzunluğu-dizgi_uzunluğu do while p+s+q<metin_uzunluğu ve dizgi[s+q]=metin[p+s+q] do ++q if q=dizgi_uzunluğu-s ve memcmp( dizgi, metin+p, s+1)=0 then Dizgi Bulundu if q=p1+q1 then p p+p1, q q-p1 else p p+(q/k+1) q Two Way Algoritması Genel özellikleri Düzenli bir alfabe gerektirir, Önişlem safhası O(m) zaman ve sabit alan karmaşıklığı, Önişlem safhası için sabit alan karmaşıklığı, Arama safhası O(n) zamanda, En kötü durumda 2n-m metin karakter karşılaştırması Tanımı Dizgi x l ve x r olmak üzere x=x l xr olacak şekilde ikiye ayrılır. Daha sonra Two Way algoritmasının arama safhası ilk olarak x r kaarkterlerini soldan sağa doğru tarar, eğer uyuşmama olursa, x l karakterelrini sağdan sola doğru tarar. Algoritmanın önişlem safhası iyi bir x l x r ayrışımının seçimini yapmayı içerir. (u, v), x in ikili ayrımı olsun. (u, v) içeresindeki bir tekrar bir w kelimesi şu özelliklere sahiptir:

71 63 i. w, u nun bir soneki ya da u, w nin bir soneki; ii. w, v nin bir öneki ya da v, w nin bir öneki; Diğer bir deyişle w, u ve v arasındaki kesimin her iki tarafında, mümkün bir taşma ile meydana gelebilir. (u,v) içersindeki bir tekrarın uzunluğu yerel periyot olarak isimlendirilir ve (u,v) içersindeki en küçük tekrarın uzunluğu da yerel periyot olarak isimlendirilir ve r(u,v) olarak tanımlanır. Her (u,v) ayrışımı en az bir tekrara sahiptir. Bu kolayca 1 r(u,v) x üzerinde görülebilir. r(u,v)=per(x) olarak x in bir (u,v) ayrışımı x in kritik ayrışım olarak isimlendirilir. Eğer (u,v), x in bir kritik ayrışımı ise x içerisindeki u konumunda yerel ve genel periyotlar aynıdır. Two Way Algoritması x l < per(x) ve x l nin minimumu olmak şartıyla x l x r kritik ayrışımını seçer. x in x l x r kritik ayrımını hesaplamak için ilk olarak düzende x in z ve ters düzende nin maximal soneki hesaplanır. Sonra x =max{ z, } için (x l x r ) seçilir. Önişlem safhası O(m) zaman ve sabit alan karmaşıklığına sahiptir. Two Way algoritmasının arama safhası ilk olarak x r kaarkterlerini soldan sağa doğru taranması, eğer uyuşmama olursa, x l karakterelrini sağdan sola doğru taranması işlemini içerir. x r nin k. karakteri taranırken uyuşmama olursa, k uzunluğunda bir kaydırma sağlanır. x l taranırken bir uyuşmama olursa, veya dizgi üzerinde bir bulunma işlemi sağlanırsa per(x) uzunluğunda bir kaydırma sağlanır. Bir önek hatırlama işlemi ile kuadratik kötü durumdan sakınılabilir: per(x) uzunluğunda bir kaydırma sağlandığında kaydırma sonrası pencerenin başında dizgi üzerindeki uyuşan önekin uzunluğu (m-per(x) olarak isimlendirilmekte) sonraki denemede tekrar karşılaştırma işleminden sakınmak için hatırlanır.

72 64 Two Way algoritmasının arama safhası O(n) zaman karmaşıklığında yapılabilir. Two Way algoritması en kötü durumda 2n-m metin karakter karşılaştırması yapar [Crochemore ve Perrin, 1991]. Breslauer ise Two Way algoritmasının bir varyasyonu olarak sabit alan kullanarak 2n-m den az karakter karşılaştırması sağlayan bir algoritma da tasarlamıştır [Bresluer, 1996] Kaba kodu ÖniĢlem Safhası i MaksimumSonek1 (dizgi, dizgi_uzunluğu, &p) j MaksimumSonek2 (dizgi, dizgi_uzunluğu, &q) if i>j then ell i, per p else ell j, per q Arama Safhası if memcmp (dizgi, dizgi+per, ell+1)=0 then j 0, hafıza -1 while j<=metin_uzunluğu-dizgi_uzunluğu do i MAX (ell, hafıza)+1 while i<dizgi_uzunluğu ve dizgi[i]=metin[i+j] do ++i if i>=dizgi_uzunluğu then i ell while i>hafıza ve dizgi[i]=metin[i+j] do --i if i<=hafıza then Dizgi Bulundu j j+per, hafıza dizgi_uzunluğu-per-1 else j j+(i-ell), hafıza -1 else per MAX (ell+1, dizgi_uzunluğu-ell-1) +1, j 0 while j<=metin_uzunluğu-dizgi_uzunluğu do i ell+1 while i<dizgi_uzunluğu ve dizgi[i]=metin[i+j] do ++i if i>=dizgi_uzunluğu then i ell while i>=0 ve dizgi[i]=metin[i+j] do i if i<0 then Dizgi Bulundu j j+per else j j+ (i-ell)

73 String Matching On Ordered Alphabet Algoritması Genel özellikleri Önişlem safhası yoktur, Düzenli bir alfabeye ihtiyaç vardır, Sabit ekstra alan karmaşıklığı, Arama safhası O(n) zaman karmaşıklığı, En kötü durumda 6n+5 metin karakter karşılaştırması sağlar Tanımı Bir deneme esnasında pencerenin konumlanmış olduğu y[j.. j+m-1] metin faktörü, x in bir öneki olan u nun uyuşması durumunda ve x içerisindeki a ve y içerisindeki b arasında uyuşmama olmaması durumunda, algoritma ub nin periyodunu hesaplamasını dener, eğer tam periyodun bulunma işlemi başarılı olmazsa, onun yaklaşığını hesaplar.(şekil 2.19) ġekil 2.19: String Matching on an Ordered Alphabet algoritmasında tipik bir deneme süreci x kelimesinin tw e w' Maximal-Suffix analizini tanımlarsak eğer; Alfabetik sıralama boyunca v = w e w', x in en uzun öneki, w, temel, e 1, w', w nin tam bir öneki, ise t < per(x) durumu vardır.

74 66 vardır: Eğer tw e w', x kelimesinin boş olmayan bir Maximal-Suffix analizi ise 4 özellik Eğer t, w nin bir soneki ise per(x) = per(v); per(x) > t ; Eğer t w ise per(x) > v = x - t ; Eğer t, w nin bir soneki değilse ve t < w ise per(x) > min( v, tw e ). Eğer u, w nin bir soneki ise per(x)=per(v)= w. Diğer durumlarda per(x) > max( u,min( v, tw e )) x /2. Eğer tw e w', x kelimesinin boş olmayan bir Maximal-Suffix analizi ise per(x) = w ve e > 1 ise tw e-1 w', x' = uw e-1 w' nin Maximal-Suffix analizidir. Algoritma her denemeden sonra metinin uyuşmayan karakteri ile dizginin eklenmiş uyuşan önekinin Maximal Suffix (Maksimum Sonek) ini ekleyerek hesaplar. Bu hesaplamayı yaparken per(w)$ uzunluğunun sağlanması ile yapılan kaydırmadan sonraki eksikliklerden sakınır. Bu algoritma bir önişlem safhası gerektirmez. Arama safhası sabit ekstra alan kullanarak O(n) zaman karmaşıklığında yapılmaktadır. En kötü durumda 6n+5 fazla metin karakter karşılaştırması sağlamaz [Crochemore, 1992] Kaba kodu Arama Safhası while j<=metin_uzunluğu-dizgi_uzunluğu do while i+j< metin_uzunluğu ve i< dizgi_uzunluğu ve dizgi[i]=metin[i+j] do ++i if i=0 then ++j, ip -1, jp 0, k p 1 else if i >=dizgi_uzunluğu then Dizgi Bulundu SonrakiMaksimalSonekHesabı (metin+j, mi+1, &ip, &jp, &k, &p)

75 67 if ip<0 veya ip<p ve memcmp (metin+j, metin+j+p, ip+1)=0 then j j+p, i i-p if i<0 then i 0 if jp-ip>p then jp jp-p else ip -1, jp 0, k p 1 else j j+max (ip+1, MIN (i-ip-1, jp+1))+1 i jp 0, ip -1, k p Optimal Mismatch Algoritması Genel Özellikler Quick Search algoritmasının bir varyantıdır, Karakterlerin frekansına ihtiyaç duyar, Önişlem safhası O(m 2 + σ) zaman ve O(m+ σ) alan karmaşıklığına sahiptir, Arama safhası O(mn) zaman karmaşılığına sahiptir Tanımı Arama işleminin karakter yoğunluğunun en az olan karakterden en çok olana doğru gerçekleştiren bir algoritmadır. Bu şekilde birim zamanda daha çok uyuşmazlık ortaya çıkarabilir ve metin çok çabuk bir şekilde taranabilir. Optimal Mismatch algoritmasının önişlem safhası karakterlerin frekans yoğunluğunun azdan çoğa doğru sıralanmasını ve sonra bu sıralamayı Quick Search kötü-karakter fonksiyonu ve dizgi karakterleri üzerinde uyumlu iyi-sonek kaydırma fonksiyonu üzerinde inşa edilmesini içermektedir. Önişlem safhası O(m 2 + σ) zaman ve O(m+ σ) alan karmaşıklığına sahiptir. Arama safhası ise O(mn) zaman karmaşıklığına sahiptir [Sunday, 1990].

76 Kaba kodu OrderPattern: for i 0 to dizgi_uzunluğu do pat[i].loc i, pat[i].c dizgi[i] qsort (pat, dizgi_uzunluğu, sizeof(pattern), pcmp) OptimalPcmp: matchshift: fx freq[pat1->c]-freq[pat2->c] RETURN (fx? (fx >0? 1 : -1) : (pat2->loc-pat1->loc)) for lcshift 0 to dizgi_uzunluğu do i ploc while --i>=0 do if j (pat[i].loc-lshift) <0 then CONTINUE if pat[i].c dizgi[j] then BREAK if i<0 BREAK RETURN lshift preadaptedgs: adaptedgs[0] lshift 1 for ploc 1 to dizgi_uzunluğu do lshift matchshift() for ploc 0 to dizgi_uzunluğu do lshift adaptedgs[ploc] while lshift<dizgi_uzunluğu do i pat[ploc].loc-lshift if i<0 veya pat[ploc].c dizgi[i] then BREAK ++lshift lshift matchshift() adaptedgs[ploc] lshift ÖniĢlem Safhası orderpattern()

77 69 Quick_Search_Önişlem_Safhası preadaptedgs() Arama Safhası while j<=metin_uzunluğu-dizgi_uzunluğu do i 0 while i< dizgi_uzunluğu ve pat[i].c=metin[j+pat[i].loc] do ++i if i>= dizgi_uzunluğu then Dizgi Bulundu j j+max (adaptedgs[i], qsbc[metin[j+dizgi_uzunluğu]) Maximal Shift Algoritması Genel Özellikler Quick Search algoritmasının bir varyantıdır, En kötü durumda kuadratik zaman karmaşıklığı, Önişlem safhası O(m 2 + σ) zaman ve O(m+ σ) alan karmaşıklığına sahiptir, Arama safhası O(mn) zaman karmaşıklığına sahiptir Tanımı Dizgi karakterlerinin en uzun kaydırma değerinden en kısa kaydırma değerine doğru metin üzerinde aranmasını temel alan bir algoritmadır. Bu şekilde kaydırma uzunluklarını arttırılabilmektedir. Maximal Shift algoritmasının önişlem safhası karakterlerin kaydırma uzunluğunun azdan çoğa doğru sıralanmasını ve sonra bu sıralamayı Quick Search kötükarakter fonksiyonu ve dizgi karakterleri üzerinde uyumlu iyi-sonek kaydırma fonksiyonu üzerinde inşa edilmesini içermektedir. Önişlem safhası O(m 2 + σ) zaman ve O(m+ σ) alan karmaşıklığına sahiptir.

78 70 Maxmimal Shift algoritmasının arama safhası en kötü durumda kuadratik zaman karmaşıklığına sahiptir [Sunday, 1990] Kaba kodu computeminshift: for i 0 to dizgi_uzunluğu do for j i-1 down to 0 do if dizgi[i]=dizgi[j] then BREAK minshift[i] i-j maxshiftpcmp: dsh minshift [pat2->loc]-minshift[pat1->loc] RETURN (dsh? dsh : (pat2->loc pat1->loc)) ÖniĢlem Safhası computeminshift() orderpattern() Quick_Search_Önişlem_Safhası preadaptedgs() Arama Safhası while j<=metin_uzunluğu-dizgi_uzunluğu do i 0 while i< dizgi_uzunluğu ve pat[i].c=metin[j+pat[i].loc] do ++i if i>= dizgi_uzunluğu then Dizgi Bulundu j j+max (adaptedgs[i], qsbc[metin[j+dizgi_uzunluğu])

79 Skip Search Algoritması Genel özellikleri Alfabedeki her karakter için konumların kovalarını kullanır, Önişlem safhası O(m+σ) zaman ve alan karmaşıklığı, Arama safhası O(mn) zaman karmaşıklığı, Beklenen karakter karşılaştırması O(n) Tanımı Alfabedeki her karakter için bir kova x içerisindeki karakter konumlarını toplar. Dizgi içerisinde a karakteri k kere geçtiği zaman, karakterin kova içerisinde k adet yerini tutan konumu vardır. Eğer kelime alfabeden çok küçük ise çoğu kova boş olur. Skip Search algoritmasının önişlem safhası, alfabedeki bütün karakterler için kovaların hesaplanması işlemini içerir. c elemanıdır için: z[c] = {i : 0 i m-1 ve x[i] = c}. Önişlem safhası O(m+σ) zaman ve alan karmaşıklığına sahiptir. Arama safhasındaki ana döngü m. metin karakteri y[j] nin sınanmasını içermektedir (böylece n / m tekrar oluşacaktır). y[j], y içersindeki x in mümkün başlangıç p konumunu elde etmek için, kovadaki her z[y[j]] konumlarını kullanır. Bir uyuşmama meydana gelene dek ya da tam bir uyuşma sağlanan kadar karakter karakter p konumundan başlayarak y ile x e ait bir karşılaştırma işlemi sağlar. Skip Search algoritması en kötü durumda kuadratik zaman karmaşıklığına sahiptir fakat beklenen karakter karşılaştırması O(n) dir [Charras vd., 1998].

80 Kaba kodu ÖniĢlem Safhası memset (z, NULL, alfabe_uzunluğu*sizeof(list)) for i 0 to dizgi_uzunluğu do ptr (List)malloc ( sizeof (struct _cell)) if ptr=null then HATA VER ptr->element i ptr->sonraki z[dizgi[i]] z[dizgi[i]] ptr Arama Safhası for j dizgi_uzunluğu-1 to metin_uzunluğu j j+m do for ptr z[metin[j]] ve ptr NULL, ptr ptr->sonraki do if memcmp (dizgi, metin+j-ptr->element, dizgi_uzunluğu) if j-ptr->element<=metin_uzunluğu-dizgi_uzunluğu then Dizgi Bulundu else BREAK KMP Skip Search Algoritması Genel özellikleri Skip Search algoritmasının iyileştirilmiş halidir, Alfabedeki her karakter için konumların kovalarını kullanır, Önişlem safhası O(m+σ) zaman ve alan karmaşıklığı, Arama safhası O(n) zaman karmaşıklığı.

81 Tanımı Morris-Pratt ve Knuth-Morris-Pratt algoritmasındaki iki kaydırma tablosunu kullanarak Skip Search algoritmasını doğrusal yapmak mümkündür. 1 i m için, mpnext[i], x[0.. i-1] nin en uzun sınırına eşit ve mpnext[0]=-1. 1 i < m için, kmpnext[i], x[0.. i-1] nin x[i] den farklı bir karakteri takiben en uzun sınırına eşit, kmpnext[0]=-1 ve kmpnext[m]=m-per(x). Kovalar içerisindeki liste list adlı bir tabloda tutulmaktadır. KMP Skip Search algoritmasının önişlem safhası O(m+σ) zaman ve alan karmaşıklığına sahiptir. Arama safhası süresince bir deneme için genel durum (Şekil 2.20): j, geçerli metin konumu; x[i] = y[j]; start = j-i, y içerisindeki x in geçtiği başlangıç konumu; wall, en sağdaki taranmış metin konumu; x[0.. wall-start-1] = y[start.. wall-1]; ġekil 2.20: Arama safhası süresince doğrusal algoritmada genel durum Bir uyuşmama olana ya da tam bir uyuşma sağlanana dek, karşılaştırma x[wallstart.. m-1] ve y[wall.. start+m-1] karakterleri arasında sağdan sola doğru sağlanır. y içersindeki start başlangıç konumunda eğer bir x uyuşması varsa, x[k] y[start+k] veya k = m olacak şekilde k wall-start en küçük sayı değeri olsun. wall, start+k nin değerini alır. Bundan sonra KMP Skip Search algoritması iki kaydırma değerini hesaplar (iki yeni başlangıç konumu): Skip algoritmasına bağlı skipstart ve Knuth- Morris-Pratt algoritmasına bağlı kmpstart. Birkaç durum meydana gelebilir:

82 74 skipstart < kmpstart, skip algoritmasına göre bir kaydırma meydana gelir ki bu skipstart için yeni bir değer verir ve skipstart ve kmpstart tekrar karşılaştırılır. kmpstart < skipstart < wall, Morris-Pratt algoritmasındaki kaydırma meydana gelir ki bu kmpstart için yeni bir değer verir. skipstart ve kmpstart tekrar karşılaştırılır. skipstart = kmpstart, start = skipstart ile diğer bir deneme sağlanabilir; kmpstart < wall < skipstart, start = skipstart ile diğer bir deneme sağlanabilir. Arama safhasında zaman karmaşıklığı O(n) dir [Charras vd., 1998] Kaba kodu ÖniĢlem Safhası Morris_Pratt_Önişlem Knuth_Morris_Pratt_Önişlem memset (z, -1, alfabe_uzunluğu*sizeof(int)) memset (list, -1, dizgi_uzunluğu*sizeof(int)) z[dizgi[0]] 0 for i 1 to dizgi_uzunluğu do list[i] z[dizgi[i]], z[dizgi[i]] i Arama Safhası wall 0, per dizgi_uzunluğu-kmpnext[dizgi_uzunluğu], i j -1 while j<metin_uzunluğu ve z[metin[j]]<0 do j j+dizgi_uzunluğu if j>=metin_uzunluğu then RETURN i z[metin[j], start j-i while start<=metin_uzunluğu-dizgi_uzunluğu do if start>wall then wall start k attemp (metin, dizgi, dizgi_uzunluğu, start, wall) wall start +k if k=dizgi_uzunluğu then Dizgi Bulund), i i-per else i list[i] if i<0 then while j<metin_uzunluğu ve z[metin[j]]<0 do j j+dizgi_uzunluğu if j>=metin_uzunluğu then RETURN

83 75 i z[metin[j]] kmpstart start+k-kmpnext[k], k kmpnext[k], start j-i while start<kmpstart veya (kmpstart<start ve start<wall) do if start<kmpstart then i list[i] if i<0 then while j<metin_uzunluğu ve z[metin[j]]<0 do j j+dizgi_uzunluğu if j>=metin_uzunluğu then RETURN i z[metin[j]] start j-i else kmpstart kmpstart+ (k-mpnext[k]), k mpnext[k] Alpha Skip Search Algoritması Genel özellikleri Skip Search algoritmasının iyileştirilmiş halidir, Dizginin log σ (m) uzunluğundaki her elemanı için kovaların konumlarını kullanır, Önişlem safhası O(m) zaman ve alan karmaşıklığı, Arama safhası O(mn) zaman karmaşıklığı, Beklenen karakter karşılaştırması O(log σ (m).(n / (m-log σ (m)))) Tanımı Alpha Skip Search algoritmasının önişlem safhası x kelimesi içersinde uyuşan bütün l=log σ m uzunluğundaki bütün elemanların, T(x) ağacının inşasını içerir. T(x) nin yaprakları x in l uzunluğundaki bütün elemanlarını temsil etmektedir. x içersinde bulunan, yaprak ile birleşmiş, eleman konumlarının listesinin saklandığı, T(x) içersindeki her yaprak için bir kova vardır. Alfabe uzunluğu sabit olarak dikkate alındığında algoritmanın önişlem safhası en kötü durumda doğrusaldır.

84 76 Algoritmanın arama safhası y[1, (n- l) / m ] aralık içersinde k sayı değeri ile bütün j = k.(m- l +1)-1 için y[j.. j+ l -1] metin elemanlarının kovalarına bakmayı içerir. En kötü durumda arama safhasının zaman karmaşıklığı kuadratiktir fakat beklenen metin karakter karşılaştırması O(log σ (m).(n / (m-log σ (m)))) dir [Charras vd., 1998] Kaba kodu addnode: cocukdugum yenizirve(onek_agacı) hedefi_ayarla (onek_agacı, dugum, c, cocukdugum) sonekdugum SonekBağlantısı_Al (onek_agacı, dugum) if sonekdugum=art then SonekBaglantısı_Ayarla (onek_agacı, cocukdugum, dugum) else sonekcocukdugum hedefi_al (onek_agacı, sonekdugum, c) if sonekcocukdugum tanımlanmamış ise then sonekcocukdugum DugumEkle(onek_agacı, art, sonekdugum, c) SonekBaglantısı_Ayarla (onek_agacı, cocukdugum, sonekcocukdugum) RETURN cocukdugum ÖniĢlem Safhası size 2+(2*dizgi_uzunluğu-logM+1)*logM onek_agacı yenionekagacı(size, size*alfabe_uzunluğu) z (List*)calloc (size, sizeof(list)) if z=null then HATA VER kök hazırlığı_al (onek_agacı) art yenizirve (onek_agacı) SonekBaglantısı_Ayarla (onek_agacı, kök, art) dugum yenizirve(onek_agacı) hedefi_ayarla (onek_agacı, kok, dizgi[0], dugum) SonekBaglantısı_Ayarla (onek_agacı, dugum, kok) for i 1 to logm do dugum dugumekle(onek_agacı, art, dugum, dizgi[i])

85 77 pos 0, Z_ayarla(dugum, pos), pos++ for i logm to dizgi_uzunluğu do dugum SonekBaglantısı_Al(onek_agacı, dugum) cocuckdugum hedefi_al (onek_agacı, dugum, dizgi[i]) if cocukdugum tanımlanmamış ise then dugum DugumEkle(onek_agacı, art, dugum, dizgi[i]) else dugum cocukdugum, Z_ayarla(dugum, pos), pos++ dugum onekbaglantısı_al(onek_agacı, dugum) cocuckdugum hedefi_al (onek_agacı, dugum, dizgi[i]) if cocukdugum tanımlanmamış ise then sondugum yenizirve(onek_agacı) hedefi_al (onek_agacı, dugum, dizgi[dizgi_uzunluğu-1], sondugum) dugum sondugum else dugum sondugum Z_ayarla(dugum, pos) Arama Safhası shift dizgi_uzunluğu-logm+1 for j dizgi_uzunluğu+1-logm to metin_uzunluğu-logm, j j+shift dugum kök for k 0 to logm ve dugum tanımlanmamış değilse do dugum hedefi_al(onek_agacı, dugum, metin[j+k]) if dugum tanımlanmamış değil ise then for gecerli Z_al(dugum), gecerli NULL, gecerli gecerli->sonraki do b j-gecerli->element if dizgi[0]=metin[b] ve memcmp (dizgi+1, metin+b, dizgi_uzunluğu-1)=0 then Dizgi Bulundu, free(z) Diğer Algoritmalar Bahsedilen dizgi eşleme algoritmaları dışında geliştirilmiş başka algoritmalar da mevcuttur. Örneğin stemming yani köklerine ayırma metodu kullanarak arama yapan algoritmaların yanında dinamik programlama ve hizalamaya yönelik algoritmalar da geliştirilmiştir. Ayrıca sadece DNA ve RNA alfabelerine ait biyolojik arama algoritmaları da literatürde bulunmaktadır. Örneğin Lovins algoritması köklere ayırma metodu kullanan İngilizce dili üzerinde çalışan çok kurallı bir algoritmadır [Lovins, 1968, Porter, 1980]. Bu algoritma kelime köklerine gelen takılar üzerinde çalışmakta,

86 78 çeşitli koşullar ve dönüştürme kuralları ile dizgileri işleme yöntemi kullanmaktadır. Bu algoritma 294 farklı takı, 29 koşul ve 35 farklı geçiş kuralları kullanarak dizgileri ön işlemektedir. Porters algoritması 60 geçiş kuralı kullanırken [Porter, 1980] Paice/Husk algoritması 120 farklı kural kullanmaktadır [Paice, 1990]. Bunun dışında aynı mantığı kullanan yani köklerine ayırma yöntemleriyle bu yöntemleri çeşitli kurallarla birleştiren Dawson [Dawson, 1974], Krovetz [Krovetz, 1993] ve Trivial [Donna, 1991] gibi algoritmalar da vardır. Dizgiyi köklerine ve takılarına ayırma gibi karmaşık bir mantığa sahip olan bu tür algoritmalar bu karmaşıklıkları sebebiyle çok fazla ilgi görememişlerdir. Bu algoritmaların dışında yine yaklaşık dizgi eşleme algoritmalarına benzeyen K-NN ( K-En yakın komşuluk) algoritması [Dasarathy, 1991] metinleri vektörsel olarak ele alarak aranan kelimeye ait en yakın kelimeleri bulmayı amaçlayan bir algoritmadır. Sadece metinlerde değil, objelerin veya nesnelerin yakınlık uzaklık ilişkilerinde de kullanılmaktadır. K en yakın komşuluk algoritması sorgu vektörünün en yakın k komşuluktaki vektör ile sınıflandırılmasının bir sonucu olan denetlemeli öğrenme algoritmasıdır. Bu algoritma ile yeni bir vektörü sınıflandırabilmek için doküman vektörü ve eğitim dokümanları vektörleri kullanılır. Bir sorgu örneği verilir, bu sorgu noktasına en yakın k tane eğitim noktası bulunur. Sınıflandırma ise bu k tane nesnenin en fazla olanı ile yapılır. K en yakın komşuluk uygulaması yeni sorgu örneğinin sınıflandırmak için kullanılan bir komşuluk sınıflandırma algoritmasıdır. Yine hizalamaya dayanan genellikle diziler üzerinde hizalama işlemlerini gerçekleştiren çeşitli algoritmalar da mevcuttur. Multiple Sequence [Wang ve Jiang, 1994, Just, 2001, Notredame, 2002] ve Pairwise Sequence [Schneider ve Stephens, 1990] bu algoritmalara örnektir. İki diziden alınan parçaları, gerektiğinde harfleri arasına boşluklar eklemek suretiyle, alt alta gelen harf benzerliğini azami yapacak şekilde yeniden düzenleme işlemini kapsayan bu tip algoritmalar özellikle hesaplamalı biyoloji alanında evrimsel olarak korunan bölgelerin ortaya çıkarılmasında ve eş kökenli proteinlerin belirlenmesinde kullanılır. Yerel hizalamada her iki dizinin de en yüksek puanı veren alt kümeleri alınır. Genel hizalamada ise dizilerin tamamı hesaba katılır. Tam sonuç alınmak istendiğinde yerel hizalama için Smith-Waterman [Smith ve Waterman, 1981] genel hizalama için ise Needleman-Wunsch [Needleman ve Wunsch,

87 ] algoritmaları kullanılır. Her iki algoritma da dinamik programlama ilkesine dayanır. Bu algoritmaların dışında düzenli gramerlere dayanan, mantığı Boyer-Moore önişlem safhası ile birleştiren [Watson, 1996] ya da düzenli gramerleri veya son ekleri otomatlar üzerinden değerlendiren algoritmalar da geliştirilmiştir [Watson ve Watson 2003, Allauzen ve Raffinot, 2000]. Derin paket sınıflandırması yöntemini kullanan bellek ihtiyacını en aza indirgemeyi amaçlayan yine Boyer-Moore algoritmasını temel almış algoritmalar da mevcuttur [Ehtesham Rafiq vd., 2004]. Karşılaştırma karmaşıklığını sadece önekler üzerinden değerlendiren, öneklerin karşılaştırma karmaşıklığına olan etkisini ayrıntılı olarak ele alan ek çalışmalar da dizgi eşleme algoritmalarının kavranması konusunda önem teşkil eden çalışmalardır [Breslauer vd., 1998]. Ayrıca yine sonek otomatları üzerinden çalışan ancak dizgi uzunluğu makinenin kelime uzunluğundan büyük olması durumunda işlev görmeyen algoritmalar da mevcuttur [Ehtesham Rafiq vd., 2004]. Yukarıda bahsedilen çeşitli özellikteki algoritmaların ayrıntılarına referansları aracılığıyla ulaşılabilir.

88 80 3. YAKLAġIK DĠZGĠ EġLEME Yaklaşık dizgi eşleme en az tam dizgi eşleme kadar kullanım alanına sahip bir konudur. Tam dizgi eşlemeden farkı ise, aranacak olan dizginin çeşitli durumlara göre benzer dizgilerin de bulunmasını sağlamaktadır. Bu bazı durumlarda avantaj da sağlayabilirken, dezavantaj oluşturabildiği durumlar da söz konusudur. Yaklaşık dizgi eşleme n uzunluğundaki y metni içersinde m uzunluğundaki dizginin yaklaşık olarak bulunmasını konu alır. x in bulunan yaklaşık dizgisi, y ye ait parçalardır ki bunlar belirli bir uzunlukta x e yakın olan dizgilerdir: bu uzaklık verilen bir k sayı değerinden büyük olmamalıdır. İki uzaklık çeşidi göz önünde bulundurulmaktadır. Bunlar: Hamming Uzaklığı ve Levenshtein Uzaklığıdır [Crochemore ve Rytter, 2002, Crochemore ve Lecroq, 1997, Amir vd., 2000]. Hamming uzaklığı ile problem, k sayısı kadar uzaklıkta uyuşmayan yaklaşık dizgi eşlemedir. Levenshtein uzaklığı ( işleme uzaklığı) ise k sayısı kadar farklı karakterin bulunduğu yaklaşık dizgi eşleme olarak bilinmektedir [Lemstörm ve Hella, 2003, Kolpakov ve Kucherov, 2003]. Aynı uzunluktaki w1 ve w2 gibi iki kelime arasındaki Hamming uzaklığı farklı karakterlere ait konumların sayısını sayar. w1 ve w2 gibi iki kelime arasındaki Levenshtein uzaklığı (aynı uzunlukta olması gerekli değil) iki kelime arasındaki en az farklı karakter sayısıdır. Bir farklılık aşağıdaki işlemlerden oluşmaktadır: yerine koyma iģlemi-değiģtirme (substitution): w1 içersindeki bir karakterin w2 içerisindeki farklı bir karaktere uyması. ekleme (insertion): w2 içerisinde bulunmayan bir w1 karakterini tanımlar. silme (deletion): w1 içerisinde bulunmayan bir w2 karakterini tanımlar. Shift Or algoritması pratikte çok hızlı ve yorumlanması çok kolay olan bir yöntemdir. Bu yöntem yukarıdaki iki probleme de uyum sağlayabilmektedir. Başlangıç olarak bu yöntem tam dizgi eşleme problemi olarak tanımlanmaktadır ve k uyuşmamalarının ve k ekleme, silme ve yerine koyma (değiştirme) durumlarının nasıl üstesinden gelinebileceği gösterilmektedir.

89 Shift Or Algoritması Bu algoritma tam dizgi eşleme algoritmaları incelenirken açıklanmıştı. Yaklaşık dizgi eşlemeye uygun bir algoritma olması sebebiyle, yaklaşıklılığı nasıl ele aldığını görmek açısından bu bölümde ayrıntılarıyla ele alınmıştır. R 0, 0 m uzunluğunda bir bit dizisi olsun. R i vektörü y[i] metin karakterinden sonraki R 0 dizisinin değeri olarak işlenmiştir (Şekil 3.1). Bu, x in tüm uyuşan önekleri hakkındaki bilgileri içerir ki, metin içersindeki son i konumudur (0 j m-1): R i 0 [j]= ġekil 3.1: R i 0 vektörünün ifadesi vektörü R i 0 den sonra şu şekilde hesaplanır. Her R i 0 [j]=0 için: ve Eğer =0 ise tamamlanmış bir uyuşma sağlanmıştır.

90 82 den e geçiş şu şekilde çok hızlı hesaplanabilir. Her a için S a, m uzunluğunda bir bit dizisi olsun. Şöyle ki: 0 j m-1 için, S a [j]=0 ancak veya ancak x[j]=a. S a bit dizisi, x dizgisi içerisindeki a karakter pozisyonunu ifade etmektedir. Her S a arama safhasından sonra önişlem safhasına tabi tutulur. operasyona indirgenir. Kaydırma ve Veya (Shift Or): nin hesaplanması iki OR S y[i+1]. Örnek: x=gataa ve y=cagataagagaa k uyuģmama sayısı ile dizgi eģleme Shift Or algoritması k uyuşmama sayısı ile yaklaşık dizgi eşlemeye kolayca uyum sağlamaktadır. Tanımı daha da sadeleştirmek için, en fazla bir yer değiştirme işleminin nerede yapılabileceği gösterilmelidir. Öncekinde olduğu gibi ve S dizilerini ve buna ek olarak m uzunluğunda bit dizisi kullanılmaktadır. vektörü y[i] metin karakterine kadar en fazla bir yer değişme ile bütün uyuşmaları belirtmektedir. İki durum meydana gelebilmektedir:

91 83 y[i] ye kadar x in ilk j karakteri üzerinde tam bir uyuşma vardır ( ). Sonra, y[i+1], x[j] ye yer değiştirilmesi, bir yer değişimi ile bir uyuşma meydana getirir (Şekil 3.2). Böylece, ġekil 3.2: Eğer ise. y[i] ye kadar ve y[i+1]=x[j] durumuna dek x in ilk j karakteri üzerinde bir yer değişimi ile bir uyuşma vardır. Sonra, y[i+1] e kadar x in ilk j+1 karakteri üzerinde bir yer değişimi ile bir uyuşma vardır (Şekil 3.3). Böylece, ġekil 3.3: eğer. Son olarak, şu şekilde güncellenir: = ( SHIFT ( OR S y[i+1] AND SHIFT ( )

92 84 Örnek: x=gataa ve y=cagataagagaa k farklı sayısı ile dizgi eģleme Bu bölümde ise Shift Or algoritmasının sadece bir ekleme ve silme durumlarına nasıl uyum sağladığı gösterilmeye çalışılmıştır. Bir ekleme:, y[i] karakterine kadar en fazla bir ekleme ile tüm uyuşmaları ifade eder. Eğer x in ilk j+1 karakterleri (x[0 j]), y[j] metin karakterlerine kadar son j+2 nin j+1 sembolleri ile uyuşuyorsa olur. dizisi öncekinde olduğu gibidir ve dizisinin nasıl sağlandığı ifade edilecektir. y[i+1] e kadar x in ilk j+2 karakterleri üzerinde en fazla bir ekleme ile uyuşma için iki durum meydana gelir: y[i] ye kadar x in ilk j+1 karakterleri üzerinde tam bir uyuşma vardır (. Sonra y[i+1] in eklenmesi y[i+1] e kadar bir ekleme ile bir uyuşma meydana getirir (Şekil 3.4). Böylece:. ġekil 3.4: Eğer =0

93 85 y[i] ye kadar x in ilk j +1 karakterleri üzerinde bir ekleme ile bir uyuşma vardır. Eğer sonra y[i+1]=x[j+1] ise y[j+1] karakterine kadar x in ilk j+2 karakterleri üzerinde bir ekleme ile bir uyuşma vardır (Şekil 3.5). Böylece: ġekil 3.5: = eğer y[i+1]=x[j+1] Son olarak, şu şekilde güncellenir: = ( SHIFT ( OR S y[i+1] AND. Örnek: x=gataa ve y=cagataagagaa Bir silme: in y[i] ye kadar en fazla bir silme ile bütün mümkün uyuşmaların ifade edildiği bilinmektedir. Tekrar iki durum meydana gelir: y[i+1] e kadar x in ilk j+1 karakterleri üzerinde (x[0..j]) tam bir uyuşma vardır.sonra, x[j] nin silinmesi, bir silme ile bir uyuşma meydana getirir (Şekil 3.6). Böylece,

94 86. ġekil 3.6: Eğer =0 ise. y[i] karakterine kadar ve y[i+1]=x[j] iken, x in ilk j karakterleri üzerinde bir silme ile bir uyuşma vardır. Sonra, y[i+1] e kadar x in ilk j+1 karakterleri üzerinde bir silme ile bir uyuşma vardır (Şekil 3.7). Böylece, ġekil 3.7: Son olarak, şu şekilde güncellenir: Örnek: = ( SHIFT ( OR S y[i+1] AND. x=gataa ve y=cagataagagaa

95 Wu-Manber Algoritması Yaklaşık dizgi eşleme en fazla k farklılığıyla ekleme, silme ve yer değiştirme tipleriyle sunulmuştur. Şimdi k+1 bit dizisini,, sağlanmasına ihtiyaç vardır. vektörü Shift Or algoritmasında olduğu gibi tam eşleme ile aynen sağlanmaktadır. Diğer vektör şu formülle hesaplanmaktadır: = ( SHIFT ( ) OR S y[i+1] ) AND SHIFT ( ) AND SHIFT ( ) AND, Bu formül şu şekilde de yazılabilir: Örnek: = ( SHIFT ( ) OR S y[i+1] ) AND SHIFT ( AND ) AND. x=gataa ve y=cagataagagaa ve k=1 Wu-Manber algoritması çoğu uygulamalarda sık sık olan durumlar gibi dizgi uzunluğunun makinenin bellek uzunluğundan büyük olmadığını farz ederek çalışır. Ön işlem safhası O(σm +km) bellek alanının kullanırken, çalışma zamanı O(σm +k) zaman karmaşıklığına sahiptir. Arama safhasındaki zaman karmaşıklığı ise O(kn) dir [Wu ve Manber, 1992] Kaba Kodu ÖniĢlem Safhası for i 0 to alfabe_uzunluğu do S[i]=~0 lim 0 for i 0 to dizgi_uzunluğu, j 0, j<<=1 do S[dizgi[i]]& ~j, lim j lim ~(lim>>1), R[0]=~0 for j 1 to k do R[j] R[j-1]>>1

96 88 Arama Safhası for i 0 to metin_uzunluğu do son1 R[0], mask S[metin[i]] R[0] (R[0]<<1) mask for j 1 to k do son2 R[j] R[j] ((R[j]<<1]) mask) & ((son1&r[j-1])<<1) &son1 son1 son2 if R[k]<lim then Dizgi Yaklaşık Olarak Bulundu Çizelge 3.1 de Wu-Manber ve Shift-Or algoritmalarına ait süre performans değerleri verilmektedir. Çizelge 3.1: Doğal Dil üzerinde yaklaşık dizgi eşleme algoritmalarının performans değerleri (sn) Algoritmalar Wu-Manber Shift Or 6,41 6,64 6,8 Çizelgeden de anlaşılacağı üzere Shift-Or algoritması yaklaşık dizgi eşleme için ideal bir algoritmadır. Diğer alfabeler üzerinde de her iki algoritma için yaklaşık aynı değerler söz konusudur. Bu değerler k=0 için yaklaşık değerlerdir. k yaklaşıklık değeri arttıkça her iki algoritmanın da performansı aynı oranda düşmektedir. Yaklaşık dizgi eşleme algoritmalarının en önemli dezavantajı da budur.

97 89 4. DĠZGĠ EġLEME ALGORĠTMALARININ ALFABEYE BAĞLI ETKĠNLĠKLERĠNĠN ARAġTIRILMASI Dizgi eşleme algoritmalarının performansları farklı kıstaslara göre etkinlik gösterebilmektedir. Bazı algoritmalar dizgi uzunluğuna bağlı olarak farklı performans değeri sergilerken, bazı algoritmalar ise alfabeye bağlı değişikler gösterebilmektedirler. Bu bölümde, 3.bölümde bahsi geçen algoritmaların alfabeye bağlı ve çeşitli dizgi uzunlukları üzerinden performans değerlendirilmesi ele alınmıştır. Bu konu ile ilgili birçok çalışma yapılmıştır [Carus vd., 2007, Lecroq, 1995, Lecroq, 2007]. Bu çalışmaların bir kısmı belirli algoritmaları temel alarak performans denemeleri gerçekleştirirken, bu algoritmaların performanslarını hem dizgi uzunlukları hem de alfabe uzunlukları üzerinden de değerlendirmişlerdir. Dizgi eşleme algoritmalarının test edilmesinde kullanılmak üzere Türkçe doğal dil ile yazılmış metinlerde kullanılan, farklı 121 elemanı olan bir derlem oluşturulmuştur. Ayrıca A, C, G ve T elemanlarına sahip DNA alfabesi kullanılarak DNA derlemi ve 0-9 arası rakamlar kullanılarak rakam derlemi oluşturulmuştur. Metin uzunluğu dizgi eşleme algoritmalarını farklı yönde etkileyeceğinden tüm derlemler, uzunlukları 30,071 KB olarak sabit olacak şekilde hazırlanmıştır. Rakam ve DNA derlemleri rastgele olarak üretilmiştir. Türkçe için doğal dil işlemeye yönelik hazırlanmış ODTÜ derleminin [Say vd., 2002] içindeki doğal dile ait olmayan cümle işaretleme amaçlı XML kodları temizlenmiş ayrıca içerisine çeşitli konularda makale hikâye ve romanlardan oluşan eklemeler yapılarak Türkçe derlem oluşturulmuştur. Dizgi eşleme algoritmalarının dizgi uzunluğuna bağlı olarak performanslarını değerlendirebilmek için dizgi uzunlukları 10 karakter (kısa dizgi), 100 karakter (orta uzunluklu dizgi) ve 200 karakter (uzun dizgi) olarak seçilmiştir. Her bir derlem içerisinden kısa, orta ve uzun dizgi uzunlukları için metin içerisinde farklı konumlarda olacak şekilde 100 er adet dizgi tespit edilerek aramada kullanılacak dizgiler elde edilmiştir. Doğal diller için oluşturulan dizgiler doğal dile özgü anlamlı kelimeleri içerecek şekilde dizgi başı kelime ortasına gelmeyecek şekilde oluşturulmuştur. Bu bölümde ve bundan sonraki bölüme ait denemelerde, seçilen algoritmaların Visual Studio platformunda C programlama dili ile kodları yazılarak Release türünde derlenmiş ve elde edilen programlar Windows işletim sistemi ile çalışan Core 2 Duo

98 90 1,83 Ghz İşlemci, 1024 MB ana bellek, 80 GB sabit diske sahip olan bilgisayar kullanılarak karşılaştırma sayıları ve süreleri elde edilmiştir. Son bölüme ait denemede ise Linux üzerinde gcc ile optimize şeklinde deneme işlemleri gerçekleştirilmiştir. Bu şekilde her iki farklı sistemde de deneme sonuçları karşılaştırılabilir hale getirilmeye çalışılmıştır DNA Alfabesi Açısından Sonuçlar Çizelge 4.1 de görüldüğü gibi; bazı algoritmaların DNA alfabesi üzerinde performansı dizgi uzunluğu arttıkça artarken bazılarında ise düşmektedir. Örneğin Turbo Boyer-Moore algoritmasının kısa dizgiden orta uzunluklu dizgiye geçişte performansı %30 oranında artarken, Tuned Boyer-Moore algoritmasının performansı kısa dizgiden uzun dizgiye geçişte %70 oranında azalmaktadır. Apostolico-Crochemore, Morris-Pratt ve Knuth-Morris-Pratt algoritmaları da kısa dizgilerden uzun dizgilere geçişte yaklaşık %75 oranlarında performans artışı göstermektedirler. Boyer-Moore türevi algoritmaların genelinde DNA alfabesi üzerinde dizgi uzunluğu arttıkça performansın da azaldığı görülebilmektedir. Otomat mantığını kullanan Forward Dawg ve Simon dışındaki algoritmalarda kısa dizgiden uzun dizgiye geçişte performans azalmaktadır. Bu durum Reverse Factor ve Turbo Reverse Factor algoritmalarında etkin bir şekilde görülebilmektedir. Forward Dawg ve Simon algoritmalarında ise kısa dizgiden uzun dizgiye geçişte arama performansı %50 lere dayanan bir oranla artış göstermektedir. Bu alfabeye göre kısa dizgide en iyi performansı gösteren Reverse Colussi algoritması, bu performansını orta uzunluklu ve uzun dizgide koruyamamıştır. Bu uzunluktaki en iyi performans değerlerine yüksek performans artışıyla Apostolico- Crochemore sahip olmuştur. Aynı şekilde kısa dizgide en kötü performansı sergileyen Forward Dawg algoritması, bu performans durumunu orta uzunluklu ve uzun dizgide yine bir otomat algoritması olan Reverse Factor algoritmasına bırakmıştır. Bazı algoritmalar orta uzunluklu dizgiden uzun dizgiye geçişte düşük oranda performans azalması göstermiştir. Bunun sebebi dizgi uzunluğu arttıkça, dizginin önişlem safhasında işlenme süresinin artması sebebiyledir.

99 91 Algoritmaları genel olarak ve ortalamaları üzerinden ele aldığımızda ise DNA alfabesi üzerinde yaklaşık dizgi eşlemeye de uyum sağlayabilen Shift-Or algoritmasını ve bağlı listeleri kullanan Skip Search algoritmasını en iyi ortalamaya sahip algoritmalar olarak görmekteyiz. Ayrıca bu alfabede Boyer-Moore türevi algoritmalar diğer algoritmalara nazaran daha etkin bir performans grafiği sergilemişlerdir. Bu değerlerin grafiksel gösterimlerini çalışmanın ekler bölümünde görebilirsiniz. Çizelge 4.1: DNA alfabesi açısından 100 dizgi üzerinde arama süresi değerleri (sn) Algoritmalar ORT Shift Or 6,89 7,52 7,64 7,35 Skip Search 7,58 7,31 8,11 7,67 Berry-Ravindran 7,73 7,16 10,59 8,49 Zhu-Takaoka 6,94 7,75 13,16 9,28 Reverse Colussi 5 8,78 16,56 10,11 Turbo Boyer-Moore 13,3 9,56 10,75 11,20 Boyer-Moore 10, ,49 11,36 Apostolico Crochemore 23,47 7,02 5,83 12,11 Horspool 9,98 12,72 16,34 13,01 Alpha Skip Search 17,13 11,18 12,08 13,46 Two Way 19,14 12,3 9,02 13,49 Karp-Rabin 9, ,72 14,08 Tuned Boyer-Moore 7,36 10,52 24,52 14,13 Quick Search 12,41 14,92 18,27 15,20 Smith 11,63 15,64 20,74 16,00 Brute Force 14,94 16,03 17,17 16,05 Colussi 27,2 12,56 11,3 17,02 KMP Skip Search 18,11 17,1 16,76 17,32 Galil-Giancarlo 29,16 12, ,49 Raita 10,64 18,67 28,55 19,29 Simon 26,53 16,23 15,58 19,45 Morris-Pratt 30,88 16,42 15,64 20,98 Knuth-Morris Pratt 32,8 16,47 15,67 21,65 Not So Naive 17,19 22,02 27,22 22,14 Backward Oracle 15,14 25,09 30,11 23,45 Galil-Seiferas 50 16,2 13,57 26,59 Apotolico-Giancarlo 58,67 23,5 19,08 33,75 Research With Automaton 37,39 42,74 43,67 41,27 String Matching On Ord.Alp 46,41 53,14 66,63 55,39 Turbo Reverse Factor 43,28 102,02 107,09 84,13 Forward Dawg 146,45 81,53 70,37 99,45 Reverse Factor 35,68 132,76 132,4 100,28

100 Rakam Alfabesi Açısından Sonuçlar Çizelge 4.2 de görüldüğü gibi: Rakam alfabesi üzerinde Apostolico- Chrochemore, Morris-Pratt ve Knuth-Morris-Pratt algoritmaları DNA alfabesinde olduğu gibi kısa dizgilerden uzun dizgilere geçişte performans artışı sağlamaktadır. Fakat bu performans artışı DNA alfabesinde olduğu kadar etkili değildir. Bu durum bu algoritmaların alfabe uzunluğu arttıkça performans düşüklüğü meydana getirdiklerinin açık bir kanıtıdır. Tuned Boyer-Moore algoritması da DNA alfabesinde olduğu gibi kısa dizgilerden uzun dizgilere geçişte %60 oranını geçen bir performans düşüklüğü göstermektedir. Bu performans düşüklüğü Raita algoritmasında yaklaşık %50 iken, Zhu-Takaoka algoritmasında %40 oranındadır. Turbo Boyer-Moore, Boyer-Moore, Quick Search, Berry-Ravindran gibi Boyer-Moore türevi algoritmalar ise kısa dizgiden orta uzunluklu dizgiye geçişte performans artışı sağlarken bunu uzun dizgiye geçişte koruyamamaktadır. Bu performans düşüklüğünün ana sebebi ise uzun dizgilerin önişlem safhasında işlenirken zaman harcamasıdır. DNA alfabesi üzerinde kısa dizgide en iyi performansı gösteren Reverse Colusssi algoritması Rakam alfabesi üzerinde aynı performansı gösterememiş ve yerini Tuned Boyer-Moore algoritmasına bırakmıştır. Aynı şekilde DNA alafabesinde orta uzunluklu dizgide en iyi performansı gösteren Apostolico-Crochemore algoritması bu alfabe üzerinde gerilere düşmüştür. Rakam alfabesinde orta uzunluklu dizgide en iyi performans değerine Berry-Ravindran algoritması sahip iken, uzun dizgide de aynı performansı korumayı başarmıştır. Genel olarak algoritmaların Rakam alfabesindeki performans değerleri, DNA alfabesine göre daha yüksektir. Bu durumda alfabe uzunluğu arttıkça algoritmaların performansları da artmaktadır şeklinde bir genelleme yapılabilir. Otomat türü bazı algoritmalar ise bu genellemenin dışında kalmaktadır. Bu alfabede ortalama olarak DNA alfabesinde en iyi performans gösteren Shift-Or algoritması gerilere düşmüştür. Skip Search algoritması ise yerini korumaktadır. DNA alfabesinde olduğu gibi yine bu algoritmayla Boyer-Moore türevi algoritmaların bu alfabe üzerinde de daha etkin bir

101 93 performans grafiği sergilediği görülmektedir. Yine grafiksel gösterimlerini çalışmanın ekler bölümünde görebilirsiniz. Çizelge 4.2: RAKAM alfabesi açısından 100 dizgi üzerinde arama süresi değerleri (sn) Algoritmalar ORT Berry-Ravindran 3,88 2,56 3,83 3,42 Skip Search 4,81 3,74 4,44 4,33 Horspool 4,11 4,13 5,47 4,57 Zhu-Takaoka 3,89 3,91 6,64 4,81 Quick Search 4,47 4,33 5,64 4,81 Reverse Colussi 4,03 4,41 7,92 5,45 Smith 4,94 4,67 6,8 5,47 Boyer-Moore 5,58 5,02 7,16 5,92 Tuned Boyer-Moore 3,13 5,63 9,56 6,11 Turbo Boyer-Moore 7,28 5,7 7,83 6,94 Shift Or 6,74 7,45 6,67 6,95 Raita 4,33 6,72 10,77 7,27 Alpha Skip Search 10,06 5,74 6,06 7,29 Karp-Rabin 9,02 11,02 13,14 11,06 KMP Skip Search 8,4 9,34 15,69 11,14 Brute Force 13,14 13,7 14,16 13,67 Not So Naive 12,42 14,11 16,44 14,32 Backward Oracle 11,01 11,8 21,69 14,83 Two Way 17,38 15,36 12,13 14,96 Apostolico Crochemore 23,05 16,06 8,67 15,93 Simon 21,74 18,86 15,66 18,75 Colussi 23,97 18,81 13,56 18,78 Morris-Pratt 22,67 20,02 16,99 19,89 Galil-Giancarlo 26,47 20,36 13,63 20,15 Knuth-Morris Pratt 25 21,52 17,36 21,29 Galil-Seiferas 34,28 26,36 17,17 25,94 Apotolico-Giancarlo 36,7 28,91 23,09 29,57 String Matching On Ord.Alp 31,31 39,59 47,19 39,36 Research With Automaton 36,97 39,69 43,33 40,00 Turbo Reverse Factor 24,94 47,79 89,47 54,07 Reverse Factor 20,67 49,26 109,47 59,80 Forward Dawg 140,96 140,73 90,84 124,18

102 Doğal Dil Alfabesi Açısından Sonuçlar Çizelge 4.3 de görüldüğü gibi: Doğal dil alfabesi üzerinde performans değişiklikleri Boyer-Moore türevleri üzerinde daha etkin bir biçimde görülebilmektedir. Kısa dizgilerden orta uzunluklu dizgilere geçişte yaklaşık %60 oranında performans artışı görülmektedir. Bu değeri Berry-Ravindran algoritması sağlarken, Zhu-Takaoka, Smith ve Turbo Boyer-Moore algoritmaları %65 oranlarında performans artışı sağlamaktadır. Bu oran Boyer-Moore, Raita, Horspool ve Quick Search algoritmalarında yaklaşık %55 oranında iken, Tuned Boyer-Moore algoritmasında ise %49 oranındadır. Boyer-Moore türevi algoritmalarda ve diğer algoritmaların birçoğunda orta uzunluklu dizgilerden uzun dizgilere geçişte ise genel olarak yaklaşık %15-%20 oranında bir performans düşüklüğü meydana gelmektedir. Bu sonucu daha önceden de belirttiğimiz şekilde önişlem safhasındaki dizgi işleme süresi oluşturmaktadır. Brute Force türevi tüm algoritmalar ise tüm dizgi uzunluklarında kendi içlerinde çok yakın sonuçlara sahiptirler. Otomat mantığını kullanan Backward Oracle, Reverse Factor ve Turbo Reverse Factor algoritmaları kısa dizgiden uzun dizgilere geçişte yüksek oranda performans artışı sağlamaktadır. Bu değerler Backward Oracle algortimasında %63 leri bulurken, Turbo Reverse Factor algortimasında bu değer %81 leri bulmaktadır. Diğer alfabe türlerinde olduğu gibi Forward Dawg algoritması bu alfabede de en kötü performansı sergilemiştir. Ortalamalar bazında ele aldığımızda Boyer-Moore türevi olan Tuned BM algoritmasını en iyi performansı sergilemiş olarak görmekteyiz. Alfabe uzunluğu arttıkça diğer alfabelerde performans gösteren algoritmalar ortalama sırlamasında oldukça gerilere düşmüşlerdir. Arama süresi olarak en iyi değer ise Zhu-Takaoka algoritmasının orta uzunluklu dizgisi üzerinde gerçekleşmiştir.

103 95 Çizelge 4.3: Doğal Dil alfabesi açısından 100 dizgi üzerinde arama süresi değerleri (sn) Algoritmalar ORT Tuned Boyer-Moore 2,39 1,2 1,3 1,63 Zhu-Takaoka 2,75 1,02 1,18 1,65 Berry-Ravindran 2,75 1,09 1,37 1,74 Horspool 2,4 1,36 1,47 1,74 Raita 2,49 1,35 1,47 1,77 Quick Search 2,75 1,52 1,65 1,97 Reverse Colussi 3,24 1,24 1,59 2,02 Boyer-Moore 3,4 1,6 1,62 2,21 Smith 3,83 1,6 1,69 2,37 Turbo Boyer-Moore 4,1 1,72 1,73 2,52 Skip Search 3,72 1,86 2,28 2,62 KMP Skip Search 4,66 2,38 2,72 3,25 Backward Oracle 8,17 3,11 3,05 4,78 Alpha Skip Search 9,41 2,6 2,79 4,93 Reverse Factor 11,47 2,4 2,36 5,41 Shift Or 6,41 6,64 6,8 6,62 Turbo Reverse Factor 14,24 3,05 2,72 6,67 Not So Naive 7,85 8,13 8,03 8,00 Karp-Rabin 8,63 8,63 8,63 8,63 Brute Force 12,8 12,74 12,75 12,76 Two Way 13,42 15,06 14,55 14,34 Apotolico-Giancarlo 24,06 13,8 14,38 17,41 Simon 18,06 17,42 17,55 17,68 Morris-Pratt 18,44 17,72 17,8 17,99 Knuth-Morris Pratt 20,56 19,19 19,28 19,68 Apostolico Crochemore 19,63 19,78 19,69 19,70 Colussi 20,78 20,78 20,72 20,76 String Matching On Ord.Alp 23,05 21,66 21,83 22,18 Galil-Giancarlo 23,94 23,89 23,78 23,87 Galil Seiferas 28,29 27,02 27,1 27,47 Research With Automaton 36,45 36,5 37,09 36,68 Forward Dawg 119,07 167,19 187,85 158,04 Sonuç olarak: Algoritmaların performansları alfabeye ve dizgi uzunluğuna bağlı olarak değişiklik göstermektedir. Alfabedeki eleman sayısı azaldıkça genellikle algoritmaların performansı da düşmektedir. Dizgi uzunluğu alfabelerin performansını etkilemektedir. Bu farklı üç alfabe ve farklı üç dizgi uzunluğu dikkate alındığında,

104 96 Boyer-Moore türevi algoritmaların dizgi eşleme için en uygun algoritma tipleri olduğu ortaya çıkmaktadır. Dizgi eşleme algoritmaların başarısı genel olarak arama süresi ve karşılaştırma sayısı üzerinden ele alınıyor olsa da, karşılaştırma süresi kıstası başarı belirlemede arama süresi kıstasının çok gerisinde kalmaktadır. Çoğu zaman, özellikle otomat türü algoritmalarda karşılaştırma sayısı kıstası, performans belirlemede tamamen etkisiz olabilmektedir. Bu sebeple bu tez üzerinde yapılan denemeler sadece performansı tamamen belirleyen arama kıstası üzerinden ele alınmıştır. Fakat algoritmaların karşılaştırma sayısı değerlendirme çizelgelerine çalışmanın ekler bölümünden ulaşılabilir.

105 Algoritmalar DĠZGĠ EġLEME ALGORĠTMALARININ DOĞAL DĠLLER ÜZERĠNDEKĠ DAVRANIġLARI Bu bölümde dizgi eşleme algoritmalarının farklı doğal diller üzerindeki performans durumları ayrıntılı olarak incelenmiştir. Bunun için dizgi eşleme algoritmaları 8 farklı doğal dil üzerinde performans testlerine tabi tutulmuştur. Bu çalışma için 6 farklı algoritma üzerinde gerçekleştirilmiş olup, seçilmiş doğal diller eşit iki ayrı gruba ayrılmıştır. Birinci gruba ait diller Türkçe, İngilizce, Felemenkçe ve Fince olup 120 karakter, diğer grup ise Almanca, Fransızca, İtalyanca ve İspanyolca olup 140 karakter içermektedir. Her dil için 30,071 KB boyutunda külliyatlar oluşturulmuştur. Yine 3 farklı dizgi uzunluğu dizgi uzunlukları 10 karakter (kısa dizgi), 100 karakter (orta uzunluklu dizgi) ve 200 karakter (uzun dizgi) olarak seçilmiştir. Her bir derlem içerisinden kısa, orta ve uzun dizgi uzunlukları için metin içerisinde farklı konumlarda olacak şekilde 100 er adet dizgi tespit edilerek aramada kullanılacak dizgiler elde edilmiştir. Doğal diller için oluşturulan dizgiler doğal dile özgü anlamlı kelimeleri içerecek şekilde dizgi başı kelime ortasına gelmeyecek şekilde oluşturulmuştur. Çizelge 5.1: Birinci grup için arama süresi değerleri (sn) Türkçe Ġngilizce Felemenkçe Fince Kısa Orta Uzun Kısa Orta Uzun Kısa Orta Uzun Kısa Orta Uzun Horspool 2,40 1,36 1,47 2,68 1,51 1,65 2,81 1,54 1,50 2,67 1,44 1,51 Raita 2,49 1,35 1,56 2,57 1,42 1,61 2,76 1,45 1,51 2,57 1,52 1,55 Quick Search 2,75 1,52 1,65 3,13 1,64 1,58 3,09 1,65 1,62 2,86 1,53 1,79 Boyer-Moore 3,40 1,60 1,62 3,70 1,73 1,70 3,93 1,89 1,79 3,67 1,75 1,81 Smith 3,83 1,60 1,69 4,54 1,77 1,78 4,27 1,72 1,71 4,11 1,85 1,80 Turbo Boyer-Moore 4,10 1,72 1,73 4,59 1,92 1,83 4,95 2,03 2,03 4,67 1,94 1,89 Çizelge 5.1 den de görüldüğü üzere alfabe sayıları aynı olmasına karşın algoritmalar farklı diller üzerinde farklı arama süresi değerleri ortaya çıkarmışlardır. Bu durum doğal dillerin gramer yapılarının farklılıklarının ortaya çıkarmış olduğu bir

106 Algoritmalar 98 durumdur. Renkli kutucuklar diller üzerindeki dizgi uzunluklarına bağlı en iyi performans değerlerini göstermektedir. Bütün algoritmalar üzerinde Türkçe dili kısa ve orta uzunluklu dizgilerde en iyi arama süresine sahiptir. Uzun dizgide Raita ve Quick Search algoritmasında Türkçe yerini diğer dillere bırakmıştır. Fince genel olarak Türkçeden sonra en iyi sonuçları vermiştir. Bazı algoritmalarda İngilizce Fincenin önüne geçmiştir. Felemenkçe orta uzunluklu dizgide Raita ve Smith algoritmaları dışında en kötü sonuçlara sahiptir. Yine kısa uzunluklu dizgide Quick Search ve Smith algoritmaları dışında en kötü sonuçlara sahiptir. Uzun dizgide ise Felemenkçe sadece Turbo Boyer- Moore algoritması üzerinde en kötü performans değerini göstermiştir. Raita algoritmasında ise en iyi sonuca sahiptir. Çizelge 5.2: İkinci grup için arama süresi değerleri (sn) Almanca Fransızca Ġtalyanca Ġspanyolca Kısa Orta Uzun Kısa Orta Uzun Kısa Orta Uzun Kısa Orta Uzun Horspool 2,59 1,40 1,53 2,54 1,45 1,72 2,65 1,59 1,58 2,76 1,48 1,61 Raita 2,58 1,50 1,51 2,63 1,43 1,52 2,61 1,55 1,56 2,67 1,52 1,62 Quick Search 2,84 1,49 1,69 3,00 1,54 1,74 3,01 1,52 1,70 2,95 1,56 1,61 Boyer-Moore 3,74 1,66 1,73 3,64 1,70 1,68 3,75 1,83 1,73 3,80 1,71 1,68 Smith 4,24 1,62 1,85 4,24 1,67 1,75 4,42 1,88 1,76 4,38 1,75 1,79 Turbo Boyer-Moore 4,52 1,89 1,92 4,57 1,87 1,90 4,68 1,94 1,87 4,62 1,89 1,94 Çizelge 5.2 den de görüldüğü gibi Fransızca orta uzunluklu dizgilerde en iyi sonuca sahiptir. Almanca kısa dizgilerde göstermiş olduğu performansı orta uzunluklu dizgide de göstermiştir. İspanyolca orta uzunluklu dizgide kısa dizgiye göre daha iyi performans göstermiştir. İtalyanca Quick Search algoritması dışındaki tüm algoritmalarda en kötü performansı sergilemiştir. Quick Search algoritmasında ise ikinci sıradadır. Almanca ve Fransızca uzun dizgilerde kısa dizgilerden daha kötü bir performans sergilemişlerdir. İki grup ve bütün dizgi uzunlukları beraber ele alındığında Türkçenin diğer dillerden çok daha iyi performans gösterdiği açıkça görülebilmektedir. Çizelge 4 ve

107 Algoritmalar Algoritmalar 99 Çizelge 5 birbirlerine çok benzer durumlar sergilemişlerdir. Bu durum arama süresi için gramer yapı farklılığının alfabe uzunluğundan daha belirleyici olduğunun göstergesidir. Çizelge 5.3: Birinci grup için arama süresi değerleri (x1000) Türkçe Ġngilizce Felemenkçe Fince Kısa Orta Uzun Kısa Orta Uzun Kısa Orta Uzun Kısa Orta Uzun Horspool Raita Quick Search Boyer-Moore Smith Turbo Boyer-Moore Çizelge 5.4: İkinci grup için arama süresi değerleri (x1000) Almanca Fransızca Ġtalyanca Ġspanyolca Kısa Orta Uzun Kısa Orta Uzun Kısa Orta Uzun Kısa Orta Uzun Horspool Raita Quick Search Boyer-Moore Smith Turbo Boyer-Moore Çizelge 5.3 ve Çizelge 5.4 te karşılaştırma sayıları verilmiştir. Bütün çizelgeler birlikte ele alındığında, karşılaştırma sayılarının arama süresi ile ilişkili olduğu söylenebilir. Algoritmaların yapıları ve ön işlem safhaları bu ilişkide rol almaktadır. Performans dağılımları uzun ve orta uzunluklu dizgilerde birbirlerine yakın değerlere sahiptir. Fince uzun ve orta uzunluklu dizgilerde en kötü performansı sergilemiştir. Bu durum Fincenin karmaşık bir dil yapısına sahip olduğunun bir göstergesidir. Bu sebeple karşılaştırma esnasında geri dönüşler diğer dillere göre çok daha fazla olmuştur. Türkçe geri dönüşlere en az izin veren dil olarak gözümüze çarpmaktadır. Almanca ikinci ve Fransızca üçüncü sıradadır.

108 100 Bu bölümde ortaya çıkan en önemli sonuç, aynı alfabe sayısı üzerinde bile olsa dil değişikliğinde dizgi eşleme algoritmalarının hızı da değişmektedir. Bu, dillerin yapısal farklılığının dizgi eşleme algoritmaları üzerinde farklı etkiler gösterdiğinin açık bir kanıtıdır.

109 KARAKTER GRUPLARININ FREKANSINI KULLANAN HIZLI YENĠ BĠR DĠZGĠ EġLEME ALGORĠTMASI (GF ALGORĠTMASI) Dizgi eşleme algoritmaları, hızlı arama işlemini gerçekleştirmek için çeşitli yöntemler kullanmışlardır. Bu algoritmalardan bazıları arama işleminde dizgiyi oluşturan önek ve sonekleri kullanırken, bazı algoritmalar dizgiyi otomatlar üzerinden değerlendirmişlerdir. Dizgiyi bağlı liste üzerinden değerlendiren ya da alfabedeki karakterlerin kullanım frekansına göre arama yapan algoritmalar da geliştirilmiştir. Dizgi üzerindeki karakterlerin konumuna göre kaydırma değeri belirleyen Boyer-Moore algoritması aynı zamanda dizgideki önek ve sonekleri de göz önünde bulundurmaktadır. Skip Search algoritması ise dizgiyi bir bağlı liste üzerinden ele alarak arama işlemini gerçekleştirmektedir. Bu algoritmalar 2. Bölümde ayrıntılı olarak ele alınmıştı. Optimal Mismatch algoritması ise önceden belirli bir karakter frekans analizine ihtiyaç duymaktadır. Bu algoritma frekans değerleri aracılığı ile kullanılacak alfabe üzerinde frekansı en düşük olan karakterden aramaya başlamaktadır. Bu yaklaşım ise metin üzerindeki geri dönüşleri azaltmaya yöneliktir ve daha hızlı bir arama işlemi gerçekleştirmeyi amaçlamıştır. Fakat her alfabe ya da her doğal dil için önceden belirlenmiş ayrı bir karakter frekans değerlerine ihtiyaç vardır. Bir dilin karakterlerinin frekans değerleri başka bir dil üzerinde kullanılamamaktadır. Bu sebepten üzerinde arama yapılacak metne ait karakterlerin frekans değerleri de önceden saptanmalıdır. Bu durum ise dil bağımlılık problemini ortaya çıkarmaktadır. Bu sorundan hareketle hem dil bağımlılığını kısmen ortadan kaldıran hem de daha hızlı bir arama işlemi gerçekleştiren GRUP FREKANSI (GF) olarak isimlendirdiğimiz yeni bir dizgi eşleme algoritması geliştirilmiştir. Grup Frekansı algoritması bir dilde yazılmış metinlerde kullanılan karakterlerin frekansını tek karakter bazında değil, karakterlerin grubu olarak ele almaktadır. Doğal dil metinlerde kullanılan alfabe; rakamlar, büyük sesli harfler, büyük sessiz harfler, küçük sesli harfler, küçük sessiz harfler, noktalama ve diğer karakterler olmak üzere 6 gruba ayrılmıştır. Yani a karakterinin frekansı yerine tüm küçük sesli karakterlerin (Türkçe için a,e,ı,i,o,ö,u,ü) frekansına bağlı olarak grubun frekans değeri belirlenmektedir. Algoritma, Berry-Ravindran algoritmasında kullanılan kaydırma

110 102 fonksiyonunu kullanmaktadır. Aranacak dizgi için, grupların öncelik dizilimi esas alınarak, ön işlem safhasında dizgiyi oluşturan karakterlerin arama aşamasındaki kontrol sıralaması belirlenmekte ve bu sıralama kaydırma fonksiyonu tarafından arama aşamasında kullanılmaktadır. Bu amaçla Türkçe, İngilizce, Almanca, Fransızca, Felemenkçe, Fince, İspanyolca, İtalyanca dillerinin her biri için ayrı ayrı grupların frekans değerleri belirlenmiştir. Her bir dil için ayrı olmak üzere gruplar kendi içlerinde öncelik sırasına dizilmiştir. Grupların öncelik sırasına dizilmesi aşamasında seçilen bütün dillerin gruplarının öncelik sırasının birbiriyle aynı olduğu saptanmıştır. Bu sebepten sunulan yeni algoritma bu diller için dil bağımlılığını kısmen ortadan kaldırmaktadır. Yani bu 8 dilin, gruplarının öncelik dizilimi için aynı sıralama kullanılmaktadır Grup Frekansı Algoritması Ön iģlem aģaması Grup Frekansı algoritması iki önişlem aşaması içermektedir. Berry-Ravindran algoritmasında da kullanılan birinci ön işlem aşaması, arama aşamasında dizginin bir karakteri ile metnin bir karakterinin karşılaştırılması neticesinde eşitsizlik durumunda, metnin içerisinde bir sonraki karşılaştırılacak karakterin yerinin belirlenmesi için ne kadar ileri gidileceğinin (kaydırma değeri) ardıl iki karakter üzerinden ne kadar olması gerektiğini belirlemektedir. İkinci ön işlem aşaması, dizgiyi oluşturan karakterlerin gruplarının frekansına göre, karakterlerin bir karşılaştırılma sırasını oluşturmaktadır. Bu şekilde arama işlemi aşamasında yapılan karakter karşılaştırılması sırasında eşitsizlik durumundaki geri dönüşlerin önemli oranda azaltılabilmesi amaçlanmaktadır. Bu durum da karşılaştırma sayısını azaltarak buna bağlı olan arama süresini de kısaltmaktadır. Algoritmanın önişlem safhası Şekil 1 de verilmiştir. x=dizgi m=dizgi_uzunluğu last_x=düzenlenmiş_dizgi last_x_index=düzenlenmiş_dizgiye_ait_indeks_dizisi

111 103 Berry_Ravindran_Önişlem_Safhası for i to m do if x[i]=rakam then karakter_dizisi x[i] indeks_dizisi i if x[i]=büyük_sesli then karakter_dizisi x[i] indeks_dizisi i if x[i]=büyük_sessiz then karakter_dizisi x[i] indeks_dizisi i if x[i]=diğer_karakterler then karakter_dizisi x[i] indeks_dizisi i if x[i]=küçük_sesli then karakter_dizisi x[i] indeks_dizisi i if x[i]=küçük_sessiz then karakter_dizisi x[i] indeks_dizisi i last_x birleştirilmiş_karakter_dizisi last_x_index birleştirilmiş_indeks_dizisi ġekil 1: Ön işlem aşaması kaba kodu Ön işlem aşamasında kullanılması amacıyla 8 farklı dilin karakterlerinin grup tabanlı öncelik sıralaması belirlenmiştir. Metin dosyaları içerisindeki karakter gruplarının frekanslarını belirlemek için yapılan istatistik çalışması sonucunda en düşük frekansa sahip olandan en yüksek frekansa sahip olan gruba doğru; rakamlar, büyük sesli harfler, büyük sessiz harfler, noktalama işaretleri ve diğer karakterler, küçük sesli harfler, küçük sessiz harfler olmak üzere sıralama belirlenmiştir. Bu sıralama ile arama aşamasında ilk kontrol edilecek önceliğe sahip grup rakamlar iken aramada son önceliğe sahip grup küçük sessiz harflerdir. Arama safhasında oluşturulan bu öncelik sırası üzerinden kontroller yapılmaktadır. Bu sayede geri dönüşler en aza indirgenmekte ve

112 104 arama işlemi daha kısa sürede gerçekleştirilebilmektedir. Ön işlem safhası bir dizgi üzerinde açıklanırsa; Dizgi: Bugün 16 Temmuz. şeklinde 15 karaktere sahip olsun, gruplama işlemi ön işlem safhasından sonra dizginin öncelikli sıralanmış şekli 16BT.uüeugnmmz olacaktır. Buna bağlı olarak ilk indis değeri 0 kabul edersek; indeks dizisi ise halini alacaktır. Çizelge 6.1: Grupların frekans değerleri (%) Türkçe İngilizce Almanca Fransızca İtalyanca İspanyolca Fince Felemenkçe Rakam 0,6 0,2 0,7 0,2 0,2 0,4 0,2 0,2 Büyük Sesli 0,9 0,8 0,8 0,5 0,5 0,5 0,4 0,4 Büyük Sessiz 2,5 2,0 3,5 1,3 1,3 1,4 1,4 1,4 Diğerleri 17,0 21,0 18,0 22,0 21,0 22,0 16,5 20,0 Küçük Sesli 34,0 29,0 30,0 34,0 36,0 35,0 38,2 32,0 Küçük Sessiz 45,0 47,0 47,0 42,0 41,0 40,7 43,3 46,0 Ayrıca yapılan istatistik çalışması sonucunda kullanan bütün dillerin için gruplarının öncelik sıralamasının aynı olduğu da görülmüştür.(çizelge 6.1) Bunun sonucu olarak ta algoritma dil bağımlılığından kısmen kurtulmaktadır Dizgi arama aģaması Önişlem aşamasında dizginin karakterlerinin arama aşamasındaki öncelik sırası belirlendikten sonra, arama aşamasında belirlenen bu sıralamaya bağlı kalınarak karşılaştırma işlemleri yapılmaktadır. Arama işlemine dizginin önceliği ilk olan karakterinden yani sıralanan dizginin ilk karakterinden başlanmaktadır. Dizgi üzerindeki karakterlerin metin içinde karşılık gelen karakterleri ise belirlenen indeks dizisi ile saptanmaktadır. Karşılaştırma işlemi bu şekilde devam ederek metin sonuna kadar işlem devam etmektedir. Eşleşmeme olmaması durumunda ise eşleşmeyen karakterin birinci önişlem safhasında belirlenen kaydırma değeri kadar dizgi kaydırılmaktadır. Şekil 2 de dizgi eşleme aşamasının algoritması verilmektedir. n=metin_uzunluğu m=dizgi_uzunluğu x=dizgi y=metin

113 105 while j< n-m do while i<m do if last_x[i]= y[ j+last_x_array[i]] then i++ else i 0, BREAK if i=m then OUTPUT ( Dizgi Bulundu) j j+brbc [text[j + m]] [text[j + m + 1]] ġekil 2: Arama algoritması kaba kodu 6.2. Denemeler ve Sonuçlar Doğal dillerin karakter gruplarının frekansını belirleyebilmek için her bir dil için ayrı ayrı olmak üzere yaklaşık 150 MB büyüklüğe sahip dokümanlar kullanılarak karakter gruplarının kullanım frekansları tespit edilmiştir. Algoritmanın farklı dillerde başarımını belirlemek amacıyla ise seçilen 8 farklı dil için metin uzunluğu 30,071 KB olan derlemler her bir dil için ayrı ayrı hazırlanmıştır. Türkçe için doğal dil işlemeye yönelik hazırlanmış ODTÜ Derleminin içindeki doğal dile ait olmayan cümle işaretleme amaçlı XML kodları temizlenmiş ayrıca içerisine çeşitli konularda makale hikâye ve romanlardan oluşan eklemeler yapılarak Türkçe derlem oluşturulmuştur. Diğer 7 dil için ise Gutenberg projesinden her bir dile ait hikâye ve romanları içeren dokümanlar dâhil edilerek aynı uzunluğa sahip derlemler oluşturulmuştur. Dizgi eşleme algoritmalarının dizgi uzunluğuna bağlı olarak performanslarını değerlendirebilmek için dizgi uzunlukları 10 karakter (kısa dizgi), 100 karakter (orta uzunluklu dizgi) ve 200 karakter (uzun dizgi) olarak seçilmiştir. Her bir derlem içerisinden kısa, orta ve uzun dizgi uzunlukları için metin içerisinde farklı konumlarda olacak şekilde 100 er adet dizgi tespit edilerek aramada kullanılacak dizgiler elde edilmiştir. Arama süreleri ise 100 dizgi üzerinden ölçülmüştür. Hazırlanmış olan programları kullanılarak her dil için ayrı ayrı oluşturulmuş 10, 100 ve 200 karakterlik dizgi uzunluğuna sahip 100 dizgi için arama işlemi

114 Türkçe Ġngilizce Almanca Fransızca Ġtalyanca Ġspanyolca Fince Felmenkçe Türkçe Ġngilizce Almanca Fransızca Ġtalyanca Ġspanyolca Fince Felmenkçe 106 gerçekleştirilmiştir. Arama işlemi her bir dil için ayrı ayrı olarak yapılmıştır. Kısa dizgiler için elde edilen sonuçlar çizelge 1 de verilirken, orta uzunluğa sahip dizgiler için sonuçlar çizelge 2 de yer almaktadır, uzun dizgilerin arama süreleri ise çizelge 3 te verilmiştir. Çizelgelerde verilen süreler sn değerinden ve 100 dizgi arama süresi değerlerini ifade etmektedir. Çizelge 6.2: Karakter uzunluğu 10 olan dizgiler için arama süreleri (sn) Ort. Grup Frekansı 2,20 2,20 2,22 2,21 2,14 2,19 2,22 2,22 2,20 Zhu Takaoka 3,99 3,98 4,06 4,01 4,02 4,16 4,11 4,18 4,06 Maximal Shift 4,25 4,78 4,57 4,61 4,67 4,7 4,51 4,65 4,59 Optimal Mismatch 4,28 4,84 4,57 4,62 4,69 4,71 4,6 4,72 4,63 Boyer Moore 4,35 4,7 4,64 4,55 4,76 4,69 4,64 4,85 4,65 Berry Ravindran 5 5,23 5,02 5,05 5,04 5,23 4,98 5,16 5,09 Quick Search 4,83 5,44 5,16 5,24 5,34 5,28 5,23 5,37 5,24 Brute Force 10,25 10,22 10,23 10,28 10,29 10,27 10,23 10,18 10,24 Çizelge 6.3: Karakter uzunluğu 100 olan dizgiler için arama süreleri (sn) Ort. Grup Frekansı 0,98 1,01 0,99 1,01 1,01 1,02 1,03 1,03 1,01 Zhu-Takaoka 1,07 1,08 1,01 1,03 1,08 1,05 1,09 1,09 1,06 Berry Ravindran 1,24 1,29 1,36 1,37 1,29 1,33 1,26 1,39 1,32 Boyer Moore 1,54 1,73 1,67 1,7 1,78 1,73 1,85 1,78 1,72 Optimal Mismatch 1,53 1,76 1,67 1,79 1,81 1,74 1,87 1,79 1,75 Maximal Shift 1,56 1,79 1,71 1,79 1,79 1,77 1,83 1,77 1,75 Quick Search 1,67 1,93 1,82 1,88 1,96 1,86 2 1,98 1,89 Brute Force 10,28 10,17 10,26 10,32 10,31 10,3 10,28 10,25 10,27 Grup Frekansı algoritması tüm dizgi uzunluklarında seçilen diğer tüm algoritmalardan daha iyi bir performansa sahiptir. Kısa dizgilerde diğer algoritmaların en hızlısı olan Zhu-Takaoka algoritmasından tüm dillerin ortalamasında yaklaşık %46

115 Türkçe Ġngilizce Almanca Fransızca Ġtalyanca Ġspanyolca Fince Felmenkçe 107 daha hızlı iken sırasıyla orta uzunluğa sahip dizgilerde ve uzun dizgilerde diğer algoritmaların en hızlısı olan Zhu Takaoka algoritmasından yaklaşık % 0,95 ve % 0,99 daha hızlıdır. Mevcut diğer algoritmalardan Brute Force algoritması dışındaki algoritmalarda da benzer şekilde olduğu gibi Grup Frekansı algoritmasının performansı da orta uzunluklu ve uzun dizgilerde kısa dizgilere göre ortalama yaklaşık 2 kat daha iyidir. Çizelge 6.4: Karakter uzunluğu 200 olan dizgiler için arama süreleri (sn) Ort. Grup Frekansı 1,12 1,13 1,13 1,12 1,07 1,07 1,09 1,1 1,1 Zhu-Takaoka 1,13 1,15 1,16 1,14 1,05 1,07 1,07 1,07 1,11 Berry Ravindran 1,49 1,5 1,49 1,56 1,68 1,67 1,53 1,68 1,58 Boyer Moore 1,55 1,62 1,52 1,58 1,68 1,63 1,63 1,6 1,6 Maximal Shift 1,54 1,67 1,62 1,69 1,69 1,72 1,69 1,71 1,67 Optimal Mismatch 1,56 1,65 1,63 1,68 1,71 1,63 1,76 1,71 1,67 Quick Search 1,58 1,81 1,77 1,78 1,82 1,77 1,88 1,82 1,78 Brute Force 10,3 10,19 10,28 10,25 10,29 10,22 10,26 10,24 10,25 Grup Frekansı algoritmasının performansının yüksek olmasının nedeni; arama aşamasında yapılan karşılaştırma işlemlerinde oluşan eşitsizlik halinde son karşılaştırmanın yapıldığı konumdan geri dönüşlerini en aza indirmeyi amaçlayarak karşılaştırma sayısını azaltması ve buna bağlı olarak arama süresini düşürmesidir. Ayrıca algoritmanın frekansa dayalı fakat kısmen dil bağımsız olması algoritmanın önemli özelliğidir. Karşılaştırmaya en az kullanılan karakter gruplarından başlanarak aramanın sürdürülmesi geri dönüşleri engelleyen bir yaklaşım olmuştur. Algoritmanın tek dezavantajı ise sadece doğal diller üzerinde çalışabilmesidir. Ancak önceden yazılan metnin dilinin belli olduğu kelime işlemci yazılımları, elektronik kitaplar vb gibi uygulamalar içerisinde kullanılması mümkündür.

116 SONUÇLAR Dizgi eşleme algoritmaları, üzerinde çalışmış olduğu alfabe türüne göre farklı performans değerleri gösterebilmektedirler. 4. Bölüm sonuçlarından da görüldüğü üzere her algoritmanın farklı alfabe ve dizgi uzunlukları üzerinde birbirlerinden farklı performans sonuçları verdiği saptanmıştır. Dizgi eşleme algoritmalarının başarısı arama süresinin performansına göre belirlenmektedir. Karşılaştırma sayısı başarı belirlemede garanti bir kıstas değildir. Bu durum özellikle otomat türü algoritmalar üzerinde daha açıktır. Bazı algoritmaların karşılaştırma sayısı çok düşük olmasına rağmen, karşılaştırma sayısı daha çok olan algoritmalara göre yavaş çalışabilmektedir. Fakat genelleme yapılacak olursa karşılaştırma sayısının arama süresi ile doğru orantılı olduğu söylenebilir. Tam dizgi eşlemede tüm dizgi uzunlukları için DNA alfabesi üzerinde arama işlemi yapılacaksa yaklaşık dizgi eşlemeye de uyum sağlayan ve ortalamada en iyi değere sahip olan Shift Or algoritmasının seçilmesi en ideal seçim olacaktır. Eğer dizgi uzunluğu ayrımı yapılacaksa bu alfabe için kısa dizgide Reverse Colusssi, orta uzunluklu ve uzun dizgi için Apostolico-Crochemore algoritmasının seçilmesi doğru tercih olacaktır. Apostolico-Crochemore kısa alfabe ve uzun dizgi için en iyi arama performansına sahip bir algoritmadır. Alfabe uzunluğu arttıkça Shift Or algoritmasında performans artışı görülse de diğer algoritmaların hızlı performans artışı bu algoritmayı gerilere bırakmıştır. Rakam alfabesi üzerinde ortalamada en iyi algoritma Berry- Ravindran olarak saptanmıştır. DNA alfabesinde ortalamada ikinci en iyi performansa sahip Skip Search algoritması bu alfabede de yerini korumuştur. Yine dizgi uzunluğu ayrımında kısa dizgi için Tuned Boyer-Moore, orta uzunluklu ve uzun dizgiler için Berry-Ravindran algoritmaları en iyi seçim olacaktır. Doğal dil alfabesi, rakam ve DNA alfabelerinden daha uzun bir alfabe olup, bazı dillerde karakter sayısı 150 lere ulaşmaktadır. Bu alfabe üzerinde dizgi eşleme algoritmalarından Boyer-Moore türevi olanlar en iyi performansı sağlamışlardır. Bunun dışında genelleme yapılacak olursa algoritmaların büyük bir kısmı diğer alfabelere göre daha etkin performans sergilemişlerdir. Ortalamada en iyi performans değeri Tuned Boyer Moore algoritmasına ait iken, dizgi olarak ele alındığında kısa dizgide en iyi

117 109 performans değerine yine Tuned Boyer Moore algoritması sahipken, orta uzunluklu ve uzun dizgide yerini Zhu-Takaoka algoritmasına bırakmıştır. Yani kısa dizgi ve doğal dil alfabesi kullanılıyorsa, dizgi eşleme için en ideal algoritma Tuned Boyer Moore algoritması iken, orta uzunluklu ve uzun dizgi için en ideal algoritma Zhu-Takaoka algoritmasıdır. Diğer alfabelerde en iyi performans gösteren Shift Or ve Skip Search algoritmaları, bu alfabede performanslarını arttırmış olsa da, diğer algoritmaların başarısı sebebiyle gerilere düşmüşlerdir. Yaklaşık dizgi eşleme algoritmalarından Wu-Manber algoritması, Shift Or algoritmasından yaklaşık 5 kat daha kötü performans sergilemiştir. Yaklaşık dizgi eşleme gerektiren çalışmalarda Shift Or algoritmasının kullanılması doğru bir tercih olacaktır. Yaklaşık dizgi eşleme algoritmalarının kullanmış olduğu yaklaşıklık değeri, aranacak olan dizginin ne kadar benzer olacağını belirlemekte olup, bu değerin artması algoritmaların performansını büyük oranda düşürmektedir. Buda yaklaşık dizgi eşlemenin bir dezavantajı olarak görülmektedir. Doğal diller üzerine yapılan denemeler sonucunda, dizgi eşleme algoritmalarının farklı doğal diller üzerinde farklı performans değerleri elde edilmiştir. Aynı algoritma farklı doğal diller üzerinde test edildiğinde, alfabe uzunluklarının aynı olmasına rağmen farklı performans değerleri saptanmıştır. Bu durum, doğal dillerin dil yapı farklılığının dizgi eşleme üzerindeki etkisini ortaya koymaktadır. Elde edilen sonuçlar dizgi eşleme üzerinde Türkçe dilinin diğer dillerden daha sade ve işlenebilir bir dil olduğunu göstermiştir. Ayrıca farklı alfabe uzunluğundaki diller üzerinde yapılan bu çalışma, doğal diller üzerinde dizgi eşlemede dilin yapısal farklılığının alfabe uzunluğundan daha etkileyici bir etmen olduğunu ispatlamıştır. Tez çalışmasının bir parçası olarak geliştirilen Grup Frekansı (GF) algoritması, doğal dil alfabesi üzerinde çalışan bir algoritma olup, bahsedilen bölümde (Bölüm 6) elde edilen sonuçlara göre ortalamada her türlü dizgi uzunluğunda en hızlı algoritma olarak karşımıza çıkmıştır. Yine frekansa dayalı Optimal Mismatch (OM) algoritması ve aynı kaydırma mantığını kullanan Berry Ravindran algoritması GF algoritmasının oldukça gerisinde kalmıştır. Algoritmanın başarılı olmasının en büyük nedeni, kullanmış olduğu frekans mantığı sebebiyle karşılaştırma esnasında geri dönüşleri olabildiğince en aza indirmesidir. OM algoritmasına göre hızı dışında sahip olmuş

118 110 olduğu avantajı kısmen dil bağımsız olmasıdır. Yani OM algoritması gibi her dil için ayrı frekans dizisine ihtiyacı yoktur. Belirlemiş olduğu grup frekans düzeni üzerinde çalışılan 8 farklı dil içinde etkin sonuçlar vermiştir. Sadece uzun dizgide birkaç dil üzerinde Zhu-Takaoka algoritmasının gerisinde kalmıştır. Diğer algoritmalara göre ise tek dezavantajı sadece doğal diller üzerinde çalışabilmesidir. Kısmen dil bağımsız özelliği, diğer tüm dünya dillerine ait karakter gruplarının tespit edilerek algoritmanın yeniden uyarlanması ile tamamen dil bağımsız haline dönüştürülebilir.

119 111 KAYNAKLAR 1. Crochemore M. ve Rytter W., 2002, Jewels of Stringology, World Scientific, Singapore. 2. Crochemore M. ve Lecroq T., 1997, Pattern Matching and Text Compression Algorithms, The Computer Science and Engineering Handbook. 3. Charras C. ve Lecroq T., 2004, Handbook of Exact String-Matching Algorithms, King s College Publications. 4. Carus A., Ersin A.K., Mesut A., 2007, Dizgi Eşleme Algoritmalarının Alfabeye Bağlı Etkinliklerinin Araştırılması, 12. Elektrik, Elektronik, Bilgisayar, Biyomedikal Mühendisliği Ulusal Kongresi, Eskişehir. 5. Ersin A.K., Carus A., Mesut A., 2007, The Efficiency of String-Matching Algorithms on Natural Languages, International Scientific Conference, Gabrovo. 6. Krone J., Ogden W. F., 2003, Abstract OO Big O, Proceedings of ESECFMW, Helsinki. 7. Rytter W., 2002, On Maximal Suffixes and Constant-Space Linear-Time Versions of KMP Algorithm, LATIN Crochemore M., Hancart C., 1997, Automata for Matching Patterns, in Handbook of Formal Languages, Volume 2, Linear Modeling: Background and Application, G. Rozenberg and A. Salomaa ed., Chapter 9, pp , Springer-Verlag, Berlin. 9. Karp R.M., Rabin M.O., 1987, Efficient randomized pattern-matching algorithms, IBM J. Res. Dev. 31(2): Baeza-Yates, R.A., Gonnet, G.H., 1992, A new approach to text searching, Communications of the ACM. 35(10): Morris (Jr) J.H., Pratt V.R., 1970, A linear pattern-matching algorithm, Technical Report 40, University of California, Berkeley. 12. Knuth D.E., Morris (Jr) J.H., Pratt V.R., 1977, Fast pattern matching in strings, SIAM Journal on Computing 6(1): Crochemore, M., Rytter, W., 1994, Text Algorithms, Oxford University Press. 14. Simon I., 1993, String matching algorithms and automata, in Proceedings of 1st American Workshop on String Processing, R.A. Baeza-Yates and N. Ziviani ed., pp , Universidade Federal de Minas Gerais, Brazil.

120 Colussi L., 1991, Correctness and efficiency of the pattern matching algorithms, Information and Computation 95(2): Galil Z., Giancarlo R., 1992, On the exact complexity of string matching: upper bounds, SIAM Journal on Computing, 21(3): Apostolico A., Crochemore M., 1991, Optimal canonization of all substrings of a string, Information and Computation 95(1): Hancart C., 1992, Une analyse en moyenne de l'algorithme de Morris et Pratt et de ses raffinements, in Théorie des Automates et Applications, Actes des 2 e Journées Franco-Belges, D. Krob ed., Rouen, France, 1991, PUR 176, Rouen, France, Boyer R.S., Moore J.S., 1977, A fast string searching algorithm, Communications of the ACM. 20: Stomp F.A., 2003 Correctness of substring-preprocessing in Boyer-Moore's pattern matching algorithm, Theor. Comput. Sci. (TCS) 290(1): Crochemore M., Czumaj A., Gasieniec L., Jarominek S., Lecroq T., Plandowski W., Rytter W., 1992, Deux méthodes pour accélérer l'algorithme de Boyer- Moore, in Théorie des Automates et Applications, Actes des 2 e Journées Franco-Belges, D. Krob ed., Rouen, France, 1991, pp 45-63, PUR 176, Rouen, France. 22. Apostolico A., Giancarlo R., 1986, The Boyer-Moore-Galil string searching strategies revisited, SIAM Journal on Computing 15(1): Colussi L., 1994, Fastest pattern matching in strings, Journal of Algorithms. 16(2): Horspool R.N., 1980, Practical fast searching in strings, Software - Practice & Experience, 10(6): Sunday D.M., 1990, A very fast substring search algorithm, Communications of the ACM. 33(8): Hume A., Sunday D.M., 1991, Fast string searching, Software - Practice & Experience 21(11): Zhu R.F., Takaoka T., 1987, On improving the average case of the Boyer- Moore string matching algorithm, Journal of Information Processing 10(3):

121 Berry T., Ravindran S., 1999, A fast string matching algorithm and experimental results, in Proceedings of the Prague Stringology Club Workshop`99, J. Holub and M. Simánek ed., Collaborative Report DC-99-05, Czech Technical University, Prague, Czech Republic, pp Smith P.D., 1991, Experiments with a very fast substring search algorithm, Software - Practice & Experience 21(10): Raita T., 1992, Tuning the Boyer-Moore-Horspool string searching algorithm, Software - Practice & Experience, 22(10): Lecroq T., 1992, A variation on the Boyer-Moore algorithm, Theoretical Computer Science 92(1): Crochemore M., 1997, Off-line serial exact string searching, in Pattern Matching Algorithms, ed. A. Apostolico and Z. Galil, Chapter 1, pp 1-53, Oxford University Press. 33. Allauzen C., Crochemore M., Raffinot M., 1999, Factor oracle: a new structure for pattern matching, in Proceedings of SOFSEM'99, Theory and Practice of Informatics, J. Pavelka, G. Tel and M. Bartosek ed., Milovy, Czech Republic, Lecture Notes in Computer Science 1725, pp , Springer-Verlag, Berlin. 34. Galil Z., Seiferas J., 1983, Time-space optimal string matching, Journal of Computer and System Science 26(3): Crochemore M., Perrin D., 1991, Two-way string-matching, Journal of the ACM 38(3): Breslauer D., 1996, Saving comparisons in the Crochemore-Perrin string matching algorithm, Theoretical Computer Science 158(1-2): Crochemore M., 1992, String-matching on ordered alphabets, Theoretical Computer Science 92(1): Sunday D.M., 1990, A very fast substring search algorithm, Communications of the ACM. 33(8): Charras C., Lecroq T., Pehoushek J.D., 1998, A very fast string matching algorithm for small alphabets and long patterns, in Proceedings of the 9th Annual Symposium on Combinatorial Pattern Matching, M. Farach-Colton ed., Piscataway, New Jersey, Lecture Notes in Computer Science 1448, pp 55-64, Springer-Verlag, Berlin. 40. Dawson J., 1974, Suffix removal and word conflation, ALLC Bulletin, Volume 2, No. 3.,

122 Krovetz R., 1993, Viewing morphology as an inference process, Proceedings of the 16th annual international ACM SIGIR conference on Research and development in information retrieval., Paice C. D., 1990, Another stemmer, ACM SIGIR Forum, Volume 24, No. 3., Porter M.F., 1980, An algorithm for suffix stripping, Program. 14, Porter M.F., 1980, The Lovins stemming algorithm. 45. Donna H., 1991, How effective is suffixing?, Journal of the American Society for Information Science. 42, Needleman S., Wunsch C., 1970, A general method applicable to the search for similarities in the amino acid sequence of two proteins, J Mol Biol. 48(3): Smith T.F, Waterman M.S, 1981, "Identification of Common Molecular Subsequences, Journal of Molecular Biology 147: Watson B.W., 1996, A New Regular Grammar Pattern Matching Algorithm, ESA Watson B.W, Watson R.E., 2003, A Boyer-Moore-style algorithm for regular expression pattern matching, Sci. Comput. Program. (SCP) 48(2-3): Allauzen C., Raffinot M., 2000, Simple Optimal String Matching Algorithm, J. Algorithms (JAL) 36(1): Breslauer D.,, Colussi L., Toniolo L., 1998, On the Comparison Complexity of the String Prefix-Matching Problem, J. Algorithms (JAL) 29(1): Ehtesham Rafiq A. N. M., Watheq El-Kharashi M., Gebali F., 2004, A fast string search algorithm for deep packet classification, Computer Communications (COMCOM) 27(15): Navrro G., Raffinot M., 1998, A Bit-Parallel Approach to Suffix Automata: Fast Extended String Matching, In Proceedings of the 9th Annual Symposium on Combinatorial Pattern Matching, Lecture Notes in Computer Science 1448, Springer-Verlag, Berlin, Wang L, Jiang T., 1994, On the complexity of multiple sequence alignment, J Comput Biol 1: Just W., 2001, Computational complexity of multiple sequence alignment with SP-score, J Comput Biol 8(6):

123 Notredame C., 2002, "Recent progresses in multiple sequence alignment: a survey", Pharmacogenomics 31 (1): Lovins J. B., 1968, "Development of a Stemming Algorithm", Mechanical Translation and Computational Linguistics, Schneider T.D., Stephens R.M., 1990, "Sequence logos: a new way to display consensus sequences", Nucleic Acids Res 18: Dasarathy B.V, 1991, Nearest Neighbor (NN) Norms: NN Pattern Classification Techniques. 60. Wu S., Manber U., 1992, Fast text searching allowing errors, Commun. ACM. 35(10): Amir A., Lewenstein M., Lewenstein N., 2000, Pattern Matching In Hypertext. 62. Lemström K., Hella L., 2003, Approximate pattern matching and transitive closure logics, Theor. Comput. Sci. (TCS) 1-3(299): Kolpakov R.M., Kucherov G., 2003, Finding approximate repetitions under Hamming distance, Theor. Comput. Sci. (TCS) 1(303): Lecroq T., 1995, Experimental Results on String Matching Algorithms, Softw., Pract. Exper. (SPE) 25(7): Lecroq T., 2007, Fast exact string matching algorithms, Inf. Process. Lett. (IPL) 102(6): Say B., Zeyrek D., Oflazer K., Özge U., 2002, Development of a Corpus and a Treebank for Present-day Written Turkish, Proceedings of the Eleventh International Conference of Turkish Linguistics,

124 116 ÖZGEÇMĠġ 1984 te Trabzon da dünyaya gelen Abdul Kadir Ersin, yine aynı sene içerisinde ailesi ile birlikte İstanbul a yerleşti de Bahçelievler Anadolu Lisesi nden mezun olduktan sonra yine 2002 de Trakya Üniversitesi Bilgisayar Mühendisliği Bölümü nde lisans eğitimine başladı da mezun olduktan sonra yine aynı üniversite ve bölümde yüksek lisans eğitimine başladı. Halen yüksek lisans eğitimi devam etmektedir. Ayrıca iki senelik evli ve bir çocuk babasıdır.

125 117 EKLER EK-A Dizgi EĢleme Algoritmalarının Alfabeye Bağlı Deneme Sonuç Grafikleri Grafik 1: DNA Alfabesi Dizgi Uzunluğu: 10 karakter Süre: saniye (sn) Grafik 2: DNA Alfabesi Dizgi Uzunluğu: 100 karakter Süre: saniye (sn)

126 118 Grafik 3: DNA Alfabesi Dizgi Uzunluğu: 200 karakter Süre: saniye (sn) Grafik 4: RAKAM Alfabesi Dizgi Uzunluğu: 10 karakter Süre: saniye (sn)

127 119 Grafik 5: RAKAM Alfabesi Dizgi Uzunluğu: 100 karakter Süre: saniye (sn) Grafik 6: RAKAM Alfabesi Dizgi Uzunluğu: 200 karakter Süre: saniye (sn)

128 120 Grafik 7: Doğal Dil Alfabesi Dizgi Uzunluğu: 10 karakter Süre: saniye (sn) Grafik 8: Doğal Dil Alfabesi Dizgi Uzunluğu: 100 karakter Süre: saniye (sn)

129 121 Grafik 9: Doğal Dil Alfabesi Dizgi Uzunluğu: 200 karakter Süre: saniye (sn) EK-B Dizgi EĢleme Algoritmalarının Doğal Diller Üzerindeki Deneme Sonuç Grafikleri Grafik 10: 120 Karakterli Doğal Diller Dizgi Uzunluğu: 10 karakter Süre: saniye (sn)

130 122 Grafik 11: 120 Karakterli Doğal Diller Dizgi Uzunluğu: 100 karakter Süre: saniye (sn) Grafik 12: 120 Karakterli Doğal Diller Dizgi Uzunluğu: 200 karakter Süre: saniye (sn)

131 123 Grafik 13: 140 Karakterli Doğal Diller Dizgi Uzunluğu: 10 karakter Süre: saniye (sn) Grafik 14: 140 Karakterli Doğal Diller Dizgi Uzunluğu: 100 karakter Süre: saniye (sn)

132 124 Grafik 15: 140 Karakterli Doğal Diller Dizgi Uzunluğu: 200 karakter Süre: saniye (sn) EK-C Grup Frekansı Algoritması ve Performans Grafikleri Grafik 16: Grup Frekansı Dizgi Uzunluğu: 10 karakter Süre: saniye (sn)

DĠZGĠ EġLEME ALGORĠTMALARININ ALFABEYE BAĞLI ETKĠNLĠKLERĠNĠN ARAġTIRILMASI

DĠZGĠ EġLEME ALGORĠTMALARININ ALFABEYE BAĞLI ETKĠNLĠKLERĠNĠN ARAġTIRILMASI DĠZGĠ EġLEME ALGORĠTMALARININ ALFABEYE BAĞLI ETKĠNLĠKLERĠNĠN ARAġTIRILMASI Aydın CARUS 1 Abdul Kadir ERSİN 2 Altan MESUT 3 1,2,3 Trakya Üniversitesi, Mühendislik-Mimarlık Fakültesi, Bilgisayar Mühendisliği

Detaylı

BMB204. Veri Yapıları Ders 12. Dizgi Eşleme (String Matching) Algoritmaları İleri Veri Yapıları

BMB204. Veri Yapıları Ders 12. Dizgi Eşleme (String Matching) Algoritmaları İleri Veri Yapıları BMB204. Veri Yapıları Ders 12. Dizgi Eşleme (String Matching) Algoritmaları İleri Veri Yapıları Erdinç Uzun NKÜ Çorlu Mühendislik Fakültesi Bilgisayar Mühendisliği Bölümü Dersin Planı Dizgi Eşleme Algoritmaları

Detaylı

YZM VERİ YAPILARI DERS#9: HASH FONKSİYONLARI

YZM VERİ YAPILARI DERS#9: HASH FONKSİYONLARI YZM 2116- VERİ YAPILARI DERS#9: HASH FONKSİYONLARI İÇERİK Bu bölümde, Giriş Hash Tabloları Hash Fonksiyonu Çakışma (Collision) Ayrık Zincirleme Çözümü Linear Probing Çözümü Quadratic Probing Çözümü konusuna

Detaylı

Veri Yapıları. Öğr.Gör.Günay TEMÜR Düzce Üniversitesi Teknolojis Fakültesi

Veri Yapıları. Öğr.Gör.Günay TEMÜR Düzce Üniversitesi Teknolojis Fakültesi Veri Yapıları Öğr.Gör.Günay TEMÜR Düzce Üniversitesi Teknolojis Fakültesi Hash Tabloları ve Fonksiyonları Giriş Hash Tabloları Hash Fonksiyonu Çakışma (Collision) Ayrık Zincirleme Çözümü Linear Probing

Detaylı

YZM 2116 Veri Yapıları

YZM 2116 Veri Yapıları YZM 2116 Veri Yapıları Yrd. Doç. Dr. Deniz KILINÇ Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi Yazılım Mühendisliği Bu bölümde, Giriş Hash Tabloları Hash Fonksiyonu Çakışma (Collision)

Detaylı

Algoritmalar. Arama Problemi ve Analizi. Bahar 2016 Doç. Dr. Suat Özdemir 1

Algoritmalar. Arama Problemi ve Analizi. Bahar 2016 Doç. Dr. Suat Özdemir 1 Algoritmalar Arama Problemi ve Analizi Bahar 2016 Doç. Dr. Suat Özdemir 1 Arama Problemi Sıralama algoritmaları gibi arama algoritmaları da gerçek hayat bilgisayar mühendisliği problemlerinin çözümünde

Detaylı

Algoritmalar ve Karmaşıklık

Algoritmalar ve Karmaşıklık Algoritmalar ve Karmaşıklık Ders 11 Algoritma Ayrık matematikte karşılaşılan bir çok problem sınıfı mevcuttur. Örneğin, verilen tamsayı grubu içindeki en büyük olanının bulunması, verilen bir kümenin bütün

Detaylı

FORMEL DİLLER VE SOYUT MAKİNALAR. Hafta 2

FORMEL DİLLER VE SOYUT MAKİNALAR. Hafta 2 FORMEL DİLLER VE SOYUT MAKİNALAR Hafta 2 OTOMATA TEORİSİ Otomata teorisi (özdevinim kuramı ya da otomat teorisi), teorik bilgisayar biliminde soyut makineleri (ya da daha uygun bir deyimle soyut 'matematiksel'

Detaylı

2 ALGORİTMA VE AKIŞ DİYAGRAMLARI

2 ALGORİTMA VE AKIŞ DİYAGRAMLARI İÇİNDEKİLER IX İÇİNDEKİLER 1 GİRİŞ 1 Kitabın Amacı 1 Algoritmanın Önemi 2 Bilgisayarın Doğuşu ve Kullanım Amaçları 3 Programlama Dili Nedir? 3 Entegre Geliştirme Ortamı (IDE) Nedir? 4 2 ALGORİTMA VE AKIŞ

Detaylı

Yrd. Doç. Dr. A. Burak İNNER Bilgisayar Mühendisliği

Yrd. Doç. Dr. A. Burak İNNER Bilgisayar Mühendisliği Yrd. Doç. Dr. A. Burak İER Bilgisayar Mühendisliği Algoritma Analizi İçerik: Temel Kavramlar Yinelemeli ve Yinelemesiz Algoritma Analizi Asimptotik otasyonlar Temel Kavramlar Algoritma: Bir problemin çözümüne

Detaylı

#$% &'#(# Konular. Bits of Information. Binary Özellikler Superimposed Coding Signature Formation Deerlendirme

#$% &'#(# Konular. Bits of Information. Binary Özellikler Superimposed Coding Signature Formation Deerlendirme !" #$% &'#(# Konular Binary Özellikler Deerlendirme Binary Özellikler Bir binary özellik iki deer alabilir (kapalı veya açık; var veya yok gibi) Bir kiiye ait bilgiler binary olarak aaıdaki gibi gösterilebilir

Detaylı

DOSYA ORGANİZASYONU. Doğrudan erişimli dosya organizasyonu ÖZLEM AYDIN TRAKYA ÜNİVERSİTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ

DOSYA ORGANİZASYONU. Doğrudan erişimli dosya organizasyonu ÖZLEM AYDIN TRAKYA ÜNİVERSİTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ DOSYA ORGANİZASYONU ÖZLEM AYDIN TRAKYA ÜNİVERSİTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ Doğrudan erişimli dosya organizasyonu Sunum planı Doğrudan erişimli dosyalar Anahtar değerin tek adres olması durumu Anahtar

Detaylı

BM312 Ders Notları - 3 2014

BM312 Ders Notları - 3 2014 DETERMİNİSTİK SONLU OTOMATLAR (DETERMINISTIC FINITE AUTOMATA) Bir Sonlu Otomat (FA) sabit ve sonlu kapasitede bir merkezi işlem ünitesine sahiptir. Giriş bilgisini input tape üzerinden string olarak alır.

Detaylı

Veritabanı Tasarımı. Düzenli İfadeler

Veritabanı Tasarımı. Düzenli İfadeler Veritabanı Tasarımı Düzenli İfadeler Konular Düzenli ifadeleri tanımlama SQL ifadelerinde düzenli ifadeleri arama, eşleme ve yer değiştirme katarlarında kullanma Düzenli ifadeleri ve kontrol kısıtlamalarını

Detaylı

Excel Formüller ve Fonksiyonlar. Yusuf MANSUROĞLU Mühendislik Hizmetleri Müdür Yardımcısı 11.02.2015

Excel Formüller ve Fonksiyonlar. Yusuf MANSUROĞLU Mühendislik Hizmetleri Müdür Yardımcısı 11.02.2015 Excel Formüller ve Fonksiyonlar Yusuf MANSUROĞLU Mühendislik Hizmetleri Müdür Yardımcısı 11.02.2015 Excel de Yapabileceklerimiz Temel aritmetik işlemler (4 işlem) Mantıksal karşılaştırma işlemleri (>,>=,

Detaylı

ALGORİTMA VE PROGRAMLAMA I

ALGORİTMA VE PROGRAMLAMA I ALGORİTMA VE PROGRAMLAMA I Yrd. Doç. Dr. Deniz KILINÇ deniz.kilinc@cbu.edu.tr YZM 1101 Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi Genel Bakış 2 Diziler Dizi Nedir? Dizilerin Bildirimi

Detaylı

VERİ YAPILARI LİSTELER. Yrd. Doç. Dr. Murat GÖK Bilgisayar Mühendisliği Bölümü YALOVA ÜNİVERSİTESİ

VERİ YAPILARI LİSTELER. Yrd. Doç. Dr. Murat GÖK Bilgisayar Mühendisliği Bölümü YALOVA ÜNİVERSİTESİ VERİ YAPILARI LİSTELER Yrd. Doç. Dr. Murat GÖK Bilgisayar Mühendisliği Bölümü YALOVA ÜNİVERSİTESİ Bağlı Listeler Aynı kümeye ait veri parçalarının birbirlerine bellek üzerinde, sanal olarak bağlanmasıyla

Detaylı

YZM 2116 Veri Yapıları

YZM 2116 Veri Yapıları YZM 2116 Veri Yapıları Yrd. Doç. Dr. Deniz KILINÇ Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi Yazılım Mühendisliği Bu bölümde, BÖLÜM - 8 Problem Tanımı Arama Ağaçları İkili Arama

Detaylı

ÜNİT E ÜNİTE GİRİŞ. Algoritma Mantığı. Algoritma Özellikleri PROGRAMLAMA TEMELLERİ ÜNİTE 3 ALGORİTMA

ÜNİT E ÜNİTE GİRİŞ. Algoritma Mantığı. Algoritma Özellikleri PROGRAMLAMA TEMELLERİ ÜNİTE 3 ALGORİTMA PROGRAMLAMA TEMELLERİ ÜNİTE 3 ALGORİTMA GİRİŞ Bilgisayarların önemli bir kullanım amacı, veri ve bilgilerin kullanılarak var olan belirli bir problemin çözülmeye çalışılmasıdır. Bunun için, bilgisayarlar

Detaylı

Alıştırma 1: Yineleme

Alıştırma 1: Yineleme Alıştırma 1: Yineleme Alıştırma 2: Yineleme H10->H2 çevrimini yapınız 7 2 1 3 2 1 1 1 2 0 Hafta 3: Yineleme Alıştırmaları(1) E1. (44/174) S değerini yineleme kullanarak hesap ediniz S = 1 + 2 + 3 + n Hafta3:

Detaylı

BULANIK MANTIK VE SİSTEMLERİ 2014 2015 BAHAR DÖNEMİ ÖDEV 1. Müslüm ÖZTÜRK 148164001004 Bilişim Teknolojileri Mühendisliği ABD Doktora Programı

BULANIK MANTIK VE SİSTEMLERİ 2014 2015 BAHAR DÖNEMİ ÖDEV 1. Müslüm ÖZTÜRK 148164001004 Bilişim Teknolojileri Mühendisliği ABD Doktora Programı BULANIK MANTIK VE SİSTEMLERİ 2014 2015 BAHAR DÖNEMİ ÖDEV 1 Müslüm ÖZTÜRK 148164001004 Bilişim Teknolojileri Mühendisliği ABD Doktora Programı Mart 2015 0 SORU 1) Bulanık Küme nedir? Bulanık Kümenin (fuzzy

Detaylı

YZM ALGORİTMA ANALİZİ VE TASARIM DERS#2: ALGORİTMA ANALİZİ

YZM ALGORİTMA ANALİZİ VE TASARIM DERS#2: ALGORİTMA ANALİZİ YZM 3207- ALGORİTMA ANALİZİ VE TASARIM DERS#2: ALGORİTMA ANALİZİ Algoritma Analizi Çerçevesi Algoritma Analizinde Göz Önünde Bulundurulması Gerekenler Neler? Algoritmanın Doğruluğu (Correctness) Zaman

Detaylı

DOSYA ORGANİZASYONU. Sıralı erişimli dosya organizasyonu yöntemleri ÖZLEM AYDIN TRAKYA ÜNİVERSİTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ

DOSYA ORGANİZASYONU. Sıralı erişimli dosya organizasyonu yöntemleri ÖZLEM AYDIN TRAKYA ÜNİVERSİTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ DOSYA ORGANİZASYONU ÖZLEM AYDIN TRAKYA ÜNİVERSİTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ Sıralı erişimli dosya organizasyonu yöntemleri Sunum planı Sıralı erişimli dosya organizasyonu yöntemleri Basit sıralı

Detaylı

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-11 Karakter Diziler. Yrd. Doç. Dr. Ümit ATİLA

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-11 Karakter Diziler. Yrd. Doç. Dr. Ümit ATİLA BLM-111 PROGRAMLAMA DİLLERİ I Ders-11 Karakter Diziler Yrd. Doç. Dr. Ümit ATİLA umitatila@karabuk.edu.tr http://web.karabuk.edu.tr/umitatilla/ Karakter ve String Karakter Karakter bir sabit tek tırnak

Detaylı

ALGORİTMA VE PROGRAMLAMA I

ALGORİTMA VE PROGRAMLAMA I ALGORİTMA VE PROGRAMLAMA I YZM 1101 Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi Genel Bakış 2 Diziler Dizi Nedir? Dizilerin Bildirimi Dizilere Başlangıç Değeri Verme Dizilerde Arama

Detaylı

6.046J/18.401J DERS 7 Kıyım Fonksiyonu (Hashing I) Prof. Charles E. Leiserson

6.046J/18.401J DERS 7 Kıyım Fonksiyonu (Hashing I) Prof. Charles E. Leiserson Algoritmalara Giriş 6.046J/8.40J DERS 7 Kıyım Fonksiyonu (Hashing I) Doğrudan erişim tabloları Çarpışmaları ilmekleme ile çözmek Kıyım fonksiyonu seçimi Açık adresleme Prof. Charles E. Leiserson October

Detaylı

Fiziksel Tasarım Konuları. Dosya Organizasyon Teknikleri Kayıt Erişim Yöntemleri Veri Yapıları

Fiziksel Tasarım Konuları. Dosya Organizasyon Teknikleri Kayıt Erişim Yöntemleri Veri Yapıları Fiziksel Tasarım Konuları Dosya Organizasyon Teknikleri Kayıt Erişim Yöntemleri Veri Yapıları Fiziksel Tasarım İyi performans için Hızlı cevap zamanı Minimum disk erişimi Disk Yapısı İz(Track) Silindir

Detaylı

DENEY 3: DTMF İŞARETLERİN ÜRETİLMESİ VE ALGILANMASI

DENEY 3: DTMF İŞARETLERİN ÜRETİLMESİ VE ALGILANMASI DENEY 3: DTMF İŞARETLERİN ÜRETİLMESİ VE ALGILANMASI AMAÇ: DTMF işaretlerin yapısının, üretim ve algılanmasının incelenmesi. MALZEMELER TP5088 ya da KS58015 M8870-01 ya da M8870-02 (diğer eşdeğer entegreler

Detaylı

ALGORİTMA VE PROGRAMLAMA I DERS NOTU#8

ALGORİTMA VE PROGRAMLAMA I DERS NOTU#8 ALGORİTMA VE PROGRAMLAMA I DERS NOTU#8 YZM 1105 Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi 6. BÖLÜM 2 Çok Boyutlu Diziler Çok Boyutlu Dizi 3 Bir dizi aşağıdaki gibi bildirildiğinde

Detaylı

Algoritma Analizi ve Büyük O Notasyonu. Şadi Evren ŞEKER YouTube: Bilgisayar Kavramları

Algoritma Analizi ve Büyük O Notasyonu. Şadi Evren ŞEKER YouTube: Bilgisayar Kavramları Algoritma Analizi ve Büyük O Notasyonu Şadi Evren ŞEKER YouTube: Bilgisayar Kavramları Algoritmaların Özellikleri Algoritmalar Input Girdi, bir kümedir, Output ÇıkF, bir kümedir (çözümdür) Definiteness

Detaylı

Bit, Byte ve Integer. BIL-304: Bilgisayar Mimarisi. Dersi veren öğretim üyesi: Dr. Öğr. Üyesi Fatih Gökçe

Bit, Byte ve Integer. BIL-304: Bilgisayar Mimarisi. Dersi veren öğretim üyesi: Dr. Öğr. Üyesi Fatih Gökçe Bit, Byte ve Integer BIL-304: Bilgisayar Mimarisi Dersi veren öğretim üyesi: Dr. Öğr. Üyesi Fatih Gökçe Ders kitabına ait sunum dosyalarından adapte edilmiştir: http://csapp.cs.cmu.edu/ Adapted from slides

Detaylı

8. HOMOMORFİZMALAR VE İZOMORFİZMALAR

8. HOMOMORFİZMALAR VE İZOMORFİZMALAR 8. HOMOMORFİZMALAR VE İZOMORFİZMALAR Şimdiye kadar bir gruptan diğer bir gruba tanımlı olan fonksiyonlarla ilgilenmedik. Bu bölüme aşağıdaki tanımla başlayalım. Tanım 8.1: G, ve H, iki grup ve f : G H

Detaylı

BMÜ-111 Algoritma ve Programlama. Bölüm 5. Tek Boyutlu Diziler

BMÜ-111 Algoritma ve Programlama. Bölüm 5. Tek Boyutlu Diziler BMÜ-111 Algoritma ve Programlama Bölüm 5 Tek Boyutlu Diziler Yrd. Doç. Dr. İlhan AYDIN 1 Problem 100 adet sayı okumak istediğimizi düşünelim. Bu sayıların ortalaması hesaplanacak ve sayıların kaç tanesinin

Detaylı

METİN VERİLERDE DİZGİ EŞLEME VE SIKIŞTIRILMIŞ DİZGİ EŞLEME İŞLEMLERİ ARASINDAKİ PERFORMANS FARKLARININ İNCELENMESİ*

METİN VERİLERDE DİZGİ EŞLEME VE SIKIŞTIRILMIŞ DİZGİ EŞLEME İŞLEMLERİ ARASINDAKİ PERFORMANS FARKLARININ İNCELENMESİ* METİN VERİLERDE DİZGİ EŞLEME VE SIKIŞTIRILMIŞ DİZGİ EŞLEME İŞLEMLERİ ARASINDAKİ PERFORMANS FARKLARININ İNCELENMESİ* H. Nusret BULUŞ 1, Cihat ERDOĞAN 2, Banu DİRİ 3 ÖZET Bu çalışmada metin veriler üzerinde

Detaylı

Arama metodlarında temel işlem anahtarları karşılaştırmaktır.

Arama metodlarında temel işlem anahtarları karşılaştırmaktır. (Kırpma) Hash Fonksiyonları Selecting Digits Folding (shift folding, boundary folding) Division MidSquare Extraction Radix Transformation Çakışma (Collision) ve çözümler Linear Probing Double Quadratic

Detaylı

Bit, Byte ve Integer. BIL-304: Bilgisayar Mimarisi. Dersi veren öğretim üyesi: Yrd. Doç. Dr. Fatih Gökçe

Bit, Byte ve Integer. BIL-304: Bilgisayar Mimarisi. Dersi veren öğretim üyesi: Yrd. Doç. Dr. Fatih Gökçe Bit, Byte ve Integer BIL-304: Bilgisayar Mimarisi Dersi veren öğretim üyesi: Yrd. Doç. Dr. Fatih Gökçe Ders kitabına ait sunum dosyalarından adapte edilmiştir: http://csapp.cs.cmu.edu/ Adapted from slides

Detaylı

4. HAFTA BLM323 SAYISAL ANALİZ. Okt. Yasin ORTAKCI.

4. HAFTA BLM323 SAYISAL ANALİZ. Okt. Yasin ORTAKCI. 4. HAFTA BLM33 SAYISAL ANALİZ Okt. Yasin ORTAKCI yasinortakci@karabuk.edu.tr Karabük Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi BLM33 DOĞRUSAL OLMAYAN (NONLINEAR) DENKLEM SİSTEMLERİ Mühendisliğin

Detaylı

ALGORİTMA ANALİZİ. Cumhuriyet Üniversitesi Bilgisayar Mühendisliği Bölümü

ALGORİTMA ANALİZİ. Cumhuriyet Üniversitesi Bilgisayar Mühendisliği Bölümü ALGORİTMA ANALİZİ Cumhuriyet Üniversitesi Bilgisayar Mühendisliği Bölümü 2 Temel Kavramlar Algoritma: Bir problemin çözümünü belirli bir zamanda çözmek için sonlu sayıdaki adım-adım birbirini takip eden

Detaylı

ANKARA ÜNİVERSİTESİ FEN BİLİMLERİ ENSTİTÜSÜ DÖNEM PROJESİ İMAR ÖZELLİKLERİNİN TAŞINMAZ DEĞERLERİNE ETKİLERİ. Yeliz GÜNAYDIN

ANKARA ÜNİVERSİTESİ FEN BİLİMLERİ ENSTİTÜSÜ DÖNEM PROJESİ İMAR ÖZELLİKLERİNİN TAŞINMAZ DEĞERLERİNE ETKİLERİ. Yeliz GÜNAYDIN ANKARA ÜNİVERSİTESİ FEN BİLİMLERİ ENSTİTÜSÜ DÖNEM PROJESİ İMAR ÖZELLİKLERİNİN TAŞINMAZ DEĞERLERİNE ETKİLERİ Yeliz GÜNAYDIN TAŞINMAZ GELİŞTİRME ANABİLİM DALI ANKARA 2012 Her hakkı saklıdır ÖZET Dönem Projesi

Detaylı

BİL-341 ALGORİTMALAR BÜYÜK O NOTASYONU AHMET ATAKAN 0904.01036. atakanahmet@hotmail.com KIRGIZİSTAN-TÜRKİYE MANAS ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ

BİL-341 ALGORİTMALAR BÜYÜK O NOTASYONU AHMET ATAKAN 0904.01036. atakanahmet@hotmail.com KIRGIZİSTAN-TÜRKİYE MANAS ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ BİL-341 ALGORİTMALAR BÜYÜK O NOTASYONU AHMET ATAKAN 0904.01036 atakanahmet@hotmail.com KIRGIZİSTAN-TÜRKİYE MANAS ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ BİŞKEK 2012 Ahmet Atakan

Detaylı

Ayrık-Zaman Sistemler

Ayrık-Zaman Sistemler Ayrık-Zaman Sistemler Bir ayrık-zaman sistemi, bir giriş dizisi x[n] yi işleyerek daha iyi özelliklere sahip bir çıkış dizisi y[n] oluşturur. Çoğu uygulamalarda ayrık-zaman sistemi bir giriş ve bir çıkıştan

Detaylı

YZM 2116 Veri Yapıları

YZM 2116 Veri Yapıları YZM 2116 Veri Yapıları Yrd. Doç. Dr. Deniz KILINÇ Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi Yazılım Mühendisliği Bu bölümde, BÖLÜM - 3 Motivasyon: Neden Listeye İhtiyaç Var? Bağlı

Detaylı

Dr. Fatih AY Tel: 0 388 225 22 55 fatihay@fatihay.net www.fatihay.net

Dr. Fatih AY Tel: 0 388 225 22 55 fatihay@fatihay.net www.fatihay.net Bilgisayar Programlama Ders 6 Dr. Fatih AY Tel: 0 388 225 22 55 fatihay@fatihay.net www.fatihay.net Fonksiyon Prototipleri Fonksiyon Prototipleri Derleyici, fonksiyonların ilk hallerini (prototiplerini)

Detaylı

Yrd. Doç. Dr. Ümit ATİLA

Yrd. Doç. Dr. Ümit ATİLA Yrd. Doç. Dr. Ümit ATİLA Sıralama Bir grup veriyi azalan veya artan şekilde yerleştirme. Bilgisayar sistemleri için veri sıralama çok önemlidir. Sıralama işlemi, hem arama işlemlerini hem de bir grup veriyi

Detaylı

Dosya Sıkıştırma (File Compression) Kütük Organizasyonu 1

Dosya Sıkıştırma (File Compression) Kütük Organizasyonu 1 Dosya Sıkıştırma (File Compression) Kütük Organizasyonu İçerik Dosya sıkıştırma nedir? Dosya sıkıştırma yöntemleri nelerdir? Run-Length Kodlaması Huffman Kodlaması Kütük Organizasyonu 2 Dosya Sıkıştırma

Detaylı

Algoritmaların Karşılaştırılması. Doç. Dr. Aybars UĞUR

Algoritmaların Karşılaştırılması. Doç. Dr. Aybars UĞUR Algoritmaların Karşılaştırılması Doç. Dr. Aybars UĞUR Giriş Bir programın performansı genel olarak programın işletimi için gerekli olan bilgisayar zamanı ve belleğidir. Bir programın zaman karmaşıklığı

Detaylı

Max - Min Heap Tree (Max ve Min Yığıt Ağaçları) Veri Yapıları ve Algoritmalar 2 - Mustafa EGE Ders Notları

Max - Min Heap Tree (Max ve Min Yığıt Ağaçları) Veri Yapıları ve Algoritmalar 2 - Mustafa EGE Ders Notları Max - Min Heap Tree (Max ve Min Yığıt Ağaçları) Veri Yapıları ve Algoritmalar 2 - Mustafa EGE Ders Notları Max - Min Heap Öncelikli kuyruk konusunu hatırlayın. Kuyruğa sonradan eklenmesine rağmen öncelik

Detaylı

Temel Bilgisayar Programlama Final Sınavı Çalışma Notları

Temel Bilgisayar Programlama Final Sınavı Çalışma Notları Diziler Temel Bilgisayar Programlama Final Sınavı Çalışma Notları (Dr. Övünç ÖZTÜRK, Dr. Tahir Emre KALAYCI) (İnşaat Mühendisliği ve Gıda Mühendisliği Grupları İçin) Diziler aynı türden bilgileri saklamak

Detaylı

BLM-112 PROGRAMLAMA DİLLERİ II. Ders-7 Sıralama Algoritmaları

BLM-112 PROGRAMLAMA DİLLERİ II. Ders-7 Sıralama Algoritmaları BLM-112 PROGRAMLAMA DİLLERİ II Ders-7 Sıralama Algoritmaları Yrd. Doç. Dr. Ümit ATİLA umitatila@karabuk.edu.tr http://web.karabuk.edu.tr/umitatilla/ Sıralama Bir grup veriyi azalan veya artan şekilde yerleştirme.

Detaylı

Yrd.Doç.Dr. Celal Murat KANDEMİR. Kodlama (Coding) : Bir nesneler kümesinin bir dizgi (bit dizisi) kümesi ile temsil edilmesidir.

Yrd.Doç.Dr. Celal Murat KANDEMİR. Kodlama (Coding) : Bir nesneler kümesinin bir dizgi (bit dizisi) kümesi ile temsil edilmesidir. Bilgisayar Mimarisi İkilik Kodlama ve Mantık Devreleri Yrd.Doç.Dr. Celal Murat KANDEMİR ESOGÜ Eğitim Fakültesi - BÖTE twitter.com/cmkandemir Kodlama Kodlama (Coding) : Bir nesneler kümesinin bir dizgi

Detaylı

#$% &'#(# Konular. Direct File Organization. Computed Chaining Comparison of Collision Resolution Methods Perfect Hashing Cichelli s Algorithm

#$% &'#(# Konular. Direct File Organization. Computed Chaining Comparison of Collision Resolution Methods Perfect Hashing Cichelli s Algorithm !" #$% &'#(# Konular Comparison of Collision Resolution Methods Perfect Hashing Cichelli s Algorithm Link kullanarak çakıma çözümü yapan metodlar (colaesced hashing) ve link kullanmadan çözüm yapan metodlar

Detaylı

Veri Yapıları Laboratuvarı

Veri Yapıları Laboratuvarı 2013 2014 Veri Yapıları Laboratuvarı Ders Sorumlusu: Yrd. Doç. Dr. Hakan KUTUCU Lab. Sorumlusu: Arş. Gör. Caner ÖZCAN İÇİNDEKİLER Uygulama 1: Diziler ve İşaretçiler, Dinamik Bellek Ayırma... 4 1.1. Amaç

Detaylı

T.C. TRAKYA ÜNİVERSİTESİ FEN BİLİMLERİ ENSTİTÜSÜ

T.C. TRAKYA ÜNİVERSİTESİ FEN BİLİMLERİ ENSTİTÜSÜ T.C. TRAKYA ÜNİVERSİTESİ FEN BİLİMLERİ ENSTİTÜSÜ SIKIŞTIRILMIŞ METİN VERİLER İÇİNDE DİZGİ EŞLEME ALGORİTMALARININ KULLANILMASININ İNCELENMESİ VE YENİ BİR YAKLAŞIMIN GELİŞTİRİLMESİ Halil Nusret BULUŞ Doktora

Detaylı

Otomata Teorisi (BİL 2114)

Otomata Teorisi (BİL 2114) Otomata Teorisi (BİL 2114) Hafta 2: Sonlu Otomata (1.Bölüm) bas kapa aç bas 1 Hafta 2 Plan 1. Bir Sonlu Otomata Orneği 2. Sonlu Otomatanin Esasları 3. Sonlu Otomatanın Resmi Gösterimi 4. Nondeterministik

Detaylı

ELN1002 BİLGİSAYAR PROGRAMLAMA 2

ELN1002 BİLGİSAYAR PROGRAMLAMA 2 ELN1002 BİLGİSAYAR PROGRAMLAMA 2 SIRALAMA ALGORİTMALARI Sunu Planı Büyük O Notasyonu Kabarcık Sıralama (Bubble Sort) Hızlı Sıralama (Quick Sort) Seçimli Sıralama (Selection Sort) Eklemeli Sıralama (Insertion

Detaylı

VERİ YAPILARI. Yrd. Doç. Dr. Murat GÖK Bilgisayar Mühendisliği Bölümü YALOVA ÜNİVERSİTESİ HASH TABLOLARI.

VERİ YAPILARI. Yrd. Doç. Dr. Murat GÖK Bilgisayar Mühendisliği Bölümü YALOVA ÜNİVERSİTESİ HASH TABLOLARI. VERİ YAPILARI HASH TABLOLARI Yrd. Doç. Dr. Murat GÖK Bilgisayar Mühendisliği Bölümü YALOVA ÜNİVERSİTESİ muratgok@gmail.com Hash tabloları Hash tablo veri yapısı ile veri arama, ekleme ve silme işlemleri

Detaylı

Hafta 12 Karakter Tutan Diziler

Hafta 12 Karakter Tutan Diziler BLM111 Programlama Dilleri I Hafta 12 Karakter Tutan Diziler Yrd. Doç. Dr. Caner ÖZCAN Katar (String) Tanımlama Dizileri ve çok boyutlu dizileri gördük. Katar dediğimiz şey de aslında bir dizidir. Değişken

Detaylı

Algoritmalara Giriş Ekim 10, 2005 Massachusetts Institute of Technology Professors Erik D. Demaine ve Charles E. Leiserson. Problem Seti 3 Çözümler

Algoritmalara Giriş Ekim 10, 2005 Massachusetts Institute of Technology Professors Erik D. Demaine ve Charles E. Leiserson. Problem Seti 3 Çözümler Algoritmalara Giriş Ekim 10, 2005 Massachusetts Institute of Technology 6.046J/18.410J Professors Erik D. Demaine ve Charles E. Leiserson Dağıtım13 Problem Seti 3 Çözümler Problem 3-1. Örüntü Eşleme (Pattern

Detaylı

T.C. SÜLEYMAN DEMİREL ÜNİVERSİTESİ FEN BİLİMLERİ ENSTİTÜSÜ ISPARTA İLİ KİRAZ İHRACATININ ANALİZİ

T.C. SÜLEYMAN DEMİREL ÜNİVERSİTESİ FEN BİLİMLERİ ENSTİTÜSÜ ISPARTA İLİ KİRAZ İHRACATININ ANALİZİ T.C. SÜLEYMAN DEMİREL ÜNİVERSİTESİ FEN BİLİMLERİ ENSTİTÜSÜ ISPARTA İLİ KİRAZ İHRACATININ ANALİZİ Danışman Doç. Dr. Tufan BAL YÜKSEK LİSANS TEZİ TARIM EKONOMİSİ ANABİLİM DALI ISPARTA - 2016 2016 [] TEZ

Detaylı

F(A, N, K) // A dizi; N, K integer if N<0 then return K; if A[N]>K then K = A[N]; return F(A, N-1, K);

F(A, N, K) // A dizi; N, K integer if N<0 then return K; if A[N]>K then K = A[N]; return F(A, N-1, K); 2009-2010 BAHAR DÖNEMİ MC 689 ALGORİTMA TASARIMI ve ANALİZİ I. VİZE ÇÖZÜMLERİ 1. a) Böl ve yönet (divide & conquer) tarzındaki algoritmaların genel özelliklerini (çalışma mantıklarını) ve aşamalarını kısaca

Detaylı

Ayrık Fourier Dönüşümü

Ayrık Fourier Dönüşümü Ayrık Fourier Dönüşümü Tanım: 0 n N 1 aralığında tanımlı N uzunluklu bir dizi x[n] nin AYRIK FOURIER DÖNÜŞÜMÜ (DFT), ayrık zaman Fourier dönüşümü (DTFT) X(e jω ) nın0 ω < 2π aralığında ω k = 2πk/N, k =

Detaylı

Java, Python ve Ruby Dillerinin Performans Karşılaştırması

Java, Python ve Ruby Dillerinin Performans Karşılaştırması Java, Python ve Ruby Dillerinin Performans Karşılaştırması Çanakkale Onsekiz Mart Üniversitesi Mustafa ŞAHİN Akademik Bilişim 2007 1 Dillerin seçim nedeni Java, Pyton ve Ruby Programlama dillerinin popülerliği

Detaylı

Algoritma Geliştirme ve Veri Yapıları 9 Ağaç Veri Modeli ve Uygulaması. Mustafa Kemal Üniversitesi

Algoritma Geliştirme ve Veri Yapıları 9 Ağaç Veri Modeli ve Uygulaması. Mustafa Kemal Üniversitesi Algoritma Geliştirme ve Veri Yapıları 9 Ağaç Veri Modeli ve Uygulaması Ağaç, verilerin birbirine sanki bir ağaç yapısı oluşturuyormuş gibi sanal olarak bağlanmasıyla elde edilen hiyararşik yapıya sahip

Detaylı

Şekil 6.2 Çizgisel interpolasyon

Şekil 6.2 Çizgisel interpolasyon 45 Yukarıdaki şekil düzensiz bir X,Y ilişkisini göstermektedir. bu fonksiyon eğri üzerindeki bir dizi noktayı birleştiren bir seri düzgün çizgi halindeki bölümlerle açıklanabilir. Noktaların sayısı ne

Detaylı

ANKARA ÜNİVERSİTESİ FEN BİLİMLERİ ENSTİTÜSÜ DÖNEM PROJESİ TAŞINMAZ DEĞERLEMEDE HEDONİK REGRESYON ÇÖZÜMLEMESİ. Duygu ÖZÇALIK

ANKARA ÜNİVERSİTESİ FEN BİLİMLERİ ENSTİTÜSÜ DÖNEM PROJESİ TAŞINMAZ DEĞERLEMEDE HEDONİK REGRESYON ÇÖZÜMLEMESİ. Duygu ÖZÇALIK ANKARA ÜNİVERSİTESİ FEN BİLİMLERİ ENSTİTÜSÜ DÖNEM PROJESİ TAŞINMAZ DEĞERLEMEDE HEDONİK REGRESYON ÇÖZÜMLEMESİ Duygu ÖZÇALIK GAYRİMENKUL GELİŞTİRME VE YÖNETİMİ ANABİLİM DALI ANKARA 2018 Her hakkı saklıdır

Detaylı

2. Sayı Sistemleri. En küçük bellek birimi sadece 0 ve 1 değerlerini alabilen ikili sayı sisteminde bir basamağa denk gelen Bit tir.

2. Sayı Sistemleri. En küçük bellek birimi sadece 0 ve 1 değerlerini alabilen ikili sayı sisteminde bir basamağa denk gelen Bit tir. 2. Sayı Sistemleri Bilgisayar elektronik bir cihaz olduğu için elektrik akımının geçirilmesi (1) yada geçirilmemesi (0) durumlarını işleyebilir. Bu nedenle ikili sayı sistemini temel alarak veri işler

Detaylı

PASCAL PROGRAMLAMA DİLİ YAPISI

PASCAL PROGRAMLAMA DİLİ YAPISI BÖLÜM 3 PASCAL PROGRAMLAMA DİLİ YAPISI 3.1. Giriş Bir Pascal programı en genel anlamda üç ayrı kısımdan oluşmuştur. Bu kısımlar bulunmaları gereken sıraya göre aşağıda verilmiştir. Program Başlığı; Tanımlama

Detaylı

EGE ÜNİVERSİTESİ FEN BİLİMLERİ ENSTİTÜSÜ (YÜKSEK LİSANS TEZİ)

EGE ÜNİVERSİTESİ FEN BİLİMLERİ ENSTİTÜSÜ (YÜKSEK LİSANS TEZİ) EGE ÜNİVERSİTESİ FEN BİLİMLERİ ENSTİTÜSÜ (YÜKSEK LİSANS TEZİ) ÖLÇEKLENEBİLİR H.264 VİDEO KODLAYICISI İÇİN SEVİYELENDİRİLEBİLİR GÜVENLİK SAĞLAYAN BİR VİDEO ŞİFRELEME ÇALIŞMASI Gül BOZTOK ALGIN Uluslararası

Detaylı

Telefon Rehberi Uygulaması

Telefon Rehberi Uygulaması Sayfa1 Telefon Rehberi Uygulaması Uygulama, temel düzeyde, telefon rehberi üzerinedir. Kullanıcı, telefon rehberine eklediği her bir kayıt içi ad, soyad, ev telefonu ve üç adet cep telefonu bilgisi girebilmektedir.

Detaylı

f(x) ve g(x) reel sayılarda tanımlı iki fonksiyon olmak üzere, x > k olacak şekilde bir k vardır öyle ki,

f(x) ve g(x) reel sayılarda tanımlı iki fonksiyon olmak üzere, x > k olacak şekilde bir k vardır öyle ki, Algoritma Karmaşıklığı ve Büyük O Gösterimi (Big O Notation) Yazdığımız bir algoritmanın doğru çalıştığından emin olmakla birlikte bu algoritmayı, daha önce yazılmış ve aynı sonucu veren başka algoritmalarla

Detaylı

AES (Advanced Encryption Standard)

AES (Advanced Encryption Standard) ŞİFRELEME ÇEŞİTLERİ AES (Advanced Encryption Standard) AES (Rijndael) algoritması 128 bit veri bloklarını 128, 192, 256 bit anahtar seçenekleri ile şifreleyen bir algoritmadır. 128 bit anahtar için 10

Detaylı

Pascal Programlama Dili

Pascal Programlama Dili Pascal Programlama Dili Öğr. Gör. Özgür ZEYDAN Z.K.Ü. Çevre Müh. Bölümü Pascal Programlarının Yapısı Program program_adı; Uses unitler type Özel veri tipleri Const Sabitler Label etiketler var değişken

Detaylı

MS Excel. Excel Microsoft Office in bir parçasını oluşturur. Office 2007, Office 2010, Office 2013, Office 2016

MS Excel. Excel Microsoft Office in bir parçasını oluşturur. Office 2007, Office 2010, Office 2013, Office 2016 MS Excel Elektronik tablolama veya hesaplama programı olarak da adlandırılan Excel, girilen veriler üzerinde hesap yapabilme, tablolar içinde verilerle grafik oluşturma, verileri karşılaştırıp sonuç üretebilme

Detaylı

HSancak Nesne Tabanlı Programlama I Ders Notları

HSancak Nesne Tabanlı Programlama I Ders Notları DİZİLER Bellekte ard arda yer alan aynı türden nesneler kümesine dizi (array) denilir. Bir dizi içerisindeki bütün elemanlara aynı isimle ulaşılır. Yani dizideki bütün elemanların isimleri ortaktır. Elemanlar

Detaylı

ALGORİTMA VE PROGRAMLAMA II

ALGORİTMA VE PROGRAMLAMA II ALGORİTMA VE PROGRAMLAMA II Yrd. Doç. Dr. Deniz KILINÇ deniz.kilinc@cbu.edu.tr YZM 1102 Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi Genel Bakış 2 Yapılar ve Birlikler enum Deyimi

Detaylı

BLM1011 Bilgisayar Bilimlerine Giriş I

BLM1011 Bilgisayar Bilimlerine Giriş I BLM1011 Bilgisayar Bilimlerine Giriş I by Z. Cihan TAYŞİ İçerik Sayı sistemleri Binary, Octal, Decimal, Hexadecimal Operatörler Aritmetik operatörler Mantıksal (Logic) operatörler Bitwise operatörler Yıldız

Detaylı

T.C. MALTEPE ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ YAZILIM MÜHENDİSLİĞİ LİSANS PROGRAMI. 2011-12 Bahar Yarıyılı

T.C. MALTEPE ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ YAZILIM MÜHENDİSLİĞİ LİSANS PROGRAMI. 2011-12 Bahar Yarıyılı T.C. MALTEPE ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ YAZILIM MÜHENDİSLİĞİ LİSANS PROGRAMI 2011-12 Bahar Yarıyılı ALGORİTMA VE PROGRAMLAMA BİL 133 5 AKTS Kredisi 1. yıl 1. yarıyıl Lisans Zorunlu 4 saat/hafta

Detaylı

RASTGELE SAYI ÜRETİMİ VE UYGULANAN TESTLER HAZIRLAYAN: ÖZLEM AYDIN

RASTGELE SAYI ÜRETİMİ VE UYGULANAN TESTLER HAZIRLAYAN: ÖZLEM AYDIN RASTGELE SAYI ÜRETİMİ VE UYGULANAN TESTLER HAZIRLAYAN: ÖZLEM AYDIN RASTGELE SAYILARIN ÜRETİLMESİ Rastgele değişimler yapay tablolardan veya parametreleri verilen teorik dağılım fonksiyonlarından elde edilir.

Detaylı

Bilgisayar Programlama. 1.Hafta

Bilgisayar Programlama. 1.Hafta Bilgisayar Programlama 1.Hafta Ders Planı 1. Bilgisayar Programlamaya Giriş 2. C Derleyicileri 3. GCC Kullanımı 4. Veri Tipleri ve Operatörler 5. Kontrol Yapıları 6. Döngüler 7. Döngüler 2. Hafta 8. Fonksiyonlar

Detaylı

Çoktan Seçmeli Değerlendirme Soruları Akış Şemaları İle Algoritma Geliştirme Örnekleri Giriş 39 1.Gündelik Hayattan Algoritma Örnekleri 39 2.Say

Çoktan Seçmeli Değerlendirme Soruları Akış Şemaları İle Algoritma Geliştirme Örnekleri Giriş 39 1.Gündelik Hayattan Algoritma Örnekleri 39 2.Say İÇİNDEKİLER 1. Bilgisayarın Yapısı Ve Programlama Dilleri Giriş 1 Bilgisayar ve Programlamanın Kısa Bir Tarihçesi 2 Donanım ve Yazılım Kavramları 3 Bilgisayarın Donanımsal yapısı 4 Giriş Birimi (Input

Detaylı

idea rsbasic KOMUTLARI

idea rsbasic KOMUTLARI idea KOMUTLARI İÇİNDEKİLER 2.1 Etiketler (Labels)... 4 2.2 Yorumlar (Comments)... 5 2.3 Semboller (Symbols)... 6 2.4 backward (geri)... 7 2.5 debug (hata ayıkla/izle)... 8 2.6 dec (azalt)... 9 2.7 do..

Detaylı

ALGORİTMA VE PROGRAMLAMA I

ALGORİTMA VE PROGRAMLAMA I ALGORİTMA VE PROGRAMLAMA I YZM 1101 Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi Genel Bakış 2 Karakter Dizileri Karakter Dizilerini Okumak ve Yazmak Karakter Dizilerinin Uzunluğunu

Detaylı

Çevirmenin Verimliliği

Çevirmenin Verimliliği Çevirmenin Verimliliği Özellikler şunları içerir: Güçlü dosya sıralama Daha önceden çevirilen dosyalardan çeviri belleği yaratmak hiç bu kadar kolay olmamıştı. Sıralama aracı Studio ortamına tamamen entegre

Detaylı

Ayrık zamanlı sinyaller için de ayrık zamanlı Fourier dönüşümleri kullanılmatadır.

Ayrık zamanlı sinyaller için de ayrık zamanlı Fourier dönüşümleri kullanılmatadır. Bölüm 6 Z-DÖNÜŞÜM Sürekli zamanlı sinyallerin zaman alanından frekans alanına geçişi Fourier ve Laplace dönüşümleri ile mümkün olmaktadır. Laplace, Fourier dönüşümünün daha genel bir şeklidir. Ayrık zamanlı

Detaylı

ALGORİTMA VE PROGRAMLAMAYA GİRİŞ

ALGORİTMA VE PROGRAMLAMAYA GİRİŞ ALGORİTMA VE PROGRAMLAMAYA GİRİŞ Yrd.Doç.Dr. Kadriye ERGÜN kergun@balikesir.edu.tr Ders Bilgileri BIL1202 Algoritma ve Programlamaya Giriş, (2+1 Kredi) Ders ile ilgili duyurular http://kergun.baun.edu.tr/

Detaylı

Bil101 Bilgisayar Yazılımı I. M. Erdem ÇORAPÇIOĞLU Bilgisayar Yüksek Mühendisi

Bil101 Bilgisayar Yazılımı I. M. Erdem ÇORAPÇIOĞLU Bilgisayar Yüksek Mühendisi Bil101 Bilgisayar Yazılımı I Bilgisayar Yüksek Mühendisi Kullanıcıdan aldığı veri ya da bilgilerle kullanıcının isteği doğrultusunda işlem ve karşılaştırmalar yapabilen, veri ya da bilgileri sabit disk,

Detaylı

Özyineleme (Recursion)

Özyineleme (Recursion) C PROGRAMLAMA Özyineleme (Recursion) Bir fonksiyonun kendisini çağırarak çözüme gitmesine özyineleme (recursion), böyle çalışan fonksiyonlara da özyinelemeli (recursive) fonksiyonlar denilir. Özyineleme,

Detaylı

Algoritma Geliştirme ve Veri Yapıları 1 Temel Algoritma Kavramları. Mustafa Kemal Üniversitesi

Algoritma Geliştirme ve Veri Yapıları 1 Temel Algoritma Kavramları. Mustafa Kemal Üniversitesi Algoritma Geliştirme ve Veri Yapıları 1 Temel Algoritma Kavramları Giriş 1) Algoritma geliştirme üzerine temel kavramlar 2) Veri modelleri 3) Veri yapıları 4) Algoritma veya yazılım şekilsel gösterimi

Detaylı

BİLGİSAYAR PROGRAMLAMA Araş. Gör. Ahmet ARDAHANLI. Kafkas Üniversitesi Mühendislik Fakültesi

BİLGİSAYAR PROGRAMLAMA Araş. Gör. Ahmet ARDAHANLI. Kafkas Üniversitesi Mühendislik Fakültesi BİLGİSAYAR PROGRAMLAMA Araş. Gör. Ahmet ARDAHANLI Kafkas Üniversitesi Mühendislik Fakültesi Bu hafta? İki değişken değerinin yer değiştirilmesi (swapping) selection sort sıralama algoritması bubble sort

Detaylı

YZM 2116 Veri Yapıları

YZM 2116 Veri Yapıları YZM 2116 Veri Yapıları Yrd. Doç. Dr. Deniz KILINÇ Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi Yazılım Mühendisliği Bu bölümde, BÖLÜM - 4 Stack (Yığın, Yığıt) Veri Yapısı Stack Çalışma

Detaylı

C Programlama Dili (MCS116) Ders Detayları

C Programlama Dili (MCS116) Ders Detayları C Programlama Dili (MCS116) Ders Detayları Ders Adı Ders Kodu Dönemi Ders Saati Uygulama Saati Laboratuar Kredi AKTS Saati C Programlama Dili MCS116 Güz 2 2 0 3 4 Ön Koşul Ders(ler)i MCS 115 Bilgisayar

Detaylı

GÜMÜŞHANE ÜNĐVERSĐTESĐ MÜHENDĐSLĐK VE DOĞA BĐLĐMLERĐ FAKÜLTESĐ ELEKTRĐK-ELEKTRONĐK MÜHENDĐSLĐĞĐ EEM 114 ALGORĐTMA TASARIMI VE PROGRAMLAMA DĐLLERĐ

GÜMÜŞHANE ÜNĐVERSĐTESĐ MÜHENDĐSLĐK VE DOĞA BĐLĐMLERĐ FAKÜLTESĐ ELEKTRĐK-ELEKTRONĐK MÜHENDĐSLĐĞĐ EEM 114 ALGORĐTMA TASARIMI VE PROGRAMLAMA DĐLLERĐ GÜMÜŞHANE ÜNĐVERSĐTESĐ MÜHENDĐSLĐK VE DOĞA BĐLĐMLERĐ FAKÜLTESĐ ELEKTRĐK-ELEKTRONĐK MÜHENDĐSLĐĞĐ EEM 114 ALGORĐTMA TASARIMI VE PROGRAMLAMA DĐLLERĐ DERS 1 PROGRAM GELĐŞTĐRME PROGRAM GELĐŞTĐRME VERĐ ĐŞLEME(DATA

Detaylı

DİZİLER-KATARLAR ALGORİTMA VE PROGRAMLAMA II

DİZİLER-KATARLAR ALGORİTMA VE PROGRAMLAMA II DİZİLER-KATARLAR ALGORİTMA VE PROGRAMLAMA II DİZİLER Dizi, aynı tipteki verilere tek bir isimle erişmek için kullanılan bir kümedir. Bir dizi bildirildikten sonra, dizinin bütün elemanları bellekte peşpeşe

Detaylı

ALGORİTMA VE PROGRAMLAMA I

ALGORİTMA VE PROGRAMLAMA I ALGORİTMA VE PROGRAMLAMA I Yrd. Doç. Dr. Deniz KILINÇ deniz.kilinc@cbu.edu.tr YZM 1101 Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi Genel Bakış 2 Karakter Dizileri Karakter Dizilerini

Detaylı

Genetik Algoritmalar. Bölüm 1. Optimizasyon. Yrd. Doç. Dr. Adem Tuncer E-posta:

Genetik Algoritmalar. Bölüm 1. Optimizasyon. Yrd. Doç. Dr. Adem Tuncer E-posta: Genetik Algoritmalar Bölüm 1 Optimizasyon Yrd. Doç. Dr. Adem Tuncer E-posta: adem.tuncer@yalova.edu.tr Optimizasyon? Optimizasyon Nedir? Eldeki kısıtlı kaynakları en iyi biçimde kullanmak olarak tanımlanabilir.

Detaylı

Formal Diller Ve Otomat Teorisi

Formal Diller Ve Otomat Teorisi Formal Diller Ve Otomat Teorisi Ismail Kadayif Canakkale Onsekiz Mart Universitesi Bilgisayar Muhendisligi 4/5/2004 Formal Diller 1.1 Strings ve Languages (Diller) alphabet (character set): Sonlu sayida

Detaylı

Bir algoritma aşağıdaki ğ dki özelliklere sahip komutların sonlu bir kümesidir.

Bir algoritma aşağıdaki ğ dki özelliklere sahip komutların sonlu bir kümesidir. BÖLÜM 4 Bir algoritma aşağıdaki ğ dki özelliklere sahip komutların sonlu bir kümesidir. Kesinlik : Algoritma adımları kesin olarak tespit edilmelidir. Bir teklik: Her bir adımın yürütülmesinde sonuçlar

Detaylı

Temel Excel Kullanım Bilgisi

Temel Excel Kullanım Bilgisi Temel Excel Kullanım Bilgisi Excel Fonksiyonları Başlangıç Microsoft Excel in en zevkli olan formül kısmı hakkında kısa kısa bilgileri ve bazı formüllerin nasıl yazıldığını burada bulacaksınız.

Detaylı

Graf Veri Modeli. Düğümler kümesi. Kenarlar kümesi

Graf Veri Modeli. Düğümler kümesi. Kenarlar kümesi Graf Veri Modeli Graf, bir olay veya ifadenin düğüm ve çizgiler kullanılarak gösterilme şeklidir. Fizik, Kimya gibi temel bilimlerde ve mühendislik uygulamalarında ve tıp biliminde pek çok problemin çözümü

Detaylı