• Bağış
  • Turing Makinesi (Turing Machine)

    Yazan : Şadi Evren ŞEKER

    Bilgisayar bilimlerinin önemli bir kısmını oluşturan otomatlar (Automata) ve Algoritma Analizi (Algorithm analysis) çalıştırmalarının altındaki dil bilimin en temel taşlarından birisidir.1936 yılında Alan Turing tarafından ortaya atılan makine tasarımı günümüzde pekçok teori ve standardın belirlenmesinde önemli rol oynar.

    Turing Makinesinin Tanımı

    Basitçe bir kafadan (head) ve bir de teyp bandından (tape) oluşan bir makinedir.

    turingtape

    Makinede yapılabilecek işlemler

    şeklinde sıralanabilir.

    Chomsky hiyerarşisi ve Turing Makinesi

    Bütün teori bu basit dört işlem üzerine kurulmuştur ve sadece yukarıdaki bu işlemleri kullanarak bir işin yapılıp yapılamayacağı veya bir dilin bu basit 4 işleme indirgenip indirgenemeyeceğine göre diller ve işlemler tasnif edilmiştir.

    turingkumesi

    Bu sınıflandırma yukarıdaki venn şeması ile gösterilmiştir. Aynı zamanda chomsky hiyerarşisi (chomsky hierarchy) için 1. seviye (type-1) olan ve Turing makinesi ile kabul edilebilen diller bütün tip-2 ve tip-3 dilleri yani içerk bağımsız dilleri ve düzenli dilleri kapsamaktadır. Ayrıca ilave olarak içerik bağımsız dillerin işleyemediği (üretemediği veya parçalayamadığı (parse) ) anbncn şeklindeki kelimeleri de işleyebilmektedir.  Düzenli ifadelerin işleyememesi konusunda bilgi için düzenli ifadelerde pompalama savı (pumping lemma in regular expressions) ve içerik bağımsız dillerin işlemeyemesi için de içerik bağımsız dillerde pompalama savı (pumping lemma for CFG) başlıklı yazıları okuyabilirsiniz.

    Turing Makinesinin Akademik Tanımı

    Turing makineleri literatürde akademik olarak aşağıdaki şekilde tanımlanır:

    turing_akademik

    Burada M ile gösterilen makinenin parçaları aşağıda listelenmiştir:

    Q sembolü sonlu sayıdaki durumların kümesidir. Yani makinenin işleme sırasında aldığı durumardır.

    Γ sembolü dilde bulunan bütün harfleri içeren alfabeyi gösterir. Örneğin ikilik tabandaki sayılar ile işlem yapılıyorsa {0,1} şeklinde kabul edilir.

    Σ sembolü ile makineye verilecek girdiler (input) kümesi gösterilir. Girdi kümesi dildeki harfler dışında bir sembol taşıyamayacağı için Σ Γ demek doğru olur.

    δ sembolü dilde bulunan ve makinenin çalışması sırasında kullanacağı geçişleri (transitions) tutmaktadır.

    ◊ sembolü teyp bandı üzerindeki boşlukları ifade etmektedir. Yani teyp üzerinde hiçbir bilgi yokken bu sembol okunur.

    q0 sembolü makinenin başlangıç durumunu (state) tutmaktadır ve dolayısıyla q0 Q olmak zorundadır.

    F sembolü makinenin bitiş durumunu (state) tutmaktadır ve yine F ⊆ Q olmak zorundadır.

    Örnek Turing Makinesi

    Yukarıdaki sembolleri kullanarak örnek bir Turing makinesini aşağıdaki şekilde inşa edebiliriz.

    Örneğin basit bir kelime olan a* düzenli ifadesini (regular expression) Turing makinesi ile gösterelim ve bize verilen aaa şeklindeki 3 a yı makinemizin kabul edip etmediğine bakalım.

    Tanım itibariyle makinemizi aşağıdaki şekilde tanımlayalım:

    M = { {q0,q1} , { a } , { a,x } , { q0 a→a R q0 , q0 x→x L q1} , q0 , x , q1 }

    Yukarıdaki bu makineyi yorumlayacak olursak:

    Q değeri olarak   {q0,q1} verilmiştir. Yani makinemizin ik idurumu olacaktır.

    Γ değeri olarak { a,x } verilmiştir. Yani makinemizdeki kullanılan semboller a ve x’ten ibarettir.

    Σ değeri olara {a} verilmiştir. Yani makinemize sadece a girdisi kabul edilmektedir.

    δ değeri olarak iki geçiş verilmiştir { q0 a→a R q0 , q0 x→x L q1} buraadki R sağa sarma L ise sola sarmadır ve görüleceği üzere Q değerindeki durumlar arasındaki geçişleri tutmaktadır.

    ◊ değeri olarak x sembolü verilmiştir. Buradan x sembolünün aslında boş sembolü olduğu ve bantta hiçbir değer yokken okunan değer olduğu anlaşılmaktadır.

    q0 ile makinenin başlangıç durumundaki hali belirtilmiştir.

    F değeri olarak q1 değeri verilmiştir. Demek ki makinemiz q1 durumuna geldiğinde bitmektedir (halt) ve bu duruma gelmesi halinde bu duruma kadar olan girdileri kabul etmiş olur.

    Yukarıdaki bu tanımı görsel olarak göstermek de mümkündür:

    turingornek


    Yukarıdaki bu temsili resimde verilen turing makinesi çizilmiştir.

    Makinemizin örnek çalışmasını ve bant durumunu adım adım inceleyelim.

    Birinci adımda bandımızda aaa (3 adet a) yazılı olduğunu kabul edelim ve makinemizin bu aaa değerini kabul edip etmeyeceğini adım adım görelim. Zaten istediğimiz de aaa değerini kabul eden bir makine yapabilmekti.

    turing1

    Yukarıdaki ilk durumda bant üzerinde beklenen ve kabul edilip edilmeyeceği merak edilen değerimiz bulunuyor. Makinemizin kafasının okuduğu değer a sembolü. Makinemizin geçiş tasarımına göre q0 halinde başlıyoruz ve a geldiğinde teybi sağa sarıp yine q0 durumunda kalmamız gerekiyor.


    turing21

    Yeni durumda kafamızın okuduğu değer banttaki 2. a harfi ve bu durumda yine q0 durumundayken teybi sağa sarıp yine q0 durumunda kalmamız tasarlanmış

    turing3

    3. durumda kafamızın okuduğu değer yine a sembolü olmakta ve daha önceki 2 duruma benzer şekilde q0 durumundayken a sembolü okumanın sonucu olarak teybi sağa sarıp q0 durumunda sabit kalıyoruz.

    turing4

    4. adımda teypten okuduğumuz değer boşluk sembolü x oluyor. Bu değer makinemizin tasarımında q1 durumuna gitmemiz olarak tasarlanmış ve teybe sola sarma emri veriyoruz.

    turing5

    Makinenin son durumunda q1 durumu makinenin kabul ve bitiş durumu olarak tasarlanmıştı ( makinenin tasarımındaki F kümesi) dolayısıyla çalışmamız burada sonlanmış ve giriş olarak aaa girdisini kabul etmiş oluyoruz.

    2. Örnek

    Hasan Bey’in sorusu üzerine bir örnek makine daha ekleme ihtiyacı zuhur etti. Makinemiz {a,b} sembolleri için çalışsın ve ilk durum olarak bandın en solunda başlayarak bantta bulunan sembolleri silmek için tasarlansın. Bu tasarımı aşağıdaki temsili resimde görülen otomat ile yapabiliriz:

    Görüldüğü üzere makinemizde 4 durum bulunuyor, bunlardan en sağda olan h durumu bitişi (halt) temsil ediyor. Şimdi bu makinenin bir misal olarak “aabb” yazılı bir bantta silme işlemini nasıl yaptığını adım adım izah etmeye çalışalım.

    Aşağıda, makinenin her adımda nasıl davranacağı bant üzerinde gösterilmiş ve altında açıklanmıştır. Sarı renge boyalı olan kutular, kafanın o anda üzerinde durduğu bant konumunu temsil etmektedir.

    Netice olarak Hasan Bey’in sorusuna temel teşkil eden ve örneğin q1 üzerindeki döngülerden birisi olan b/a,R geçişi, banttan b okunduğunda banta a değerini yaz manasındadır.

    Benzer Yazılar:

    Bilgisayar Kavramları üzerinde şu anda okumakta olduğunuz 'Turing Makinesi (Turing Machine)' isimli yazı 27 Jun 2009 tarihinde, saat: 16:55 'de Şadi Evren ŞEKER tarafından gönderilmiş, toplam 2990 defa okunmuştur.

    Benzer yazıları Automata (otomatlar, özdevinirler), Bilgisayar Kavramları, Bilgisayar Standartları, Derleyiciler, Donanım ( Hardware ), Dosya Organizasyonu (File Organisation), Doğal Dil İşleme (NLP), Mantık Devreleri (Logic Circuits), Programlama Dilleri, Sistem Programlama (System Programming), algoritma analizi (teory of algorithms), işletim sistemleri, veri yapıları kategorilerinden okuyabilirsiniz. Yazar ile irtibat kurmak için email gönderebilirsiniz. Yazıya yorum yapabilir ya da yapılan yorumları RSS 2.0 ile takibe alabilirsiniz.


    Category: Automata (otomatlar, özdevinirler), Bilgisayar Kavramları, Bilgisayar Standartları, Derleyiciler, Donanım ( Hardware ), Dosya Organizasyonu (File Organisation), Doğal Dil İşleme (NLP), Mantık Devreleri (Logic Circuits), Programlama Dilleri, Sistem Programlama (System Programming), algoritma analizi (teory of algorithms), işletim sistemleri, veri yapıları
    7 responses to “Turing Makinesi (Turing Machine)”
    1. Mahir says:

      Cok aciklayici ve guzel olmus. Emegine saglik adim adim anlatmissin

    2. Hasan Erdem Yantır says:

      Gerçekten güzel bir yazı. Derse girememiştim burdan okudum anladım. Fakat turing makinası bence girdi olarak X’i (elmas sembolü) yani boş bant değerini de kabul ediliyor. Çünkü onla da işlem yapılmış ki state diyagramında bu gözüküyor (2. geçiş). Girdi olarak a değil de a,x şeklinde olması gerekmiyor mu?

    3. Şadi Evren ŞEKER says:

      Yukarıdaki örnek turing makinesi, girdi olarak her adımda banttan tek bir sembol okumakta. Dolayısıyla girdi kısmı her zaman için tek sembolden oluşuyor. okun sağında bulunan değer ise banta geri yazılan değeri temsil ediyor.

      Sizin yorumunuzdan anladığım kadarıyla siz oku durum geçişi olarak yorumlamışsınız. Bu yanlış. örneğin a -> a , R şeklindeki bir değer, daha önce okuduğun a değerinden sonra a değeri gelirse sağa sar şeklinde anlaşılmamalı! Bu satırın anlamı banttan a değerini oku ve banta a değerini geri yaz ve bandı sağa sar anlamına gelmektedir.

      Yukarıdaki örneklerde banttan okunan değer aynen banda geri yazılmıştır.

      Yukarıdaki örneklerde banta yazılan değerin birönemi olmadığı için bu yorumu yapmakta haklısınız. Birazdan ikinci bir örnek ekleyip banta bir değer yazılması halinde Turing makinesinin nasıl çalıştığını göstermeye çalışırım. Örneğin bantta yazan bilgileri silen bir turing makinesinin nasıl çalışıtığını yukarıdaki yazıya ekleyelim.

      Başarılar

    4. Hasan Erdem Yantır says:

      Evet yeni eklenen kısım olayı mükemmel biçimde açıklamış.
      Doğrusu ben M = { {q0,q1} , { a } , { a,x } , { q0 a→a R q0 , q0 x→x L q1} , q0 , x , q1 } kısmındaki x’ten bahsetmiştim. Yani bunun yerine
      M = { {q0,q1} , { a,x } , { a,x } , { q0 a→a R q0 , q0 x→x L q1} , q0 , {x, elmas} , q1 } şeklinde olması gerekmiyor mu? Sonuçta makina elmas sembolünü de (yani x) kabul edip ona göre bir karar verebilyor.

    5. tarık-ege.üni says:

      2.süper olmuş…ama bence biraz daha geniş bir turing makinesi tasarlanıp gösterilebilir.mesela;bir girdnin kopyasını yapıp,daha sonra girilen girdiyi silip,kopyasından girilen girdinin 2katı (mesela girdi ab ise ab’yi kopyalayıp bu kopyadan abab üreten) şeklinde çıkı veren turing makinesi yapılsa muazzam olur…

    6. Mahir says:

      Tarik Bey istediginiz sey odev mi yoksa? Cok nokta atisi yapmissiniz !

    7. tarık-ege.üni says:

      yok ödev değil…pek otomatadan ödev aldığımız söylenemez.sadece bir anlık aklıma gelen bir fikirdi.
      geçen gün otururken böyle bir tane de aklıma geldi onu yaptım ama sorduğum soruyu yapamadım.öyleki; herhangi bir string bir turing makinesi tarafından önce baştan bir elemanı sonra sondan bir elemanı ve bu string elemanı bitene kadar kopyalayıp sonra bu kopyadan tekrar ana stringi veren turing makinesi…yani diyelimki;abaabbb girilen bir string şu şekilde kopyalanmalı:
      Abaabbb
      AbaabbB
      ABaabbB
      ABaabBB
      ABAabBB
      ABAaBBB
      ABAABBB
      şeklinde kopyalansın sonra da sırayla stringi kopyalasın…yaptım bunu.ama yapana kadar da bayağı zorlandım..

    Leave a Reply