<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Bilgisayar Kavramları &#187; Automata (otomatlar, özdevinirler)</title>
	<atom:link href="http://www.bilgisayarkavramlari.com/category/automata-otomatlar/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.bilgisayarkavramlari.com</link>
	<description>www.bilgisayarkavramlari.com</description>
	<lastBuildDate>Sun, 29 Jan 2012 21:38:15 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Emil Post Makinesi</title>
		<link>http://www.bilgisayarkavramlari.com/2011/04/25/emil-post-makinesi/</link>
		<comments>http://www.bilgisayarkavramlari.com/2011/04/25/emil-post-makinesi/#comments</comments>
		<pubDate>Mon, 25 Apr 2011 01:39:02 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Automata (otomatlar, özdevinirler)]]></category>
		<category><![CDATA[Bilgisayar Kavramları]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2011/04/25/emil-post-makinesi/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Bilgisayar bilimlerinde özellikle özdevinirliler kuramında (automata theory) geçen bir makine modelidir. Yapı olarak Turing makinesine (Turing machine) çok benzer hatta ufak farklılıklar dışında neredeyse aynı olduğu söylenebilir. Turing makinesini geliştiren Alan Turing ile bağımsız olarak geliştirilmiştir. Bu anlamda Post makinesi bazı kaynaklarda Post-Turing makinesi (Post Turing Machine) olarak da geçmektedir. [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER
</p>
<p>Bilgisayar bilimlerinde özellikle <a href="http://www.bilgisayarkavramlari.com/category/automata-otomatlar/">özdevinirliler kuramında (automata theory)</a> geçen bir makine modelidir. Yapı olarak <a href="http://www.bilgisayarkavramlari.com/2009/06/27/turing-makinesi-turing-machine/">Turing makinesine (Turing machine)</a> çok benzer hatta ufak farklılıklar dışında neredeyse aynı olduğu söylenebilir. Turing makinesini geliştiren Alan Turing ile bağımsız olarak geliştirilmiştir.  Bu anlamda Post makinesi bazı kaynaklarda Post-Turing makinesi (Post Turing Machine) olarak da geçmektedir.
</p>
<p>Turing makinesinde kullanılan bant mantığına benzer bir şekilde, Post makinesinde de kutular bulunmaktadır. İki yöne doğru sonsuz sayıda kutunun bulunduğu bir üretim bandı gibi düşünülebilir. Yani kutulara erişim ardışıktır (sequential) ve kutular ileri veya geri olmak üzere iki yönde hareket edebilir. Post makinesi burada sanki bir çalışanın üretim bandındaki kutular üzerinden çalıştığı kabulü ile yola çıkar.
</p>
<p>Post makinesinde, başlangıç durumunda sonsuz kutu bulunmakta ancak bunların sonlu bir kısmı işaretli, geri kalan sonsuz kısmı ise işaretsiz kabul edilmektedir. Yani başlangıç durumunda makinemizin hafızasında bir bilgi olmasını istiyorsak, bu bilgiyi kutulara işaretliyoruz. Geri kalan kutular ise işaretsiz oluyorlar.
</p>
<p>Post makinesi, aynı anda tek bir kutuya erişim sağlayabilir. Buna göre kutulara aşağıdaki işlemler uygulanabilir:
</p>
<ol>
<li>Boş olan bir kutu işaretlenebilir
</li>
<li>İşaretli olan bir kutu silinerek işaretsiz hale getirilebilir.
</li>
<li>Sağdaki kutuya geçilebilir
</li>
<li>Soldaki kutuya geçilebilir
</li>
<li>Şu anda bakılan kutunun işareti okunabilir.
</li>
</ol>
<p>Post makinesinin kendisine özel yazım kuralları bulunmaktadır (notation). Herhangi bir adımda ( bu adıma örnek için i diyelim), herhangi bir işlem (operation) yukarıdaki adımlardan birini parametre almaktadır. Örneğin <span style="font-family:Times New Roman; font-size:12pt"><em>O<sub>i</sub></em></span> [3] şeklindeki yazım, i. adımda makinemizin sağdaki kutuya geçeceği şeklinde okunabilir. Ayrıca makinemizin yukarıdaki işlemlerden 5ncisini işletmesi durumunda sonraki adımlarda çatallanma olur. Yani okunan değerin işaretli veya işaretsiz oluşuna göre makinemiz farklı davranabilir. Bunun dışındaki işlemler bir akış şeklinde sonraki adıma geçer.
</p>
<p>Yukarıdaki ilk modele ilave olarak zaman içinde yapılan ilaveler ile birlikte bugün Post-Turing makinesi olarak anılan makine aşağıdaki 7 işlemi yapabilmektedir.
</p>
<p style="margin-left: 36pt"><span style="font-family:Times New Roman; font-size:12pt">PRINT 1    |    1 yaz<br />
</span></p>
<p style="margin-left: 36pt"><span style="font-family:Times New Roman; font-size:12pt">PRINT 0    |    0 yaz<br />
</span></p>
<p style="margin-left: 36pt"><span style="font-family:Times New Roman; font-size:12pt">GO RIGHT    |    sağa git<br />
</span></p>
<p style="margin-left: 36pt"><span style="font-family:Times New Roman; font-size:12pt">GO LEFT    |    sola git<br />
</span></p>
<p style="margin-left: 36pt"><span style="font-family:Times New Roman; font-size:12pt">GO TO STEP i IF <strong>1</strong> IS SCANNED    |    şayet 1 okursan i. adıma git<br />
</span></p>
<p style="margin-left: 36pt"><span style="font-family:Times New Roman; font-size:12pt">GO TO STEP i IF <strong>0</strong> IS SCANNED    |    şayet 2 okursan i. adıma git<br />
</span></p>
<p style="margin-left: 36pt"><span style="font-family:Times New Roman; font-size:12pt">STOP    | bitir<br />
</span></p>
<p>Yukarıdaki son haliyle, post makinesi, Turing makinesinin yapabildiği işlemleri yapabilecek seviyeye ulaşmış olur. Yukarıdaki örnek ikilik tabanda (binary) bir makine olup, dilenirse sembol tablosu genişletilerek daha farklı işaretleri kutulara yerleştirmesi de sağlanabilir. </p>

<p class="sayac_bilgi">178 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2011/04/25/emil-post-makinesi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Post Karşılık Problemi (Post Correspondence Problem)</title>
		<link>http://www.bilgisayarkavramlari.com/2011/04/23/post-karsilik-problemi-post-correspondence-problem/</link>
		<comments>http://www.bilgisayarkavramlari.com/2011/04/23/post-karsilik-problemi-post-correspondence-problem/#comments</comments>
		<pubDate>Sat, 23 Apr 2011 15:16:42 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[algoritma analizi (teory of algorithms)]]></category>
		<category><![CDATA[Automata (otomatlar, özdevinirler)]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2011/04/23/post-karsilik-problemi-post-correspondence-problem/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Emil Post tarafından 1946 yılında ortaya atılan ve belirsiz karar problemi olarak sınıflandırılabilecek olan (undecidable decision problem) problemin ismidir. Literatürde kısaca PCP olarak da geçmektedir. Bu problem, yine Emil Post tarafından geliştirilen, Post Makinesi (post machine) olarak bilinen ve Turing makinesinin (Turing Machine) bir benzeri olan makinenin geliştirilmesini sağlamıştır. Problem, [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Emil Post tarafından 1946 yılında ortaya atılan ve belirsiz karar problemi olarak sınıflandırılabilecek olan (undecidable decision problem) problemin ismidir. Literatürde kısaca PCP olarak da geçmektedir. Bu problem, yine Emil Post tarafından geliştirilen, <a href="http://www.bilgisayarkavramlari.com/2011/04/25/emil-post-makinesi/">Post Makinesi (post machine)</a> olarak bilinen ve <a href="http://www.bilgisayarkavramlari.com/2009/06/27/turing-makinesi-turing-machine/">Turing makinesinin (Turing Machine)</a> bir benzeri olan makinenin geliştirilmesini sağlamıştır. Problem, <a href="http://www.bilgisayarkavramlari.com/2008/11/12/durma-problemi-halting-problem/">durma problemine göre (halting problem)</a> daha basit bir yapıdadır bu yüzden belirsiz karar problemlerinin ispatlanmasında daha çok tercih edilir.</p>
<p>Problem aşağıdaki şekilde tanımlanabilir.</p>
<p>A bir alfabe olmak üzere, bu alfabeden tanımlı olan n elemanlı iki küme ele alalım:</p>
<p>X = {x<sub>1</sub>,x<sub>2</sub>, … x<sub>n</sub> }</p>
<p>Y = {y<sub>1</sub>,y<sub>2</sub>, … y<sub>n</sub>}</p>
<p>Bu iki küme üzerinden üretilen iki kelimenin eşit olması durumunu arıyoruz.</p>
<p>Örneğin aşağıdaki kümeleri ele alalım:</p>
<p>X = { sad , sek , er, i}</p>
<p>Y = { sa , se, ker , di }</p>
<p>Yukarıdaki örnek kümeler için böyle bir eşitlik bulunabilir:</p>
<p>sad + i + se + ker = sadiseker = sa + di + se + ker</p>
<p>Yukarıdaki eşitliğin sol tarafı X kümesinde, sağ tarafı ise Y kümesinden üretilmiştir.</p>
<p>Bazı problemler çözümsüz, bazı problemler ise birden fazla çözüme sahip olabilir. Örneğin aşağıdaki kümeleri ele alalım:</p>
<p>X= {a,ab,bba}</p>
<p>Y= { baa, aa, bb}</p>
<p>Çözüm aşağıdaki şekilde olabilir:</p>
<p><span style="font-family: Times New Roman; font-size: 12pt;"><em>bba</em> + <em>ab</em> + <em>bba</em> + <em>a</em> = <em>bbaabbbaa</em> = <em>bb</em> + <em>aa</em> + <em>bb</em> + <em>baa</em></span></p>
<p>Ancak bu tek çözüm değildir. Örneğin aşağıdaki de bir çözüm üretebilir:</p>
<p><span style="font-family: Times New Roman; font-size: 12pt;"><em>bba</em> + <em>ab</em> + <em>bba</em> + <em>a</em> + <em>bba</em> + <em>ab</em> + <em>bba</em> + <em>a</em> = <em>bbaabbbaabbaabbbaa</em> = <em>bb</em> + <em>aa</em> + <em>bb</em> + <em>baa + bb</em> + <em>aa</em> + <em>bb</em> + <em>baa</em></span></p>
<p>Yukarıdaki ikinci çözüm, bir önceki çözümün tekrarı niteliğindedir. Yani üretilen eşitlik dizilimi bir önceki çözümün iki kere tekrarlanması ile oluşturulmuştur. Bu işlem istenildiği kadar tekrar edilebilir.</p>
<p>Örneğin yukarıdaki kümelerin ilk elemanları çıkarılarak aşağıdaki kümeler oluşturulsaydı</p>
<p>X= {ab,bba}</p>
<p>Y= { aa, bb}</p>
<p>Bu kümelerden elde edilen bir çözüm bulunamazdı.</p>

<p class="sayac_bilgi">140 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2011/04/23/post-karsilik-problemi-post-correspondence-problem/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mealy ve Moore Makineleri (Mealy and Moore Machines)</title>
		<link>http://www.bilgisayarkavramlari.com/2011/01/26/mealy-ve-moore-makineleri-mealy-and-moore-machines/</link>
		<comments>http://www.bilgisayarkavramlari.com/2011/01/26/mealy-ve-moore-makineleri-mealy-and-moore-machines/#comments</comments>
		<pubDate>Wed, 26 Jan 2011 11:02:02 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Automata (otomatlar, özdevinirler)]]></category>
		<category><![CDATA[Bilgisayar Kavramları]]></category>
		<category><![CDATA[Derleyiciler]]></category>
		<category><![CDATA[Donanım ( Hardware )]]></category>
		<category><![CDATA[graf teorisi (graph theory, çizge kuramı)]]></category>
		<category><![CDATA[Programlama Dilleri]]></category>
		<category><![CDATA[veri yapıları]]></category>
		<category><![CDATA[yapay zeka (artificial intelligence)]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2011/01/26/mealy-ve-moore-makineleri-mealy-and-moore-machines/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Bilgisayar bilimlerinde sıkça kullanılan sonlu durum makinelerinin (finite state machine, FSM veya Finite State Automaton , FSA) gösteriminde kullanılan iki farklı yöntemdir. Genelde literatürde bir FSM&#8217;in gösteriminde en çok moore makinesi kullanılır. Bu iki yöntem (mealy ve moore makinaları) sonuçta bir gösterim farkı olduğu için bütün mealy gösterimlerinin moore ve [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Bilgisayar bilimlerinde sıkça kullanılan sonlu durum makinelerinin <a href="http://www.bilgisayarkavramlari.com/2007/12/25/sonlu-durum-makinasi-finite-state-machine-finite-state-automaton/">(finite state machine, FSM</a> veya <a href="http://www.bilgisayarkavramlari.com/2008/08/02/sonlu-ototmatlar-finite-automaton/">Finite State Automaton , FSA</a>) gösteriminde kullanılan iki farklı yöntemdir. Genelde literatürde bir FSM&#8217;in gösteriminde en çok moore makinesi kullanılır. Bu iki yöntem (mealy ve moore makinaları) sonuçta bir gösterim farkı olduğu için bütün mealy gösterimlerinin moore ve bütün moore gösterimlerinin mealy gösterimine çevrilmesi mümkündür.</p>
<p>Klasik bir FSM&#8217;de bir giriş bir de çıkış bulunur (input / output). Bu değerlerin nereye yazılacağı aslında iki makine arasındaki farkı belirler.</p>
<p>Moore makinelerinde çıkış değerleri <a href="http://www.bilgisayarkavramlari.com/2008/08/01/dugum-node/">düğümlere (node</a>) yazılırken, giriş değerleri kenarlar (edges) üzerinde gösterilir.</p>
<p>Mealy makinelerinde ise giriş ve çıkış değerleri kenarlar (edges) üzerinde aralarına bir taksim işareti (slash) konularak gösterilir. Örneğin 1/0 gösterimi, girişin 1 ve çıktının 0 olduğunu ifade eder.</p>
<p>Basit bir örnek olarak <a href="http://www.bilgisayarkavramlari.com/2008/03/13/ozel-veya-exclusive-or-farklilik-operatoru/">özel veya (exclusive or, <span style="font-family: Symbol;">Ä</span>)</a> işlemini ele alalım ve her iki makine gösterimi ile de çizmeye çalışalım.</p>
<div>
<table style="border-collapse: collapse;" border="0">
<colgroup>
<col style="width: 66px;"></col>
<col style="width: 57px;"></col>
<col style="width: 47px;"></col>
</colgroup>
<tbody>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border: solid 0.5pt;">Girdi 1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid 0.5pt; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">Girdi 2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid 0.5pt; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">Çıktı</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">0</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">0</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">0</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">0</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">1</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">0</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">1</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">0</td>
</tr>
</tbody>
</table>
</div>
<p>Klasik bir XOR kapısı, yukarıdaki <a href="http://bilgisayarkavramlari.com/2007/12/08/dogruluk-cizelgesi-truth-table/">doğruluk çizelgesinde (truth table)</a> gösterildiği üzere iki giriş ve bir çıkıştan oluşur. Bizim makinemiz de ilk girdiden sonra ikinci girdiyi aldığında beklenen çıktıyı vermeli. Ayrıca makine sürekli olarak çalışmaya devam edecek. Örneğin 101011 şeklinde bir veri akışı sağlanması durumunda, sonuç olarak 1<span style="font-family: Symbol;">Ä</span>0<span style="font-family: Symbol;">Ä</span>1<span style="font-family: Symbol;">Ä</span>0<span style="font-family: Symbol;">Ä</span>1<span style="font-family: Symbol;">Ä</span>1 değerini hesaplamasını isteriz.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/012611_1102_MealyveMoor1.png" alt="" /></p>
<p>Yukarıdaki gösterim bir mealy makinesidir. Makinede görüldüğü üzere 3 farklı durum arasındaki geçişler üzerine iki adet değer yazılmıştır. Bu değerlerden ilki giriş ikincisi ise çıkış değeridir.</p>
<p>Makineyi beraber okumaya çalışalım.</p>
<p>Makinenin boşluktan bir ok ile başlayan durumu, yani örneğimizdeki S0 durumu, başlangıç durumudur. Bu durumdan başlanarak gelen değerlere göre ilgili duruma geçilir.</p>
<p>Örneğimizi hatırlayalım. Giriş olarak 101011 <a href="http://www.bilgisayarkavramlari.com/2008/08/02/dizgi-string/">dizgisini (string)</a> almayı planlamıştık. Bu durumda ilk bitimiz 1 olarak geliyor ve S0 durumunda 1 girişi ile S2 durumuna geçiyoruz. Burada geçiş sırasında kullanılan kenarın üzerindeki değeri okuyalım: 1/0 bunun anlamı 1 geldiğinde geçilecek kenar olması ve çıktının 0 olmasıdır. Yani şu anda çıktımız 0</p>
<p>Ardından gelen değer 0 (yani şimdiye kadar 01 değerleri geldi). En son makinemizdeki durum, S2 durumuydu, şimdi yeni gelen değeri bu durumdaki kollardan takip ediyor ve S1&#8242;e giden 0/1 kenarını izliyoruz. Bu kolu izleme sebebimiz, S2 durumundan gidilen tek 0 girdisi kolu olmasıdır. Bu kol üzerindeki ikinci değer olan 1 ise, çıktının 1 olduğudur. Yani buraya kadar olan girdiyi alacak olsaydık 01 için 1 çıktısı alacaktık.</p>
<p>İşlemlere devam edelim ve durumları yazmaya çalışalım:</p>
<div>
<table style="border-collapse: collapse;" border="0">
<colgroup>
<col style="width: 56px;"></col>
<col style="width: 57px;"></col>
<col style="width: 41px;"></col>
<col style="width: 56px;"></col>
</colgroup>
<tbody>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border: solid 0.5pt;">Gelen Değer</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid 0.5pt; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">Durum</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid 0.5pt; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">Çıkış</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid 0.5pt; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">Yeni Durum</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">S0</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">0</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">S2</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">0</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">S2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">S1</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">S1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">S2</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">0</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">S2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">S1</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">S1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">S2</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">S2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">0</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">S2</td>
</tr>
</tbody>
</table>
</div>
<p>Yukarıdaki tablomuzun son halinde, çıkış değeri olarak 0 okunmuştur. Yani örneğimizin neticesi 0 olacaktır.</p>
<p>Aynı örneği moore makinesi olarak tasarlayacak olsaydık:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/012611_1102_MealyveMoor2.png" alt="" /></p>
<p>Moore makinesinde, mealy makinesine benzer şekilde boşluktan gelen bir ok, başlangıç durumunu belirtir.</p>
<p>Makinenin, durumlarında, mealy makinesinde olmayan değerler eklenmiştir. Bu değerler, ilgili durumdaki çıktıyı gösterir. Örneğin makinemiz S1 durumundayken çıktı 0 olarak okunabilir.</p>
<p>Şimdi moore makinesinde, aynı örneği çalıştırıp sonucu karşılaştıralım.</p>
<p>Giriş olarak 101011 <a href="http://www.bilgisayarkavramlari.com/2008/08/02/dizgi-string/">dizgisini (string)</a> almayı planlamıştık. Bu durumda ilk bitimiz 1 olarak geliyor ve S0 durumunda 1 girişi ile S2 durumuna geçiyoruz. Bu geçiş sonucunda geldiğimiz S2 durumunda okunan çıktı değeri 0 yani sonuç şimdilik 0.</p>
<p>Ardından gelen 0 değeri ile S3 durumuna geçiyoruz ve çıktımız 1 oluyor. Çünkü S3 durumu 1 çıktısı veren durumdur. Bu şekilde durumları ve durumlar arasındaki geçişleri izlersek, aşağıdaki tabloyu çıkarabiliriz:</p>
<div>
<table style="border-collapse: collapse;" border="0">
<colgroup>
<col style="width: 56px;"></col>
<col style="width: 57px;"></col>
<col style="width: 41px;"></col>
<col style="width: 56px;"></col>
</colgroup>
<tbody>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border: solid 0.5pt;">Gelen Değer</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid 0.5pt; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">Durum</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid 0.5pt; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">Çıkış</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid 0.5pt; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">Yeni Durum</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">S0</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">0</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">S2</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">0</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">S2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">S3</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">S3</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">S4</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">0</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">S4</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">S3</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">S3</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">S4</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">S4</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">0</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">S2</td>
</tr>
</tbody>
</table>
</div>
<p>Görüldüğü üzere, makinemiz, örnek girdi için S2 durumunda sonlanıyor ve bu durumda çıktımız 0 olarak okunuyor.</p>

<p class="sayac_bilgi">810 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2011/01/26/mealy-ve-moore-makineleri-mealy-and-moore-machines/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Eşit a ve b bulunduran Turing Makinesi örneği</title>
		<link>http://www.bilgisayarkavramlari.com/2010/11/19/esit-a-ve-b-bulunduran-turing-makinesi-ornegi/</link>
		<comments>http://www.bilgisayarkavramlari.com/2010/11/19/esit-a-ve-b-bulunduran-turing-makinesi-ornegi/#comments</comments>
		<pubDate>Fri, 19 Nov 2010 12:55:00 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Automata (otomatlar, özdevinirler)]]></category>
		<category><![CDATA[Turing]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2010/11/19/esit-a-ve-b-bulunduran-turing-makinesi-ornegi/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Turing makinesini anlattığım bu yazıda gelen bir soru üzerine, sorunun cevabını yayınlıyorum. Soruyu soran, onur bey, eşit sayıda a ve b bulunan bir kelimeyi kabul eden Turing makinesi tasarımı istemiş. Şimdi bu soru iki türlü anlaşılabilir. Kolay olanı anbn şeklinde a ve b harflerinin sırayla gelmesi. yani n tane a [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p><a href="http://www.bilgisayarkavramlari.com/2009/06/27/turing-makinesi-turing-machine/">Turing makinesini anlattığım bu yazıda</a> gelen bir soru üzerine, sorunun cevabını yayınlıyorum. <a href="http://www.bilgisayarkavramlari.com/2009/06/27/turing-makinesi-turing-machine/comment-page-1/">Soruyu soran, onur bey,</a> eşit sayıda a ve b bulunan bir kelimeyi kabul eden Turing makinesi tasarımı istemiş.</p>
<p><span style="font-family: Times New Roman; font-size: 12pt;">Şimdi bu soru iki türlü anlaşılabilir. Kolay olanı a<sup>n</sup>b<sup>n</sup> şeklinde a ve b harflerinin sırayla gelmesi. yani n tane a harfinin n tane b harfinden önce gelmesi. Tabi bir de eşit sayıda a ve b olması ve bunların karışık dizilimde olması mümkün.<br />
</span></p>
<p><span style="font-family: Times New Roman; font-size: 12pt;">Yani ilk durumda aaabbb şeklindeki kelimeleri kabul ederken ikinci durumda aabbab şeklindeki kelimeleri de kabul etmesini bekleyebiliriz.<br />
</span></p>
<p><span style="font-family: Times New Roman; font-size: 12pt;">ilk durum için basitçe kelimenin başından bir a sildiğimizde, kelimenin sonundan da bir b silicez. Dolayısıyla a ve b harfleri aynı anda biterse eşitler, şayet birisi önce biterse eşit değiller diyeceğiz.<br />
</span></p>
<p><span style="font-family: Times New Roman; font-size: 12pt;">ikinci durum ise biraz daha zor, kelimenin başından bir harf silip (örneğin a) sonra tersi olan harfi (bu durumda b) kelimenin yine başından ilk gördüğümüz durumda silmemiz gerekiyor. Ancak bu silme işlemini kaydırarak yapmamız gerekiyor.<br />
</span></p>
<p><span style="font-family: Times New Roman; font-size: 12pt;">Örnek üzerinden anlatacak olursam :<br />
-abaaaabbbb- şeklinde bir kelime olsun:<br />
a ve hemen sonra kelimede gelen ilk b siliniyor<br />
—aaaabbbb- halini alıyor ve devam ediyoruz:<br />
—-aaabbbb- şimdi bir a sildik ve bir de b silmemiz gerek. Makinemiz ilk b&#8217;yi bulup silecek:<br />
—-aaa-bbb- fakat görüldüğü üzere kelimenin içinde boşluk oldu bunu düzeltmek için kaydırıyoruz:<br />
—-aaabbb– ve böylece devam ediyor.<br />
</span></p>
<p><span style="font-family: Times New Roman; font-size: 12pt;">Burada boşluk oluşması ve kaydırma probleminin çözümü için ilave bir sembol kullanılabilir. Örneğin c sembolü kullanacak olalım. ilk silmeden sonra<br />
-ccaaaabbbb- şeklinde ilk a ve b silindiler<br />
-cccaaacbbb- şeklinde ikinci silme gerçekleşti ve bu şekilde devam ediyoruz. Ta ki bütün kelime c olana kadar. Şayet b veya a önce biterse o zaman eşit değil diyebiliriz.<br />
</span></p>
<p><span style="font-family: Times New Roman; font-size: 12pt;">Yukarıda, iki problemin de çözümünü anlattım ama kolay olanının makinesini çizip adım adım yukarıdaki yazıya ekleyeceğim. Eh zor olanını da artık siz yaparsınız <img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/111910_1255_Eitavebbul1.gif" alt="" /><br />
</span></p>
<p><strong>Çözüm:<br />
</strong></p>
<p>Örnek kelimemiz aabb olsun. Bu örneği çözerken sırasıyla bir a harfinin yerine x bir de b harfinin yerine y koyacağız. En sonunda, bütün a&#8217;lar x ve bütün b&#8217;ler y ile değişmiş olacak ve makinemizde hiç a ve b kalmadıysa kabul edeceğiz. Şayet a sayısı b&#8217;den fazlaysa, o zaman hala x harfine dönmeyen a&#8217;lar bulunacak veya benzer şekilde b harfi a&#8217;dan fazla ise bu durumda da hala y harfine dönmeyen b&#8217;ler bulunacaktır. Bu durumda bantta a veya b harfi kalmışsa, makinemiz bu kelimeyi kabul etmeyecektir.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/111910_1255_Eitavebbul2.png" alt="" /></p>
<p>Yukardaki Turing makinesi tasarımı, problemimizi çözer. Bu çözümü bir örnek üzerinden adım adım görelim.</p>
<p>Örneğimiz aabb kelimesi olsun ve bakalım makinemiz bu kelimeyi kabul edecek mi.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/111910_1255_Eitavebbul3.png" alt="" /></p>
<p>Kelimenin ilk harfinde, makinemiz q0 durumundadır (state). Bu durumda banttan a okuduğu için q1 durumuna geçer ve banda x koyar.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/111910_1255_Eitavebbul4.png" alt="" /></p>
<p>Makinemiz, a gördüğü üzere bandı sağa (R) sarmaya devam edecek ve b görünce q2&#8242;ye geçecektir.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/111910_1255_Eitavebbul5.png" alt="" /></p>
<p>Şimdi makinemiz b gördüğü durum olan q2 geldi ve geri sarmaya başlıyor. Bu işlem x görene kadar devam edecektir ve x görünce q0 durumuna dönecektir.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/111910_1255_Eitavebbul6.png" alt="" /></p>
<p>X harfini görünce sağa sardık ve gördüğümüz ilk a harfini x ile değiştirerek makinenin şimdiye kadar yaptığı işlemleri bir kere daha tekrar etmeye başladık.</p>
<p>Sonuçta makinemiz, bir a harfini x ile değiştirmiştir ve bir b harfini de az önce olduğu gibi y harfi ile değiştirecektir.</p>
<p>İlgili değiştirme işlemleri yapıldıktan sonra makinemiz ve bandın durumu aşağıdaki şekilde olacaktır:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/111910_1255_Eitavebbul7.png" alt="" /></p>
<p>Görüldüğü üzere makine, q0 durumuna geri gelmiş ve bant ilk gördüğü x harfi için bir sağa sarılmıştır.</p>
<p>q0 durumunda, daha fazla a harfi kalmadığı için q3 durumuna geçiyoruz. Bu duruma geçme koşulumuz y bulunması hali.</p>
<p>q3 durumunda ise, bandın sonuna kadar y okudukça ilerliyoruz. Buradaki kritik nokta, şayet a ve b harflerinin sayısı eşitse, boşluk sembolüne kadar ilerleyeceğimizdir. Şayet b harfleri, a harflerinden fazla olursa q3 durumunda kalırız çünkü henüz hala y ile değiştirilmeyen b harfleri olacak ve makine q3 durumunda kalacaktır.</p>
<p>Şayet a harfinin sayısı b&#8217;den fazla olursa, bu durumda q1&#8242;de kalacağız. Çünkü bir a harfi x ile değiştikten sonra bir de b harfinin y ile değişmesi gerekecek. Bunu yapabileceğimiz bir b harfi bulunmayacak çünkü bütün b&#8217;ler zaten y ile değişmiş olacak ve makinemiz bu durumu kabul etmeyecek.</p>
<p>Turing makineleri ile ilgili daha detaylı bilgi için aşağıdaki bağlantıya tıklayabilirsiniz:</p>
<p><a href="http://www.bilgisayarkavramlari.com/2009/06/27/turing-makinesi-turing-machine/">http://www.bilgisayarkavramlari.com/2009/06/27/turing-makinesi-turing-machine/</a></p>

<p class="sayac_bilgi">624 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2010/11/19/esit-a-ve-b-bulunduran-turing-makinesi-ornegi/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Von Neumann Makinesi</title>
		<link>http://www.bilgisayarkavramlari.com/2010/10/05/von-neumann-makinesi/</link>
		<comments>http://www.bilgisayarkavramlari.com/2010/10/05/von-neumann-makinesi/#comments</comments>
		<pubDate>Tue, 05 Oct 2010 07:52:53 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Automata (otomatlar, özdevinirler)]]></category>
		<category><![CDATA[Donanım ( Hardware )]]></category>
		<category><![CDATA[von neumann]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2010/10/05/von-neumann-makinesi/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Bilgisayar bilimleri açısından, von neumann makineleri, günümüz klasik bilgisayarlarının temellerini oluşturur. Bu makine tanımında basitçe bir işlemci, bir hafıza ve giriş / çıkış sistemleri modellenmiştir. Yukarıdaki şekilde görüldüğü üzere, hafıza (memory) ile bir kontrol birimi (control unit) ve bir de aritmetik mantıksal birim (artihmetic logical unit) arasında iletişim kurulmaktadır. Ayrıca [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Bilgisayar bilimleri açısından, von neumann makineleri, günümüz klasik bilgisayarlarının temellerini oluşturur. Bu makine tanımında basitçe bir işlemci, bir hafıza ve giriş / çıkış sistemleri modellenmiştir.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/100510_0752_VonNeumannM1.png" alt="" /></p>
<p>Yukarıdaki şekilde görüldüğü üzere<a href="http://www.bilgisayarkavramlari.com/2008/11/07/rastgele-erisilebilir-bellek-random-access-memory-ram/">, hafıza (memory</a>) ile bir kontrol birimi (control unit) ve bir de aritmetik mantıksal birim (artihmetic logical unit) arasında iletişim kurulmaktadır. Ayrıca aritmetik mantıksal birim içerisinde bir adet biriktirici bulunmaktadır.</p>
<p>Von neumann makinesi, tasarım olarak, evrensel Turing makinesi (universal Turing Machine) problemlerini çözebilmektedir.</p>
<p>Von Neumann makineleri, teoride &#8221; kayıtlı program &#8221; olarak geçen (stored programm) problemi çözebilmeleri açısından, &#8220;kayıtlı program makinesi&#8221; (stored programm machine) olarak geçmektedir. Bunun anlamı, program tarafından kontrol edilebilen bilgisayarların bir üst seviyesi olarak, programın ve giriş çıkışların kayıt edilebilmesidir.</p>
<p>Von Neumann makinelerinin ayrıca bir üst seviyesi olarak, yeniden programlanabilir makineler (reprogramming) olarak kullanılabilmesidir. Örneğin bir hesap makinesi için geliştirilen cihaz, üzerinde bir program bulundurur. Bu program, hesap işlemlerinin yapıldığı temel özellikleri içerir ve donanımla doğrudan ilişkilidir. Von Neumann makineleri, bu kavramı yıkarak aynı cihaz üzerinden, hesaplama işlemlerinin yapıldığı bir programı tamamen farklı amaçlara hizmet eden bir programla değiştirmeye izin verir. Örneğin bir oyun veya bir tablolama yazılımına geçilmesi cihaz üzerinde ciddi yenileme işlemleri gerektirir.</p>
<p>Yukarıda anlatılan bu yeniden programlama özelliğinin desteklenebildiği ilk bilgisayar tasarımı Von Neumann bilgisayarlarıdır. Bu bilgisayarlar üzerinde hafızada kayıtlı bir program amaca yönelik olarak yüklenebilmektedir. Elbette aynı anda <a href="http://www.bilgisayarkavramlari.com/2007/11/18/cok-islemlik-multi-processing/">birden fazla programın çalışabilmesi (multi processing)</a> çok daha sonradan geliştirilmiştir.</p>

<p class="sayac_bilgi">177 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2010/10/05/von-neumann-makinesi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ve/Veya bağlacı normal şeklleri (Conjunction / Disjunction Normal Form)</title>
		<link>http://www.bilgisayarkavramlari.com/2010/07/02/veveya-baglaci-normal-seklleri-conjunction-disjunction-normal-form/</link>
		<comments>http://www.bilgisayarkavramlari.com/2010/07/02/veveya-baglaci-normal-seklleri-conjunction-disjunction-normal-form/#comments</comments>
		<pubDate>Fri, 02 Jul 2010 09:54:46 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[algoritma analizi (teory of algorithms)]]></category>
		<category><![CDATA[Automata (otomatlar, özdevinirler)]]></category>
		<category><![CDATA[Bilgisayar Matematiği]]></category>
		<category><![CDATA[Bilgisayar Standartları]]></category>
		<category><![CDATA[Programlama Dilleri]]></category>
		<category><![CDATA[cnf]]></category>
		<category><![CDATA[conjunction normal form]]></category>
		<category><![CDATA[disjunction normal form]]></category>
		<category><![CDATA[dnf]]></category>
		<category><![CDATA[ve normal şekli]]></category>
		<category><![CDATA[veya normal şekli]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2010/07/02/veveya-baglaci-normal-seklleri-conjunction-disjunction-normal-form/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Bu gösterim, bool cebirinde (boolean algebra) kullanılan ve kaziyeleri (önerme, proposition) ve (and) bağlacı ile bağlamanın özel bir şeklidir. Kısaca CNF (conjuction normal form) olarak ifade edilir. Diğer bir normal şekil olan Chomsky Normal Form (CNF) ile ilgili bilgi arıyorsanız buradan ulaşabilirsiniz. Bu özel şeklin taşıdığı kuralları aşağıdaki şekilde sıralayabiliriz: [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Bu gösterim, bool cebirinde (boolean algebra) kullanılan ve kaziyeleri (önerme, proposition) <a href="http://www.bilgisayarkavramlari.com/2007/11/29/ve-kapisi-and-gate/">ve (and)</a> bağlacı ile bağlamanın özel bir şeklidir. Kısaca CNF (conjuction normal form) olarak ifade edilir. <a href="http://www.bilgisayarkavramlari.com/2009/06/22/chomsky-normal-sekili-chomsky-normal-form/">Diğer bir normal şekil olan Chomsky Normal Form  (CNF) ile ilgili bilgi arıyorsanız buradan ulaşabilirsiniz. </a></p>
<p>Bu özel şeklin taşıdığı kuralları aşağıdaki şekilde sıralayabiliriz:</p>
<p>Ters (not) işlemi, sadece önermelerin lafzi gösterimlerin (literal) başında bulunacaktır. Bir <a href="http://www.bilgisayarkavramlari.com/2007/11/29/onermeler-mantigi-propositional-logic/">kaziyenin (önerme, propositon)</a> başında bulunmayacaktır.</p>
<p>Örneğin ¬A şeklindeki tek lafzi gösterim üzerinde olan ters işlemi kabul edilirken ¬(A V B) şekli kabul edilemez.</p>
<p>Ve (and) işlemi,  iki operand almaktadır. Yani a ve b şeklindeki bir işlemde a ve b adında iki lafzi gösterim (literal) bulunmaktadır. Bu işlemin herhangi bir operandı, basit bir lafzi gösterim (literal) veya <a href="http://www.bilgisayarkavramlari.com/2007/11/29/veya-kapisi-or-gate/">disjunction (veya operatörü (or opeartor)</a> ile oluşturulmuş bir) kaziye (önerme, proposition) olmalıdır.</p>
<p>Örneğin  aşağıdaki gösterimler bu kurala uymaktadır:</p>
<p>A Λ B</p>
<p>(A V B ) Λ (C V D)</p>
<p>A Λ (C V D V F)</p>
<p>Ancak aşağıdaki gösterimler bu kurala uymaz</p>
<p>A Λ (B Λ C)</p>
<p>A Λ (B V C Λ D)</p>
<p>(A Λ B) Λ C</p>
<p>Ancak yukarıdaki gösterimler CNF (conjuction normal form) yani ve bağlacı normal şekline çevrilebilir. Bu çevirimler aşağıda gösterilmiştir (yukarıdaki her satır için sırasıyla)</p>
<p>A Λ B Λ C</p>
<p>A Λ ( B V C ) Λ ( B V D)</p>
<p>A Λ B Λ C</p>
<p>Görüldüğü üzere yukarıdaki yeni hallerinde, verilen gösterimler ve bağlacı üzerinde basitleştirilmiştir.</p>
<p>Disjunction Normal Form (DNF, Veya bağlacı normal şekli) ise yukarıdaki ve bağlacı için söylenen her şeyin, veya bağlacı için geçerli olması durumudur.</p>
<p>Kısaca bu şekilde kabul edilemeyecek gösterimleri ve çevrilmiş şekillerini aşağıda verelim:</p>
<div>
<table style="border-collapse: collapse;" border="0">
<colgroup>
<col style="width: 318px;"></col>
<col style="width: 318px;"></col>
</colgroup>
<tbody>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border: solid black 0.5pt;">DNF şeklinde olmayanlar</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid black 0.5pt; border-left: none; border-bottom: solid black 0.5pt; border-right: solid black 0.5pt;">DNF karşılığı</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid black 0.5pt; border-bottom: solid black 0.5pt; border-right: solid black 0.5pt;">(A V B) Λ C</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid black 0.5pt; border-right: solid black 0.5pt;">(A Λ C) V (B Λ C)</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid black 0.5pt; border-bottom: solid black 0.5pt; border-right: solid black 0.5pt;">A Λ (B V C Λ D)</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid black 0.5pt; border-right: solid black 0.5pt;">(A Λ B) V (A Λ (C Λ D))</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid black 0.5pt; border-bottom: solid black 0.5pt; border-right: solid black 0.5pt;">¬(A Λ B)</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid black 0.5pt; border-right: solid black 0.5pt;">¬A V ¬B</td>
</tr>
</tbody>
</table>
</div>
<p>İki gösterimin doğruluğunun tespiti. Yani verilen bir boole cebiri diziliminin gerçekten CNF veya DNF olduğunun sınanması, veya verilen bir denklemin sonucunun doğru (true) veya yanlış (false) olarak bulunabilmesi, bu denklemdeki lafzi terim (literal) sayısına bağlıdır. Örneğin 3CNF bir denklemin, yani sadece 3 terimin conjunction (ve bağlacı ile bağlanmasından) oluşan bir denklemin karmaşıklığı NP-Complete olurken, bu terim sayısı 2&#8242;ye indirildiğinde yani 2CNF bir denklem söz konusu olduğunda, karmaşıklık P zamanda (polinom zamanda) çözülebilmektedir.<br />
Daha detaylı bilgi için ikili tatmin problemleri (boolean satisfaction problem) başlıklı yazıyı okuyabilirsiniz. </p>

<p class="sayac_bilgi">380 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2010/07/02/veveya-baglaci-normal-seklleri-conjunction-disjunction-normal-form/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CYK Parçalama</title>
		<link>http://www.bilgisayarkavramlari.com/2010/05/29/cyk-parcalama/</link>
		<comments>http://www.bilgisayarkavramlari.com/2010/05/29/cyk-parcalama/#comments</comments>
		<pubDate>Sat, 29 May 2010 12:31:26 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Automata (otomatlar, özdevinirler)]]></category>
		<category><![CDATA[CFG]]></category>
		<category><![CDATA[CFL]]></category>
		<category><![CDATA[cyk]]></category>
		<category><![CDATA[parse]]></category>
		<category><![CDATA[parse tree]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2010/05/29/cyk-parcalama/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER CYK parçalama algoritması (parse algorithm), verilen girdinin (input), bir içerikten bağımsız dil (context free language) için nasıl parçalanabileceğini gösterir. CYK algoritmasının ismi, algoritmayı bulan kişilerin baş harflerinden oluşur: Cocke–Younger–Kasami. Algoritmadaki amaç, içerikten bağımsız dilin üretebileceği parçalama ağaçlarını veya alternatif parçalama yöntemlerini gösterebilmektir. Bu durumu bir örnek üzerinden anlatmaya çalışalım: Örnek [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>CYK parçalama algoritması (parse algorithm), verilen girdinin (input), <a href="http://www.bilgisayarkavramlari.com/2009/03/20/icerikten-bagimsiz-dil-context-free-language/">bir içerikten bağımsız dil (context free language)</a> için nasıl parçalanabileceğini gösterir. CYK algoritmasının ismi, algoritmayı bulan kişilerin baş harflerinden oluşur: Cocke–Younger–Kasami.</p>
<p>Algoritmadaki amaç, içerikten bağımsız dilin üretebileceği parçalama ağaçlarını veya alternatif parçalama yöntemlerini gösterebilmektir.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/plugins/flash-video-player/default_video_player.gif" /></p>
<p>Bu durumu bir örnek üzerinden anlatmaya çalışalım:</p>
<p>Örnek olarak aşağıdaki içerikten bağımsız dili ele alalım:</p>
<p>S -&gt; AB | SA</p>
<p>A -&gt; BA | CB | a</p>
<p>B -&gt; CC | b</p>
<p>C -&gt; SS | AC|a</p>
<p>Yukarıdaki bu dil için örnek girdimiz (input) : &#8220;ababa&#8221; olsun ve biz bu girdiyi CYK algoritmasına göre parçalamaya çalışalım:</p>
<p>Bu durumu bir tablo yardımıyla yapıyoruz.</p>
<p>Tablomuz, girdimizin uzunluğu 5 olduğu için, 5&#215;5 boyutlarında oluyor:</p>
<table style="border-collapse: collapse;" border="0">
<colgroup>
<col style="width: 56px;"></col>
<col style="width: 57px;"></col>
<col style="width: 57px;"></col>
<col style="width: 47px;"></col>
<col style="width: 47px;"></col>
</colgroup>
<tbody>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid 0.5pt; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid 0.5pt; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid 0.5pt; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid 0.5pt; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border: none;">a</td>
<td style="padding-left: 7px; padding-right: 7px; border: none;">b</td>
<td style="padding-left: 7px; padding-right: 7px; border: none;">a</td>
<td style="padding-left: 7px; padding-right: 7px; border: none;">b</td>
<td style="padding-left: 7px; padding-right: 7px; border: none;">a</td>
</tr>
</tbody>
</table>
<p>Yukarıda görüldüğü üzere bir tablo oluşturduk ve bu tablonun her sütunun altına, girdimizdeki bir harfi yerleştirdik.</p>
<p>CYK algoritması, bu tablo üzerinde bir merdivenin basamaklarını tırmanır gibi sırasıyla her seviyede, altında kalan kelimeyi bulacaktır.</p>
<p>Bu durum aşağıdaki tabloda gösterilmiştir:</p>
<table style="border-collapse: collapse;" border="0">
<colgroup>
<col style="width: 56px;"></col>
<col style="width: 57px;"></col>
<col style="width: 57px;"></col>
<col style="width: 47px;"></col>
<col style="width: 47px;"></col>
</colgroup>
<tbody>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border: solid 0.5pt;">ababa</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid 0.5pt; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid 0.5pt; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid 0.5pt; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid 0.5pt; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">abab</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">baba</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">aba</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">bab</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">aba</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">ab</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">ba</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">ab</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">ba</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">a</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">b</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">a</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">b</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">A</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border: none;">a</td>
<td style="padding-left: 7px; padding-right: 7px; border: none;">b</td>
<td style="padding-left: 7px; padding-right: 7px; border: none;">a</td>
<td style="padding-left: 7px; padding-right: 7px; border: none;">b</td>
<td style="padding-left: 7px; padding-right: 7px; border: none;">a</td>
</tr>
</tbody>
</table>
<p>Görüldüğü üzere, tablodaki en üst satırda bütün girdinin parçalanmış hali yer alacaktır. Bunun altında girdi boyutunun bir eksiği, onun altında iki eksiği … nihayet en altta tek boyutlu girdiler yer alacaktır.</p>
<p>CYK algoritmasının amacı bu tek boyutlu girdilerden yukarı doğru girdinin tamamını oluşturmaktır.</p>
<p>Şimdi CYK algoritması ile çalışmaya hazırız, önce her sonlu (terminal) için dilimizde tanımlı devamlıları (non-terminal) yerleştiriyoruz.</p>
<p>Örneğin a harfi için A ve b harfi için B devamlılarını yazabiliriz:</p>
<table style="border-collapse: collapse;" border="0">
<colgroup>
<col style="width: 56px;"></col>
<col style="width: 57px;"></col>
<col style="width: 57px;"></col>
<col style="width: 47px;"></col>
<col style="width: 47px;"></col>
</colgroup>
<tbody>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid 0.5pt; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid 0.5pt; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid 0.5pt; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid 0.5pt; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">A,C</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">B</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">A,C</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">B</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">A,C</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border: none;">a</td>
<td style="padding-left: 7px; padding-right: 7px; border: none;">b</td>
<td style="padding-left: 7px; padding-right: 7px; border: none;">a</td>
<td style="padding-left: 7px; padding-right: 7px; border: none;">b</td>
<td style="padding-left: 7px; padding-right: 7px; border: none;">a</td>
</tr>
</tbody>
</table>
<p>Ardından iki uzunluğundaki kelimelere geçiyoruz.</p>
<p>Örneğin aşağıdaki tabloda gösterilen renkli hücreye gelen değer, bu hücrenin hemen altındaki iki hücrede bulunan terminallerden üretilen değerdir.</p>
<table style="border-collapse: collapse;" border="0">
<colgroup>
<col style="width: 56px;"></col>
<col style="width: 57px;"></col>
<col style="width: 57px;"></col>
<col style="width: 47px;"></col>
<col style="width: 47px;"></col>
</colgroup>
<tbody>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid 0.5pt; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid 0.5pt; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid 0.5pt; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid 0.5pt; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
</tr>
<tr>
<td style="background: red; padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">A,C</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">B</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">A,C</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">B</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">A,C</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border: none;">a</td>
<td style="padding-left: 7px; padding-right: 7px; border: none;">b</td>
<td style="padding-left: 7px; padding-right: 7px; border: none;">a</td>
<td style="padding-left: 7px; padding-right: 7px; border: none;">b</td>
<td style="padding-left: 7px; padding-right: 7px; border: none;">a</td>
</tr>
</tbody>
</table>
<p>Bu hücreye, altında kalan ab girdisinin değeri yazılacaktır. Bu girdiyi belirleyen değer ise a girdisi ve b girdisi için yazılan bir alt satırdaki değerlerdir.</p>
<p>O halde ab girdisi için CFL üzerinde AB, CB aranacak. Bu değerlerden, AB&#8217;ye S, CB&#8217;ye A&#8217;dan ulaşılabiliyor o halde bu hücreye S,A yazıyoruz.</p>
<p>Diğer hücreler de benzer şekilde hesaplanır:</p>
<table style="border-collapse: collapse;" border="0">
<colgroup>
<col style="width: 56px;"></col>
<col style="width: 57px;"></col>
<col style="width: 57px;"></col>
<col style="width: 47px;"></col>
<col style="width: 47px;"></col>
</colgroup>
<tbody>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid 0.5pt; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid 0.5pt; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid 0.5pt; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid 0.5pt; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">S,A</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">A</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">S,A</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">A</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">A,C</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">B</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">A,C</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">B</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">A,C</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border: none;">a</td>
<td style="padding-left: 7px; padding-right: 7px; border: none;">b</td>
<td style="padding-left: 7px; padding-right: 7px; border: none;">a</td>
<td style="padding-left: 7px; padding-right: 7px; border: none;">b</td>
<td style="padding-left: 7px; padding-right: 7px; border: none;">a</td>
</tr>
</tbody>
</table>
<p>Bir üst satırı da benzer şekilde hesaplayalım. Burada ilk sütuna aba girdisinin sonucu yazılacak. Bu girdi ab + a veya a+ab şeklinde yazılabilir. O halde bir önceki satırlardan hesapladığımız değerleri bu denkleme yazacak olursak:</p>
<p>ab -&gt; S,A</p>
<p>a -&gt; A,C</p>
<p>ba -&gt; A</p>
<p>b -&gt; B</p>
<p>ihtimaller şunlar olacaktır:</p>
<p>SA,SC,AA,AC,AB</p>
<p>Bu ihtimalleri içeren devamlılar sırasıyla aşağıda verilmiştir:</p>
<p>S , X, X, C ,S</p>
<p>Yukarıdaki satırda bulunan X değerlerine geçiş olmadığı gösterilir. Yani CFL üzerinde SC veya AA sonucuna ulaşılan bir devamlı yoktur.</p>
<p>Diğer hücreleri de aşağıdaki şekilde doldurabiliriz:</p>
<table style="border-collapse: collapse;" border="0">
<colgroup>
<col style="width: 56px;"></col>
<col style="width: 57px;"></col>
<col style="width: 57px;"></col>
<col style="width: 47px;"></col>
<col style="width: 47px;"></col>
</colgroup>
<tbody>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid 0.5pt; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid 0.5pt; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid 0.5pt; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid 0.5pt; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
</tr>
<tr>
<td style="background: red; padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">S,C</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">S,A</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">S,C</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">S,A</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">A</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">S,A</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">A</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">A,C</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">B</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">A,C</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">B</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">A,C</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border: none;">a</td>
<td style="padding-left: 7px; padding-right: 7px; border: none;">b</td>
<td style="padding-left: 7px; padding-right: 7px; border: none;">a</td>
<td style="padding-left: 7px; padding-right: 7px; border: none;">b</td>
<td style="padding-left: 7px; padding-right: 7px; border: none;">a</td>
</tr>
</tbody>
</table>
<p>Bir üst satırda ilk hücre için bakılacak alternatifler aşağıdadır:</p>
<p>aba+b veya a + bab</p>
<p>bu alternatiflerden aba + b için : S,C + B -&gt; SB, CB</p>
<p>diğer alternatif olan a +bab için A,C + S,A -&gt; AS, CS, AA, CA</p>
<p>Toplamda alternatiflerimiz : SB, CB, AS, CS, AA, CA</p>
<p>Bu alternatiflerin dilimizdeki tanımlarına bakarsak : X, A, X, X, X, X</p>
<p>Sadece A sonucu çıkar.</p>
<table style="border-collapse: collapse;" border="0">
<colgroup>
<col style="width: 56px;"></col>
<col style="width: 57px;"></col>
<col style="width: 57px;"></col>
<col style="width: 47px;"></col>
<col style="width: 47px;"></col>
</colgroup>
<tbody>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid 0.5pt; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid 0.5pt; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid 0.5pt; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid 0.5pt; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
</tr>
<tr>
<td style="background: red; padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">A</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">S,C</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">S,A</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">S,C</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">S,A</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">A</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">S,A</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">A</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">A,C</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">B</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">A,C</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">B</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">A,C</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border: none;">a</td>
<td style="padding-left: 7px; padding-right: 7px; border: none;">b</td>
<td style="padding-left: 7px; padding-right: 7px; border: none;">a</td>
<td style="padding-left: 7px; padding-right: 7px; border: none;">b</td>
<td style="padding-left: 7px; padding-right: 7px; border: none;">a</td>
</tr>
</tbody>
</table>
<p>Bir yanındaki sütun için alternatiflerimiz : BS, BC, SA, SC, AA, AC</p>
<p>Bu alternatiflerin dilimizdeki tanımları: X, X, S, X, X, C</p>
<p>Sonuç olarak S,C bulunur:</p>
<table style="border-collapse: collapse;" border="0">
<colgroup>
<col style="width: 56px;"></col>
<col style="width: 57px;"></col>
<col style="width: 57px;"></col>
<col style="width: 47px;"></col>
<col style="width: 47px;"></col>
</colgroup>
<tbody>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid 0.5pt; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid 0.5pt; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid 0.5pt; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid 0.5pt; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">A</td>
<td style="background: red; padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">S,C</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">S,C</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">S,A</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">S,C</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">S,A</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">A</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">S,A</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">A</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">A,C</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">B</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">A,C</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">B</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">A,C</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border: none;">a</td>
<td style="padding-left: 7px; padding-right: 7px; border: none;">b</td>
<td style="padding-left: 7px; padding-right: 7px; border: none;">a</td>
<td style="padding-left: 7px; padding-right: 7px; border: none;">b</td>
<td style="padding-left: 7px; padding-right: 7px; border: none;">a</td>
</tr>
</tbody>
</table>
<p>Son satırımızdaki ihtimaller ise:</p>
<p>a+baba : AS, AC, CS, CC</p>
<p>abab+a : AA, AC</p>
<p>Bütün ihtimaller bu durumda: AS, AC, CS, CC, AA</p>
<p>Bu ihtimallerin dilde tanımları : X, C, X, B, X</p>
<p>Dolayısıyla bu hücrenin değeri CB olarak bulunur.</p>
<table style="border-collapse: collapse;" border="0">
<colgroup>
<col style="width: 56px;"></col>
<col style="width: 57px;"></col>
<col style="width: 57px;"></col>
<col style="width: 47px;"></col>
<col style="width: 47px;"></col>
</colgroup>
<tbody>
<tr>
<td style="background: red; padding-left: 7px; padding-right: 7px; border: solid 0.5pt;">C,B</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid 0.5pt; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid 0.5pt; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid 0.5pt; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid 0.5pt; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">A</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">S,C</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">S,C</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">S,A</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">S,C</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">S,A</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">A</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">S,A</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">A</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">A,C</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">B</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">A,C</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">B</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">A,C</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border: none;">a</td>
<td style="padding-left: 7px; padding-right: 7px; border: none;">b</td>
<td style="padding-left: 7px; padding-right: 7px; border: none;">a</td>
<td style="padding-left: 7px; padding-right: 7px; border: none;">b</td>
<td style="padding-left: 7px; padding-right: 7px; border: none;">a</td>
</tr>
</tbody>
</table>
<p>Yukarıdaki bu tablo bize, örnek girdinin parçalanması için alternatif yolları göstermektedir.</p>
<p>Örneğin girdimiz ababa ise, bu girdi için C veya B&#8217;den başlanarak parçalama yapılmalıdır. Örneğin dilimiz, S ile başlamak zorundaysa bu girdi parçalanamaz.</p>
<p>Yukarıdaki bu tablonun bir <a href="http://www.bilgisayarkavramlari.com/2008/12/09/parcalama-agaci-parse-tree/">parçalama ağacı (parse tree)</a> şeklinde çizimi aşağıdadır:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/052910_1231_CYKParalama1.png" alt="" /><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/052910_1231_CYKParalama2.png" alt="" /></p>
<p>Yukarıdaki şekilde C veya B ile başlayan iki ayrı <a href="http://www.bilgisayarkavramlari.com/2008/12/09/parcalama-agaci-parse-tree/">parçalama ağacı (parse tree)</a> örneği gösterilmiştir.</p>
<p>İki taraftan da ababa sonucuna ulaşıldığı görülebilir. Elbette bu parçalama işlemi sırasında farklı alt dallardan da dolaşılması söz konusu olabilir. Örneğin turuncu renke gösterilen A düğümünü ele alalım. Bu düğüm A-&gt;AB şeklinde açılmıştır. Oysaki aynı düğümün CB şeklinde açılıp buradan da &#8220;ab&#8221; girdisine indirilmesi mümkün olabilirdi.</p>

<p class="sayac_bilgi">642 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2010/05/29/cyk-parcalama/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DFA Metin Arama Algoritması (DFA Text Search)</title>
		<link>http://www.bilgisayarkavramlari.com/2009/11/24/dfa-metin-arama-algoritmasi-dfa-text-search/</link>
		<comments>http://www.bilgisayarkavramlari.com/2009/11/24/dfa-metin-arama-algoritmasi-dfa-text-search/#comments</comments>
		<pubDate>Tue, 24 Nov 2009 04:29:40 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[algoritma analizi (teory of algorithms)]]></category>
		<category><![CDATA[Automata (otomatlar, özdevinirler)]]></category>
		<category><![CDATA[C/C++]]></category>
		<category><![CDATA[Programlama Dilleri]]></category>
		<category><![CDATA[Veri Sıkıştırma (Data Compression)]]></category>
		<category><![CDATA[veri yapıları]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2009/11/24/dfa-metin-arama-algoritmasi-dfa-text-search/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER 1. Otomatın İnşası 2. Algoritmanın arama aşaması 3. Algoritmanın çalışması 4. Algoritmanın kodlanması Bilgisayar bilimlerinde, bir metnin içerisinde farklı bir metnin veya bir kelimenin aranması sırasında kullanılan algoritmalardan birisidir. Algoritma, aranan kelime için bir otomat (automaton) oluşturur ve hedef metin içerisinde bu otomata göre arama işlemi yapar. Oluşturulana otomatın DFA [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p class="shutter"><a href="#1">1. Otomatın İnşası</a><br />
<a href="#2">2. Algoritmanın arama aşaması</a><br />
<a href="#3">3. Algoritmanın çalışması</a><br />
<a href="#4">4. Algoritmanın kodlanması</a></p>
<p>Bilgisayar bilimlerinde, bir metnin içerisinde farklı bir metnin veya bir kelimenin aranması sırasında kullanılan algoritmalardan birisidir. Algoritma, aranan kelime için bir <a href="http://www.bilgisayarkavramlari.com/2008/08/02/sonlu-ototmatlar-finite-automaton/">otomat (automaton)</a> oluşturur ve hedef metin içerisinde bu otomata göre arama işlemi yapar.</p>
<p>Oluşturulana otomatın <a href="http://www.bilgisayarkavramlari.com/2008/11/11/belirli-sonlu-otomat-deterministic-finite-automat/">DFA (deterministic finite automaton, belirli sonlu otomat)</a> olması gerekmektedir.</p>
<p>Algoritmanın çalışması iki aşamada incelenebilir:</p>
<ul>
<li>Aranan kelimeye özgü bir otomatın inşa edilmesi</li>
<li>İnşa edilen bu otomatın bir metin içerisinde arama işlemi için kullanılması</li>
</ul>
<p>Yukarıdaki bu adımları sırasıyla anlatmaya çalışalım ve ayrıca performanslarını inceleyelim.</p>
<p><strong><a name="1"></a>Otomatın inşası<br />
</strong></p>
<p>Bilindiği üzere bir DFA ifade edilirken şu dört terimden faydalanılır: <strong><em>A</em></strong>(<em>x</em>) =(<strong><em>Q</em></strong>, <em>q</em><sub>0</sub>, <strong><em>T</em></strong>, <strong><em>E</em></strong>). Bu tanımın üzerinde arama yapacağı dili x harfleri kümesinden oluşan <a href="http://www.bilgisayarkavramlari.com/2008/08/02/alfabe-abece-alphabet/">bir dil (language)</a> (<img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/112409_0429_DFAMetinAra1.gif" alt="" /><sup>*</sup><em>x) olarak tanımlarsak, otomatı oluşturan b</em>u terimlerin metin arama işlemi için uyarlanmış hallerini şöyle açıklayabiliriz.</p>
<ul>
<li>Q kümesi x harflerinden oluşan ve bütün olasılıkları ifade eden kümedir ve <strong><em>Q</em></strong>={<img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/112409_0429_DFAMetinAra2.gif" alt="" />, <em>x</em>[0], <em>x</em>[0 .. 1], &#8230; , <em>x</em>[0 .. <em>m</em>-2], <em>x</em>} olarak gösterilebilir.</li>
<li><em>q</em><sub>0</sub>, otomatın başlangıç terimidir ve başlangıçta otomatta boş küme olduğunu düşünürsek <em>q</em><sub>0</sub>=<img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/112409_0429_DFAMetinAra3.gif" alt="" />; olarak gösterilebilir.</li>
<li>T, otomatın üzerinde tanımlı olduğu dili oluşturan sembolleri gösterir. Bu örnekte dilimizin <img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/112409_0429_DFAMetinAra4.gif" alt="" /><sup>*</sup><em>x</em> şeklinde tanımlı olmasından dolayı T = {x} olarak gösterilebilir.</li>
<li>Son olarak E teriminin tanımını Q kümesinde tanımlı bütün &#8220;q&#8221; değerleri ve <img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/112409_0429_DFAMetinAra5.gif" alt="" /> dilinde tanımlı herhangi bir &#8220;a&#8221; terimi için (<em>q</em>, <em>a</em>, <em>qa</em>) şeklinde tanımlayabiliriz. Bu tanımın doğruluğu, &#8220;a&#8221; değerinin &#8220;x&#8221; değerinin bir ön eki olması şartına bağlayabiliriz. Şayet bir ön ek olarak kabul edilmezse, yine (q,a,p) üçlüsünün E kümesinde olması şartıyla, p değeri x&#8217;in bir ön eki olan qa için en uzun ek olur.</li>
</ul>
<p>Yukarıdaki otomat inşa edilirken m uzunluğunda bir kelime olduğu kabul edilirse (ki yukarıdaki Q kümesinin elemanları bu uzunlukta verilmiştir) inşa için gereken süre O( m + r) ve inşa için gereken hafıza ise O(mr) olarak hesaplanabilir.</p>
<p><strong><a name="2"></a>Algoritmanın araması<br />
</strong></p>
<p>Algoritma, yukarıdaki şekilde bir DFA inşa ettikten sonra bu DFA&#8217;i kullanarak hedef metin içerisinde arama yapar. Bu arama işlemi n boyutundaki bir metin için O(n) zamanda yapılabilir.</p>
<p>Bu arama işleminin çalışmasını bir örnek üzerinden inceleyelim.</p>
<p><strong><a name="3"></a>Algoritmanın çalışması<br />
</strong></p>
<p>Örnek olarak &#8220;bilgi&#8221; kelimesini &#8220;bilbilgisayarkavramlari&#8221; metninin içerisinde aramaya çalışalım.</p>
<p>Öncelikle kelimemiz için bir <a href="http://www.bilgisayarkavramlari.com/2008/11/11/belirli-sonlu-otomat-deterministic-finite-automat/">belirli otomat (DFA)</a> oluşturmamız gerekiyor.</p>
<p>Dilimizdeki (<img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/112409_0429_DFAMetinAra6.gif" alt="" /><sup>*</sup><em>x) alfabemizi tanımlayacak olursak:<br />
</em></p>
<p><em>{a,b,g,i,k,l,m,r,s,v,y} harflerinden oluşan bir dil olarak tanımlanabilir.<br />
</em></p>
<p>Bu dil üzerinde belirli bir sonlu otomat &#8220;bilgi&#8221; kelimesi için aşağıdaki şekilde inşa edilebilir:</p>
<p>d 0 { a -&gt; 0 b -&gt; 1 g -&gt; 0 i -&gt; 0 k -&gt; 0 l -&gt; 0 m -&gt; 0 r -&gt; 0 s -&gt; 0 v -&gt; 0 y -&gt; 0 }</p>
<p>d 1 { a -&gt; 0 b -&gt; 1 g -&gt; 0 i -&gt; 2 k -&gt; 0 l -&gt; 0 m -&gt; 0 r -&gt; 0 s -&gt; 0 v -&gt; 0 y -&gt; 0 }</p>
<p>d 2 { a -&gt; 0 b -&gt; 1 g -&gt; 0 i -&gt; 0 k -&gt; 0 l -&gt; 3 m -&gt; 0 r -&gt; 0 s -&gt; 0 v -&gt; 0 y -&gt; 0 }</p>
<p>d 3 { a -&gt; 0 b -&gt; 1 g -&gt; 4 i -&gt; 0 k -&gt; 0 l -&gt; 0 m -&gt; 0 r -&gt; 0 s -&gt; 0 v -&gt; 0 y -&gt; 0 }</p>
<p>d 4 { a -&gt; 0 b -&gt; 1 g -&gt; 0 i -&gt; 5 k -&gt; 0 l -&gt; 0 m -&gt; 0 r -&gt; 0 s -&gt; 0 v -&gt; 0 y -&gt; 0 }</p>
<p>d 5 { a -&gt; 0 b -&gt; 1 g -&gt; 0 i -&gt; 0 k -&gt; 0 l -&gt; 0 m -&gt; 0 r -&gt; 0 s -&gt; 0 v -&gt; 0 y -&gt; 0 }</p>
<p>Yukarıda verilen durumlar için gidilecek durumlar listelenmiştir. Bu otomatı daha iyi anlayabilmek için aşağıdaki şekilde çizebiliriz:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/112409_0429_DFAMetinAra7.png" alt="" /></p>
<p>Yukarıdaki otomatta, 0. Durum başlangıç durumu olmaktadır. Ayrıca 5. Duruma her ulaşılmasında aranan metin bulunmuş demektir.</p>
<p>Yukarıdaki otomatın örnek metin üzerindeki çalışmasını adım adım açıklamaya çalışalım:</p>
<pre>bilbilgisayarkavramlari</pre>
<pre>  |</pre>
<p>İlk olarak hedef metinden b harfi alınıyor. Bu harf otomatımızın ilk geçişine tekabül ediyor ve dolayısıyla 0. Durumdan 1. Duruma geçiyoruz.</p>
<p>Geçiş: 0.b -&gt; b</p>
<p>1. durumdayken ikinci harfi hedef metinden okuyoruz:</p>
<pre>  Bilbilgisayarkavramlari</pre>
<pre>   |</pre>
<p>Şu anda 1. Durumdan 2. Duruma geçmek için şartımız oluştu</p>
<p>Geçiş: b.i -&gt; bi</p>
<p>Bu işlem aşağıdaki şekilde devam ettirilir:</p>
<pre>  BIlbilgisayarkavramlari</pre>
<pre>    |</pre>
<pre>  Geçiş: bi.l -&gt; bil</pre>
<pre>  BILbilgisayarkavramlari</pre>
<pre>     |</pre>
<pre>  Geçiş: bil.b -&gt; b</pre>
<p>Yeni gelen harf, otomattaki 3. Durumdan 1. Duruma dönmeyi gerektiren b harfidir. Dolayısıyla aradığımız kelimenin ilk 3 harfi bulunmasına karşılık kelimenin tamamı bulunamamış ve başa dönülmüştür.</p>
<pre>  bilBilgisayarkavramlari</pre>
<pre>      |</pre>
<pre>  Geçiş: b.i -&gt; bi</pre>
<pre>  bilBIlgisayarkavramlari</pre>
<pre>       |</pre>
<pre>  Geçiş: bi.l -&gt; bil</pre>
<pre>  bilBILgisayarkavramlari</pre>
<pre>        |</pre>
<pre>  Geçiş: bil.g -&gt; bilg</pre>
<pre>  bilBILGisayarkavramlari</pre>
<pre>         |</pre>
<pre>  Geçiş: bilg.i -&gt; bilgi</pre>
<pre>  bilBILGIsayarkavramlari</pre>
<pre>          |</pre>
<pre>  Geçiş: bilgi.s -&gt; 0</pre>
<pre>  bilBILGIsayarkavramlari</pre>
<pre>           |</pre>
<pre>  Geçiş: 0.a -&gt; 0</pre>
<pre>  bilBILGIsayarkavramlari</pre>
<pre>            |</pre>
<pre>  Geçiş: 0.y -&gt; 0</pre>
<pre>  bilBILGIsayarkavramlari</pre>
<pre>             |</pre>
<pre>  Geçiş: 0.a -&gt; 0</pre>
<pre>  bilBILGIsayarkavramlari</pre>
<pre>              |</pre>
<pre>  Geçiş: 0.r -&gt; 0</pre>
<pre>  bilBILGIsayarkavramlari</pre>
<pre>               |</pre>
<pre>  Geçiş: 0.k -&gt; 0</pre>
<pre>  bilBILGIsayarkavramlari</pre>
<pre>                |</pre>
<pre>  Geçiş: 0.a -&gt; 0</pre>
<pre>  bilBILGIsayarkavramlari</pre>
<pre>                 |</pre>
<pre>  Geçiş: 0.v -&gt; 0</pre>
<pre>  bilBILGIsayarkavramlari</pre>
<pre>                  |</pre>
<pre>  Geçiş: 0.r -&gt; 0</pre>
<pre>  bilBILGIsayarkavramlari</pre>
<pre>                   |</pre>
<pre>  Geçiş: 0.a -&gt; 0</pre>
<pre>  bilBILGIsayarkavramlari</pre>
<pre>                    |</pre>
<pre>  Geçiş: 0.m -&gt; 0</pre>
<pre>  bilBILGIsayarkavramlari</pre>
<pre>                     |</pre>
<pre>  Geçiş: 0.l -&gt; 0</pre>
<pre>  bilBILGIsayarkavramlari</pre>
<pre>                      |</pre>
<pre>  Geçiş: 0.a -&gt; 0</pre>
<pre>  bilBILGIsayarkavramlari</pre>
<pre>                       |</pre>
<pre>  Geçiş: 0.r -&gt; 0</pre>
<pre>  bilBILGIsayarkavramlari</pre>
<pre>                        |</pre>
<pre>  Geçiş: 0.i -&gt; 0</pre>
<p>Sonuç olarak, yukarıdaki büyük harfle gösterilen alanda, aranan kelime bulunmuştur.</p>
<p><strong><a name="4"></a>Algoritmanın kodlanması<br />
</strong></p>
<p>Algoritmanın kodu C dili için aşağıdaki şekilde yazılabilir.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/112409_0429_DFAMetinAra9.png" alt="" /></p>
<p>Yukarıdaki kodda, arama işlemini yapan ana fonksiyon, otomat fonksiyonudur. Arama işlemi sırasında bu fonksiyon çağrılarak işlem başlatılır. Bu fonksiyonun otomatı inşa etmek için kullandığı inşa fonksiyonu, kodun 27. Satırında çağrılmıştır. Bu çağırma işleminden önce bir otomaton oluşturulmuş ve <a href="http://www.bilgisayarkavramlari.com/2009/01/12/atif-ile-cagirma-call-by-reference/">atıf ile çağırma (call by reference)</a> kullanılarak inşa fonksiyonuna geçirilmiştir.</p>
<p>Kod, 8 ile 14. Satırlar arasında bir DFA inşa etmekte ve 30 ile 33. Satırlar arasında ise bu otomatı kullanarak hedef metin içerisinde arama yapmaktadır.</p>

<p class="sayac_bilgi">402 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2009/11/24/dfa-metin-arama-algoritmasi-dfa-text-search/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Push Down Automata</title>
		<link>http://www.bilgisayarkavramlari.com/2009/09/15/push-down-automata/</link>
		<comments>http://www.bilgisayarkavramlari.com/2009/09/15/push-down-automata/#comments</comments>
		<pubDate>Tue, 15 Sep 2009 14:33:51 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[algoritma analizi (teory of algorithms)]]></category>
		<category><![CDATA[Automata (otomatlar, özdevinirler)]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2009/09/15/push-down-automata/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Aşağı sürüklemeli otomatlar (push down automaton) yapı olarak birer otomat makineleridir. Normal bir sonlu otomattan farkı, belirli (deterministic) olması ve ilave bir yığın (stack) bulundurmasıdır. Yani makinemiz basitçe her adımda ne yapacağından tam olarak emindir (belirli ,deterministict) ve veri depolamak için hafızada bulunan bir yığından (stack) istifade edebilir. Düzeltme (Tarık [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Aşağı sürüklemeli otomatlar (push down automaton) yapı olarak birer otomat makineleridir. <span style="text-decoration: line-through;">Normal bir sonlu otomattan farkı, belirli (deterministic) olması ve ilave bir yığın (stack) bulundurmasıdır. Yani makinemiz basitçe her adımda ne yapacağından tam olarak emindir (belirli ,deterministict) ve veri depolamak için hafızada bulunan bir yığından (stack) istifade edebilir. </span>Düzeltme (Tarık Bey&#8217;e teşekkürler): PDA&#8217;ler için kullanılan otomata (automaton) göre belirli (deterministic) veya belirsiz (nondeterministic) olma ihtimali vardır. Yani kullanılan <a href="http://www.bilgisayarkavramlari.com/2008/11/11/belirli-sonlu-otomat-deterministic-finite-automat/">otomat belirliyse (Deterministic)</a> bu PDA  de belirli aşağı sürüklemeli otomat ( Deterministic Push Down Automaton DPDA) olarak isimlendirilir. Şayet tersine kullanılan <a href="http://www.bilgisayarkavramlari.com/2008/11/11/belirsiz-sonlu-otomat-nondeterministic-finite-automat-nfa/">otomat belirsizse (non deterministic)</a> bu durumda otomat, belirsiz aşağı sürüklemeli otomat (NonDeterministic PushDownAutomata NPDA) olarak isimlendirilir. Bir sonlu otomattan (finite state machine) farkı ise <a href="http://www.bilgisayarkavramlari.com/2007/05/04/stack-yigin/">yığın (stack)</a> kullanılmasıdır.</p>
<p>Bilindiği üzere <a href="http://www.bilgisayarkavramlari.com/2007/05/04/stack-yigin/">yığın (stack)</a> yapısının temel iki fonksiyonu bulunur. Koyma (push) ve alma (pop) işlemleri isimlerinden de anlaşılacağı üzere yığına koyma ve yığından bir veriyi alma işlemini gerçekleştirir.  PDA içerisinde bu fonksiyonlar aynen bulunur. Buna ilave olarak bir pda&#8217;i açıkça tanımlayabilmek için 6 bilgi gerekir. Bu bilgiler aşağıdaki şekilde gösterilebilir:</p>
<p>(Q,<span style="font-family:Symbol">S</span>,<span style="font-family:Symbol">G</span>, <span style="font-family:Symbol">d</span> ,q<sub>0</sub>,F)</p>
<p>Yukarıdaki satır bir aşağı sürüklemeli otomat için kabul edilen en standart gösterim şeklidir. Kaynaklarda aynı bilgiyi ifade etmek için farklı semboller kullanılmaktadır ancak semboller değişse de pda için bu bilgiler gerekir:</p>
<p>Q: <a href="http://www.bilgisayarkavramlari.com/2008/08/02/sonlu-ototmatlar-finite-automaton/">makinemizde (otomatımızda ,automaton) bulunan durumları (states)</a> gösterir.</p>
<p><span style="font-family:Symbol">S</span>: makinemizin kabul ettiği girişte kullanılabilecek alfabenin (alphabet) kümesidir.</p>
<p><span style="font-family:Symbol">G</span>: <a href="http://www.bilgisayarkavramlari.com/2007/05/04/stack-yigin/">yığında (stack)</a> kullanılabilecek <a href="http://www.bilgisayarkavramlari.com/2008/08/02/alfabe-abece-alphabet/">alfabenin (alphabet)</a> kümesidir.</p>
<p><span style="font-family:Symbol">d</span>: Q ile gösterilen durumlar (states) arasındaki geçişlerin kümesidir.</p>
<p>q<sub>0</sub>: başlangıç durumudur ( initial state)</p>
<p>F: Bitiş durumudur (final state)</p>
<p>Yukarıdaki bu akademik gösterim ile neyin kastedildiğini bir örnek üzerinden anlamaya çalışalım. Örnek olarak çok klasik bir makine olan 0<sup>n</sup>1<sup> n</sup> probleminin çözüm makinesini pda olarak göstermek isteyelim.  Diğer bir deyişle makinemiz bir giriş kelimesini alacak ve bu kelimedeki 0&#8242;ların sayısı 1&#8242;lerin sayısına eşitse ve o&#8217;lar 1&#8242;lerden önce geliyorsa bu kelimeyi kabul edecek, şayet 0&#8242;ların sayısı ve 1&#8242;lerin sayısı eşit değil veya sıralamada bir hata varsa bu girdiyi kabul etmeyecek.</p>
<p>Çözmeye çalıştığımız problemi daha iyi anlayabilmek için bir iki girdinin kabul edilip edilmeyeceğini inceleyelim:</p>
<p><span style="font-family:Symbol">l</span> : kabul, n= 0 için doğru (burada <span style="font-family:Symbol">l</span> sembolü ile boş girdi kastedilmiştir)</p>
<p>01 : kabul , n = 1 için doğru</p>
<p>10 : ret , sıralama hatası, 0&#8242;lar 1&#8242;lerin önünde olmalı</p>
<p>0011: kabul n = 2 için doğru</p>
<p>0101 : ret, sıralama hatası , bütün 0&#8242;lar, 1&#8242;lerin önünde olmalı</p>
<p>00011: ret, 0&#8242;ların sayısı ile 1&#8242;lerin sayısı tutmuyor</p>
<p>Şimdi yukarıdaki problemin çözümü olan aşağı sürüklemeli otomatımızı tasarlayalım. Yukarıdaki tanımda 6 unsurun bulunması gerektiğinden bahsetmiştik. Sırayla bunlara cevap arayalım.  Önce makinemizi tasarlayarak başlayalım. Makinenin tasarımı için bir <a href="http://www.bilgisayarkavramlari.com/2007/05/04/stack-yigin/">yığın (stack)</a> kullanacağız. Biliyoruz ki şayet makineye gelen 0&#8242;ları sırasıyla koyarsak (push) ve 0&#8242;lar bittikten sonra gelen her 1 için yığından bir eleman alırsak (pop) bu durumda makine girdi kelimesi bittiğinde yığını boş bulursa (yığındaki harfler ile girdideki harfler aynı anda biterse) kelimeyi kabul edecek aksi halde reddedecektir.</p>
<p>Bu tasarımı bir iki örnek ile anlamaya çalışalım. Örneğin girdimiz 0011 olsun.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/101209_1622_PushDownAut1.png" alt="" /></p>
<p>İlk durumda makinemiz girdinin ilk harfi olan 0&#8242;ı okuyacak ve 0 gördükçe yığına koyacak (push)</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/101209_1622_PushDownAut3.png" alt="" /></p>
<p>Yığına 0&#8242;ları koyduktan sonra her gördüğü 1 için yığından bir 0 çıkaracak (pop):</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/101209_1622_PushDownAut5.png" alt="" /></p>
<p>Görüldüğü üzere 2 adet 1 harfi için 2 adet 0 harfi yığından çıkarılmıştır (pop) ve sonuçta girdi kelimenin sonuna ulaşılmış ve yığında aynı anda boşalmıştır. Dolayısıyla 0011 kelimesini kabul ederiz.</p>
<p>Bu yazı şadi evren şeker tarafından yazılmış ve bilgisayarkavramlari.com sitesinde yayınlanmıştır. Bu içeriğin kopyalanması veya farklı bir sitede yayınlanması hırsızlıktır ve telif hakları yasası gereği suçtur.</p>
<p>Benzer makinemiz için bu sefer reddedilecek bir girdiyi tecrübe edelim. Misal girdimiz 001 olsaydı ne olurdu?</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/101209_1622_PushDownAut7.png" alt="" /></p>
<p>İlk durumda makinemiz girdinin ilk harfi olan 0&#8242;ı okuyacak ve 0 gördükçe yığına koyacak (push)</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/101209_1622_PushDownAut9.png" alt="" /></p>
<p>Yığına 0&#8242;ları koyduktan sonra her gördüğü 1 için yığından bir 0 çıkaracak (pop):</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/101209_1622_PushDownAut11.png" alt="" /></p>
<p>Görüldüğü üzere girdi kelimesinin sonuna gelindiğinde hâlâ yığında bir harf bulunmakta bu durumda girdiyi reddetmek zorundayız.</p>
<p>Farklı bir örnek olarak 0101 girdisini tecrübe edelim:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/101209_1622_PushDownAut13.png" alt="" /></p>
<p>İlk durumda makinemiz girdinin ilk harfi olan 0&#8242;ı okuyacak ve 0 gördükçe yığına koyacak (push)</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/101209_1622_PushDownAut15.png" alt="" /></p>
<p>Yığına 0&#8242;ları koyduktan sonra her gördüğü 1 için yığından bir 0 çıkaracak (pop):</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/101209_1622_PushDownAut17.png" alt="" /></p>
<p>Bu defa sıfırları yığına koyup ardından her 1 için bir çıkarma (pop) işlemi yaptıktan sonra hâlâ girdi kelimesinin bitmediğini görüyoruz. Bu durumda girdi kelimemizi kabul etmiyoruz.</p>
<p>Tasarımını ve testini yaptığımız yukarıdaki makinemizi bir sonlu durum makinesi olarak çizmek istersek aşağıdaki şekli elde ederiz:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/101209_1622_PushDownAut19.png" alt="" /></p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/09/091509-1433-pushdownaut19.png" alt="" /></p>
<p>Yukarıdaki makine tasarımımızı kısaca gözden geçirecek olursak. Kabul edilen durumlar q<sub>1</sub> ve q<sub>4</sub> durumlarıdır. Yani <span style="font-family:Symbol">l</span> (boş kelime) durumunu kabul için q<sub>1</sub> diğer kabul edilir durumlar için de q<sub>4</sub> durumu (state) tasarlanmıştır. Tasarımda bulunan q<sub>2</sub> durumu  geçiş durumudur. Yani q<sub>2</sub> durumunda bulunduğu sürece makine girdiden bir harf okumakta ve bu harf 0 olmaktadır. Okunan harf 0 olduğu sürece de bu değer <a href="http://www.bilgisayarkavramlari.com/2007/05/04/stack-yigin/">yığına (stack)</a> konulmaktadır (push). Bu durum (yani q<sub>2</sub> durumu) girdiden bir harf olarak 1 gelmesinde bozulur. Şayet girdiden 1 harfi okunursa bu defa durum değiştirilerek q<sub>3</sub> durumuna geçilir ve bu q<sub>3</sub> durumunda da girdiden 1 harfi okundukça yığından 0 harfi çıkarılır (pop).</p>
<p>Son durumda şayet girdi boşsa ve yığın da boşsa q<sub>4</sub> durumuna yani kabul durumuna geçilir. Bunun dışındaki ihtimallerde q<sub>2</sub> yada q<sub>3</sub> gibi kabul edilmeyen bir duruma takılır ve makinemiz girdiyi reddeder.</p>
<p>Bu yazı şadi evren şeker tarafından yazılmış ve bilgisayarkavramlari.com sitesinde yayınlanmıştır. Bu içeriğin kopyalanması veya farklı bir sitede yayınlanması hırsızlıktır ve telif hakları yasası gereği suçtur.</p>
<p>Yukarıdaki makinemiz görüldüğü üzere başarılı bir şekilde çalışıyor. Bu makineyi bir aşağı sürüklemeli otomat (push down automaton) olarak yazacak olursak aşağıdaki tanımları yapmamız gerekir:</p>
<p><span style="font-family:Symbol">S</span>={0,1} olacaktır çünkü girişte ya 0 ya da 1 gelebilmektedir. Bunun dışında bir harfin gelmesi söz konusu değildir.</p>
<p><span style="font-family:Symbol">G</span>={0,#} olacaktır. Burada yığında olabilecek harfler kümesi gösterilirken dikkat edilirse yığına sadece 0 harfini koyuyoruz (istenildiği kadar). Dolayısıyla 1 harfi bu kümede bulunmaz. Bu kümede bulunan # sembolü ise yığının boş olduğunu ifade için konulmuştur. Yani yığın boş olduğunda bunu da bir şekilde göstermemiz gerekir. Bu boş durumu temsilen # sembolü kullanılmıştır. Yine farklı kaynaklarda farklı geçen bir semboldür ancak anlamsal olarak bütün PDA gösterimlerinde böyle bir sembol bulunmalıdır.</p>
<p>Q= { q<sub>1</sub>, q<sub>2</sub>, q<sub>3</sub>, q<sub>4</sub> } olarak yazılabilir çünkü yukarıdaki makine tasarımında da görüldüğü üzere 4 durum bulunmaktadır.</p>
<p>F = { q<sub>1</sub>, q<sub>4</sub> } olarak yazılabilir çünkü yukarıdaki makinede kabul edilen 2 durum vardır ve bunlar da q<sub>1</sub> ve q<sub>4</sub> durumlarıdır.</p>
<p>q<sub>0</sub> = { q<sub>1 </sub>}olarak yazılabilir. Burada şekilden de anlaşılacağı üzere başlangıç durumumuz q<sub>1</sub> durumudur.</p>
<p>Son olarak <a href="http://www.bilgisayarkavramlari.com/2008/08/02/sonlu-ototmatlar-finite-automaton/">sonlu durum makinemizin (finite state machine)</a> tasarımını göstermemiz gerekmektedir. Bu gösterim için yine farklı kaynaklarda farklı yöntemler kullanılmaktadır. Örneğin yukarıdaki şekilde bir sonlu durum makinesi çizilmesi yeterli görülebilirken bazı kaynaklarda aşağıdaki gösterim kullanılmıştır. Hangi gösterim kullanılırsa kullanılsın sonuçta bu adımda anlatılan şey bir sonlu durum makinesidir ve bu makinede bulunan ve makineyi bir PDA yapan ise bir <a href="http://www.bilgisayarkavramlari.com/2007/05/04/stack-yigin/">yığın (stack)</a> kullanılmasıdır.</p>
<div>
<table style="border-collapse:collapse" border="0">
<colgroup>
<col style="width: 64px;"></col>
<col style="width: 64px;"></col>
<col style="width: 64px;"></col>
<col style="width: 64px;"></col>
<col style="width: 64px;"></col>
<col style="width: 64px;"></col>
<col style="width: 64px;"></col>
<col style="width: 64px;"></col>
<col style="width: 64px;"></col>
<col style="width: 64px;"></col>
</colgroup>
<tbody>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt" rowspan="2">Giriş</p>
<p>Yığını</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt" colspan="3">
<p style="text-align: center">0</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt" colspan="3">
<p style="text-align: center">1</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt" colspan="3">
<p style="text-align: center"><span style="font-family:Symbol">l</span></p>
</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 2.25pt; border-right:  solid black 0.5pt">
<p style="text-align: center">0</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 2.25pt; border-right:  solid black 0.5pt">
<p style="text-align: center">#</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 2.25pt; border-right:  solid black 0.5pt">
<p style="text-align: center"><span style="font-family:Symbol">l</span></p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 2.25pt; border-right:  solid black 0.5pt">
<p style="text-align: center">0</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 2.25pt; border-right:  solid black 0.5pt">
<p style="text-align: center">#</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 2.25pt; border-right:  solid black 0.5pt">
<p style="text-align: center"><span style="font-family:Symbol">l</span></p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 2.25pt; border-right:  solid black 0.5pt">
<p style="text-align: center">0</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 2.25pt; border-right:  solid black 0.5pt">
<p style="text-align: center">#</p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 2.25pt; border-right:  solid black 0.5pt">
<p style="text-align: center"><span style="font-family:Symbol">l</span></p>
</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">q<sub>1</sub></td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">q<sub>2</sub>,0</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">q<sub>2</sub></td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">q<sub>3</sub>, <span style="font-family:Symbol">l</span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">q<sub>3</sub></td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">q<sub>3</sub>, <span style="font-family:Symbol">l</span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">q<sub>4</sub>, <span style="font-family:Symbol">l</span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">q<sub>4</sub></td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
</tbody>
</table>
</div>
<p>Yukarıdaki gösterim aslında şekil olarak çizilen sonlu durum makinesini tablo olarak göstermekten başka bir işe yaramaz. Bu tabloda 9 sütün bulunmaktadır. Bunlar sırasıyla 0,1 ve <span style="font-family:Symbol">l</span> durumlarından yine 0,1 ve <span style="font-family:Symbol">l</span> durumlarına geçişleri gösterir. Örneğin tablonun ilk satırı 0&#8242;dan 0 durumuna geçişi son sütünü ise <span style="font-family:Symbol">l</span>&#8216;dan <span style="font-family:Symbol">l</span> durumuna geçişi gösterir.</p>
<p>Tablodaki 4 satır ise makinemizdeki durumları gösterir. Makinenin anlamlı olabilmesi için başlangıç durumunun { q<sub>1 </sub>} olduğunu ve kabul edilir bitiş durumlarının { q<sub>1</sub>, q<sub>4</sub> }  olduğunu bilmek gerekir (ki bu bilgiyi zaten veriyoruz).</p>
<p>Yukarıdaki tablonun okunmasını daha net anlamak için bir örnek durumu inceleyelim. Örneğin makinemiz girdide bulunan bütün 0&#8242;ları okumuş ve yeni bir harf olarak 1 ile karşılaşmış olsun. Bu durumda q<sub>2 </sub>durumundan q<sub>3 </sub>durumuna geçiş yapması gerekir. Şekilde görüldüğü üzere bunu yapacağı tek durum bir 1 okunması halinde q<sub>3</sub> geçmesini söyleyen satırdır.</p>

<p class="sayac_bilgi">889 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2009/09/15/push-down-automata/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Özyineli Geçiş Ağları (Reursive Transition Networks)</title>
		<link>http://www.bilgisayarkavramlari.com/2009/06/29/ozyineli-gecis-aglari-reursive-transition-networks/</link>
		<comments>http://www.bilgisayarkavramlari.com/2009/06/29/ozyineli-gecis-aglari-reursive-transition-networks/#comments</comments>
		<pubDate>Mon, 29 Jun 2009 18:36:30 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Automata (otomatlar, özdevinirler)]]></category>
		<category><![CDATA[Derleyiciler]]></category>
		<category><![CDATA[Doğal Dil İşleme (NLP)]]></category>
		<category><![CDATA[Programlama Dilleri]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/?p=2724</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Veri modellemede kullanılan bir ağ şeklidir. Esas itibariyle içerikten bağımsız dillerin (context free grammers) görsel gösterimi için kullanılabilirler. Ağların yapısı uzatılmış geçiş ağlarına (augmented transition network) benzemekle birlikte en büyük farkı ve isminin özyineli olmasının da sebebi ağın kendini tekrarlama özelliğidir. Daha basitçe bir içerikten bağımsız dil (CFG) S devamlısı [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Veri modellemede kullanılan bir ağ şeklidir. Esas itibariyle <a href="http://www.bilgisayarkavramlari.com/2009/03/20/icerikten-bagimsiz-gramer-context-free-grammer-cfg/">içerikten bağımsız dillerin (context free grammers)</a> görsel gösterimi için kullanılabilirler. Ağların yapısı <a href="http://www.bilgisayarkavramlari.com/2009/06/15/augmented-transition-network-atn-uzatilmis-gecis-agi/">uzatılmış geçiş ağlarına (augmented transition network)</a> benzemekle birlikte en büyük farkı ve isminin özyineli olmasının da sebebi ağın kendini tekrarlama özelliğidir.</p>
<p>Daha basitçe bir <a href="http://www.bilgisayarkavramlari.com/2009/03/20/icerikten-bagimsiz-gramer-context-free-grammer-cfg/">içerikten bağımsız dil (CFG)</a> S devamlısı (nonterminal) ile başlayan bir kurallar listesidir. Bu listedeki her kural bir devamlıdan (nonterminal) bir sonluya (terminal) doğru yapılan bir açıklamadır. Özyineli geçiş ağlarında bu açıklamada (yani <a href="http://www.bilgisayarkavramlari.com/2009/03/20/icerikten-bagimsiz-gramer-context-free-grammer-cfg/">CFG</a> kurallarının sağ tarafında) da S devamlısı (nonterminal) bulunabilmektedir.</p>
<p>Örneğin aşağıdaki kuralları ele alalım:</p>
<p>S → A B</p>
<p>A → a</p>
<p>B → b | S</p>
<p>Yukarıdaki son kuralda S bağlangıç devamlısına bir bağlantı kurulmuştur ve aşağıdaki şekilde görselleştirilebilir:</p>
<p><img class="alignnone size-full wp-image-2725" title="ozyineliaglar" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/06/ozyineliaglar.jpg" alt="ozyineliaglar" width="365" height="350" /></p>
<p>Yukarıdaki ağ yapısı verilen CFG örneğinin çizilmiş halidir. Buradaki çizimden de görüleceği üzere ağ yeniden başa döneme özelliğine sahiptir.</p>
<p>Doğal dil olarak yorumlanacak olursa bir cümlenin içinde alt cümlelerin bulunması bu ağ ile gösterilebilir. Örneğin aşağıdaki örnek cümleyi ele alalım:</p>
<p>Ali geldiğini söylemeyi unuttu.</p>
<p>Yukarıdaki örnekte 3 cümle iç içedir.</p>
<p>Ali gelmek</p>
<p>Ali söylemek</p>
<p>Ali unutmak</p>
<p>Basit bir yaklaşımla bir cümleyi özne &#8211; yüklem olarak tanımlayacak olursak yukarıdaki örnek cümlenin uyduğu yapı aşağıdaki şekilde olabilir:</p>
<p>C: Ö Y</p>
<p>Ö : &#8220;Ali&#8221;</p>
<p>Y: gelmek | söylemek | unutmak</p>
<p>Yukarıdaki CFG yapısını şayet özyineli geçiş ağımız (recursive transition network) ile gösterecek olursak:</p>
<p><img class="alignnone size-full wp-image-2726" title="ozyinesablon" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/06/ozyinesablon.jpg" alt="ozyinesablon" width="233" height="112" /></p>
<p>Örneğin basit bir Özne-Yüklem ilişkisini yukarıdaki şekilde gösterelim. Yani özneleri dikdörtgen ve yüklemleri yuvarlak ile gösterelim. Bu durumda örneğimiz:</p>
<p><img class="alignnone size-full wp-image-2727" title="ozyineornek" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/06/ozyineornek.jpg" alt="ozyineornek" width="548" height="196" /></p>
<p>Görüldüğü üzere özyineli ağımızla gösterilen örnekte unutmak fiilinin başındaki isim kelime grubu &#8220;ali geldiğini söylemeyi&#8221; yine bir cümledir ve yapısı itibariyle bir önceki şekilde gösterilen şablonu içermektedir. Benzer şekilde söylemek fiilinin başındaki isim grubu da bir geçiş ağı (transition network) özelliği taşımaktadır</p>

<p class="sayac_bilgi">113 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2009/06/29/ozyineli-gecis-aglari-reursive-transition-networks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

