instagram twitter linkedin github youtube

25.7.15

Suriye hava sahası kullanılmasa da başta ABD olmak üzere tüm koalisyon güçlerine bilgi verildi. ABD üzerinden de Suriye rejimi haberdar edildi. Konuyla ilgili Hürriyet'e konuşan bir askeri yetkili, "Bu bildirim Suriye'den izin alma maksadıyla olmadı. Aksine, Suriye rejimine 'Türkiye IŞİD hedeflerine bir operasyon yapacak. Türk uçaklarına, hava savunma sistemlerini kilitlememeleri ve hava araçlarını harekete geçirmemeleri uyarısı yapıldı. Aksi durumda Türk uçakları rejime de gereken yanıtı verir.' mesajı iletilmiş oldu." dedi

24.7.15

NASA'dan beklenen açıklama geldi

Amerikan Uzay ve Havacılık Dairesi (NASA), uzay teleskopu Kepler'in Dünya'ya benzer bir gezegen keşfettiğini duyurdu.

NASA'dan beklenen açıklama geldi






, Güneş benzeri bir yıldızın yörüngesindeki in, hem yaşama elverişli koşullardaki bölge içinde keşfedildiği, hem de  boyutunda olduğu için bu bakımından bir ilk olma özelliği taşıdığını açıkladı.
Keşfedilen gezegenin, Dünya'ya bin 400 ışık yılı uzaklıkta olduğu belirtildi.
Söz konusu gezegene -452b ismi verildi. Kepler-452b aynı zamanda, yaşama elverişli koşullardaki bölge içinde tespit edilen en küçük gezegen.
"GÜNEŞ'İN KUZENİ"
Kepler-452b'nin yörüngesinde gezindiği yıldız, "Güneş'in kuzeni" olarak tanımlandı. NASA, "Ancak 1,5 milyar yıl daha yaşlısı" diye ekledi.

20.7.15

Tanimadiginiz numaralardan gelen Odul kazandiniz, TL yukleyin gibi smsleri dolandiricilik magduru olmamak icin dikkate almayiniz.

16.7.15

TSK, Suriye Sınırına Elektronik Bulut Yerleştirdi

TSK'nın sınıra yerleştirdiği cihazlarla Şam radarları körleştirilecek, operasyon bölgesi karartılacak.


14.7.15


Robin van Persie, İmza Töreninde Resmen Fenerbahçeli Oldu

Fenerbahçe'nin Manchester United'dan transfer ettiği Robin van Persie, Şükrü Saracoğlu Stadı'nda düzenlenen törende resmi imzayı attı.

