Turing Makinesi



Karmaşık matematiksel hesapların belirli bir düzenek tarafından yapılıp yapılamayacağı 20.yy’ın başlarında büyük bir tartışma konusu olmuştu. Öteden beri el ile veya zihinden yapılan hesaplamalar çok zaman almakla birlikte, birçok hatayı da beraberinde getiriyordu. Tüm bu tartışmalar sürerken, 1936 yılında, ünlü matematikçi Alan M. Turing "Saptama Problemi Hakkında Bir Uygulamayla Birlikte Hesaplanabilir Sayılar" (İngilizce On computable numbers, with an application to the Entscheidungsproblem) isimli bir makalesini yayınladı. Makalesinde teorik ve matematiksel temellere dayalı sanal bir makineden bahseden Turing, her türlü matematiksel hesabın bu sanal makineyle yapılabileceğini iddia ediyordu. Turing’in 1950 yılında yayınlanan "Hesaplama Mekanizması ve Zeka" (İngilizce Computing Machinery and Intelligence) isimli ikinci makalesi ise, makineler ve zekayla ilgili birçok tartışmalı konuya cevap niteliğindeydi. İşte bu makalelerde sözü geçen sanal makine daha sonraları Turing Makinesi (İngilizce The Turing Machine) olarak isimlendirildi.

Organizasyonu



Bir Turing makinesi, "fiziksel" olarak şu bileşenlerden oluşur:

İki yöne doğru sonsuz uzunlukta bir şerit
Şeridi okumak için bir kafa
Geçiş tablosunu ve Turing makinesinin o anki durumunu içeren bir iç mantık

Şeridin üzerindeki hücrelerde muhtelif semboller bulunur:

B (İngilizce Blank, yani Boş) sembolü, o hücrenin boş olduğunu belirtir. Şeridin işimize yaramayacak tüm kısımları bu harfle doldurulmuştur.
Turing makinesinin şeridi okuyup anlayabilmesi için gerekli diğer semboller. Örneğin, alfabedeki harfler.

Kafa, dört adet işlem yapabilir:

O anda şeridin o hücresindeki sembolü okuyabilir
Olduğu yere yeni bir sembol yazabilir
Sağa gidebilir
Sola gidebilir

Son olarak, en önemli kısım: geçiş tablosu. Bu tablodaki her girdi dört elemanlıdır:

O anki durum
O anda kafanın okuduğu sembol
Yazılacak sembol veya yapılacak kafa hareketi
Yeni durum

Bu tablo, o Turing makinesinin çalıştırdığı algoritmadır. Turing makinesi, her adımda:

O anda kafanın görmekte olduğu sembolü okur.
Geçiş tablosunda okuduğu sembol ve o anki durumunu içeren bir girdi arar:

Eğer öyle bir girdi bulursa, yazılacak sembolü yazar veya kafasını hareket ettirir ve yeni duruma geçer. Makine, yeni durum ve kafanın okuduğu yeni sembol ile çalışmaya devam edecektir.
Eğer öyle bir girdi bulamaz ise, durur.

Şeritte ilk başta yazılı olan sembol dizisi Turing makinesine verilen giriş (sorulan soru), Turing makinesi durduğunda şeritte yazılan sembol dizisi ise Turing makinesinin çıktısıdır (yani sorunun cevabı). Bazı Turing makineleri hiçbir zaman durmayabilirler.

Değişik Turing makineleri

Anlatılan Turing makinesi, yapılabilecek en basit makinedir. Bunu şu şekilde geliştirebiliriz:

Beş girdili geçiş tablolu Turing makinesi: bu makine, bir sembol okuyup gerekli işlemi yaptıktan sonra hem yeni bir sembol yazıp hem de aynı anda kafasının yerini değiştirebilir.
Birkaç şerit okuyuculu Turing makinesi: bu makine, birkaç şeride aynı anda okuyup yazabildiği için paralel işlem yapabilir.

Buna ek olarak, anlatılan Turing makinesi belirlenimci (determinist) bir makinedir, başka bir deyişle aynı girdi için her zaman aynı çıktıyı üretir:

Belirlenimsiz Turing makinesi (İngilizce Non Deterministic Turing machine), çalışmaya başlamadan önce şeride rastgele bir sembol dizisi yazar, bu aşamaya tahmin etme aşaması (İngilizce guessing stage) denir. NP problem grubunun tanımı bu makine ile yapılabilir.
Kahinli Turing makinesi (İngilizce Oracle Turing machine), deminki donanımlara ek olarak bir kahin içerir. Turing makinesi, bu kahine bir soru sorabilir, kahin de bu soruyu cevaplayacaktır. NP complete problem indirgemesi bu makine ile yapılabilir.