<?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>Wed, 18 Aug 2010 21:13:27 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<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[Automata (otomatlar, özdevinirler)]]></category>
		<category><![CDATA[Bilgisayar Matematiği]]></category>
		<category><![CDATA[Bilgisayar Standartları]]></category>
		<category><![CDATA[Programlama Dilleri]]></category>
		<category><![CDATA[algoritma analizi (teory of algorithms)]]></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>
]]></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>
]]></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[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[algoritma analizi (teory of algorithms)]]></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>
]]></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[Automata (otomatlar, özdevinirler)]]></category>
		<category><![CDATA[algoritma analizi (teory of algorithms)]]></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>
]]></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>
]]></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>
		<item>
		<title>Turing Makinesi (Turing Machine)</title>
		<link>http://www.bilgisayarkavramlari.com/2009/06/27/turing-makinesi-turing-machine/</link>
		<comments>http://www.bilgisayarkavramlari.com/2009/06/27/turing-makinesi-turing-machine/#comments</comments>
		<pubDate>Sat, 27 Jun 2009 13:55:12 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Automata (otomatlar, özdevinirler)]]></category>
		<category><![CDATA[Bilgisayar Kavramları]]></category>
		<category><![CDATA[Bilgisayar Standartları]]></category>
		<category><![CDATA[Derleyiciler]]></category>
		<category><![CDATA[Donanım ( Hardware )]]></category>
		<category><![CDATA[Dosya Organizasyonu (File Organisation)]]></category>
		<category><![CDATA[Doğal Dil İşleme (NLP)]]></category>
		<category><![CDATA[Mantık Devreleri (Logic Circuits)]]></category>
		<category><![CDATA[Programlama Dilleri]]></category>
		<category><![CDATA[Sistem Programlama (System Programming)]]></category>
		<category><![CDATA[algoritma analizi (teory of algorithms)]]></category>
		<category><![CDATA[işletim sistemleri]]></category>
		<category><![CDATA[veri yapıları]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/?p=2681</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Bilgisayar bilimlerinin önemli bir kısmını oluşturan otomatlar (Automata) ve Algoritma Analizi (Algorithm analysis) çalıştırmalarının altındaki dil bilimin en temel taşlarından birisidir.1936 yılında Alan Turing tarafından ortaya atılan makine tasarımı günümüzde pekçok teori ve standardın belirlenmesinde önemli rol oynar. Turing Makinesinin Tanımı Basitçe bir kafadan (head) ve bir de teyp bandından [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Bilgisayar bilimlerinin önemli bir kısmını oluşturan <a href="http://www.bilgisayarkavramlari.com/category/automata-otomatlar/">otomatlar (Automata) </a>ve <a href="http://www.bilgisayarkavramlari.com/category/algoritma-analizi-teory-of-algorithms/">Algoritma Analizi (Algorithm analysis) </a>çalıştırmalarının altındaki dil bilimin en temel taşlarından birisidir.1936 yılında Alan Turing tarafından ortaya atılan makine tasarımı günümüzde pekçok teori ve standardın belirlenmesinde önemli rol oynar.</p>
<p><strong>Turing Makinesinin Tanımı</strong></p>
<p>Basitçe bir kafadan (head) ve bir de teyp bandından (tape) oluşan bir makinedir.</p>
<p><img class="alignnone size-full wp-image-2683" title="turingtape" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/06/turingtape.jpg" alt="turingtape" width="425" height="148" /></p>
<p>Makinede yapılabilecek işlemler</p>
<ul>
<li>Yazmak</li>
<li>Okumak</li>
<li>Bandı ileri sarmak</li>
<li>Bandı geri sarmak</li>
</ul>
<p>şeklinde sıralanabilir.</p>
<p><strong>Chomsky hiyerarşisi ve Turing Makinesi</strong></p>
<p>Bütün teori bu basit dört işlem üzerine kurulmuştur ve sadece yukarıdaki bu işlemleri kullanarak bir işin yapılıp yapılamayacağı veya bir dilin bu basit 4 işleme indirgenip indirgenemeyeceğine göre diller ve işlemler tasnif edilmiştir.</p>
<p><img class="alignnone size-full wp-image-2682" title="turingkumesi" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/06/turingkumesi.jpg" alt="turingkumesi" width="496" height="359" /></p>
<p>Bu sınıflandırma yukarıdaki venn şeması ile gösterilmiştir. Aynı zamanda <a href="http://www.bilgisayarkavramlari.com/2009/06/27/chomsky-hiyerarsisi-chomsky-hierarchy/">chomsky hiyerarşisi (chomsky hierarchy)</a> için 1. seviye (type-1) olan ve Turing makinesi ile kabul edilebilen diller bütün tip-2 ve tip-3 dilleri yani içerk bağımsız dilleri ve düzenli dilleri kapsamaktadır. Ayrıca ilave olarak içerik bağımsız dillerin işleyemediği (üretemediği veya parçalayamadığı (parse) ) a<sup>n</sup>b<sup>n</sup>c<sup>n</sup> şeklindeki kelimeleri de işleyebilmektedir.  Düzenli ifadelerin işleyememesi konusunda bilgi için <a href="http://www.bilgisayarkavramlari.com/2009/03/22/duzenli-ifadelerde-pompalama-onsavi-pumping-lemma-for-regular-expressions/">düzenli ifadelerde pompalama savı (pumping lemma in regular expressions)</a> ve <a href="http://www.bilgisayarkavramlari.com/2009/03/22/icerik-bagimsiz-gramerler-icin-pompalama-onsavi-pumping-lemma-for-context-free-grammers/">içerik bağımsız dillerin işlemeyemesi için de içerik bağımsız dillerde pompalama savı (pumping lemma for CFG)</a> başlıklı yazıları okuyabilirsiniz.</p>
<p><strong>Turing Makinesinin Akademik Tanımı</strong></p>
<p>Turing makineleri literatürde akademik olarak aşağıdaki şekilde tanımlanır:</p>
<p><img class="alignnone size-full wp-image-2685" title="turing_akademik" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/06/turing_akademik.jpg" alt="turing_akademik" width="167" height="24" /></p>
<p>Burada M ile gösterilen makinenin parçaları aşağıda listelenmiştir:</p>
<p>Q sembolü sonlu sayıdaki durumların <a href="http://www.bilgisayarkavramlari.com/2009/06/24/kume-teorisi-set-theory/">kümesidir</a>. Yani makinenin işleme sırasında aldığı durumardır.</p>
<p>Γ sembolü dilde bulunan bütün harfleri içeren alfabeyi gösterir. Örneğin ikilik tabandaki sayılar ile işlem yapılıyorsa {0,1} şeklinde kabul edilir.</p>
<p>Σ sembolü ile makineye verilecek girdiler (input)<a href="http://www.bilgisayarkavramlari.com/2009/06/24/kume-teorisi-set-theory/"> kümesi</a> gösterilir. Girdi <a href="http://www.bilgisayarkavramlari.com/2009/06/24/kume-teorisi-set-theory/">kümesi</a> dildeki harfler dışında bir sembol taşıyamayacağı için Σ <span class="b">⊆ </span>Γ demek doğru olur.</p>
<p>δ sembolü dilde bulunan ve makinenin çalışması sırasında kullanacağı geçişleri (transitions) tutmaktadır.</p>
<p><span class="b">◊ sembolü teyp bandı üzerindeki boşlukları ifade etmektedir. Yani teyp üzerinde hiçbir bilgi yokken bu sembol okunur.<br />
</span></p>
<p>q<sub>0</sub> sembolü makinenin başlangıç durumunu (state) tutmaktadır ve dolayısıyla q<sub>0</sub> <span class="b">⊆</span> Q olmak zorundadır.</p>
<p>F sembolü makinenin bitiş durumunu (state) tutmaktadır ve yine F <span class="b">⊆ Q olmak zorundadır. </span></p>
<p><strong><span class="b">Örnek Turing Makinesi</span></strong></p>
<p><span class="b">Yukarıdaki sembolleri kullanarak örnek bir Turing makinesini aşağıdaki şekilde inşa edebiliriz. </span></p>
<p><span class="b">Örneğin basit bir kelime olan a* <a href="http://www.bilgisayarkavramlari.com/2007/04/14/regular-expression-regexp-duzenli-deyimler-ifadeler/">düzenli ifadesini (regular expression)</a> Turing makinesi ile gösterelim ve bize verilen aaa şeklindeki 3 a yı makinemizin kabul edip etmediğine bakalım. </span></p>
<p><span class="b">Tanım itibariyle makinemizi aşağıdaki şekilde tanımlayalım:</span></p>
<p>M = { {q<sub>0</sub>,q<sub>1</sub>} , { a } , { a,x } , { q<sub>0</sub> a→a R q<sub>0</sub> , q<sub>0</sub> x→x L q<sub>1</sub>} , q<sub>0</sub> , x , q<sub>1</sub> }</p>
<p>Yukarıdaki bu makineyi yorumlayacak olursak:</p>
<p>Q değeri olarak   {q<sub>0</sub>,q<sub>1</sub>} verilmiştir. Yani makinemizin ik idurumu olacaktır.</p>
<p>Γ değeri olarak { a,x } verilmiştir. Yani makinemizdeki kullanılan semboller a ve x&#8217;ten ibarettir.</p>
<p>Σ değeri olara {a} verilmiştir. Yani makinemize sadece a girdisi kabul edilmektedir.</p>
<p>δ değeri olarak iki geçiş verilmiştir { q<sub>0</sub> a→a R q<sub>0</sub> , q<sub>0</sub> x→x L q<sub>1</sub>} buraadki R sağa sarma L ise sola sarmadır ve görüleceği üzere Q değerindeki durumlar arasındaki geçişleri tutmaktadır.</p>
<p><span class="b">◊ değeri olarak x sembolü verilmiştir. Buradan x sembolünün aslında boş sembolü olduğu ve bantta hiçbir değer yokken okunan değer olduğu anlaşılmaktadır.<br />
</span></p>
<p>q<sub>0</sub> ile makinenin başlangıç durumundaki hali belirtilmiştir.</p>
<p>F değeri olarak q<sub>1</sub> değeri verilmiştir. Demek ki makinemiz q<sub>1</sub> durumuna geldiğinde bitmektedir (halt) ve bu duruma gelmesi halinde bu duruma kadar olan girdileri kabul etmiş olur<span class="b">. </span></p>
<p>Yukarıdaki bu tanımı görsel olarak göstermek de mümkündür:</p>
<p><img class="alignnone size-full wp-image-2686" title="turingornek" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/06/turingornek.jpg" alt="turingornek" width="432" height="225" /></p>
<p><strong><span class="b"><br />
</span></strong></p>
<p><span class="b">Yukarıdaki bu temsili resimde verilen turing makinesi çizilmiştir.</span></p>
<p><span class="b">Makinemizin örnek çalışmasını ve bant durumunu adım adım inceleyelim. </span></p>
<p><span class="b">Birinci adımda bandımızda aaa (3 adet a) yazılı olduğunu kabul edelim ve makinemizin bu aaa değerini kabul edip etmeyeceğini adım adım görelim. Zaten istediğimiz de aaa değerini kabul eden bir makine yapabilmekti.</span></p>
<p><span class="b"><img class="alignnone size-full wp-image-2687" title="turing1" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/06/turing1.jpg" alt="turing1" width="487" height="412" /></span></p>
<p><span class="b">Yukarıdaki ilk durumda bant üzerinde beklenen ve kabul edilip edilmeyeceği merak edilen değerimiz bulunuyor. Makinemizin kafasının okuduğu değer a sembolü. Makinemizin geçiş tasarımına göre q<sub>0</sub> halinde başlıyoruz ve a geldiğinde teybi sağa sarıp yine q<sub>0</sub> durumunda kalmamız gerekiyor.</span></p>
<p><span class="b"><br />
</span></p>
<p><span class="b"><img class="alignnone size-full wp-image-2689" title="turing21" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/06/turing21.jpg" alt="turing21" width="509" height="407" /></span></p>
<p>Yeni durumda kafamızın okuduğu değer banttaki 2. a harfi ve bu durumda yine <span class="b">q<sub>0</sub> </span> durumundayken teybi sağa sarıp yine <span class="b">q<sub>0</sub> </span> durumunda kalmamız tasarlanmış<span class="b"> </span></p>
<p><span class="b"><img class="alignnone size-full wp-image-2690" title="turing3" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/06/turing3.jpg" alt="turing3" width="515" height="380" /></span></p>
<p>3. durumda kafamızın okuduğu değer yine a sembolü olmakta ve daha önceki 2 duruma benzer şekilde <span class="b">q<sub>0</sub> </span> durumundayken a sembolü okumanın sonucu olarak teybi sağa sarıp <span class="b">q<sub>0</sub> </span>durumunda sabit kalıyoruz.</p>
<p><span class="b"><img class="alignnone size-full wp-image-2691" title="turing4" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/06/turing4.jpg" alt="turing4" width="487" height="364" /></span></p>
<p>4. adımda teypten okuduğumuz değer boşluk sembolü x oluyor. Bu değer makinemizin tasarımında <span class="b">q<sub>1</sub> </span><span class="b"> </span>durumuna gitmemiz olarak tasarlanmış ve teybe sola sarma emri veriyoruz.</p>
<p><span class="b"><img class="alignnone size-full wp-image-2692" title="turing5" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/06/turing5.jpg" alt="turing5" width="586" height="322" /></span></p>
<p><span class="b">Makinenin son durumunda </span><span class="b">q<sub>1</sub> </span><span class="b"> durumu makinenin kabul ve bitiş durumu olarak tasarlanmıştı ( makinenin tasarımındaki F kümesi) dolayısıyla çalışmamız burada sonlanmış ve giriş olarak aaa girdisini kabul etmiş oluyoruz.</span></p>
<p><strong><span class="b">2. Örnek</span></strong></p>
<p><span class="b">Hasan Bey&#8217;in sorusu üzerine bir örnek makine daha ekleme ihtiyacı zuhur etti. Makinemiz {a,b} sembolleri için çalışsın ve ilk durum olarak bandın en solunda başlayarak bantta bulunan sembolleri silmek için tasarlansın. Bu tasarımı aşağıdaki temsili resimde görülen otomat ile yapabiliriz:</span></p>
<p><span class="b"><img class="alignnone" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/turing_silici.jpg" alt="" width="454" height="123" /></span></p>
<p><span class="b">Görüldüğü üzere makinemizde 4 durum bulunuyor, bunlardan en sağda olan h durumu bitişi (halt) temsil ediyor. Şimdi bu makinenin bir misal olarak &#8220;aabb&#8221; yazılı bir bantta silme işlemini nasıl yaptığını adım adım izah etmeye çalışalım. </span></p>
<p><span class="b">Aşağıda, makinenin her adımda nasıl davranacağı bant üzerinde gösterilmiş ve altında açıklanmıştır. Sarı renge boyalı olan kutular, kafanın o anda üzerinde durduğu bant konumunu temsil etmektedir.<br />
</span></p>
<p><span class="b"><img class="alignnone" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/turing_silici_adimlar.jpg" alt="" width="374" height="590" /></span></p>
<p><span class="b">Netice olarak Hasan Bey&#8217;in sorusuna temel teşkil eden ve örneğin q1 üzerindeki döngülerden birisi olan b/a,R geçişi, banttan b okunduğunda banta a değerini yaz manasındadır.<br />
</span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2009/06/27/turing-makinesi-turing-machine/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Özyineli Sayılabilir Diller (Recursively Enumerable Languages)</title>
		<link>http://www.bilgisayarkavramlari.com/2009/06/27/ozyineli-sayilabilir-diller-recursively-enumerable-languages/</link>
		<comments>http://www.bilgisayarkavramlari.com/2009/06/27/ozyineli-sayilabilir-diller-recursively-enumerable-languages/#comments</comments>
		<pubDate>Sat, 27 Jun 2009 12:33:24 +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[Doğal Dil İşleme (NLP)]]></category>
		<category><![CDATA[Programlama Dilleri]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/?p=2647</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Muntazam dillerden (formal languages) birisi olan ve bu özelliği ile Mantık, Matematik ve Bilgisayar bilimlerinin çalışma alanına giren bir dil çeşididir. Sınıflandırma olarak Chomsky Hiyerarşisinde (Chomsky Hierarchy) 0. seviye olan (Type 0) bu dile uygun bütün diller birer düzenli ifade (regular expression) ile gösterilebilir. Muntazam dil (formal language) olması dolayısıyla [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p><a href="http://www.bilgisayarkavramlari.com/2009/06/25/muntazam-diller-formal-languages/">Muntazam dillerden (formal languages)</a> birisi olan ve bu özelliği ile Mantık, Matematik ve Bilgisayar bilimlerinin çalışma alanına giren bir dil çeşididir. Sınıflandırma olarak <a href="http://www.bilgisayarkavramlari.com/2009/06/27/chomsky-hiyerarsisi-chomsky-hierarchy/">Chomsky Hiyerarşisinde (Chomsky Hierarchy)</a> 0. seviye olan (Type 0) bu dile uygun bütün diller birer düzenli ifade (regular expression) ile gösterilebilir.</p>
<p><a href="http://www.bilgisayarkavramlari.com/2009/06/25/muntazam-diller-formal-languages/">Muntazam dil (formal language)</a> olması dolayısıyla dilde üretilen her <a href="http://www.bilgisayarkavramlari.com/2009/06/25/ozyineli-sayilabilir-kume-recursively-enumerable-sets/">özyineli sayılabilir kelime kümesi (recursively enumerable set) </a> bütün kelimelerden çıkarılabilecek <a href="http://www.bilgisayarkavramlari.com/2009/06/24/guc-kumesi-kuvvet-kumesi-power-set/">güç kümesinin (power set)</a> bir alt kümesi olmak zorundadır. Bu anlamda bir özyineli sayılabilir dili aşağıdaki üç farklı tanımla tanımlamak mümkündür:</p>
<p>Bir dilde bulunan alfabeden üretilebilen bütük kelimeleri kabul eden dil yani Σ sembolü ile dilimizdeki alfabeyi yani harfler kümesini gösterecek olursak L ile gösterilen dilimiz Σ<sup>*</sup> ile üretilebilen kelimeler kümesidir.</p>
<p><a href="http://www.bilgisayarkavramlari.com/2009/06/27/turing-makinesi-turing-machine/">Turing makinesi (Turing machine) </a>ile işlenebilen veya<a href="http://www.bilgisayarkavramlari.com/2009/06/25/hesaplanabilir-fonksiyon-computable-function/"> hesaplanabilir bir fonksiyon (computable function)</a> bulunabilen dildir. Burada dikkat edilecek nokta dilin sonsuz olabileceğidir. Yani dilimizde sonsuz sayıda tekrar bulunabilir.<a href="http://www.bilgisayarkavramlari.com/2009/06/27/turing-makinesi-turing-machine/"> Turing makinesi</a> ve <a href="http://www.bilgisayarkavramlari.com/2009/06/25/hesaplanabilirlik-teorisi-computability-theory/">hesaplanabilirlik teorisi (computability theory)</a> dikkatle okunacak olursa dilin sonsuz olmasının bir sakıncası yoktur. Teorik olarak sonlu zamanda bitiyor olması yeterlidir ve dil sonsuz bile olsa sonlu zamanda işleyen bir makine veya fonksiyon bulunabilir.</p>
<p>Şayt bir dilde üretilen bir<a href="http://www.bilgisayarkavramlari.com/2008/08/02/dizgi-string/"> dizgi (string)</a> için bir <a href="http://www.bilgisayarkavramlari.com/2009/06/27/turing-makinesi-turing-machine/">Turing makinesi (turing machine)</a> veya <a href="http://www.bilgisayarkavramlari.com/2009/06/25/hesaplanabilir-fonksiyon-computable-function/">hesaplanabilir bir fonksiyon (computable function) </a>bulunuyorsa, diğer bir ifadeyle ürettiğimiz <a href="http://www.bilgisayarkavramlari.com/2009/06/27/turing-makinesi-turing-machine/">turing makinesi</a> şu üç durumdan birisini yapıyorsa:</p>
<ul>
<li><a href="http://www.bilgisayarkavramlari.com/2008/11/12/durma-problemi-halting-problem/">bitmek (halt)</a></li>
<li><a href="http://www.bilgisayarkavramlari.com/2008/09/08/dongu-loop/">döngü (loop)</a></li>
<li>red etmek (reject)</li>
</ul>
<p>bu durumda bu dil özyineli sayılabilir dildir denilebilir.</p>
<p>Özyineli sayılabilir diller temel olarak <a href="http://www.bilgisayarkavramlari.com/2009/06/27/chomsky-hiyerarsisi-chomsky-hierarchy/">chomsky hiyerarşisinde (chomsky hierarchy)</a> bulunan bütün diğer dilleri kapsar. Bu anlamda hiyerarşinin en alt seviye dilidir ve diğer dillere göre çok daha esnektir.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2009/06/27/ozyineli-sayilabilir-diller-recursively-enumerable-languages/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Chomsky Hiyerarşisi ( Chomsky Hierarchy )</title>
		<link>http://www.bilgisayarkavramlari.com/2009/06/27/chomsky-hiyerarsisi-chomsky-hierarchy/</link>
		<comments>http://www.bilgisayarkavramlari.com/2009/06/27/chomsky-hiyerarsisi-chomsky-hierarchy/#comments</comments>
		<pubDate>Sat, 27 Jun 2009 12:15:53 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Automata (otomatlar, özdevinirler)]]></category>
		<category><![CDATA[Bilgisayar Kavramları]]></category>
		<category><![CDATA[Bilgisayar Standartları]]></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=2674</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Bilgisayar bilimlerinin özellikle dil alanında yapılan çalışmalarında muntazam dilleri (formal languages) tasnif etmek için kullanılan bir yapıdır. Literatürde Chomsky–Schützenberger hiyerarşisi olarak da geçmektedir. Bilindiği üzere ( muntazam diller (formal langauges) veya CFG yazısından da okunabileceği üzere) muntazam dillerin dört özelliği bulunur. Bunlar özellikle içerikten bağımsız dillerin (context free languages) da [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Bilgisayar bilimlerinin özellikle dil alanında yapılan çalışmalarında <a href="http://www.bilgisayarkavramlari.com/2009/06/25/muntazam-diller-formal-languages/">muntazam dilleri (formal languages)</a> tasnif etmek için kullanılan bir yapıdır. Literatürde Chomsky–Schützenberger hiyerarşisi olarak da geçmektedir.</p>
<p>Bilindiği üzere ( <a href="http://www.bilgisayarkavramlari.com/2009/06/25/muntazam-diller-formal-languages/">muntazam diller (formal langauges)</a> veya <a href="http://www.bilgisayarkavramlari.com/2009/03/20/icerikten-bagimsiz-gramer-context-free-grammer-cfg/">CFG</a> yazısından da okunabileceği üzere) <a href="http://www.bilgisayarkavramlari.com/2009/06/25/muntazam-diller-formal-languages/">muntazam dillerin</a> dört özelliği bulunur. Bunlar özellikle <a href="http://www.bilgisayarkavramlari.com/2009/03/20/icerikten-bagimsiz-dil-context-free-language/">içerikten bağımsız dillerin (context free languages)</a> da temelini oluşturmuştur.</p>
<ul>
<li>sonlular (terminals)</li>
<li>devamlılar (nonterminals)</li>
<li>üretim kuralları ( devamlıların değerlerini belirleyen geçiş kuralları)</li>
<li>Başlangıç devamlısı</li>
</ul>
<p>Örneğin aşağıdaki <a href="http://www.bilgisayarkavramlari.com/2009/03/20/icerikten-bagimsiz-gramer-context-free-grammer-cfg/">içerikten bağımsız dilbilgisini (context free grammer)</a> ele alalım</p>
<p>S → AB</p>
<p>A → Aa | ε</p>
<p>B → b</p>
<p>Yukarıdaki bu <a href="http://www.bilgisayarkavramlari.com/2009/03/20/icerikten-bagimsiz-gramer-context-free-grammer-cfg/">CFG</a> tanımındaki sonlular (terminals) {a,b,ε } ,  devamlılar (nonterminals) { S,A,B } olarak tanımlanır. üretim kuralı olarak (production rules) S,A,B&#8217;nin açılımlarını gösteren ve → sembolü ile belirtilen satırlar bulunmaktadır. Son olarak başlangıç devamlısı (nonterminal) değeri olarak S kabul edilmiştir. Başlangıç devamlısı böyle bir kural bulunmamasına karşılık genelde S harfi (start kelimesinden gelmektedir) ile gösterilmekte ve ilk satırda bulunmaktadır.</p>
<p>Yukarıdaki bu <a href="http://www.bilgisayarkavramlari.com/2009/03/20/icerikten-bagimsiz-gramer-context-free-grammer-cfg/">CFG</a> şayet <a href="http://www.bilgisayarkavramlari.com/2007/04/14/regular-expression-regexp-duzenli-deyimler-ifadeler/">düzenli ifadeye (regular expression) </a>çevrilirse <span class="texhtml"><em>a</em><sup><em>*</em></sup><em>b şeklinde yazılabilir. Aslında burada anlatılan değer </em></span><span class="texhtml"><em>a</em><sup><em>n</em></sup><em>b</em></span> şeklinde de gösterilebilen istenildiği kadar a değeri alan (hiç almaya da bilir) ve sonra mutlaka b ile biten dildir.</p>
<p>Chomsky yukarıdaki şekilde tanımlanan <a href="http://www.bilgisayarkavramlari.com/2009/06/25/muntazam-diller-formal-languages/">muntazam diller (formal languages)</a> için bir sınıflandırmaya gitmiş ve 4 seviye belirlemiştir.</p>
<ul>
<li>Type-0 ( tip 0) Sınırlandırılmamış diller (unrestricted grammers)</li>
<li>Type-1 ( tip 1) İçerik duyarlı diller (context-sensitive grammers)</li>
<li>Type-2 ( tip 2)<a href="http://www.bilgisayarkavramlari.com/2009/03/20/icerikten-bagimsiz-dil-context-free-language/"> İçerikten bağımsız diller (context free languages)</a></li>
<li>Type-3 ( tip 3) <a href="http://www.bilgisayarkavramlari.com/2007/04/14/regular-expression-regexp-duzenli-deyimler-ifadeler/">Düzenli diller (regular grammers)</a></li>
</ul>
<p>şeklinde 4 seviye isimlendirilmiştir.Bu seviyelerde iler gidildikçe (seviye arttıkça) dili bağlayan kurallarda sıkılaşmakta ve dil daha kolay işlenebilir ve daha belirgin (deterministic) bir hal almaktadır.</p>
<p>Tip-0 dilleri bastiçe <a href="http://www.bilgisayarkavramlari.com/2009/06/27/turing-makinesi-turing-machine/">turing makinesi (turing machine)</a> tarafından çalıştırılabilen ve bir şekilde bitecek olan dillerdir (<a href="http://www.bilgisayarkavramlari.com/2009/06/25/hesaplanabilirlik-teorisi-computability-theory/">hesaplanabilir diller (computable languages)</a>. Örneğin <a href="http://www.bilgisayarkavramlari.com/2009/06/27/ozyineli-sayilabilir-diller-recursively-enumerable-languages/">özyineli sayılabilir diller (recusive enumerable languages) </a>bu seviyeden kabul edilir.</p>
<p>Tip-1 dilleri için içerk duyarlı diller örnek gösterilebilir. Basitçe αAβ → αγβ şeklindeki gösterime sahip bir dildir. Buradaki A devamlı (nonterminal) ve α,γ,β birer sonlu (terminal) terimdir. Bu sonlulardan α ve β boş harf (yani ε veya bazı kaynaklarda λ) olabilir ancak γ mutlak bir değere sahip olmalıdır (yani boş olamaz) Ayrıca bu tipte</p>
<p>S → ε</p>
<p>şeklinde bir kurala da izin verilmektedir. Burada S devamlısının sağ tarafta olmaması gerekmektedir. Bu diller doğrusal bağlı otomatlar (linear bounded automaton) ile gösterilebilir. Doğrusal bağlı otomatlar, <a href="http://www.bilgisayarkavramlari.com/2009/06/27/turing-makinesi-turing-machine/">turing makinelerinin</a> özel bir halidir ve <a href="http://www.bilgisayarkavramlari.com/2009/06/27/turing-makinesi-turing-machine/">Turing makinesinde</a> bulunan bantın sabit uzunlukta olduğu (çalışmanın sabit zaman sonra sona ereceği) kabul edilir.</p>
<p>Tip-2  diller ise <a href="http://www.bilgisayarkavramlari.com/2009/03/20/icerikten-bagimsiz-gramer-context-free-grammer-cfg/">CFG </a>ile ifade edilebilen <a href="http://www.bilgisayarkavramlari.com/2009/03/20/icerikten-bagimsiz-dil-context-free-language/">içerikten bağımsız dillerdir (context free languages)</a>. Bu dillerin özelliği A → γ şeklinde gösterilmeleridir. Buradaki γ değeri sonlular (terminals) ve devamlılar (nonterminals) olabilmektedir. Bu diller <a href="http://www.bilgisayarkavramlari.com/2007/05/04/pda-push-down-automata-asagi-suruklemeli-otomat/">aşağı sürüklemeli otomatlar (push down automata PDA) </a>tarafından kabul edilen dillerdir ve hemen hemen bütün programlama dillerinin temelini oluşturmaktadırlar. (programlama dillerinin neredeyse tamamı bu seviye kurallarına uymaktadırlar)</p>
<p>Tip-3 diller ise <a href="http://www.bilgisayarkavramlari.com/2007/04/14/regular-expression-regexp-duzenli-deyimler-ifadeler/">düzeli ifadeler (regular expressions)</a> ile ifade edilebilen (veya üretilebilen veya parçalanabilen (parse) ) dillerdir. Bu dillerin farkı</p>
<p>A → α ve</p>
<p>A → αB</p>
<p>şeklindeki kurallar ile göterilebilmeleridir.</p>
<p>Yukarıdaki bu tanımları bir tabloda toplamak gerekirse:</p>
<table border="0" cellpadding="0">
<tbody>
<tr>
<td>
<p align="center"><strong>Seviye</strong></p>
</td>
<td>
<p align="center"><strong>Dil Örneği</strong></p>
</td>
<td>
<p align="center"><strong>Otomat Uygulaması</strong></p>
</td>
<td>
<p align="center"><strong>Kuralları</strong></p>
</td>
</tr>
<tr>
<td>Type-0</td>
<td><a href="http://www.bilgisayarkavramlari.com/2009/06/27/ozyineli-sayilabilir-diller-recursively-enumerable-languages/"><span style="text-decoration: underline;">Recursively enumerable</span></a></td>
<td><a href="http://www.bilgisayarkavramlari.com/2009/06/27/turing-makinesi-turing-machine/"><span style="text-decoration: underline;">Turing machine</span></a></td>
<td>α → β</td>
</tr>
<tr>
<td>Type-1</td>
<td><a title="Context-sensitive grammar" href="http://en.wikipedia.org/wiki/Context-sensitive_grammar">Context-sensitive</a></td>
<td><span style="text-decoration: underline;">Linear-bounded non-deterministic Turing machine</span></td>
<td>αAβ → αγβ</td>
</tr>
<tr>
<td>Type-2</td>
<td><a href="http://www.bilgisayarkavramlari.com/2009/03/20/icerikten-bagimsiz-gramer-context-free-grammer-cfg/"><span style="text-decoration: underline;">Context-free</span></a></td>
<td>Non-deterministic <a href="http://www.bilgisayarkavramlari.com/2007/05/04/pda-push-down-automata-asagi-suruklemeli-otomat/"><span style="text-decoration: underline;">pushdown   automaton</span></a></td>
<td>A → γ</td>
</tr>
<tr>
<td>Type-3</td>
<td><a href="http://www.bilgisayarkavramlari.com/2007/04/14/regular-expression-regexp-duzenli-deyimler-ifadeler/"><span style="text-decoration: underline;">Regular</span></a></td>
<td><span style="text-decoration: underline;">Finite state automaton</span></td>
<td>A → α ve A → αB</td>
</tr>
</tbody>
</table>
<p>Yukarıdaki seviyeler bütün dilleri kapsamak için yeterli değildir ayrıca yukarıda gösterilen seviyelere giren yukarıdaki tablo dışında diller de bulunmaktadır.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2009/06/27/chomsky-hiyerarsisi-chomsky-hierarchy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Muntazam Diller (Formal Languages)</title>
		<link>http://www.bilgisayarkavramlari.com/2009/06/25/muntazam-diller-formal-languages/</link>
		<comments>http://www.bilgisayarkavramlari.com/2009/06/25/muntazam-diller-formal-languages/#comments</comments>
		<pubDate>Wed, 24 Jun 2009 21:56:13 +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=2640</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Kısaca istisnası olmayan dillere muntazam dil diyebiliriz. Muntazam diller bilgisayar bilimlerinde, mantıkta ve dilbilim (linguistic) çalışmalarında kullanılan bir dil ailesidir. Dilde bulunan bütün öğeler ve dilin ulaşabileceği sınırlar belirli kurallar dahilinde tanımlanabiliyorsa bu dillere muntazam dil ismi verilir. Bu anlamda bilgisayar bilimlerinde bulunan bütün programlama dillerini bu ailede düşünmek mümkündür. [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Kısaca istisnası olmayan dillere muntazam dil diyebiliriz.</p>
<p>Muntazam diller bilgisayar bilimlerinde, mantıkta ve dilbilim (linguistic) çalışmalarında kullanılan bir dil ailesidir. Dilde bulunan bütün öğeler ve dilin ulaşabileceği sınırlar belirli kurallar dahilinde tanımlanabiliyorsa bu dillere muntazam dil ismi verilir.</p>
<p>Bu anlamda bilgisayar bilimlerinde bulunan bütün programlama dillerini bu ailede düşünmek mümkündür.</p>
<p>Temel olarak bir dildeki harfleri bu harflerden oluşabilecek <a href="http://www.bilgisayarkavramlari.com/2008/03/19/kelime-bilim-lexicology-vocabulary/">kelimelerin oluşma kurallarını (morphology)</a> ve bu <a href="http://www.bilgisayarkavramlari.com/2009/06/17/sozdizim-syntax/">kelimelerin dizilimini (syntax) </a>muntazam bir şekilde belirleyebilen kurallarımız varsa. Ve bu kuralların istisnası yoksa bu dilin bir muntazam dil olduğu söylenebilir.</p>
<p>Muntazam dilimizi tanımlamak için öncelikle dilin en ufak öğesi olan harflerden başlamak gerekir.</p>
<p><strong>Alfabe ve Harf tanımı</strong></p>
<p>Bir dilde kullanılan sembollerin her birisine harf denilir. Bu harflerin listesine alfabe (bazı kaynaklarda abece) denilir.</p>
<p>Örneğin <a href="http://www.bilgisayarkavramlari.com/2009/05/07/haber-predicate/">haber mantığını (predicate logic)</a> ele alacak olursak bu mantığın ifade ettiği dil için ∧, ¬, ∀ , ) , ( sembolleri kullanılır. Ayrıca mantığımızdaki değişkenleri ve önermeleri gösteren  <em>x</em><sub>0</sub>, <em>x</em><sub>1</sub>, <em>x</em><sub>2</sub>, … şeklinde sonsuz harf bulunmaktadır.</p>
<p><strong>Kelime (word) tanımı</strong></p>
<p>Bir alfabedeki sembollerin (harflerin) o dildeki kelimebilim(morphology) kurallarına uygun olarak oluşturduğu dizilime kelime ismi verilir. Kelimeler dildeki anlamlı en küçük birimlerdir ve tek başlarına sadece bir birimlik bilgi ifade ederler. Daha karmaşık bilgi ifadeleri için cümlelere ihtiyaç duyulur. Ne yazık ki dilbilimde bir kelimenin anlattığı bilgi ile bir cümlenin anlattığı bilgi arasında kesin bir çizgi bulunmamaktadır. Örneğin bazı doğal dillerde tek kelime ile anlatılan bir duygu veya olay, başka dillere bir kelime grubu hatta bazan bir cümle ile çevrilebilmektedir.</p>
<p>Muntazam diller için de aynı durum söz konusudur. Dilin tasarımında hangi bilginin yeterli varlık oluşturacağı ve ne kadar detaya inileceği kararlaştırılır.</p>
<p>Hatta bir dilin var olması için sözdizim (syntax) seviyesinin bulunması gerekmez. Yani sadece kelimeler olan ve kelimelerin dizilmesi gerekmeyen diller de bulunabilir.</p>
<p>Bir dilde üretilebilecek kelimelerin belirli kurallarla tanımlanması ve bu kuralların dışına çıkan istisna bulunmaması durumunda bu dile muntazam dil denilebilir.</p>
<p>Örneğin<a href="http://www.bilgisayarkavramlari.com/2007/04/14/regular-expression-regexp-duzenli-deyimler-ifadeler/"> düzenli ifadeleri (regular expressions) </a>ele alırsak, bu ifadelerin kullanılması ile dilde oluşabilecek sonsuz sayıdaki kelime belirlenebilir.</p>
<p>(a + b)* şeklindeki bir düzenli ifadeden a ve b harfleri kullanılarak (istenilen sıra ve istenilen sayıda) kleene yıldızı sayesinde boş kümeyi de kapsayan bütün kelimeler üretilebilir.</p>
<p><strong>Muntazam Dil tanımı</strong></p>
<p>Yukarıdaki dilin öğelerini tanımladıktan sonra dili tanımlamak mümkündür.</p>
<p>Σ sembolü ile dilimizdeki alfabeyi yani harfler kümesini gösterecek olursak L ile gösterilen dilimiz Σ<sup>*</sup> ile üretilebilen kelimeler kümesidir.</p>
<p>Bu tanıma ilave olarak muntazam dil kavramının matematik ve bilgisayar bilimlerinde geçen pek çok &#8220;dil&#8221; kelimesini karşıladığını söyleyebiliriz. Yani aslında matematik ve bilgisayar bilimlerinde geçen &#8220;dil&#8221; kelimesi aslında tam olarak &#8220;muntazam dile&#8221; karşılık gelmektedir.</p>
<p>Örneğin <a href="http://www.bilgisayarkavramlari.com/2009/03/20/icerikten-bagimsiz-dil-context-free-language/">içerikten bağımsız dil (context free language)</a> terimi aslında içerikten bağımsız muntazam dil anlamında kullanılmaktadır. Benzer şekilde düzenli diller (regular languages) terimi aslında düzenli muntazam dil (regular formal languages) anlamında kullanılmaktadır. Dolayısıyla matematik ve bilgisayar bilimlerinin uğraştığı bütün dilleri ve kullandıkları bütün dilleri muntazam dil (formal language) olarak tanımlamak mümkündür. Bunun tek istisnası bilgisayar bilimlerindeki yapay zeka konusunun altında geçen doğal dil işleme konusudur.</p>
<p><strong>Muntazam dil çalışmaları</strong></p>
<p>Muntazam diller üzerinde yapılan çalışmalardan birincisi bir muntazam dilin nasıl tanımlanacağıdır. Bu alanda yapılan bazı çalışmalar sonucunda elde edilen yaklaşımları aşağıdaki şekilde sayabiliriz:</p>
<ul>
<li>Muntazam bir dilbilgisi (formal grammer) tarafından üretilen dillere Muntazam dil (formal language) ismi verilir. Bu tanım <a href="http://www.bilgisayarkavramlari.com/2009/06/27/chomsky-hiyerarsisi-chomsky-hierarchy/">Chomsky Hiyerarşisi</a> tarafından sınıflandırılan dilbilgileri ile gösterilebilir.</li>
<li><a href="http://www.bilgisayarkavramlari.com/2007/04/14/regular-expression-regexp-duzenli-deyimler-ifadeler/">Düzenli ifadelerin (Regular expressions) </a>bir örneği ile üretilebilen dillere muntazam dil ismi verilir.</li>
<li>Bir otomat tarafından üretilen (<a href="http://www.bilgisayarkavramlari.com/2008/08/02/sonlu-ototmatlar-finite-automaton/">sonlu durum otomatı (finite state automat)</a> veya <a href="http://www.bilgisayarkavramlari.com/2009/06/27/turing-makinesi-turing-machine/">Turing Makinesi (Turing Machine)</a> gibi) dillere muntazam dil ismi verilir.</li>
</ul>
<p>Yukarıdaki bu tanımlama çalışmalarının yanında muntazam diller ile ilgili aşağıdaki sorulara da cevap aranmaktadır.</p>
<ul>
<li>Tanımlama yeteneği. Bir dilin tanımlayabilme gücü ve tanımlayabildiği dilin büyüklüğü nedir? Aynı güce ve yeteneğe sahip ikinci bir dil farklı bir şekilde olabilir  mi? Bütün dilleri gösteren bir dil yapılabilir mi? şeklindeki soruları bu grup altında toplayabiliriz.</li>
<li>Algılama yeteneği. Verilen bir kelimenin verilen bir dile ait olup olmadığının algılanması yeteneğidir. Elimizde muntazam bir dilbilgisi (grammer) olduğunu kabul edelim. Bu dilden olan veya olmayan bir kelime verildiğinde bu kelimenin analiz edilmesi ve dile ait olup olmadığının algılanması en verimli nasıl yapılabilir? sorusuna cevap arayan çalışmalardır.</li>
<li>Karşılaştırma yeteneği. Elimizde iki dil bulunsun. Bu iki dilin birbirine göre farklarının algılanılması, bir dilde olup diğer dilde olmayan veya iki dilde ortak olan kelime ve cümlelerin tespiti gibi konularda çalışılan çalışma grubudur.</li>
</ul>
<p>Yukarıdaki bu problemler genel olarak algoritma analizi (analysis of algorithms) altındaki karmaşıklık teorisi (complexity theory) alanın çalışma konularına girmektedir.</p>
<p><strong>Diller üzerinde tanımlı işlemler</strong></p>
<p>Diller üzerinde de farklı işlemlerin yapılması mümkündür. Aşağıda bu işlemler ve tanımları verilmiştir:</p>
<p>Dillerin kesişimi (intersection): Temel olarak bir dili o dildeki kurallar ve alfabe marifetiyle üretilebilecek kelimeler kümesi olarak tanımlarsak, iki dilin kesişimi aslında iki dilde üretilebilecek kelimelerin kesişimi olmuş olur.<em>L</em><sub>1</sub> ∩ <em>L</em><sub>2 </sub>şeklinde gösterilir.</p>
<p>Üleştirme işlemi (concetanation): İki dilden üleştirme yapmak için birinci dilden bir kelime ile ikinci dilden bir kelimenin arka arkaya eklenmesi ile yeni bir kelime oluşturulması kastedilir. Yani L<sub>1</sub> dilinden k kelimesi ile L<sub>2</sub> dilinden l kelimesi alınıp kl veya lk şeklinde kelime üretme işlemidir. <em>L</em><sub>1</sub><em>L</em><sub>2</sub> şeklinde gösterilir.</p>
<p>Tümleyen işlemi (Complement): Bir dildeki <a href="http://www.bilgisayarkavramlari.com/2009/06/24/guc-kumesi-kuvvet-kumesi-power-set/">güç kümesinden (power set) </a>o dildeki dilbilgisine (grammer) göre çıkarılabilen kelimelerin farkıdır. Yani alfabede olan harflerle yazılabilecek bütün kelimelerin, dilde izin verilen kelimelerle <a href="http://www.bilgisayarkavramlari.com/2009/06/24/kume-teorisi-set-theory/">fark kümesidir</a>. ¬<em>L </em>şeklinde veya <span style="border-top: 3px solid;">L</span> şeklinde gösterilir.</p>
<p>Kleene Yıldızı (Kleene Star): Bir dildeki alfabe üzerinde boş küme dahil olmak üzere üretilebilecek bütün kelimeler kümesidir. Bir anlamda güç kümesi (power set) ismi de verilebilir. Kullanımı aslında <a href="http://www.bilgisayarkavramlari.com/2007/04/14/regular-expression-regexp-duzenli-deyimler-ifadeler/">düzenli ifadelerden (regular expressions) </a>alınmıştır.</p>
<p>Ters işlemi (reverse): Bir dildeki herhangi bir kelimenin yazılışının terse çevrilmiş halidir. Örneğin &#8220;abc&#8221;&#8216;nin tersi &#8220;cba&#8221; şeklindedir. Daha akademik olarak iki kuralla tanımlanabilir.</p>
<ul>
<li>Şayet dilimizdeki boş kelimeyi <em>e</em> sembolü ile gösterirsek <em>e<sup>R</sup></em> = <em>e</em> olur yani boş kelimenin tersi yine boş kelimedir.</li>
<li>Boş kelime dışındaki herhangi bir kelime için  <em>w</em> = <em>x</em><sub>1</sub>…<em>x<sub>n</sub></em> şeklinde n adet harf ile yazıldığını düşünelim, bu durumda tersi  <em>w<sup>R</sup></em> = <em>x</em><sub>n</sub>…<em>x<sub>1</sub></em>, olur</li>
</ul>
<p>Bu durumda muntazam bir dil  <em>L</em> için , <em>L<sup>R</sup> = {</em>w<sup>R</sup> | <em>w</em> ∈ <em>L</em>} olarak tanım yapılabilir.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2009/06/25/muntazam-diller-formal-languages/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Chomsky Normal Şekili (Chomsky Normal Form)</title>
		<link>http://www.bilgisayarkavramlari.com/2009/06/22/chomsky-normal-sekili-chomsky-normal-form/</link>
		<comments>http://www.bilgisayarkavramlari.com/2009/06/22/chomsky-normal-sekili-chomsky-normal-form/#comments</comments>
		<pubDate>Mon, 22 Jun 2009 08:29:26 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Automata (otomatlar, özdevinirler)]]></category>
		<category><![CDATA[Programlama Dilleri]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/?p=2601</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Bilgisayar bilimlerinde özellikle otomatlar (automata) ve dil tasarımında (compiler design) oldukça sık kullanılan konulardan birisi de içerikten bağımsız dilbilgisidir. (Context Free Grammer) İçerikten bağımsız dil (Context Free Language) konusunda yapılan çalışamlar gelişen ihtiyaçlar ilave bazı kurallar konulmasını gerektirmiştir. Bu konuda çalışan Naom Chomsky tarafından konulan kurallara CNF veya Chomsky normal [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Bilgisayar bilimlerinde özellikle otomatlar (automata) ve dil tasarımında (compiler design) oldukça sık kullanılan konulardan birisi de<a href="http://www.bilgisayarkavramlari.com/2009/03/20/icerikten-bagimsiz-gramer-context-free-grammer-cfg/"> içerikten bağımsız dilbilgisidir. (Context Free Grammer)</a></p>
<p><a href="http://www.bilgisayarkavramlari.com/2009/03/20/icerikten-bagimsiz-dil-context-free-language/">İçerikten bağımsız dil (Context Free Language) </a>konusunda yapılan çalışamlar gelişen ihtiyaçlar ilave bazı kurallar konulmasını gerektirmiştir. Bu konuda çalışan Naom Chomsky tarafından konulan kurallara CNF veya Chomsky normal şekli ismi verilir ve aşağıda açıklanmıştır.</p>
<p>CNF&#8217;in tanımı ve kuralları</p>
<p>Şayet bir CFG aşağıdaki kurallara uyuyorsa bu dilbilgisine CNF&#8217;e uygun denilebilir. Örneğin bir dilde</p>
<dl>
<dd><span class="texhtml"><em>A</em></span><img class="tex" src="http://upload.wikimedia.org/math/8/5/5/8558a668c3dd3fe346c448d980f33d6c.png" alt="\rightarrow\, " /><span class="texhtml"><em>B</em><em>C</em></span> veya </dd>
<dd><span class="texhtml"><em>A</em></span><img class="tex" src="http://upload.wikimedia.org/math/8/5/5/8558a668c3dd3fe346c448d980f33d6c.png" alt="\rightarrow\, " />α veya </dd>
<dd><span class="texhtml"><em>S</em></span><img class="tex" src="http://upload.wikimedia.org/math/8/5/5/8558a668c3dd3fe346c448d980f33d6c.png" alt="\rightarrow\, " />λ</dd>
</dl>
<p>şeklinde kurallara uyuyorsa. (Burada ABC birer devamlı (nonterminal) α bir sonlu (terminal) ve λ ise boş dizgi (empty string) gösteren sembollerdir). Burada B ve C sembolleri başlangıç sembolü  olamaz. Yani</p>
<p><span style="text-decoration: line-through;">B <img class="tex" src="http://upload.wikimedia.org/math/8/5/5/8558a668c3dd3fe346c448d980f33d6c.png" alt="\rightarrow\, " />α</span></p>
<p>gibi bir kural dilbilgisinde bulunamaz. Benzer şekilde</p>
<p><span style="text-decoration: line-through;">A<img class="tex" src="http://upload.wikimedia.org/math/8/5/5/8558a668c3dd3fe346c448d980f33d6c.png" alt="\rightarrow\, " /> BCC</span></p>
<p>şeklinde bir gösterim de CNF kurallarına aykırıdır (en fazla 2 devamlı (nonterminal) bulunabilir).</p>
<p>Yukarıdaki tanımdan anlaşılacağı üzere CNF kulllarına uygun olan her dil zaten CFG&#8217;dir. Ayrıca yine yukarıdaki tanıma dayanarak bir dildeki bir cümlenin parçalanması (parse) işlemi sırasındaki her adım, kendinden bir önceki adıma göre en fazla bir harf uzun olabilir. Bunun sebebi yukarıdaki şekilde yazılan bir dilde en fazla 2 devamlı (nonterminal) bulunacağı ve dolayısıyla en fazla 1 harf ilave edileceğidir.</p>
<p>Diğer bir ifadeyle CNF&#8217;e uygun bir dil parçalaranar bir parçalama ağacı (parse tree) oluşturulduğunda ortaya bir <a href="http://www.bilgisayarkavramlari.com/2008/05/07/ikili-agac-binary-tree/">ikili ağaç (binary tree)</a> çıkar ve bu ağacın en derin olma durumunda parçalanan kelimenin boyutundan 1 eksik (ilk devamlı açılımının (nonterminal) 2 elemanlı olduğu düşünülürse) ve en sığ olma durumunda da yine kelime boyutundan 1 eksik olacaktır. Daha kesin bir ifadeyle CNF&#8217;e uygun bir dil ile parçalanan bir kelime ve oluşan <a href="http://www.bilgisayarkavramlari.com/2008/12/09/parcalama-agaci-parse-tree/">parçalama ağacında (parse tree)</a> belirsizlik (ambiguity) bulunamaz ve her zaman tek bir ağaç çıkar.</p>
<p><strong>Bir CFG&#8217;nin CNF&#8217;e çevrimi</strong></p>
<p>Yukarıdaki açıklamalar ışığında her CFG&#8217;nin CNF yapısında olmadığını öğrendik. Ayrıca her CFG&#8217;nin CNF yapısına çevrilebileceği de bir gerçektir. Bu durumda herhangi bir CFG&#8217;nin CNF&#8217;e çevrimi için aşağıdaki 5 farklı durum ve bu 5 farklı durumun çözümü verilmiştir.</p>
<p><strong>1. Durumda </strong>başlangıcın sağ tarafta bulunmasına karşılık ilave bir başlangıç devamlısı (nonterminal) eklenir.</p>
<p>Örneğin dilimiz aşağıdaki şekilde olsun:<span class="texhtml"><em></em></span></p>
<p><span class="texhtml"><em>S</em></span><img class="tex" src="http://upload.wikimedia.org/math/8/5/5/8558a668c3dd3fe346c448d980f33d6c.png" alt="\rightarrow\, " /><span class="texhtml"><em>ASA </em></span>| aB</p>
<p><span class="texhtml"><em>A</em></span><img class="tex" src="http://upload.wikimedia.org/math/8/5/5/8558a668c3dd3fe346c448d980f33d6c.png" alt="\rightarrow\, " /><span class="texhtml"><em>B </em></span>| S</p>
<p><span class="texhtml"><em>B</em></span><img class="tex" src="http://upload.wikimedia.org/math/8/5/5/8558a668c3dd3fe346c448d980f33d6c.png" alt="\rightarrow\, " /><span class="texhtml"><em>b </em></span>| λ</p>
<p>Yukarıdaki dilbilgisi tanımında görüleceği üzere iki noktada S yani başlangıç devamlısı (nonterminal) sağ tarafta bulunmaktadır. Çözüm olarak ilave bir devamlı eklenerek aşağıdaki hale getirilebilir:</p>
<p>S<sub><span class="texhtml"><em>0</em></span></sub><img class="tex" src="http://upload.wikimedia.org/math/8/5/5/8558a668c3dd3fe346c448d980f33d6c.png" alt="\rightarrow\, " /> S</p>
<p><span class="texhtml"><em>S</em></span><img class="tex" src="http://upload.wikimedia.org/math/8/5/5/8558a668c3dd3fe346c448d980f33d6c.png" alt="\rightarrow\, " /><span class="texhtml"><em>ASA </em></span>| aB</p>
<p><span class="texhtml"><em>A</em></span><img class="tex" src="http://upload.wikimedia.org/math/8/5/5/8558a668c3dd3fe346c448d980f33d6c.png" alt="\rightarrow\, " /><span class="texhtml"><em>B </em></span>| S</p>
<p><span class="texhtml"><em>B</em></span><img class="tex" src="http://upload.wikimedia.org/math/8/5/5/8558a668c3dd3fe346c448d980f33d6c.png" alt="\rightarrow\, " /><span class="texhtml"><em>b </em></span>| λ</p>
<p>Yukarıdaki bu yeni haliyle başlangıç geçişlisi artık S0 olmuştur ve artık sağ tarafta istenmeyen bu terim bulunmamaktadır.</p>
<p><strong>2. durumda</strong> lambda (λ) terimlerinin temizlenmesi gerekir. Bu problemin çözümü için devamlılardan (nonterminal) başlanarak alternatif sonuçlar sıralanır. Örneğin bir önceki adımda oluşturduğumuz grameri ele alacak olursak:</p>
<p>S<sub><span class="texhtml"><em>0</em></span></sub><img class="tex" src="http://upload.wikimedia.org/math/8/5/5/8558a668c3dd3fe346c448d980f33d6c.png" alt="\rightarrow\, " /> S</p>
<p><span class="texhtml"><em>S</em></span><img class="tex" src="http://upload.wikimedia.org/math/8/5/5/8558a668c3dd3fe346c448d980f33d6c.png" alt="\rightarrow\, " /><span class="texhtml"><em>ASA </em></span>| aB</p>
<p><span class="texhtml"><em>A</em></span><img class="tex" src="http://upload.wikimedia.org/math/8/5/5/8558a668c3dd3fe346c448d980f33d6c.png" alt="\rightarrow\, " /><span class="texhtml"><em>B </em></span>| S</p>
<p><span class="texhtml"><em>B</em></span><img class="tex" src="http://upload.wikimedia.org/math/8/5/5/8558a668c3dd3fe346c448d980f33d6c.png" alt="\rightarrow\, " /><span class="texhtml"><em>b </em></span>| λ</p>
<p>Yukarıdaki gramerde B -&gt; λ terimi bulunmaktadır. Bunu kaldırmak için B devamlısının (nonterminal) kullanıldığı yerlerde değişiklik yapmak gerekir.</p>
<p>S<sub><span class="texhtml"><em>0</em></span></sub><img class="tex" src="http://upload.wikimedia.org/math/8/5/5/8558a668c3dd3fe346c448d980f33d6c.png" alt="\rightarrow\, " /> S</p>
<p><span class="texhtml"><em>S</em></span><img class="tex" src="http://upload.wikimedia.org/math/8/5/5/8558a668c3dd3fe346c448d980f33d6c.png" alt="\rightarrow\, " /><span class="texhtml"><em>ASA | aB | AS | SA | S | a</em></span></p>
<p><span class="texhtml"><em>A</em></span><img class="tex" src="http://upload.wikimedia.org/math/8/5/5/8558a668c3dd3fe346c448d980f33d6c.png" alt="\rightarrow\, " /><span class="texhtml"><em>B </em></span>| S</p>
<p><span class="texhtml"><em>B</em></span><img class="tex" src="http://upload.wikimedia.org/math/8/5/5/8558a668c3dd3fe346c448d980f33d6c.png" alt="\rightarrow\, " /><span class="texhtml"><em>b<br />
</em></span></p>
<p>Yukarıdaki S-&gt; <span class="texhtml"><em> AS | SA | S | a </em>terimleri yeni eklenmiştir. Bu terimler B-&gt;</span>λ terimi ile üretilebilecek bütün alternatifleri kapsar.</p>
<p><strong>3. Durumda</strong> tek terimlerin kaldırılması için tek terimlilerde ulaşılabilen terimler tekrarlanır. Örneğin yukarıdaki gramerin son halinden devam edecek olursak:</p>
<p>S<sub><span class="texhtml"><em>0</em></span></sub><img class="tex" src="http://upload.wikimedia.org/math/8/5/5/8558a668c3dd3fe346c448d980f33d6c.png" alt="\rightarrow\, " /> S</p>
<p><span class="texhtml"><em>S</em></span><img class="tex" src="http://upload.wikimedia.org/math/8/5/5/8558a668c3dd3fe346c448d980f33d6c.png" alt="\rightarrow\, " /><span class="texhtml"><em>ASA | aB | AS | SA | S | a</em></span></p>
<p><span class="texhtml"><em>A</em></span><img class="tex" src="http://upload.wikimedia.org/math/8/5/5/8558a668c3dd3fe346c448d980f33d6c.png" alt="\rightarrow\, " /><span class="texhtml"><em>B </em></span>| S</p>
<p><span class="texhtml"><em>B</em></span><img class="tex" src="http://upload.wikimedia.org/math/8/5/5/8558a668c3dd3fe346c448d980f33d6c.png" alt="\rightarrow\, " /><span class="texhtml"><em>b </em></span></p>
<p><span class="texhtml">Gramerinde tek terili olarak </span>S<sub><span class="texhtml"><em>0</em></span></sub><img class="tex" src="http://upload.wikimedia.org/math/8/5/5/8558a668c3dd3fe346c448d980f33d6c.png" alt="\rightarrow\, " /> S , <span class="texhtml"><em>A</em></span><img class="tex" src="http://upload.wikimedia.org/math/8/5/5/8558a668c3dd3fe346c448d980f33d6c.png" alt="\rightarrow\, " /><span class="texhtml"><em>B </em></span>ve <span class="texhtml"><em>A</em></span><img class="tex" src="http://upload.wikimedia.org/math/8/5/5/8558a668c3dd3fe346c448d980f33d6c.png" alt="\rightarrow\, " />S durumları bulunmaktadır. Bu durumların kaldırılması için terim değerleri tekrarlanır :</p>
<p>S<sub>0</sub><img class="tex" src="http://upload.wikimedia.org/math/8/5/5/8558a668c3dd3fe346c448d980f33d6c.png" alt="\rightarrow\, " /> ASA | aB | AS | SA | a<br />
S<img class="tex" src="http://upload.wikimedia.org/math/8/5/5/8558a668c3dd3fe346c448d980f33d6c.png" alt="\rightarrow\, " /> ASA | aB | AS | SA | a<br />
A <img class="tex" src="http://upload.wikimedia.org/math/8/5/5/8558a668c3dd3fe346c448d980f33d6c.png" alt="\rightarrow\, " />b | ASA | aB | AS | SA | a<br />
B <img class="tex" src="http://upload.wikimedia.org/math/8/5/5/8558a668c3dd3fe346c448d980f33d6c.png" alt="\rightarrow\, " />b</p>
<p>Yukarıdaki son halinde S ve B değeri (okun sağ tarafında olan değerler) olduğu gibi kopyalanmıştır.</p>
<p><strong>4. durumda</strong> şayet bir devamlının (nonterminal) tanımında karışık bir durum varsa (yani bir sonluyu (terminal) ifade eden terim karışıksa) basitletştirmek için ilave bir devamlı (nonterminal) eklenir. Yine yukarıdaki dilden devam edecek olursak:</p>
<p>S<sub>0</sub><img class="tex" src="http://upload.wikimedia.org/math/8/5/5/8558a668c3dd3fe346c448d980f33d6c.png" alt="\rightarrow\, " /> ASA | aB | AS | SA | a<br />
S<img class="tex" src="http://upload.wikimedia.org/math/8/5/5/8558a668c3dd3fe346c448d980f33d6c.png" alt="\rightarrow\, " /> ASA | aB | AS | SA | a<br />
A <img class="tex" src="http://upload.wikimedia.org/math/8/5/5/8558a668c3dd3fe346c448d980f33d6c.png" alt="\rightarrow\, " />b | ASA | aB | AS | SA | a<br />
B <img class="tex" src="http://upload.wikimedia.org/math/8/5/5/8558a668c3dd3fe346c448d980f33d6c.png" alt="\rightarrow\, " />b</p>
<p>Gramerinde &#8220;a&#8221; sonlusunun (terminal) değerinin B devamlısı (nonterminal) ile yanyana durduğu aB terimini görüyoruz. Bu karışık bir durumdur ve çözümü için yeni bir devamlı (nonterminal) ilave edilir.</p>
<p>S<sub>0</sub><img class="tex" src="http://upload.wikimedia.org/math/8/5/5/8558a668c3dd3fe346c448d980f33d6c.png" alt="\rightarrow\, " /> ASA | UB | AS | SA | a<br />
S<img class="tex" src="http://upload.wikimedia.org/math/8/5/5/8558a668c3dd3fe346c448d980f33d6c.png" alt="\rightarrow\, " /> ASA | UB | AS | SA | a<br />
A <img class="tex" src="http://upload.wikimedia.org/math/8/5/5/8558a668c3dd3fe346c448d980f33d6c.png" alt="\rightarrow\, " />b | ASA | UB | AS | SA | a<br />
B <img class="tex" src="http://upload.wikimedia.org/math/8/5/5/8558a668c3dd3fe346c448d980f33d6c.png" alt="\rightarrow\, " />b</p>
<p>U <img class="tex" src="http://upload.wikimedia.org/math/8/5/5/8558a668c3dd3fe346c448d980f33d6c.png" alt="\rightarrow\, " />a</p>
<p>Yukarıdaki şekilde karışık olan bütün aB terimleri düzeltilmiştir.</p>
<p><strong>5. durumda</strong> ise uzun terimlerin kısaltılması söz konusudur. Yani okun sağ tarafında en fazla iki devamlı (nonterminal) bir terimde bulunabilir. Örneğin ASA gibi üç devamlı (nonterminal) bulunduğu durumlar CNF için uygun değildir.</p>
<p>S<sub>0</sub><img class="tex" src="http://upload.wikimedia.org/math/8/5/5/8558a668c3dd3fe346c448d980f33d6c.png" alt="\rightarrow\, " /> ASA | UB | AS | SA | a<br />
S<img class="tex" src="http://upload.wikimedia.org/math/8/5/5/8558a668c3dd3fe346c448d980f33d6c.png" alt="\rightarrow\, " /> ASA | UB | AS | SA | a<br />
A <img class="tex" src="http://upload.wikimedia.org/math/8/5/5/8558a668c3dd3fe346c448d980f33d6c.png" alt="\rightarrow\, " />b | ASA | UB | AS | SA | a<br />
B <img class="tex" src="http://upload.wikimedia.org/math/8/5/5/8558a668c3dd3fe346c448d980f33d6c.png" alt="\rightarrow\, " />b</p>
<p>U <img class="tex" src="http://upload.wikimedia.org/math/8/5/5/8558a668c3dd3fe346c448d980f33d6c.png" alt="\rightarrow\, " />a</p>
<p>dilini ele alırsak</p>
<p>S0 <img class="tex" src="http://upload.wikimedia.org/math/8/5/5/8558a668c3dd3fe346c448d980f33d6c.png" alt="\rightarrow\, " /> AA1 | UB | AS | SA | a<br />
S <img class="tex" src="http://upload.wikimedia.org/math/8/5/5/8558a668c3dd3fe346c448d980f33d6c.png" alt="\rightarrow\, " /> AA1 | UB | AS | SA | a<br />
A<img class="tex" src="http://upload.wikimedia.org/math/8/5/5/8558a668c3dd3fe346c448d980f33d6c.png" alt="\rightarrow\, " /> b | AA1 | UB | AS | SA | a<br />
B <img class="tex" src="http://upload.wikimedia.org/math/8/5/5/8558a668c3dd3fe346c448d980f33d6c.png" alt="\rightarrow\, " /> b<br />
U <img class="tex" src="http://upload.wikimedia.org/math/8/5/5/8558a668c3dd3fe346c448d980f33d6c.png" alt="\rightarrow\, " /> a<br />
A1 <img class="tex" src="http://upload.wikimedia.org/math/8/5/5/8558a668c3dd3fe346c448d980f33d6c.png" alt="\rightarrow\, " /> SA</p>
<p>Tek problemli olan ASA terimi yerine ilave bir devamlı (nonterminal) eklenerek yukarıdaki şekilde düzeltilebilir.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2009/06/22/chomsky-normal-sekili-chomsky-normal-form/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