Fenerbahçe'nin anlaşmaya vardığı yıldız oyuncu Robin Van Persie, bugün Fenerbahçe Şükrü Saracoğlu Stadı'nda düzenlenen törende sarı-lacivertli takıma imzayı attı.
Saatler öncesinden stada akın eden taraftarlar, Hollandalı oyuncu sahaya çıktığında büyük bir coşku yaşadı. Yıldız oyuncu için tezahüratta bulunan taraftarlar, uzun süre sevgi gösterinden bulundu.
İmza töreninin başlamasına dakikalar kala statta binlerce taraftar, Saracoğlu Stadı'nda coşkulu bir atmosfer oluşturdu.
Fenerbahçeli yöneticiler Mithat Yenigün ve Şekip Mosturoğlu da imza töreninde yer aldı.
(Hollandalı yıldız, imzanın ardından oğluyla birlikte şov yaptı)
TERRANEO: "DÜNYA ÇAPINDA OLMAK İSTEDİĞİMİZİN GÖSTERGESİ"
''Burada sizleri büyük başkanımız Aziz Yıldırım adına selamlamak istiyorum. Burada takımımızın bir mozaiğini daha sizlere tanıtmak için bulunuyoruz. Takımımızın dünya çapında olmak istemesinin bir ispatı olarak görüyorum bu transferleri. Kulübümüze bir büyük oyuncu daha kazandırmış olmanın mutluluğunu yaşıyorum. Robin Van Persie karşınızda...''
VAN PERSIE: "TÜRKÇE ÖĞRENMEYE ÇALIŞACAĞIM"
Merhaba (Türkçe söylüyor) Fenerbahçe... Az önce benim Türkçe öğrendiğim ilk kelimeyi duydunuz. En kısa zamanda Türkçe'yi öğrenmeye çalışacağım. Ülkeye adaptasyon konusunda bunun çok önemli olduğunu düşünüyorum. Ben Fenerbahçe ailesinin bir parçasıyım. Gerçekten benim için bu büyük taraftarları görmek çok güzel bir duygu...
VAN PERSIE: "BUGÜN BÖYLEYSE, ŞAMPİYON OLDUĞUMUZDA...
Size sadece bir şeyin sözünü veriyorum. Ben burada tüm gücümle bu takıma katkı verebilmek için elimden gelen her şeyi yapacağım. Şuanda sizi burada böyle görürken, şunu düşünüyorum, bugün böyleyse lig şampiyonu olursak nasıl bir kutlama olur? Bunu tahmin bile edemiyorum. Teşekkürler Fenerbahçe. Hep birlikte başaralım."
BASIN TOPLANTISI
Giuliano Terraneo: Burada yapılan transferlerden sonra düzenlediğimiz basın toplantılarıyla aile gibi olduk. Bütün basın toplantılarında bana Robin van Persie'yi soruyordunuz. Onun arkasından konuşmak yerine getirelim ki sizleri başbaşa bırakalım daha iyi olur. Bugün burada oyuncumuzla beraberiz. Ben çok mutluyum, başkanımız çok mutlu, oyuncumuz çok mutlu... Sizleri onunla başbaşa bırakıyorum.
Robin van Persie: Ben başkanımıza, Terraneo'ya, menajerlerime çok teşekkür ediyorum. Türklerin tutkusunu çok sevmişimdir. Hem taraftarın, hem yöneticilerin tutkusunu sevmişimdir. Umarım önümüzdeki yıllarda bizden beklenilen başarıları yaşarız.
"HER TRANSFERİN HİKAYESİ FARKLIDIR"
Hayatta her zaman zor kararlar vardır. Bir karar alacakken, onun artısına, eksisine bakarsınız. Etrafınızdaki sevdiğiniz insanlarla konuşursunuz ve sonunda karar verirsiniz. Birkaç sene ki önceki transferimden farklı bir durum vardı. Buranın gerçek anlamda bir futbol ülkesi olduğunu düşünüyorum. Buradaki coşkuyu gördüm. 17-18 bin kişi tahminen oradaydı. Benim için yapılan böyle bir organizasyonu hayatımda ilk defa yaşadım.
"FENERBAHÇE HİKAYEM 12 YIL ÖNCESİNE DAYANIYOR"
Kuyt ile 10 yıllık arkadaşlığımız var. Son yıllarda arkadaşlığımız daha da ilerledi. Çok fazla şey konuşuyoruz kendisiyle. Son yıllarda Fenerbahçe tutkusundan konuşuyorduk. O buraya çok bağlı. Hep çok olumlu görüşler bildirdi. Benim için iyi olacağını söyledi. Aynı zamanda benim Londra'da Türk arkadaşlarım var. Onların da görüşlerini aldım. Ama benim Fenerbahçe hikayem bundan 12 yıl öncesine dayanıyor. Feyenoord ile burada oynadığımız maçtaki tutkuyu unutamam. Herkes zıplıyordu. Sanki stat yerinden oynuyormuş gibi bir his vardı.
"3 YIL BURADAYIM"
Her dönemde benimle ilgili dedikodular çıktı. Birçok kulüple görüştüğüm iddia edildi. Çok kulübe imza attığımı söylediler. Ama Fenerbahçe'de mutlu olacağıma inandım. 3 yıl buradayım. Belki de daha uzun süre burada olacağım. Benim için artık Fenerbahçe tecrübesi başlıyor.
Plüton'dan ilk görüntü az önce geldi
NASA'nın Plüton'a yapacağı en yakın uçuş bugün gerçekleşiyor. NASA) Instagram hesabından yayınladığı foto 9 yıldır uzayda seyahat eden uzay aracından gelen ilk görüntü. İşte Plüton'dan gelen ilk görüntü
Yayınlanma Tarihi: 14.07.2015 05:07
Amerikan Havacılık ve Uzay Dairesi'nin (NASA) Instagram hesabından yayınladığı foto 9 yıldır uzayda seyahat eden uzay aracından gelen ilk görüntü. Uzay aracı Plüton'a en yakın uçuşu Türkiye saatiyle 14:49'da gerçekleştirdi.Fotoğrafın en dikkat çekici özelliği ise Plüton'un üzerinde beliren kalp şekli.
 
NASA'nın 'görkemli Plüton'dan önizleme' başlığıyla paylaştığı fotoğrafın altına şu not düşüldü: "Cüce gezegen, 9 yıldır 3 milyar mil yol kat eden New Horizons uzay aracımız aracılığıyla dünyaya bir aşk notu gönderdi. Bu fotoğraf, bugün yapılacak en yakın uçuştan önce alınan son ve en detaylı görüntü."
 
New Horizons, güneş sistemindeki yolculuğuna 19 Ocak 2006'da Florida'daki Cape Canaveral uzay üssünden saatte 58 bin 536 kilometre hızla ilerleyerek başlamıştı.

İŞTE PLÜTON'DAN GELEN İLK GÖRÜNTÜ!

 
Mars ve Jüpiter'i geçen New Horizons Plüton'a 12 bin kilometre yaklaşacak. 9 yıllık misyonun sonuna gelen New Horizons 1930 yılındaki keşfinden bu yana gizemini koruyan Plüton ile ilgili bugüne kadarki en detaylı görüntülerini geçecek.
Plüton'un daha önceki görüntülerini Hubble Uzay Teleskobu çekmişti.




VERİLERİN DÜNYA'YA GÖNDERİLMESİ 16 AY SÜRECEK
 
New Horizons'ın topladığı verileri Dünya'ya geri göndermesi de zorlu olacak. Uzay aracının  Plüton'dan elde ettiği  bilimsel verileri dünyaya göndermesi tam 16 ayı bulacak.
New Horizons'ın, dünyadan yaklaşık 4,5 milyar kilometre uzaklıktaki Plüton'a seyahati tam 9 yıl sürdü.
Bu seyahat,  dünyanın çevresinde tam 120 bin 477 kez dönülmesiyle eşdeğer.
Projenin Amerikan Uzay ve Havacılık Dairesi NASA'ya  maliyetiyse 720 milyon doları buluyor.
 
 
NASA: PLÜTON SANILANDAN DAHA BÜYÜK ÇIKTI
 
NASA'nın 'New Horizons' adlı uzay aracı, Plüton'un çapını 2 bin 370 kilometre olarak hesapladı. Misyon Başkanı Alan Stern, bilim adamlarının beklediğinden daha büyük çıkan bu 'cüce gezegenin', Kuiper Kuşağı nesneleri arasında lider konumda olduğunu söyledi.
 
Stern, "Plüton'un çapını ölçmek için 3 farklı yöntem kullandık. Bunun için atmosfere sahip olmayan Charon'u örnek ve dayanak noktası olarak kullandık. Plüton'un beklediğimizden daha büyük çıkması, bizim için sürpriz oldu" diye konuştu.
 
Plüton'un net çapının 2370 kilometre olduğunu belirten bilim adamı, Güneş Sistemi'nin 'yapı' döküntüsünden oluşan dev bulut şeklindeki Kuiper Kuşağı'ndaki nesneler arasında hangisinin daha büyük olduğu tartışmalarına son verildiğini ifade etti.
 
Plüton'un bu alandaki en büyük rakibi, çapı 2 bin 336 kilometre olan cüce gezegen Erida'ydı. Neredeyse tüm bilim adamları, dünyadan yapılan ölçümlere dayanarak, Plüton'un Erida'dan küçük olduğunu sanıyordu. New Horizons ile yapılan ölçümler, gerçeğin aslında böyle olmadığını ortaya koydu.
 
New Horizons, yarın misyonunun en önemli aşamasına geçerek, uzay aracı Plüton ve uydusuna yaklaşacak. Bu randevu sırasında araç, dünya ile iletişimini keserek tüm dikkatini cüce gezegen ile eşini incelemeye verecek.
 
Uzay aracının Plüton etrafında dönen mikro asteroitlerle çarpışma ve devre dışı kalma olasılığı 10 binde bir. Bunun olmayacağından emin NASA uzmanları, bu tehdidin önümüzdeki uzay şovuna gereken 'drama unsurunu' kazandırdığı esprisini yapıyorlar.
 
 
PLÜTON HAKKINDA MERAK ETTİKLERİNİZ...
 
Plüton, formal adı 134340 Pluto, Güneş Sistemi'nde Eris'ten sonra bilinen en büyük cüce gezegen ve doğrudan Güneş'in etrafında dönen en büyük onuncu cisim. Önceleri gezegen olarak sınıflandırılmıştır. Plüton, birçok cismi barındıran Kuiper kuşağı'nın en belirgin üyelerinden biridir.
 
Plüton, diğer Kuiper kuşağı üyelerine benzer biçimde taş ve buzdan oluşmaktadır; ancak bu kuşaktaki gezegenlere nispeten oldukça küçüktür. Kütle ve hacim olarak Ay'dan bile daha küçüktür. Plüton, eksenindeki eksantrik (dış merkezli) eğim sayesinde Güneş'e Neptün'den daha yakındır.
 
Plüton, 1930'da keşfedildikten 2006'ya kadar, Güneş Sistemi'nin dokuzuncu gezegeni olarak değerlendirilmiştir. 70'li yıllardan sonra Güneş Sistemi'nin dışında bir cüce gezegen olan 2060 Chiron saptanana kadar küçük bir gezegen olarak düşünülen Plüton'u, gezegen olma statüsü tartışılmaya başlanmıştır. 20. yüzyılın sonları ve 21. yüzyılın başlarında, Güneş Sistemi'nin dışında Plüton'a benzeyen birçok cisim saptanmıştır. Bunların en önemlisi 2005'te saptanan ve Plüton'dan yaklaşık %27 daha büyük olan Eris olmuştur. 24 Ağustos 2006'da, Uluslararası Astronomi Birliği (IAU ya da UAB) Güneş Sistemi'nde bir gezegen olmanın koşullarını tanımlamıştır. Bu tanımlama sonrasında Plüton gezegenlikten çıkartılmış, Eris ve Ceres ile birlikte yeni bir küme olan "cüce gezegenler" sınıfına dahil edilmiştir.Böylece Plüton yeniden sınıflandırılmış, küçük gezegenler dizinine eklenmiş ve astronomik adı yani numarası 134340 olarak değiştirilmiştir.Plüton, bazı araştırmacılar tarafından hâlâ gezegen olarak onaylanmaktadır.
 
Plüton'un uydusu Charon, Plüton'un yarısı büyüklüğündedir ve bazı bilim insanlarınca ikili uzay sisteminde gösterilir, çünkü yörüngesi başka bir ağırlık merkezinin içinde yer almaz. IAU tarafından Plüton cüce gezegen sınıfına alınana dek geçen sürede, Charon, Plüton'un uydusu olarak kabul edilmiştir. Plüton'un bilinen iki küçük uydusu daha vardır, bunlar Nix ve Hydra'dır. Bu uydular 2005'te saptanmıştır.

DFA Metin Arama Algoritması Ters Parça Algoritması (Reverse Factor Algorithm)

Algoritma iki dizgiyi (string) karşılaştırmak için kullanılır. Basitçe bir dizgide aranan daha kısa dizginin öncelikle aşağıdaki şekilde karşılaştırılması ile başlanır. Ardından şayet uyum sağlanıyorsa bulundu olarak sonuç döndürülür, şayet uyum sağlanmıyorsa iki ihtimal vardır, dizgilerin karşılaştırılan kısımlarından uyan en uzun eke kadar kaydırma yapılır veya hiç uyuşma yoksa aranan dizgi kadar kaydırma yapılır.
Öncelikle bu kaydırma durumunu anlayalım. Uzun olan dizginin kısa olan dizgi kadarlık ilk kısmı aşağıdaki şekilde karşılaştırılacak.
reverse_factoring_algo1
Diyelim ki aradığımız uyum bulundu, o zaman bulduk diyerek sonucu döndürebiliriz.
reverse_factoring_algo2
Diyelim ki aradığımız uyum bulunamadı, o zaman acaba en azından bir kısmı uyuyor mu diye bakarak uyan kısmına kadar kaydırıyoruz.
reverse_factoring_algo3
Şayet hiç uymuyorsa, kısa olan dizgi kadar kaydırarak kalanını aramaya devam ediyoruz.
reverse_factoring_algo4
Algoritmanın mahareti, bu iki dizgiden bir kısmının uyup uymadığını nasıl bulduğunda saklı. Bunun için bir ek ağacı (suffix tree) oluşturuluyor ve bu ağaç kullanılarak hızlı bir şekilde iki dizginin ne kadarlık kısmının uyduğu tespit edilebilir. Biz de bir örnek üzerinde bu karşılaştırmayı yapalım. Bunun için öncelikle iki örnek dizgiyi aşağıdaki şekilde alalım:
Dizgi 1 : GCATCGGCGAGAGTATACAGTACG
Dizgi 2 : GCAGAGAG , boyutu 8 harf
Yapacağımız karşılaştırma öncesi, dizgi 2 için bir otomat oluşturuyoruz (sonlu durum otomatı (finite state machine). Otomat oluştururken aslında bizim Dizgi 1 içerisinde aramak istediğimiz dizgi 2 ihtimallerinin bir kümesini kabul eden otomat oluşturma hedefimiz var. Yani öncelikli olarak baktığımız dizgi2’nin tamamının (8 harfinin de ) içerilmesi, şayet bulamıyorsak, dizgi2’nin bir alt kümesi olan ve ilk 7 harfinin içerildiği bir durum bulmak (yani 1 kere yana kaydırılmış hali olarak düşünülebilir). Dolayısıyla otomatı oluşturacağımız alt küme L(S) ile gösterilecek olursa aşağıdaki şekildedir:
L(S) = { GCAGAGAG, GCAGAGA, GCAGAG, GCAGA, GCAG, GCA, GC, G, {} }
Kümenin sonunda ayrıca bir boş küme elemanı bulunmakta ve hiçbir harfin uymaması durumunu ifade etmektedir. Yukarıdaki kümedeki elemanları kabul eden sonlu durum otomatı (Finite state machine) aşağıdaki şekilde çizilebilir:

reverse_factoring_algo5
Dizgi de tekrar eden bazı alt dizgiler olduğu için yukarıdaki şekilde bir otomat oluşturuldu. Şimdi bu otomat kullanılarak bir ek ağacı (suffix tree) oluşturulabilir:
reverse_factoring_algo6
Yukarıdaki ek ağacı bizim dizgi karşılaştırmalarımızda kullanacağımız ve ne kadarlık son kısmın benzediğini bulmamıza yarayacak ağaç. Ağaç üzerinde her düğüme (node) birer numara verilmiş ve ayrıca ağacın yapraklarının altına da o yaprağa kadar izlenen yoldaki dizginin uzunluğu yazılmıştır.
Şimdi örnek olarak bir karşılaştırma durumunu ele alalım. Örneğin karşılaştırma işlemi aşağıdaki gibi dizgi1’in 6. Karakterinden itibaren dizgi 2’yi karşılaştırıyor olalım:
reverse_factoring_algo7
Yapacağımız işlem, pencereye dahil olan kısmı itibariyle (pencere boyutumuz dizgi 2’nin boyutu yani 8) en son karakter ile dizgi2’yi karşılaştırmak. Yani aslında karşılaştırılan ilk harfler aşağıdaki şekilde:
reverse_factoring_algo8
Ardından ek ağacındaki bir sonraki harfi yani aslında penceredeki sondan ikinci karakter ile dizgi2’nin ikinci karakterini aşağıdaki şekilde karşılaştırıyoruz ve bu işlem uyuşma olduğu sürece devam ediyor:
reverse_factoring_algo9
Sonuçta uyuşma olmayan noktaya erişildiğinde duruyoruz ve uyuşma olduğu kadar kaydırma işlemi yapıyoruz:
reverse_factoring_algo10
Aslında yukarıda dizgi üzerinde anlatılan bu işlem yapılırken ağaç üzerinde aşağıdaki şekilde bir yol izlenmiş ve 6 numaralı bitiş durumu ile otomat sonlandırılmıştır.
reverse_factoring_algo11
Algoritmanın ön işleme süresi, yani ek ağacını oluşturma süresi dizgi 2’nin boyutu ile orantılıdır ve bu boyut m ise karmaşıklığı O(m) olacaktır. Ardından arama süresindeki algoritma karmaşıklığı ise dizgi1’in boyutu ile orantılı olarak O(mn) olarak bulunacaktır.

Kaba Kuvvet Metin Arama Algoritması (Brute Force Text Search, Linear Text Search)

Bilgisayar Kullanılan en ilkel ziyaretinde dolayısıyla en Düşük ve orta gelirli ziyaretinde orta gelirli performanslı tıklayın aranması Bir Metnin İÇERİSİNDE Başka Bir Metnin bilimlerinde  arama algoritmasıdır (arama algoritması).   algoritma hedef Metinde, aranan Metni harf harf bulmaya Çalışır. Bu yapısından Dolayı diziler uzerinde Kullanılan Doğrusal arama (Doğrusal arama) algoritmasına oldukca Benzer ziyaretinde literatürde Doğrusal metin araması (Doğrusal metin arama) ismi de verilmektedir.  
1 Algoritmanın başarısı,,
Kaba kuvvet algoritması, isminden de anlaşılacağı Üzere çok zeki olmayan başarısını bilgisayarın YÜKSEK hızda çalışmasından alan Bir algoritmadır Ettik. Algoritma basitçe metinin Tamamını çok zeki olmayan bır sekılde dolaşır ziyaretinde aranan kelimenin ilk harfini bulana Kadar bu isleme devam eder. Bulduğu anda geri kalan harfleri eşleştirmeye Çalışır. Şayet harflerden birisini eşleştiremezse, kelimenin ilk harfini bulduğu yere geri Dönerek arama işlemine devam eder. Gerçi çok zeki olmadigi kelimenin Tamamını eşleştirse safra yine de ilk harfi bulduğu yere geri Dönerek arama işlemine devam Eder tıklayın.
Bir örnek ziyaretinde çalışması 2 Algoritmanın
Kabe kuvvet metin arama algoritmasının (bruteforce metin arama algoritması) CALISMASINI aşağıdaki örnek Üzerinden anlamaya çalışalım.
Aranan kelimemiz: bilgi
Aranan metin: wwwbilgisayarkavramlaricom
Olarak veriliyor olsun. Bu DURUMDA algoritma ilk harften başlayarak "bilgi" kelimesini aranan metin İÇERİSİNDE bulmaya çalışacaktır.
  wwwbilgisayarkavramlaricom
  b ....
Öncelikle ilk harften başlanarak harfler karşılaştırılıyor. Aranan kelimenin ilk harfi "b" oldugu icin bu harf bulunana Kadar arama İşlemi devam ediyor:
  wwwbilgisayarkavramlaricom
   b ....
  wwwbilgisayarkavramlaricom
    b ....
  wwwbilgisayarkavramlaricom
     BİLGİ
"B" harfi ile Başlayan Bir Yer Bulundu. Artık Diğer harfler karşılaştırılabilir. Sırasıyla "Ben", "L" .. harfleri karşılaştırılıyor ziyaretinde harfler tuttuğu Sürece karşılastırma İşlemi devam ediyor. Şayet harflerden birisi beklenen Sırada gelmezse karşılastırma İşlemi kesilip kalınan yerden devam ediliyor.
  wwwBILGIsayarkavramlaricom
      b ....
Göster göster Aslında bu harflere bakılmış olmasina Rağmen yine de aranıyor. Malum kaba kuvvet arama algoritması akıllı Bir algoritma Değildir ziyaretinde bütün, ihtimalleri dener. Dolayısıyla Göster göster Aslında bakmış OLDUĞUMU ziyaretinde bakılmasının Bir anlamı olmayan bu harflere de bu algoritma Kapsamında bakılıyor.
  wwwBILGIsayarkavramlaricom
       b ....
Arama İşlemi aşağıdaki sekılde geri kalan harflerin KONTROLÜ ile devam ediyor:
  wwwBILGIsayarkavramlaricom
        b ....
  wwwBILGIsayarkavramlaricom
         b ....
  wwwBILGIsayarkavramlaricom
          b ....
  wwwBILGIsayarkavramlaricom
           b ....
  wwwBILGIsayarkavramlaricom
            b ....
  wwwBILGIsayarkavramlaricom
             b ....
  wwwBILGIsayarkavramlaricom
              b ....
  wwwBILGIsayarkavramlaricom
               b ....
  wwwBILGIsayarkavramlaricom
                b ....
  wwwBILGIsayarkavramlaricom
                 b ....
  wwwBILGIsayarkavramlaricom
                  b ....
  wwwBILGIsayarkavramlaricom
                   b ....
  wwwBILGIsayarkavramlaricom
                    b ....
  wwwBILGIsayarkavramlaricom
                     b ....
  wwwBILGIsayarkavramlaricom
                      b ....
  wwwBILGIsayarkavramlaricom
                       b ....
Yukarıdaki arama İşlemi sonucunda Büyük harfle gösterilen kısımda aranan kelime bulunmuştur. Toplam 26 harflik Bir metin İÇERİSİNDE 5 harflik "bilgi" aranmıştır kelimesi ziyaretinde 22 Adımda bulunmuştur.
Artin aranan kelimenin sığmayacağı oğlu harflere bakılmamıştır. Örneğin aranan Metnin oğlu 4 harfi olan "icom" alt Metni (alt dize) uzerinde arama İşlemi anlamsızdır Çukurhan buraya "bilgi" kelimesi sığamaz.  
3 Algoritmanın kodlanması
Algoritmanın C, C ++, Java VEYA C # gibi diller tıklayın kodlaması aşağıdaki Iki iç içe döngü (iç içe döngü) şeklinde yapılabilir: 
Yukarıdaki kodda, n boyutundaki y hedef anda yükleyiniz (string) İÇERİSİNDE m boyutunda x dizgisinin arandığı Kabil Edilmiştir. Döngü basitçe mil kere dönmektedir (yukarıdaki örnekte 22 kere dönemsi gibi) ziyaretinde şayet aranan kelimenin ilk harfi bulunursa, 8. Satırdaki iç döngü dönmeye BAŞLAR. Harfler tutuştukça dönme islemi devam ettirilir. Nihayetinde 11. Satırdaki koşul gerçekleşince, yani tutuşan harflerin sayısı, aranan kelimenin boyutunu geçince, yani aradığımız kelimedeki harf harf Kadar, birbirini tutunca SONUÇ gösterilir. Bu Işlem Metnin Sonuna Kadar tekrarlanır.  

Boyer-Moore Arama algoritması

Bu algoritma Horspool algoritmasının geliştirilmiş halidir. Karşılaştırma yaptığımız pattern’in son karakterinin eşleştirilmesi başarısız olursa Horspool algoritmasındaki işlemin aynısı gerçekleştirilir. Fakat herhangi bir sayıda eşleşme olduktan sonra eşleşme başarısız olursa Horspool algoritmasından farklı davranır. Burada iki tablo ortaya çıkmaktadır. Horspool’dan gelen bad symbol shift ve farklı olarak gelen good-suffix shift. Boyer-Moore algoritması bu iki tabloyu değerlendirir ve bu tablolarda karşılık gelen değerlerden maksimum kaydırmayı sağlayacak olan durumu seçer. Bu seçim sayesinde Horspool algoritmasına göre daha büyük bir kayma sağlama şansı doğar.

Bu algoritmalar farklı karmaşıklıklara, çalışma zamanına ve alan kullanımına sahiptir. Bu nedenle bu algoritmalar belirli durumlarda diğerlerine göre daha etkin olabilmektedir.

String eşleştirme algoritmaları günümüzde birçok alanda kullanılmaktadır. Internet ve masaüstü uygulamaları, ofis uygulamaları, oyunlar vb. alanlarda kısaca tüm yazılım uygulamalarında string eşleştirme algoritmalarını kullanmaktayız. Bir programda Ctrl+F’e basarak ya da arama seçeneğine bir kelime girerek arama yaptığımızda bu algoritmalar kullanılmaktadır. Bu nedenle bu algoritmaların önemi bizim için büyüktür. Bu algoritmalar işlemlerimizi hızlandırır fakat bazı durumlarda bu işlem istediğimiz kadar hızlı gerçekleşmeyebilir. Bu nedenle farklı algoritmaların geliştirilmesiyle string eşleştirme işlemlerinin daha hızlı olması sağlanmaya çalışılmıştır.

Bu kısımda Boyer-Moore algoritmasını daha detaylı bir şekilde anlatacağız. Pattern’in en sağındaki karakterin text’teki ona karşılık konumdaki c karakteri ile eşleşmesi başarısız olursa, bu algoritma Horspool algoritması ile aynı şeyi yapmakdır. Önceden anlatıldığı şekilde tablodan elde edilen karakterlerin sahip oldukları değerler kadar pattern sağa kaydırılır.

İki algoritma k sayıda başarılı eşleştirmeden sonra(0 < k < m) eşleşmenin bozulması durumunda farklı davranırlar:
Bu durumda Boyer-Moore algoritması iki değişkene göre nasıl kaydırma yapacağına karar verir. İlki eşleşmenin bozulmasına neden olan text’teki c karakterinin karşısına denk gelen pattern’deki karakter ile belirlenir. Buna bad-symbol kaydırması denir. Bu kaydırmanın nedeni Horspool algoritmasındaki ile aynı nedendir. C karakteri pattern’de yoksa pattern’i c karakterini geçecek kadar sağa kaydırırız. Bu kaydırma t1(c) – k formülü ile hesaplanır. Buradaki t1(c) HHorspool algoritması kullanılarak hesaplanan tablodaki değerdir ve k da eşleştirilen karakter sayısıdır:
Örneğin bir text’te BARBER kelimesini ararsak ve text’teki S karakterinde eşleşme bozulana kadar son iki karakterde eşleşme sağlanacaktır. Pattern’i t1(S) – 2 = 6 – 2 = 4 pozisyon kaydırabiliriz:


Aynı formül eşleşmenin bozulmasına neden olan karakterin pattern’de bulunması durumunda da kullanılır ( t1(c) – k > 0). Örneğin bir text’te BARBER kelimesini ararsak ve A karakterinde eşleşme bozulana kadar ilk iki karakter eşleşmiştir. Bu durumda pattern’i t1(A) – 2 = 4 – 2 = 2 pozisyon kaydırırız.


t1(c) – k < 0 olması durumunda patterni 0 ya da negatif konumda kaydırmayacağımız kesindir. Bu durumda brüte-force taktiğindeki gibi pattern’i bir konum sapa kaydırabiliriz.

Özetlemek gerekirse Boyer-Moore algoritması ile hesaplanan d1 bad-symbol kaydırma tablosundaki değer pozitifse t1(c) – k, negatif veya sıfır ise de bu değer 1’dir. Bu aşağıdaki formül ile açıklanabilir.
d1 = max{t1(c) – k, 1}.
İkinci kaydırma türü pattern’deki son k > 0 başarılı eşleştirme ile belirlenmektedir. Pattern’deki k boyutundaki sonekleri suff(k) ile gösteriyoruz. Bu tip kaydırmaya da good-suffix kaydırma denmektedir. Bad-shift’te tek bir c karakterinin neden olduğu kaydırma burada 1 den m -1 e kadar olan soneklerin boyutlarının good-suffix kaydırma tablosunu doldurması ile gerçeklemektedir.

Öncelikle suff(k)’nın pattern’de başka bir konumda da olduğu durumu ele alalım. Bu durumda pattern’i d2 boyutu kadar yani suff(k)’nın sağdan 2. kez yer aldığı konum arasındaki ile en sağda yer aldığı konum arasındaki fark kadar kaydırırız. Örneğin ABCBAB patterni için bu uzaklıklar k = 1 ve 2 için 2 ve 4 olacaktır:


Suff(k) değeri eğer pattern’de başka bir konumda yoksa ne yapılacak? Çoğu durumda pattern’i boyutu kadar kaydırabiliriz. Örneğin DBCBAB patterni ve k = 3 için, pattern’i boyutu olan 6 değeri kadar kaydırabiliriz.
Fakat bu durumda pattern’i boyutu kadar kaydırmak her zaman doğru adım olmayabilir. Örneğin ABCBAB ve K = 3 değeri için pattern’i 6 kaydırmak text’te AB ile başlayan substringlerin pattern’in son 2 karakteri ile eşleşmesi durumunun gözden kaçırılmasına neden olabilir:

6 kaydırma işlemi DBCBAB için doğru fakat ABCBAB için doğru değil, çünkü ikinci pattern aynı AB substring’ine prefix ve suffix olarak sahiptir. K boyutunda soneke dayanan kaydırmalarda böyle bir durumdan kaçınmak için l boyutundaki aynı sonek ile uyuşan l < k boyutundaki en uzun prefixi bulmalıyız. Eğer böyle bir prefix varsa, d2 bu prefix ile sonek arasındaki farktan yola çıkarak hesaplanır. Örneğin aşağıda ABCBAB pattern’i için tam bir d2değeri listesi bulunmaktadır.
Şimdi Boyer-Moore algoritmasını özetlemek gerekirse:

The Boyer-Moore algorithm

Adım 1 Verilen pattern ve text için bad-symbol kaydırma tablosunu oluştur.
Adım 2 Pattern’i kullanarak good-suffix kaydırma tablosunu oluştur.
Adım 3 Pattern’i text’in başlangıcı ile hizala.
Adım 4 Aşağıdaki işlemleri pattern’i text’te bulana kadar ya da text’in sonuna ulaşana kadar yap. Patterndeki son karakterden başlayarak texteki ve patterndeki denk gelen karakterleri m sayıda eşleştirme sağlanana kadar ya da k >= 0 sayıda eşleşme sağladıktan sonra eşleşmeyi bozan bir duruma denk gelene kadar karşılaştır. İkinci durumda bad-symbol tablosundaki c kolonundan t1(c) girdisini al. Burada c eşleşmeyi bozan karakterdir. k > 0 ise good-suffix tablosunda karşılık gelen d2 girdisini al. Pattern’i aşağıdaki formülden elde edilen şekilde kaydır:

k > 0 iken iki olası kaydırmadan maksimum olanı almak mantıklıdır. Bu iki kaydırma gözlemlere dayanmaktadır. Birincisi eşleşmeyi bozan karakter diğeri de pattern’in en sağdaki karakterlerinin eşleşen grubu hakkındadır. Bu da demektir ki pattern’i d1 ve d2 den daha az kaydırırsak herhangi bir eşleşme sağlayamayacağımız bir duruma gelmiş olacağımız kesindir. Amacımız pattern’i kayıpsız bir şekilde en büyük boyutta kaydırmak olduğu için bu iki sayıdan büyük olanı alırız.

ÖRNEK BAOBAB pattern’inin İngilizce karakterlerden ve space’den oluşan bir text’te arayalım. Bad-symbol kaydırma tablosu aşağıdaki gibidir:
Good-suffix tablosu da şu şekildedir:
Patterndeki B karakterinin textteki K karakteri ile karşılaştırmasısı olumsuz olacağı için algoritma t1(K) = 6 yı bad-symbol tablosundan alır ve pattern’i d1 = max{t1(K) – 0, 1} = 6 kadar sağa kaydırır. Yeni deneme iki karakteri başarılı bir şekilde eşleştirir. 3. Karakterdeki başarısızlıktan sonra algoritma t1(_) = 6 değerini bad-symbol tablosundan ve d2 = 5 değerini de good-suffix tablosundan alır. Pattern’i bu iki değerden maksimum olanı kadar sağa kaydırır. Max{d1, d2} = max { 6 – 2, 5} = 5. Bu durumda good-suffix tablosu daha ileri bir noktaya kaydırma yapmamızı sağlamıştır.

Sıradaki deneme B karakterini eşleştirir. Fakat boşluk karakteri nedeniyle eşleşme bozulur. Algoritma t1(_) 6 değerini bad-shift tablosundan ve d2 = 2 değerini de good-suffix tablosundan alır. Pattern max{d1, d2} = max { 6 – 1, 2} = 5 kadar sağa kaydırılır. Bu durumda bad-shift tablosu daha ileri gitmemizi sağlamıştır. Son deneme de pattern’i text’te 6 tane başarılı karşılaştırmadan sonra bulur.
Pattern’in ilk bulunduğu noktayı tespit etmek için Boyer-Moore algorimasının worst-case etkinliği lineerdir. Bu algoritma özellikle geniş alfabelerde oldukça hızlıdır.  Birçok insan doğal dil benzeri stringlerde bu algoritmanın daha basit sürümerini tercih eder. Ör: Horspool.

/// <summary>
/// Bad-shift tablosunu oluşturur
/// </summary>
/// <param name="pattern">Text'te aranacak kelime</param>
/// <returns>BadShift tablosunu döndürür</returns>
private static int[] BuildBadCharacterShift(string pattern)
{
     int[] badCharacterShift = new int[352];

     for (int c = 0; c < badCharacterShift.Length; ++c) //Her karaktere pattern lenght'ini ata
         badCharacterShift[c] = pattern.Length;
     for (int i = 0; i < pattern.Length - 1; ++i) //Patternde olan karakterlere sondan başlayarak karşılaşılan ilk konuma göre shift değerini ata
        badCharacterShift[pattern[i]] = pattern.Length - i - 1;

    badShift = badCharacterShift;
    return badCharacterShift; //BadShift tablosunu döndür
}

Burada Horspool algoritmasındaki kaydırma tablosuna benzer şekilde bad-shift tablosu oluşturuluyor.

private static int[] FindSuffixes(string pattern)
{
    int f = 0, g;

    int patternLength = pattern.Length;
    int[] suffixes = new int[pattern.Length + 1]; //Sonek dizisi initialize ediliyor

    suffixes[patternLength - 1] = patternLength; //Son elemana patterin boyutu atanıyor
    g = patternLength - 1;
    for (int i = patternLength - 2; i >= 0; --i) //Pattern boyutu - 1 kadar dönülüyor
    {
       if (i > g && suffixes[i + patternLength - 1 - f] < i - g) //Karakter patternde tekrar ediyor mu
           suffixes[i] = suffixes[i + patternLength - 1 - f];
       else
       {
           if (i < g)
               g = i;
           f = i;
       while (g >= 0 && (pattern[g] == pattern[g + patternLength - 1 - f])) //Karakter kendinden önceki karakterle eşitse
       --g;
       suffixes[i] = f - g; //Farkı tabloya ata
       }
    }

    return suffixes; //Sonek tablosunu döndürüyor
}
Bu algoritma sayesinde good-suffix tablosunun oluşturulmasında kullanılacak sonekleri belirliyoruz.

/// <summary>
/// Good-shift tablosunu oluşturur
/// </summary>
/// <param name="pattern">Text'te aranacak kelime</param>
/// <param name="suff">Sonek tablosu</param>
/// <returns>GoodShift tablosunu döndürür</returns>
private static int[] BuildGoodSuffixShift(string pattern, int[] suff)
{
    int patternLength = pattern.Length;
    int[] goodSuffixShift = new int[pattern.Length + 1];

    for (int i = 0; i < patternLength; ++i) //Tüm elemanlara pattern boyutunu ata
         goodSuffixShift[i] = patternLength;
    int j = 0;
    for (int i = patternLength - 1; i >= -1; --i)
        if (i == -1 || suff[i] == i + 1) //Karakter dizisi tekrar ediyor mu?
             for (; j < patternLength - 1 - i; ++j)
                 if (goodSuffixShift[j] == patternLength) //Daha düşük sonuç varsa ata
                     goodSuffixShift[j] = patternLength - 1 - i;
             for (int i = 0; i <= patternLength - 2; ++i) //Tabloyu doldur
                 goodSuffixShift[patternLength - 1 - suff[i]] = patternLength - 1 - i;

    goodShift = goodSuffixShift;
    return goodSuffixShift; //GoodShift tablosunu döndür
}
Good-suffix algoritması değişken olarak pattern ve suff[]’ı alıyor. Bu değerleri kullanarak good-suffix tablosu belirleniyor.


private static int BoyerMooreMatching(string pattern, string text)
{
     int[] m_badCharacterShift = BuildBadCharacterShift(pattern); //Bad-shift tablosunu oluşturan methodu çağır
     int[] m_suffixes = FindSuffixes(pattern);
            int[] m_goodSuffixShift = BuildGoodSuffixShift(pattern, m_suffixes); //Good-shift tablosunu oluşturan methodu çağır

            int index = 0;

            while (index <= textLength - patternLength) //Text'in karşılaştırılacak son noktasına gelinmediyse
            {
                int unmatched;
                for (unmatched = patternLength - 1; //Key comparison
                  unmatched >= 0 && (pattern[unmatched] == text[unmatched + index]);
                  --unmatched
                )
                if (unmatched < 0) //Pattern bulunduysa
                {
                    return index; //Eşleşme konumunu döndür
                }
                else //Eşleşme sağlanamadıysa good ve bad shift tablolarındaki max değere göre indexi kaydır
                    index += Math.Max(m_goodSuffixShift[unmatched],
                      m_badCharacterShift[text[unmatched + index]] - patternLength + 1 + unmatched);
      }
      return -1; //Eşleşme yoksa
}