<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Bilgisayar Kavramları</title>
	
	<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>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/BilgisayarKavramlari" /><feedburner:info uri="bilgisayarkavramlari" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Bellman Ford Algoritması</title>
		<link>http://feedproxy.google.com/~r/BilgisayarKavramlari/~3/UEeU60T6SWg/</link>
		<comments>http://www.bilgisayarkavramlari.com/2010/08/05/bellman-ford-algoritmasi-2/#comments</comments>
		<pubDate>Thu, 05 Aug 2010 09:06:37 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2010/08/05/bellman-ford-algoritmasi-2/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Bu algoritmanın amacı, bir şekil (graph) üzerindeki, bir kaynaktan (source) bir hedefe(target veya sink) giden en kısa yolu bulmaktır. Algoritma ağırlıklı şekiller (weighted graph) üzerinde çalışır. Kabaca, bütün düğümler için bütün kenarları dolaşır. Dolayısıyla performansı düğüm sayı ile kenar sayısının çarpımı olarak düşünülebilir. O( V E ) Algoritma aşağıdaki şekildedir: [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER
</p>
<p>Bu algoritmanın amacı, bir <a href="http://www.bilgisayarkavramlari.com/2008/08/01/graf-sekil-graph/">şekil (graph)</a> üzerindeki, bir kaynaktan (source) bir hedefe(target veya sink) giden en kısa yolu bulmaktır. Algoritma ağırlıklı şekiller (weighted graph) üzerinde çalışır. Kabaca, bütün düğümler için bütün kenarları dolaşır. Dolayısıyla performansı düğüm sayı ile kenar sayısının çarpımı olarak düşünülebilir. O( V E )
</p>
<p>Algoritma aşağıdaki şekildedir:
</p>
<p><span style="font-family:Courier New">Bütün düğümlere sonsuz mesafesini ata<br />
</span></p>
<p><span style="font-family:Courier New">Her düğüm için<br />
</span></p>
<p><span style="font-family:Courier New">    Her kenar için<br />
</span></p>
<p><span style="font-family:Courier New">        Düğümün üzerindeki mesafeden daha küçük mesafe bulduysan<br />
</span></p>
<p><span style="font-family:Courier New">            Düğüm mesafesini ve düğüme gelinen düğümü güncelle<br />
</span></p>
<p>Yukarıdaki kodda görüldüğü üzere, iç içe iki döngü, kenar ve düğüm sayısı kadar dönmektedir. Ayrıca, bir düğümdeki değerin güncellenmesi sırasında, hangi düğümden gelindiği bilgisi de tutulmaktadır. Bu durum eksi yüklü kenarlar için çözüm oluşturur. Örneğin Dijkstra algoritmasında olan ve negatif değerli kenarlardan kaynaklanan döngüye girilme ihtimali, Bellman-Ford algoritmasında bulunmaz.
</p>
<p>Algoritma Dijkstra algoritmasında olduğu gibi en küçük değere sahip olan kenardan gitmek yerine bütün graf üzerindeki kenarları test eder. Bu sayede <a href="http://www.bilgisayarkavramlari.com/2008/03/24/acgozlu-yaklasimi-greedy-approach/">aç gözlü yaklaşımının (greedy approach)</a> handikabına düşmez ve her düğüme sadece bir kere bakarak en kısa yolu bulmuş olur.
</p>
<p>Öncelikle eksi değerde düğüm bulunmayan bir örnek üzerinden algoritmayı çalıştıralım.
</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/080510_0906_BellmanFord1.png" alt=""/>
	</p>
<p>Öncelikle düğümlere değer ataması yapılıyor. Bütün düğümlere <span style="font-family:Symbol">¥</span> sonsuz değeri atanıyor.
</p>
<p>Ayrıca başlangıç düğümü olarak A, Hedef düğüm olarak da E düğümünü tanımlayalım. Bu düğümleri algoritmanın sonunda kontrol için kullanacağız.
</p>
<p>A başlangıç olduğu için 0 değerine sahip.
</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/080510_0906_BellmanFord2.png" alt=""/>
	</p>
<p>Önce dolaşacağımız düğümler için bir sıra oluşturalım. Bu örnekte alfabetik olarak düğümleri dolaşacağız ancak bu durum tamamen rast geledir.
</p>
<p>Düğüm sıramız: A,B,C,D,E,F olmuş oluyor.
</p>
<p>Şimdi de kenarları sıralayalım:
</p>
<p>AB 2
</p>
<p>AC 1
</p>
<p>BE 2
</p>
<p>BF 5
</p>
<p>CF 2
</p>
<p>CD 1
</p>
<p>DF 5
</p>
<p>DE 7
</p>
<p>Bellman-Ford algoritması işte bu kenarları teker teker dolaşması itibariyle dijkstradan ayrılır. Sırayla yukarıdaki kenarları (Edges) dolaşır ve graftaki değerleri günceller.
</p>
<p>Algoritma öncelikli olarak düğümleri dolaşıyor ve her düğüm için kenarları dolaşacak.
</p>
<p>A düğümü için kenarları dolaşıyoruz. Kenarlardan sadece AB ve AC kenarları, A düğümü ile ilgili. Aslında bütün kenarlar dolaşılıyor olmasına rağmen, sadece bu iki kenar, graftaki sonucu etkileyecek.
</p>
<p>AB 2, min(A,B) = 0 <span style="font-family:Wingdings">à</span> 0+ 2 = 2
</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/080510_0906_BellmanFord3.png" alt=""/>
	</p>
<p>AC 1, min(A,C) = 0 =&gt; 0+1 = 1
</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/080510_0906_BellmanFord4.png" alt=""/>
	</p>
<p>Ardından B düğümüne geçiyoruz. Ve bu düğüm için bütün kenarları tekrar dolaşmaya başlıyoruz.
</p>
<p>Bu durumda etkisi görülecek kenarlar:
</p>
<p>AB 2
</p>
<p>AC 1
</p>
<p>BE 2
</p>
<p>BF 5
</p>
<p>CF 2
</p>
<p>CD 1
</p>
<p>Kenarlarıdır çünkü bunlar dışındaki kenarların bağladıkları düğümler sonsuz değerindedir ve güncelleme olmaz. Diğer bir deyişle grafın yukarıdaki şeklinde, A,B,C düğümlerinde sonsuz dışında değerler bulunuyor .O halde sadece bu düğümlere komşu olan kenarları almak yeterlidir.
</p>
<p>BE 2, min (B,E ) 2, =&gt; 2 + 2  = 4
</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/080510_0906_BellmanFord5.png" alt=""/>
	</p>
<p>BF 5, min(B,F) = 2 =&gt; 2+5 = 7
</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/080510_0906_BellmanFord6.png" alt=""/>
	</p>
<p>CF 2, min (C,F) = 1 =&gt; 1+2 = 3, bu değer 7&#8242;den küçük olduğu için güncelliyoruz:
</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/080510_0906_BellmanFord7.png" alt=""/>
	</p>
<p>CD -1, min(C,D) = 1=&gt; 1+(-1) = 0
</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/080510_0906_BellmanFord8.png" alt=""/>
	</p>
<p>Yukarıdaki son halimizde henüz 2 düğüm için işlem yapıldı ( A ve B düğümleri).
</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/080510_0906_BellmanFord9.png" alt=""/>
	</p>
<p>Graf 2 düğüm için kararlı hale ulaşmıştır ve diğer düğümler için işlem devam etse bile graftaki değerler değişmez.
</p>
<p>
 </p>
<p>
 </p>
<p>
 </p>
<p><strong>İkinci Örnek<br />
</strong></p>
<p>Yukarıdaki örnekte, düğümlerin ve kenarların rast gele dizildiğinden bahsetmiştik. Acaba bu dizilim rast gele olarak yukarıdakinden farklı olsaydı Bellman-Ford yine başarılı çalışır mıydı?
</p>
<p>Düğüm diziliminin sonuca bir etkisi olmamakla beraber, kenar dizilimi sonucu etkiler:
</p>
<p>Yukarıdaki dizilimi tersine çevirelim:
</p>
<div>
<table style="border-collapse:collapse" border="0">
<colgroup>
<col style="width:64px"/></colgroup>
<tbody valign="top">
<tr style="height: 40px">
<td vAlign="bottom" style="padding-left: 5px; padding-right: 5px; border-top:  none; border-left:  none; border-bottom:  none; border-right:  none">
<p>DF 5 </p>
</td>
</tr>
<tr style="height: 40px">
<td vAlign="bottom" style="padding-left: 5px; padding-right: 5px; border-top:  none; border-left:  none; border-bottom:  none; border-right:  none">
<p>DE 7 </p>
</td>
</tr>
<tr style="height: 40px">
<td vAlign="bottom" style="padding-left: 5px; padding-right: 5px; border-top:  none; border-left:  none; border-bottom:  none; border-right:  none">
<p>CF 2 </p>
</td>
</tr>
<tr style="height: 40px">
<td vAlign="bottom" style="padding-left: 5px; padding-right: 5px; border-top:  none; border-left:  none; border-bottom:  none; border-right:  none">
<p>CD 1 </p>
</td>
</tr>
<tr style="height: 40px">
<td vAlign="bottom" style="padding-left: 5px; padding-right: 5px; border-top:  none; border-left:  none; border-bottom:  none; border-right:  none">
<p>BF 5 </p>
</td>
</tr>
<tr style="height: 40px">
<td vAlign="bottom" style="padding-left: 5px; padding-right: 5px; border-top:  none; border-left:  none; border-bottom:  none; border-right:  none">
<p>BE 2 </p>
</td>
</tr>
<tr style="height: 40px">
<td vAlign="bottom" style="padding-left: 5px; padding-right: 5px; border-top:  none; border-left:  none; border-bottom:  none; border-right:  none">
<p>AC 1 </p>
</td>
</tr>
<tr style="height: 40px">
<td vAlign="bottom" style="padding-left: 5px; padding-right: 5px; border-top:  none; border-left:  none; border-bottom:  none; border-right:  none">
<p>AB 2 </p>
</td>
</tr>
</tbody>
</table>
</div>
<p>
 </p>
<p>Bu yeni dizilime göre algoritmamızı çalıştırıyoruz:
</p>
<p>A düğümü için kenarları dolaşıyoruz. Kenarlardan sadece AB ve AC kenarları, A düğümü ile ilgili. Aslında bütün kenarlar dolaşılıyor olmasına rağmen, sadece bu iki kenar, graftaki sonucu etkileyecek.
</p>
<p>AC 1, min(A,C) = 0 =&gt; 0+1 = 1
</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/080510_0906_BellmanFord10.png" alt=""/>
	</p>
<p>
 </p>
<p>AB 2, min(A,B) = 0 <span style="font-family:Wingdings">à</span> 0+ 2 = 2
</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/080510_0906_BellmanFord11.png" alt=""/>
	</p>
<p>Ardından B düğümüne geçiyoruz. Ve bu düğüm için bütün kenarları tekrar dolaşmaya başlıyoruz.
</p>
<p>Bu durumda etkisi görülecek kenarlar:
</p>
<div>
<table style="border-collapse:collapse" border="0">
<colgroup>
<col style="width:64px"/></colgroup>
<tbody valign="top">
<tr style="height: 40px">
<td vAlign="bottom" style="padding-left: 5px; padding-right: 5px; border-top:  none; border-left:  none; border-bottom:  none; border-right:  none">
<p>CF 2</p>
</td>
</tr>
<tr style="height: 40px">
<td vAlign="bottom" style="padding-left: 5px; padding-right: 5px; border-top:  none; border-left:  none; border-bottom:  none; border-right:  none">
<p>CD 1 </p>
</td>
</tr>
<tr style="height: 40px">
<td vAlign="bottom" style="padding-left: 5px; padding-right: 5px; border-top:  none; border-left:  none; border-bottom:  none; border-right:  none">
<p>BF 5 </p>
</td>
</tr>
<tr style="height: 40px">
<td vAlign="bottom" style="padding-left: 5px; padding-right: 5px; border-top:  none; border-left:  none; border-bottom:  none; border-right:  none">
<p>BE 2 </p>
</td>
</tr>
<tr style="height: 40px">
<td vAlign="bottom" style="padding-left: 5px; padding-right: 5px; border-top:  none; border-left:  none; border-bottom:  none; border-right:  none">
<p>AC 1 </p>
</td>
</tr>
<tr style="height: 40px">
<td vAlign="bottom" style="padding-left: 5px; padding-right: 5px; border-top:  none; border-left:  none; border-bottom:  none; border-right:  none">
<p>AB 2 </p>
</td>
</tr>
</tbody>
</table>
</div>
<p>
 </p>
<p>Kenarlarıdır çünkü bunlar dışındaki kenarların bağladıkları düğümler sonsuz değerindedir ve güncelleme olmaz. Diğer bir deyişle grafın yukarıdaki şeklinde, A,B,C düğümlerinde sonsuz dışında değerler bulunuyor .O halde sadece bu düğümlere komşu olan kenarları almak yeterlidir.
</p>
<p>CF 2 için:
</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/080510_0906_BellmanFord12.png" alt=""/>
	</p>
<p>CD 1 için
</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/080510_0906_BellmanFord13.png" alt=""/>
	</p>
<p>BF 5 için , zaten daha kısa olan 3 değeri bulunmuştur
</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/080510_0906_BellmanFord14.png" alt=""/>
	</p>
<p>BE 2 için
</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/080510_0906_BellmanFord15.png" alt=""/>
	</p>
<p>AC ve AB kenarları için ise değişiklik olmaz.
</p>
<p>Yukarıdaki bu yeni çalışmada dikkat edilirse, bir önceki çalışmadan farklı olarak F düğümü hiç 7 olmadan 3 değerini bulmuştur. Görüldüğü üzere kenar sıralaması, sonucu etkilememekle birlikte çalışma hızını etkileyebilir.
</p>
<p>
 </p>
<p>
 </p>
<p><strong>Eksi değerli Şekiller<br />
</strong></p>
<p>Gelelim eksi değer olması durumuna.
</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/080510_0906_BellmanFord16.png" alt=""/>
	</p>
<p>Yukarıdaki şekilde görüldüğü üzere, BE ve CD kenarları eksi değerlidir. Bu şeklin çalışmasını inceleyelim:
</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/080510_0906_BellmanFord17.png" alt=""/>
	</p>
<p>Her şey, normal algoritmada olduğu gibi, başlangıç dışındaki düğümlere sonsuz atayarak başlıyor.
</p>
<p>Bu algoritmanın eksi değerlerdeki başarısının anlaşılabilmesi için, şimdiye kadar ihtiyaç duymadığımız ve yazının başında belirtilen, hangi düğümden gelindiği bilgisine ihtiyaç vardır. Yani algoritmamızı çalıştırırken, her düğümdeki değerin güncellenmesi sırasında, hangi düğümden güncellendiği yazılır.
</p>
<p>Ardından her düğüm için ve her kenar için işlem yapılıyor. Bu adımları daha önce detaylıca gösterdiğim için aşağıda düğüm bazlı hızlandırılmış olarak anlatıp, sadece eksi değerdeki farkı vurgulayacağım:
</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/080510_0906_BellmanFord18.png" alt=""/>
	</p>
<p>Bir sonraki adımda kenar sırasına göre aşağıdaki güncellemeler yapılır:
</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/080510_0906_BellmanFord19.png" alt=""/>
	</p>
<p>Bu haliyle, graftaki bütün düğümlere erişilmiştir. Fakat problem bitmez. Yani eksi değerli düğümler, çalışmanın hala devam etmesini gerektirir.
</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/080510_0906_BellmanFord20.png" alt=""/>
	</p>
<p>Yukarıdaki son hali, kararlı haldir.
</p>
<p>Bu noktada şu soru sorulabilir: Peki neden tekrar eski değerli düğümler işlenerek, D ve E düğümleri güncellemiyor?
</p>
<p>Bu soru haklı bir sorudur ancak yazının başında belirtildiği üzere, bellman-ford algoritması, her düğümde, kimden gelindiği bilgisini tutar. Dolayısıyla D düğümünü 0 olarak güncellemeden önce, D düğümüne, C düğümünden gelindiği ve E düğümüne de B düğümünden gelindiği kaydedilmiştir.
</p>
<p>Dolayısıyla, eksi değerler tağılan bu döngülerde, tekrar edilip örneğin F düğümüne -4 değeri yazılamaz. Çünkü F düğümü zaten B düğümünden güncellenmiştir.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/_nMU8hXMlvY46-kDOjdSCpVFqiE/0/da"><img src="http://feedads.g.doubleclick.net/~a/_nMU8hXMlvY46-kDOjdSCpVFqiE/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/_nMU8hXMlvY46-kDOjdSCpVFqiE/1/da"><img src="http://feedads.g.doubleclick.net/~a/_nMU8hXMlvY46-kDOjdSCpVFqiE/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/BilgisayarKavramlari/~4/UEeU60T6SWg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2010/08/05/bellman-ford-algoritmasi-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.bilgisayarkavramlari.com/2010/08/05/bellman-ford-algoritmasi-2/</feedburner:origLink></item>
		<item>
		<title>R Project</title>
		<link>http://feedproxy.google.com/~r/BilgisayarKavramlari/~3/30JmFm907to/</link>
		<comments>http://www.bilgisayarkavramlari.com/2010/07/29/r-project/#comments</comments>
		<pubDate>Thu, 29 Jul 2010 13:04:18 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Bilgisayar Matematiği]]></category>
		<category><![CDATA[Son Kullanıcı]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2010/07/29/r-project/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER R project (projesi), daha önceden vâr olan S Lang isimli, ücretli, istatistik diline alternatif olarak ücretsiz olarak çıkarılmıştır. Bu yazının amacı R Project isimli bu istatistiksel modelleme ve geliştirme aracını tanıtan Türkçe bir yazı yayınlamaktır. Bu yazı kapsamında, R Project 2.11.1 sürümü kullanılacaktır. R Project programını, r-project.org sitesinden indirebilirsiniz. Giriş [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER
</p>
<p>R project (projesi), daha önceden vâr olan S Lang isimli, ücretli, istatistik diline alternatif olarak ücretsiz olarak çıkarılmıştır.
</p>
<p>Bu yazının amacı R Project isimli bu istatistiksel modelleme ve geliştirme aracını tanıtan Türkçe bir yazı yayınlamaktır. Bu yazı kapsamında, R Project 2.11.1 sürümü kullanılacaktır. R Project programını, r-project.org sitesinden indirebilirsiniz.
</p>
<h1>Giriş<br />
</h1>
<p>R project programını ilk kez çalıştırdığınızda, aşağıdaki gibi bir ekran ile karşılaşırsınız:
</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/072910_1304_RProject1.png" alt=""/>
	</p>
<p>Yukarıdaki ekranda görülen pencere, bizim komutları verdiğimiz ana penceremiz olacak. Bu pencerede R Project içerisinde daha önceden tanımlı olan fonksiyonları kullanabileceğimiz gibi yeni fonksiyon tanımlamaları da yapabiliriz.
</p>
<p>Basit işlemler ile programı kullanmayı öğrenelim. En basit ve en önemli ilk komutumuz, programdan nasıl çıkılacağı. Bunun için yukarıdaki resimde görülen ekranda &#8220;q()&#8221; yazmanız yeterlidir. Elbette R Project, mevcut çalışmaların kaybolmaması için, kaydetmek isteyip istemediğimizi soracaktır.
</p>
<p>Sırada ikinci en önemli komutumuz olan &#8220;help()&#8221; komutu var. Bu komut adı üzerinde R Project&#8217;in yardım dosyalarını görüntüler ve herhangi bir komut hakkında bilgi almamıza yarar. Örneğin yeni öğrendiğimiz &#8220;q()&#8221; komutu hakkında bilgi almak isteyelim. Bu durumda
</p>
<p>&gt;help(q)
</p>
<p>Yazmamız yeterlidir. Şayet kurulum sırasında, yardım dokümanlarını yüklemeyi seçtiyseniz bilgisayarınızdaki kurulu olan yardım dosyalarından q fonksiyonu hakkında bilgiler bulunarak size internet görüntüleyicinizde gösterilecektir. Şayet bu yardım dosyalarını yüklemediyseniz, internet üzerinden R Project sitesine bağlanılarak yardım dosyaları gösterilecektir.
</p>
<p>Alternatif olarak yardım için ? işareti de kullanılabilir. Örneğin q fonksiyonu hakkında yardım almak için help(q) yazmak yerine ?q da yazılabilir. Bu iki kullanım birbirinin aynıdır.
</p>
<p>Bazı durumlarda, kullanılmak istenen komut hatırlanamayabilir. Şayet kullanmak istediğiniz komutun bir kısmını hatırlıyorsanız, yardım dosyalarında bu komuta benzeyen bütün komutları ?? işareti ile aratabilirsiniz. Örneğin ??q şeklinde bir komut verirsek, yardım dosyalarında, içinde ne kadar q harfi geçen komut varsa hepsini listeler.
</p>
<h1>Basit Vektörler<br />
</h1>
<p>R Project&#8217;e giriş yaptıktan sonra vektörler, diziler ve basit işlemleri öğrenebiliriz.
</p>
<p>R project için en önemli komutlardan birisi c() komutudur. Bu komut, concatinate (üleştirmek) kelimesinden gelir ve verilen bilgileri üleştirerek bir vektör oluşturur.
</p>
<p>Örneğin aşağıdaki ekran görüntüsünü incleyelim:
</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/072910_1304_RProject2.png" alt=""/>
	</p>
<p>Ekran görüntüsünde ilk satırda, sadi ismindeki bir değişkene, c fonksiyonu ile bir vektör ataması yapılıyor. Bu değişken ismi daha önceden tanımlı değildir ve ilk defa burada kullanılıyor, otomatik olarak bu isimde bir vektör oluşup, daha sonraki işlemler için <a href="http://www.bilgisayarkavramlari.com/2008/11/07/rastgele-erisilebilir-bellek-random-access-memory-ram/">hafızada (RAM)</a> saklanıyor.
</p>
<p>Nitekim ikinci satırda bu değişkenin ismi tek başına yazıldığında, değişkenin içerisindeki vektör (mavi renkle) görüntüleniyor.
</p>
<p>Burada atama işlemi (assignment) yapılmıştır ve c() fonksiyonunda oluşturulan vektör, &#8220;sadi&#8221; isimli değişkene atanmıştır. Bu atma işlemi için &lt;- sembolleri kullanılmıştır (küçüktüt ve eksi)
</p>
<p>Aynı atama işlemi assign() fonksiyonu kullanılarak da yapılabilir. Yalnız assign kullanılırsa, değişkenin ismi çift tırnak içinde yazılmalıdır. Benzer şekilde okun yönü -&gt; sağa doğru (eksi ve büyüktür) şeklinde kullanılırsa, okun solundaki değer, sağındaki değişkene atanır.
</p>
<p>Örneğin son satırında, bu şekilde seker değişkenine atama yapılmıştır.
</p>
<p>Vektörler, R Project için en basit veri yapılarıdır. Bu veri yapıları kullanılarak çeşitli işlemler yapılabilir.
</p>
<p>Örneğin basit 4 işlem için + &#8211; * ve / operatörleri kullanılabilir (sırasıyla, toplama, çıkarma, çarpma ve bölme işlemlerinin sembolleri)
</p>
<p>Bir önceki örnekte sadi değişkeninin içerisine bir vektör ataması yapıldı. Bu vektör üzerinde, aşağıdaki şekilde işlemler yapılabilir:
</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/072910_1304_RProject3.png" alt=""/>
	</p>
<p>Görüldüğü üzere yukarıda, sırasıyla, bölme, toplama, çarpma ve çıkarma işlemleri gösterilmiştir. Örneğin ilk örnekte 1/sadi komutu ile, sadi değişkeni içerisinde bulunan bütün değerlerin 1&#8242;e bölümünden çıkan yeni vektör görüntülenmiştir.
</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/072910_1304_RProject4.png" alt=""/>
	</p>
<p>Bu vektörü görüntülemek yerine yukarıdaki örnekte olduğu gibi a isimli bir değişkene atama yapılıp, ileride de kullanılabilir.
</p>
<p>Yukarıdaki bu dört işlem dışında, R Project içerisinde, vektörler için geniş bir fonksiyon kütüphanesi bulunur. Bunlardan sık kullanılan bazılarını anlatalım.
</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/072910_1304_RProject5.png" alt=""/>
	</p>
<p>Bu örneklerden, sum, vektör elemanlarının toplamını, mean ortalamasını ve length eleman sayısını bulmaya yarar.
</p>
<p>Vektör değeri üretilmesi sırasında da R Project içerisinde bazı kolay komutlar bulunmaktadır.
</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/072910_1304_RProject6.png" alt=""/>
	</p>
<p>Örneğin : operatörü, bir dizi oluştururken, başlangıç ve bitiş değerlerini alır. Bu değerler arasında birer birer artan bir dizi oluşturur. 1:10 dizisi bu şekilde oluşturulmuştur.
</p>
<p>Bu iş için seq fonksiyonu da kullanılabilir. Bu fonksiyon iki parametre alabileceği ve : operatörüne denk kullanılabileceği gibi üçüncü bir parametre daha alıp artış miktarını ayarlayabilir. Seq(1,10,by=2) yazımında, by=2, artış miktarının 2şer 2şer olacağını anlatır. Örneğin by=.2 şeklinde 0.2 olarak da arttırılabilirdi. Aynı durum, : operatörü ile bir dizi oluşturup bir sabit ile çarparak da oluşturulabilir.
</p>
<p>Ayrıca seq fonksiyonuna parametre olarak from ve length değerleri de verilebilir.
</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/072910_1304_RProject7.png" alt=""/>
	</p>
<p>Length, vektörün eleman sayısını, from ise başlangıç değerini belirtir.
</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/072910_1304_RProject8.png" alt=""/>
	</p>
<p>Rep fonksiyonu, bir vektörün tekrarlaması (repeat) için kullanılır. Bu tekrar işlemi, aynı vektörün arka arkaya tekrarlanması şeklinde ise  times parametresine kaç tekrar istendiği verilerek, şayet vektörün her elamanı tekrarlanacaksa each parametresine sayı verilerek yapılabilir.
</p>
<h1>Dizgi (String) Vektörleri<br />
</h1>
<p>Yukarıdaki bölümde anlatıldığı üzere vektörleri sayılardan oluşturmak mümkün olduğu gibi, dizgilerden (string) oluşturmak da mümkündür.
</p>
<p>R Project içerisinde, bir <a href="http://www.bilgisayarkavramlari.com/2008/08/02/dizgi-string/">dizgiyi (string)</a> belirten sembol çift tırnaktır.
</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/072910_1304_RProject9.png" alt=""/>
	</p>
<p>Örnekte görüldüğü üzere, c fonksiyonu kullanılarak bu kez ali isminde bir dizgi vektörü oluşturulmuştur.
</p>
<p>Dizgilerde özel sembollerin yazılması için \ sembolü kullanılır. Örneğin zaten tırnak içerisindeki bir dizgiye tırnak sembolü konulmak istenirse \&#8221; şeklinde yazılması gerekir. Benzer şekilde \ işaretini bir dizginin içerisine yerleştirmek için \\ şeklinde iki kere tekrar edilmesi gerekir.
</p>
<h1>Vektör Indisleri (Indexes)<br />
</h1>
<p>Vektörlerle çalışırken, önemli konulardan birisi de indekslerin doğru kullanılmasıdır. Basitçe bir vektörün içerisindeki bir veya birden çok belirli elemanlara erişmeye yarayan operatördür. [] şeklinde köşeli parantezlerle kullanılır.
</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/072910_1304_RProject10.png" alt=""/>
	</p>
<p>Örneğin yukarıdaki ilk kullanımda, a,b şeklindeki bir vektöre indis olarak 1,2,2,1,1 şeklindeki ikinci bir vektör indis olarak veriliyor. Bunun anlamı, ilk vektördeki a,b ikilisindeki elemanların hangi sırayla tekrarlanacağıdır. Yani a elemanı 1. Eleman, b elemanı ise ikinci eleman, o halde 1,2,2,1,1 vektöründeki 1 yerine a ve 2 yerine b konulması istenmiştir.
</p>
<p>Yukarıdaki ikinci örnekte, a isimli bir vektör içerisine 1&#8242;den 20&#8242;ye kadar olan çift sayılar yerleştirilmiştir.  İndis olarak verilen vektör ise 3,2,8 olduğuna göre, vektörün bu elemanları sonuçta görüntülenir.
</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/072910_1304_RProject11.png" alt=""/>
	</p>
<p>İndis kullanımında, tek bir sayı verilerek, sadece bu elemana doğrudan erişilebileceği gibi, eksi sayılar kullanılarak, vektörden bu elemanlar çıkarılabilir. Örneğin a[-2] kullanımı, vektörden 2. Elemanın çıkarılması anlamındadır. a[1:3*-2] kullanımı ise aslında a[c(-2,-4,-6)] olduğuna göre, 2. 4. Ve 6. Elemanların çıkarılması anlamındadır.
</p>
<h1>Vektör seviyeleri (levels)<br />
</h1>
<p>Vektörlerde önemli bir konu da, vektörler üzerinde oluşturulan seviyelerdir. Basitçe bir vektörde birden fazla tekrar eden bir bilgi bulunuyorsa, bu bilgi bir üst seviyede gruplanabilir.
</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/072910_1304_RProject12.png" alt=""/>
	</p>
<p>Yukarıdaki örnekte, gorev ve maas isimli iki vektör değişkeni bulunmaktadır. Gorev değişkeninde, bazı görevlerin tekrarlı olduğuna dikkat ediniz.
</p>
<p>8 adet görev ve her görevdekilerin maaşının yazılı olduğu 8 adet maaştan oluşan iki ayrı vektör bulunuyor.
</p>
<p>Öncelikle factor komutunu kullanarak, gorev vektöründeki seviyeleri çıkarıyoruz. Nitekim, factor komutundan sonra bize Levels: …. Şeklinde ikinci bir satıda, çıkarılan seviyeleri listeliyor. Görüldüğü üzere factors komutu, kümeleme işlemi yapmaktadır. <a href="http://www.bilgisayarkavramlari.com/2009/06/24/kume-teorisi-set-theory/">Küme teorisinde (set theory)</a> bir eleman sadece bir kere geçebilir. Dolayısıyla çıkarılan levels listesinde de her eleman tek bir kere geçmektedir. Ayrıca alfabetik olarak sıralamaktadır.
</p>
<p>Bu listeye levels() fonksiyonu ile ulaşılabilir.
</p>
<p>Tapply fonksiyonu ise iki vektörü bir fonksiyon üzerinden birleştirmeye yarar. Örneğin her gorevin ortalama maaşını hesaplamak için mean, toplamı için de sum fonksiyonu, yukarıdaki örnekte kullanılmıştır.
</p>
<p>Bu kullanımı, SQL dilinde bulunan group by kelimesine benzetmek mümkündür. Öncelikle gruplama yapılıp ardından grup fonksiyonu uygulanmaktadır.
</p>
<h1>Diziler ve Matrisler<br />
</h1>
<p>R Project içerisinde, çok boyutlu vektörler için <a href="http://www.bilgisayarkavramlari.com/2007/05/04/array-dizi/">dizi (array)</a> kelimesi kullanılır. Buna göre, vektör tek boyutlu bir veri yapısı iken, diziler (array) çok boyutlu olabilir.
</p>
<p>Bu anlamda, matrisler (matrix) iki boyutlu diziler olarak kabul edilebilir. Diziler, üç veya daha fazla boyutta da olabilir.
</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/072910_1304_RProject13.png" alt=""/>
	</p>
<p>Yukarıdaki örnekte olduğu üzere, 1:18 ile 1&#8242;den 18&#8242;e kadar sayılar oluşturulmuş ardından bu sayılardan oluşan vektör, 2 boyutlu bir dizinin (array) içerisine döşenmiştir. Bu dizinin boyutları ise dim=c(3,6) komutu ile 3&#215;6 şeklinde verilmiştir.
</p>
<p>Yukarıdaki bu kullanımı, indis kullanımı ile birleştirmek de mümkündür.
</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/072910_1304_RProject14.png" alt=""/>
	</p>
<p>Dizi[2], kullanımı, dizinin 2. Elemanına erişirken, dizi[2,] kullanımı 2. Satıra, ve dizi[,2] kullanımı da 2. Sütuna işaret etmektedir.
</p>
<p>Bu indisler kullanılarak, dizi üzerinde değişiklik yapılması da mümkündür.
</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/072910_1304_RProject15.png" alt=""/>
	</p>
<p>İlk örnekte, dizinin 3. Elemanına 111 sayısı konulmuştur. BU işlemden sonra dizinin [3,1] elemanı 111 olarak değişmiştir.
</p>
<p>İkinci örnekte ise, dizinin ilk sütunu, 9,9,9 vektörü ile değiştirilmiştir.
</p>
<h1>Matrislerde İşlemler<br />
</h1>
<p>Matrislerde lineer cebir (linear algebra) gereği bazı işlemlerin R Project ile kolayca yapılması mümkündür.
</p>
<p>Örneğin temel matris işlemlerini ele alalım:
</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/072910_1304_RProject16.png" alt=""/>
	</p>
<p>Yukarıda iki adet 2&#215;2 boyutlarındaki (a ve b) matrisin sırasıyla, toplanması, çarpılması, çıkarılması ve bölünmesine örnekler gösterilmiştir.
</p>
<p>Benzer şekilde, matrislere özgü bazı işlemlerin yapılması da mümkündür. Örneğin iki matrisin Kartezyen çarpımı için (outer product) %o% şeklinde üç sembolden oluşan bir operatör kullanılması mümkündür:
</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/072910_1304_RProject17.png" alt=""/>
	</p>
<p>Görüldüğü üzere sonuç, 4 boyutlu bir matristir.
</p>
<p><a href="http://www.bilgisayarkavramlari.com/2008/12/29/matris-tersyuz-matrix-transpose/">Matris tersyüzü için (transpose)</a> t() fonksiyonu kullanılabilir:
</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/072910_1304_RProject18.png" alt=""/>
	</p>
<p>Görüldüğü üzere a matrisinin tersyüzü alınmıştır.
</p>
<p><a href="http://www.bilgisayarkavramlari.com/2008/11/19/matrisin-tersinin-alinmasi-mantrix-inverse/">Matrisin tersini almak</a> için solve() fonksiyonu kullanılabilir.
</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/072910_1304_RProject19.png" alt=""/>
	</p>
<p>Görüldüğü üzere a matrisinin, çarpmaya göre tersi alınmıştır.
</p>
<h1>Listeler (LISTS)<br />
</h1>
<p>R Project içerisinde kullanılan diğer bir veri tipi de listelerdir. Listelerin vektörlere göre farkı, veriyi sayısal indis yerine istenen bir veri tipinde indisleyebilmesidir.
</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/072910_1304_RProject20.png" alt=""/>
	</p>
<p>Yukarıdaki örnekte görüldüğü üzere, eleman isimli bir liste oluşturulmuştur. Bu listenin ilk iki elemanı dizgi (string) yapısında iken 3. Eleman sayı ve son elemanı bir vektördür.
</p>
<p>Listenin bir elemanına erişilirken, bu erişim için [[ ]] şeklinde çift köşeli parantez kullanılır.
</p>
<p>Yukarıdaki örnekteki son satırda, listenin 4. Elemanına erişilmiş, bu eleman bir vektör olduğu için de bu vektörün ilk elemanına erişilmiştir.
</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/072910_1304_RProject21.png" alt=""/>
	</p>
<p>Ayrıca yukarıdaki listenin herhangi bir bilgisi, doğrudan ismi kullanılarak aranabilir.
</p>
<p>Listelere eleman eklemek veya değiştirmek için, bu elemanın indis numarası kullanılabilir.
</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/072910_1304_RProject22.png" alt=""/>
	</p>
<p>Yukarıdaki örnekte görüldüğü üzere eleman listesine yeni bir değer 5. Sırada eklenmiştir.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/r50wbTF9KPh5diXhO2-OYzyqIHk/0/da"><img src="http://feedads.g.doubleclick.net/~a/r50wbTF9KPh5diXhO2-OYzyqIHk/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/r50wbTF9KPh5diXhO2-OYzyqIHk/1/da"><img src="http://feedads.g.doubleclick.net/~a/r50wbTF9KPh5diXhO2-OYzyqIHk/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/BilgisayarKavramlari/~4/30JmFm907to" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2010/07/29/r-project/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.bilgisayarkavramlari.com/2010/07/29/r-project/</feedburner:origLink></item>
		<item>
		<title>Polybius Şifrelemesi</title>
		<link>http://feedproxy.google.com/~r/BilgisayarKavramlari/~3/0HKBSq-HBOY/</link>
		<comments>http://www.bilgisayarkavramlari.com/2010/07/07/polybius-sifrelemesi/#comments</comments>
		<pubDate>Wed, 07 Jul 2010 11:48:10 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Veri Güvenliği(Cryptography)]]></category>
		<category><![CDATA[polybius]]></category>
		<category><![CDATA[polybius square]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/?p=4374</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Antik yunanda, Polybius ismindeki kişi tarafından bulunan iki boyutlu bir tahtaya dayalı şifreleme sistemidir. Bu sistemin özelliği, alfabedeki harflerin, iki boyutlu bir tabloya yerleştirilmesi ve ardından bu tablodaki satır ve sütun numaralarına göre okunmasıdır. Aşağıda ingiliz alfabesindeki harfler için böyle bir tablo gösterilmiştir: 1 2 3 4 5 1 A [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Antik yunanda, Polybius ismindeki kişi tarafından bulunan iki boyutlu bir tahtaya dayalı şifreleme sistemidir.</p>
<p>Bu sistemin özelliği, alfabedeki harflerin, iki boyutlu bir tabloya yerleştirilmesi ve ardından bu tablodaki satır ve sütun numaralarına göre okunmasıdır.</p>
<p>Aşağıda ingiliz alfabesindeki harfler için böyle bir tablo gösterilmiştir:</p>
<table>
<tbody>
<tr>
<th><strong> </strong></th>
<th>1</th>
<th>2</th>
<th>3</th>
<th>4</th>
<th>5</th>
</tr>
<tr>
<th>1</th>
<td>A</td>
<td>B</td>
<td>C</td>
<td>D</td>
<td>E</td>
</tr>
<tr>
<th>2</th>
<td>F</td>
<td>G</td>
<td>H</td>
<td>I/J</td>
<td>K</td>
</tr>
<tr>
<th>3</th>
<td>L</td>
<td>M</td>
<td>N</td>
<td>O</td>
<td>P</td>
</tr>
<tr>
<th>4</th>
<td>Q</td>
<td>R</td>
<td>S</td>
<td>T</td>
<td>U</td>
</tr>
<tr>
<th>5</th>
<td>V</td>
<td>W</td>
<td>X</td>
<td>Y</td>
<td>Z</td>
</tr>
</tbody>
</table>
<p>Görüldüğü üzere, ingilizcede bulunan 26 harf, 5&#215;5 = 25 boyutlarında bir tabloya yerleştirilmiş, dolayısıyla da bir hücreye iki harf I/J yerleştirilmesi gerekmiştir.</p>
<p>Aynı tabloyu, örneğin Türkçe için uyarlarsak, aşağıdaki gibi bir tablo olabilir:</p>
<table>
<tbody>
<tr>
<th><strong> </strong></th>
<th>1</th>
<th>2</th>
<th>3</th>
<th>4</th>
<th>5</th>
</tr>
<tr>
<th>1</th>
<td>A</td>
<td>B</td>
<td>C/Ç</td>
<td>D</td>
<td>E</td>
</tr>
<tr>
<th>2</th>
<td>F</td>
<td>G/Ğ</td>
<td>H</td>
<td>I/İ</td>
<td>J</td>
</tr>
<tr>
<th>3</th>
<td>K</td>
<td>L</td>
<td>M</td>
<td>N</td>
<td>O/Ö</td>
</tr>
<tr>
<th>4</th>
<td>P</td>
<td>R</td>
<td>S</td>
<td>Ş</td>
<td>T</td>
</tr>
<tr>
<th>5</th>
<td>U</td>
<td>Ü</td>
<td>V</td>
<td>Y</td>
<td>Z</td>
</tr>
</tbody>
</table>
<p>Bu tablolardaki hücrelerin, hangilerinde çift harf olacağı tamamen rast gele seçilmiştir.</p>
<p><strong>Şifreleme sisteminin çalışması</strong></p>
<p>Şifreleme sırasında, sistem, basitçe her harf için iki sayıdan oluşan bir sonuç bulur. Örneğin şifreleyeceğimiz bilgi &#8220;şadi&#8221; kelimesi olsun.</p>
<p>Bu kelimeyi şifrelemek için her harfin satır ve sütun numaralarına bakıyoruz.</p>
<p>ş harfi, 4 satır ve 4 sütun &#8211;&gt; 44</p>
<p>a harfi, 1 satır ve 1 sütun &#8211;&gt; 11</p>
<p>d harfi, 1 satır ve 4 sütun &#8211;&gt; 14</p>
<p>i harfi, 2 satır ve 4 sütun &#8211;&gt; 24</p>
<p>olarak değerler bulunur. Sonuçta bu değerler birleştirildiğinde şifreli mesaj elde edilmiş olur.</p>
<p>şadi &#8211;&gt; 44111424</p>
<p>Bazı kaynaklarda, şifreli mesaj 44-11-14-24 şeklinde &#8211; işareti ile ayrılarak gösterilmektedir. Bunun tek amacı okumayı kolaylaştırmaktır, yoksa sistemimizin her zaman için her harfi 2 haneli bir sayıya çevireceğini biliyoruz. Dolayısıyla bir ayıraca ihtiyaç yoktur.</p>
<p><strong>Sistemin şifreyi açması</strong></p>
<p>Şifrelenmiş mesaj açılırken bu defa tablo, tersten kullanılır.</p>
<p>Açmak istediğimiz mesaj 44111424 olsun. Bu mesajı açarken satır / sütun sırası kullanıyoruz.</p>
<p>ilk sayı 4, dolayısıyla 4. satıra bakıyoruz, ikinci sayı 4 dolayısıyla 4. sütuna bakıyoruz &#8211;&gt; ş</p>
<p>üçüncü sayı 1, dolayısıyla 1. satıra bakıyoruz, dördüncü sayı 1 dolayısıyla 1. sütuna bakıyoruz &#8211;&gt; a</p>
<p>beşinci sayı 1, dolayısıyal 1. satıra bakıyoruz, altıncaı sayı 4, dolayısıyla 4. sütuna bakıyoruz &#8211;&gt; d</p>
<p>yedinci sayı 2 dolayısıyla 2. satıra bakıyoruz, sekizinci sayı 4 dolayısıyla 4. sütuna bakıyoruz &#8211;&gt; I/İ</p>
<p>sonuçta açık mesajımız</p>
<p>şadı/i</p>
<p>olarak bulunuyor. yani açık mesaj ya şadı ya da şadi olmuş olur.</p>
<p>Polybius şifrelemsine saldırı</p>
<p>Sistem aslında bir <a href="http://www.bilgisayarkavramlari.com/2008/02/21/yerine-koyma-sifrelemesi-substitution-cipher/">yerine koyma (substitution cipher)</a> özelliği gösterir. Her harf, bir sayı ile değiştirilmiştir. Dolayısıyla <a href="http://www.bilgisayarkavramlari.com/2008/02/21/yerine-koyma-sifrelemesi-substitution-cipher/">yerine koyma (substitution cipher) </a>için geçerli olan bütün saldırı yöntemleri, bu sisteme karşı da kullanılabilir.</p>
<p><strong>Hakan Beyin Sorusu üzerine:</strong></p>
<p>Sayın Hakan Er, aşağıdaki soruyu sormuş:</p>
<p>1) 12-25-63-48-56-85-87  (attım) gibi bir şifre kesin olarak polybius  tekniğine göre mi şifrelenmiştir yoksa buna benzer başka tekniklerde var  mı?<br />
2)polybius şifrelemesinde 0 yok.ama benim şifremde 0 var ve  fazlasıyla.0 ne anlama geliyor?<br />
3)benim şifremde 26 dan yukarı rakam  yok.o halde damatahtamı 9&#215;9 yada 5&#215;5 yapmama gerek yok diye  düşünüyorum? nasıl yapmalıyım damatahtamı ?</p>
<p>cevabınız için  şimdiden teşekkür ederim.sevgiler.</p>
<p><strong>Cevap</strong></p>
<p>Yukarıdaki soruları, sırasıyla cevaplamaya çalışalım.</p>
<p>1) verdiğiniz iki haneli sayılar, herhangi bir şifreleme sisteminin sonucu olabilir. Örneğin <a href="http://www.bilgisayarkavramlari.com/2008/02/21/dogrusal-sifreleme-affine-cipher/">affine cipher</a>, <a href="http://www.bilgisayarkavramlari.com/2008/11/19/hill-sifrelemesi-hill-cipher/">hill cipher</a>, <a href="http://www.bilgisayarkavramlari.com/2008/02/23/vigenere-sifreleme-vigenere-cipher/">viegnere cipher</a> gibi şifreleme yöntemleri bunlara örnek olarak sayılabilir. Elbette sizin verdiğiniz sayıların hepsi 2 haneli olduğu için, örneğin viegnere şifrelemesinde veya hill şifrelemesinde blok boyutu 2 olarak alınmış demektir.</p>
<p>Dolayısıyla cevaben, iki haneli sayılardan oluşan bu şifreli mesaj, kesin olarak poylbius şifrelemesidir denilemez.</p>
<p>2 ve 3) 0 sayısı da bir sayıdır. Polybius şifrelemesi yukarıda anlatıldığı gibidir ama bunun dışında polybius şifrelemesinde değişiklikler yapılabilir.</p>
<p>Örneğin aşağıdaki tabloyu ele alalım:</p>
<table border="0">
<tbody>
<tr>
<td></td>
<td>0</td>
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
<td>5</td>
</tr>
<tr>
<td>0</td>
<td>a</td>
<td>b</td>
<td>c</td>
<td>ç</td>
<td>d</td>
<td>e</td>
</tr>
<tr>
<td>1</td>
<td>f</td>
<td>g</td>
<td>h</td>
<td>ı</td>
<td>i</td>
<td>j</td>
</tr>
<tr>
<td>2</td>
<td>k</td>
<td>l</td>
<td>m</td>
<td>n</td>
<td>o</td>
<td>ö</td>
</tr>
<tr>
<td>3</td>
<td>p</td>
<td>r</td>
<td>s</td>
<td>ş</td>
<td>t</td>
<td>u</td>
</tr>
<tr>
<td>4</td>
<td>ü</td>
<td>v</td>
<td>y</td>
<td>z</td>
<td>x</td>
<td>w</td>
</tr>
<tr>
<td>5</td>
<td>q</td>
<td>â</td>
<td>î</td>
<td>@</td>
<td>!</td>
<td>?</td>
</tr>
</tbody>
</table>
<p>Yukarıdaki talboda, sayılar 0&#8242;dan başlamış ve 6&#215;6 = 36 sembollü bir tablo kullanılmıştır. Bu tablo yine tamamen benim tarafımdan konuyu anlatmak için rastgele üretilmiştir.  Yani polybius şifrelemesi sistemin esaslarını koyar ama, polybius şifrelemesi kullanmak demek illaki sabit bir tablo kullanmak demek değildir. İstenilen bir tablo kullanılabilir. Buradaki şart, sistemi kullanan tarafların, kesin olarak tabloyu bilmeleri gerektiğidir.</p>
<p>Sizin sorunuz burada cevaplanmış oluyor. Yani yukarıdaki tablo kullanılarak örneğin &#8220;tabî&#8221; kelimesini şifrelersek sonuç aşağıdaki şekilde olur:</p>
<p>t &#8211;&gt; 34</p>
<p>a &#8211;&gt; 00</p>
<p>b &#8211;&gt; 01</p>
<p>î &#8211;&gt; 52</p>
<p>şifreli mesaj = 34-00-01-52</p>
<p>görüldüğü üzere kullandığınız tabloya göre hem 0 olabilir hem de 25&#8242;ten büyük sayılar olabilir.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/eovuVorlRnQLXYGns0-SJvjkGpc/0/da"><img src="http://feedads.g.doubleclick.net/~a/eovuVorlRnQLXYGns0-SJvjkGpc/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/eovuVorlRnQLXYGns0-SJvjkGpc/1/da"><img src="http://feedads.g.doubleclick.net/~a/eovuVorlRnQLXYGns0-SJvjkGpc/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/BilgisayarKavramlari/~4/0HKBSq-HBOY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2010/07/07/polybius-sifrelemesi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.bilgisayarkavramlari.com/2010/07/07/polybius-sifrelemesi/</feedburner:origLink></item>
		<item>
		<title>NL (Non-deterministic Logarithmic)</title>
		<link>http://feedproxy.google.com/~r/BilgisayarKavramlari/~3/NA2jkku9WOE/</link>
		<comments>http://www.bilgisayarkavramlari.com/2010/07/03/nl-non-deterministic-logarithmic/#comments</comments>
		<pubDate>Sat, 03 Jul 2010 13:39:13 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Bilgisayar Matematiği]]></category>
		<category><![CDATA[algoritma analizi (teory of algorithms)]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2010/07/03/nl-non-deterministic-logarithmic/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Bilgisayar bilimlerinde de sıkça kullanılan ve matematiğin bir parçası olan karmaşıklı teorisi (complexity theory) içerisinde tanımlı olan bir karmaşıklık sınıfıdır (kümesidir, set) Bu kümenin özelliği, bu kümenin üyesi olan, fonksiyon, denklem veya algoritmaların logaritmik zamanda veya logaritmik hafıza ihtiyacı ile çalışıp çalışamayacağının veya çözülüp çözülemeyeceğinin belirlenememesidir. Bu kümenin tanım itibariyle [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Bilgisayar bilimlerinde de sıkça kullanılan ve matematiğin bir parçası olan karmaşıklı teorisi (complexity theory) içerisinde tanımlı olan bir karmaşıklık<a href="http://www.bilgisayarkavramlari.com/2009/06/24/kume-teorisi-set-theory/"> sınıfıdır (kümesidir, set) </a></p>
<p>Bu kümenin özelliği, bu kümenin üyesi olan, fonksiyon, denklem veya algoritmaların logaritmik zamanda veya logaritmik hafıza ihtiyacı ile çalışıp çalışamayacağının veya çözülüp çözülemeyeceğinin belirlenememesidir.</p>
<p>Bu kümenin tanım itibariyle tersi olan L (logarithmic) kümesinde bulunan problemler, algoritmalar veya fonksiyonlar ise logaritmik zamanda veya alanda çözülebilmektedir.</p>
<p>Bu tanımlarda geçen &#8220;zamanda veya alanda&#8221; ibaresi ile, karmaşıklığın zaman (time complexity) veya alan (memory complexity) olabileceği ifade edilmek istenmiştir. Yani, örneğin, bir algoritmanın zamansal çalışma karmaşıklığı (time complexity) NL sınıfından olurken, hafızadaki ihtiyacı (memory complexity) farklı  bir sınıfta olabilir.</p>
<p>Logaritmik karmaşıklık konusunda bilinmesi gereken bir diğer konu ise RL sınıfıdır. Bu sınıf, tanım itibariyle olasılığa dayalı bir yapı izler. Randomized Logarithmic kelimelerinin baş harflerinden oluşan bu sınıftaki problemler, algoritmalar veya fonksiyonlar ise olasılıksal Turing Makinesi (Probabilistic Turing Machine) tarafından kabul edilirler.</p>
<p>Olasılıksal Turing makinesi, tanım itibariyle, sadece doğru durumları kabul eden ama yanlış durumları belirlerken hata yapabilen makinedir. Yani bir <a href="http://www.bilgisayarkavramlari.com/2009/06/27/turing-makinesi-turing-machine/">Klasik Turing makinesinde (Turing Machine)</a> iki sonuçtan biri çıkar:</p>
<ul>
<li>Kabul (Accept)</li>
<li>Red (Reject)</li>
</ul>
<p>Normal bir Turing makinesi tasarım itibariyle bu iki durumu doğru olarak döndürebilmelidir. Olasılıksal Turing makinesi ilk şart olan kabul durumlarını doğru olarak döndürürken, ikinci ihtimal olan red durumlarında hata yapabilir.</p>
<p>RL sınıfı işte bu tip Turing makinelerinin logaritmik zamanda veya logaritmik alanda çözülebilmesi anlamındadır.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/7MPDimeThQOBqEsM9M5K8yDiqxQ/0/da"><img src="http://feedads.g.doubleclick.net/~a/7MPDimeThQOBqEsM9M5K8yDiqxQ/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/7MPDimeThQOBqEsM9M5K8yDiqxQ/1/da"><img src="http://feedads.g.doubleclick.net/~a/7MPDimeThQOBqEsM9M5K8yDiqxQ/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/BilgisayarKavramlari/~4/NA2jkku9WOE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2010/07/03/nl-non-deterministic-logarithmic/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.bilgisayarkavramlari.com/2010/07/03/nl-non-deterministic-logarithmic/</feedburner:origLink></item>
		<item>
		<title>Bool Tatmin Problemi</title>
		<link>http://feedproxy.google.com/~r/BilgisayarKavramlari/~3/r0g6FfaXUmg/</link>
		<comments>http://www.bilgisayarkavramlari.com/2010/07/03/bool-tatmin-problemi/#comments</comments>
		<pubDate>Sat, 03 Jul 2010 13:36:53 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[algoritma analizi (teory of algorithms)]]></category>
		<category><![CDATA[3cnfsat]]></category>
		<category><![CDATA[3sat]]></category>
		<category><![CDATA[bool sat]]></category>
		<category><![CDATA[SAT]]></category>
		<category><![CDATA[tatmin]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2010/07/03/bool-tatmin-problemi/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Litartürde, Boolean Satisfiability Problem olarak geçen ve boole cebirindeki denklemlerin doğruluğunun sağlanması olarak özetlenebilecek olan problemdir. Ayrıca çeşitli kaynaklarda bu probleme, problemin İngilizce tanımında geçen Satisfiability kelimesinin kısaltması olan SAT kelimesi olarak da rastlanabilir. Bu problemi, bilgisayar bilimleri açısından ilginç kılan yanı ise, problemin yapısal olarak bir NP-Tam (NP-Complete) sınıfı [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Litartürde, Boolean Satisfiability Problem olarak geçen ve boole cebirindeki denklemlerin doğruluğunun sağlanması olarak özetlenebilecek olan problemdir.  Ayrıca çeşitli kaynaklarda bu probleme, problemin İngilizce tanımında geçen Satisfiability kelimesinin kısaltması olan SAT kelimesi olarak da rastlanabilir.</p>
<p>Bu problemi, bilgisayar bilimleri açısından ilginç kılan yanı ise, problemin yapısal olarak bir <a href="http://www.bilgisayarkavramlari.com/2008/03/24/belirsiz-cokterimli-tam-np-complete-nondeterministic-polynomial-complete/">NP-Tam (NP-Complete) </a>sınıfı problem olmasıdır.</p>
<p>Boole Cebiri, aslında mantıksal bir gösterim ifade etmektedir. Dolayısıyla mantıktaki karşılığı olarak probleme <a href="http://www.bilgisayarkavramlari.com/2007/11/29/onermeler-mantigi-propositional-logic/">önermeler mantığı (propositional logic, kaziye mantığı)</a> tatmin problemi ismi de verilebilir.</p>
<p>Boole cebirinden alışıldığı üzere mantıksal kurgu için tanımlı olan ve bilgisayar bilimlerinde değişken (variable) olarak isimlendirilebilecek belirticiler (literal, lafziler) bulunmaktadır. Bunlar basit birer sembol ile gösterilir.</p>
<p>Örneğin x ile gösterilen bir sembol çoğu zaman gerçek hayattaki bir kaziyeyi (önerme, proposition) ifade etmektedir.</p>
<p>Bu lafzi gösterimlerin (literal, belirticiler) üzerinde tanımlı ve yine boole cebiri içerisinde kabul edilebilecek işlemler (operators) tanımlanabilir. En sık kullanılan bool cebiri işlemleri <a href="http://www.bilgisayarkavramlari.com/2007/11/29/ve-kapisi-and-gate/">ve(and)</a>, <a href="http://www.bilgisayarkavramlari.com/2007/11/29/veya-kapisi-or-gate/">veya (or)</a>, tersi (not) şeklinde sayılabilir. Bu işlemler kullanılarak kurulan bir dizilimin sonucunun yine bir lafzi gösterim (literal) cinsinden elde edilmesi ve ya doğru (true) ya da yanlış (false) olması beklenir.</p>
<p>Bu tanımın üzerine örneğin sadece 3 adet lafzi gösterim (literal)&#8217;in ve (and) bağlacı normal şeklinde (conjunction normal form) olması durumuna 3SAT veya 3CNFSAT  isimleri verilir. Bu problem NP-TAM (NP-Complete) bir problemdir.</p>
<p>Benzer tanım sadece 2 adet lafzi gösterim&#8217;in (literal) ve bağlacı normal şeklinde (conjunction normal form) olması durumuna ise 2SAT veya 2CNFSAT ismi verilir ve bu problem de<a href="http://www.bilgisayarkavramlari.com/2010/07/03/nl-non-deterministic-logarithmic/"> NL-Tam (NL-Complete)</a> bir problemdir.</p>
<p>Boole tatmin probleminin diğer önemli bir yanı da tarihsel olarak, 3SAT problemlerin, ilk NP-Complete problem olmasıdır. Bu konuda çalışan Stephen Cooke 1971 yılında bu problem grubunun NP-Complete olduğunu göstermiştir.</p>
<p>Ayrıca boole tatmin probleminin birinci derece mantık (First order predicate calculus) içerisindeki çözümünün aranması da ayrıca bir problemdir.</p>
<p>Bilindiği üzere birinci derece mantığın, üzerinde tanımlı olduğu lafzi gösterimler (literals) için bir takın etki alanı tanımlamaları (domain) mümkündür. Bu tanımlamalar ile verilen bir boole cebiri, diziliminin çözümlenmesi bir seviye daha karmaşık hale gelmektedir.</p>
<p>Örneğin aşağıdaki problemin çözümünü bu anlamda değerlendirebiliriz:</p>
<p>∃a (Şadi (a) ∧ Mühendis(a)) →  Öyle bazı a’lar vardır ki, bu a’nın ismi Şadi’dir ve bu a mühendistir.</p>
<p>Bu tip birinci derece mantık dizilimlerinin çözüm karmaşıklığı Co-NP problem olarak geçmektedir.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/8Ng2-si6U5ErhCzceVaUrgLTQPc/0/da"><img src="http://feedads.g.doubleclick.net/~a/8Ng2-si6U5ErhCzceVaUrgLTQPc/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/8Ng2-si6U5ErhCzceVaUrgLTQPc/1/da"><img src="http://feedads.g.doubleclick.net/~a/8Ng2-si6U5ErhCzceVaUrgLTQPc/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/BilgisayarKavramlari/~4/r0g6FfaXUmg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2010/07/03/bool-tatmin-problemi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.bilgisayarkavramlari.com/2010/07/03/bool-tatmin-problemi/</feedburner:origLink></item>
		<item>
		<title>Ve/Veya bağlacı normal şeklleri (Conjunction / Disjunction Normal Form)</title>
		<link>http://feedproxy.google.com/~r/BilgisayarKavramlari/~3/BNbwQCPDpng/</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>

<p><a href="http://feedads.g.doubleclick.net/~a/iUvzXHb37lalxoeCn-khng8b5Fk/0/da"><img src="http://feedads.g.doubleclick.net/~a/iUvzXHb37lalxoeCn-khng8b5Fk/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/iUvzXHb37lalxoeCn-khng8b5Fk/1/da"><img src="http://feedads.g.doubleclick.net/~a/iUvzXHb37lalxoeCn-khng8b5Fk/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/BilgisayarKavramlari/~4/BNbwQCPDpng" height="1" width="1"/>]]></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>
		<feedburner:origLink>http://www.bilgisayarkavramlari.com/2010/07/02/veveya-baglaci-normal-seklleri-conjunction-disjunction-normal-form/</feedburner:origLink></item>
		<item>
		<title>Volatile Tip Tanımlayıcısı</title>
		<link>http://feedproxy.google.com/~r/BilgisayarKavramlari/~3/bUYgHmYBzgA/</link>
		<comments>http://www.bilgisayarkavramlari.com/2010/06/26/volatile-tip-tanimlayicisi/#comments</comments>
		<pubDate>Sat, 26 Jun 2010 13:29:44 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[JAVA]]></category>
		<category><![CDATA[Programlama Dilleri]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2010/06/26/volatile-tip-tanimlayicisi/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Kelime anlamı olarak bir değişkenin geçici, uçucu değere sahip olmasını ifade eder. Volatile tip tanımlayıcısı (Volatile Type Quantifier) basitçe bir değişken tanımının başında bulunup, bu değişkenin, program dışında bir etki altında bulunabileceğini ifade eder. Örneğin geliştirdiğimiz bir programda, farklı işlem (process) veya donanımsal etkiler sonucunda değeri değişen bir değişken (variable) [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Kelime anlamı olarak bir değişkenin geçici, uçucu değere sahip olmasını ifade eder.</p>
<p>Volatile tip tanımlayıcısı (Volatile Type Quantifier) basitçe bir değişken tanımının başında bulunup, bu değişkenin, program dışında bir etki altında bulunabileceğini ifade eder.</p>
<p>Örneğin geliştirdiğimiz bir programda, farklı <a href="http://www.bilgisayarkavramlari.com/2007/11/18/islem-process/">işlem (process)</a> veya donanımsal etkiler sonucunda değeri değişen bir değişken (variable) kullanıyorsak, bu değişkeni volatile olarak tanımlamamız gerekir. Aksi halde <a href="http://www.bilgisayarkavramlari.com/2008/01/03/derleyici-compiler/">derleyici (compiler)</a> bu değişkeni optimize ederek görevini yerine getiremez bir hale sokabilir.</p>
<p>Bu durumun çok klasik örneklerini <a href="http://www.bilgisayarkavramlari.com/2007/11/18/islemler-arasi-iletisim-inter-process-communication-ipc/">IPC (inter process communication, işlemler arası iletişim)</a> konularında görebiliriz.</p>
<p>Klasik bir bariyer kullanılacağını ve işlemin bu bariyere belirli bir amaç için takılacağını düşünelim.</p>
<p>C dilinde böyle bir örneği aşağıdaki şekilde kodlayabiliriz:</p>
<pre>int bar = 0;</pre>
<pre>while(bar == 0);</pre>
<p>Yukarıdaki iki satırda görüldüğü üzere &#8220;bar&#8221; isminde bir değişken tanımlanmış ve bu değişkenin, değeri 0 olduğu sürece sonsuz döngüye girilmiştir. Elbette bu aşamada kod sonsuz döngüye girecek ve ilerlemeyecektir.</p>
<p>Yukarıdaki bu bariyeri kırmak için farklı bir <a href="http://www.bilgisayarkavramlari.com/2007/11/18/islem-process/">işlem</a> tarafından &#8220;bar&#8221; değişkeninin değeri değiştirilmek istenirse, bu durumda değişkene müdahale edilememesi söz konusu olabilir. Kullanılan derleyicinin optimize etme seviyesine bağlı olarak, belki de derleyici bu değişken değerini hiç tutmadan ve işletim sistemi üzerinde işlemciye bile uğramadan programı bekletme şekline geçirmiş olabilir.</p>
<p>Derleyicinin bu seviyede bir optimizasyon yapması sonucu değişkene erişmek ve dolayısıyla değişkenin değerini değiştirip, yukarıdaki bariyeri kırmak mümkün olmaz. Bunu engellemek için değişken tanımında volatile kelimesi kullanılır.</p>
<pre>volatile int bar= 0;</pre>
<pre>while(bar==0);</pre>
<p>Yeni kodumuzun tek farkı, derleyicinin bu kodda bulunan &#8220;bar&#8221; değişkenini optimize etmeyecek olmasıdır. Bu sayede kod gerçekten verimsiz bir şekilde çalışacak ancak değişkenin bütün beklentileri karşılaması sağlanacaktır.</p>
<p>Yukarıdaki bu durum, C, C++ dilleri için geçerli ve kullanışlıdır.</p>
<p>JAVA ve C# dilleri için durum biraz farklıdır. Bu dillerde yukarıda anlatılan problemin çözümü için hem volatile hem de synchronized tip tanımlayıcıları (type qunatifiers) bulunur.</p>
<p>Bu dilleri kullanan kişilerin bu iki tip tanımlayıcısı arasındaki farkı bilmesi gerekir.</p>
<p>Synchronized olarak tanımlanmış bir değişken yukarıda anlatılan sorunu çözer ancak JAVA veya C# dillerinin nesne yönelimli programlama özelliğinden dolayı, bu değişkenin tanımlı olduğu <a href="http://www.bilgisayarkavramlari.com/2008/07/15/sinif-class/comment-page-1/">sınıftan (class),</a> birden fazla nesne tanımlanması mümkündür.</p>
<p>Örneğin <a href="http://www.bilgisayarkavramlari.com/2010/03/22/thread-iplik/">lif (thread)</a> özelliği taşıyan bir java sınıfından tanımlanan bütün <a href="http://www.bilgisayarkavramlari.com/2008/07/15/nesne-object/">nesneler (objects)</a>, performans kaygılarından dolayı kendi değişken kopyalarını tutarlar. Dolayısıyla her nesnede kendi değişken bilgisi durur.</p>
<p>Volatile olarak tanımlanan değişkenin farkı ise burada ortaya çıkar. Synchronized tanımlı bir değişkenden farklı olarak, volatile değişken sadece tek bir kopya tutar. Bu kopyaya ana kopya ismi de verilebilir. Tasarıma göre değişmekle birlikte, birden çok kopyanın, tek kopya üzerinden güncellenmesi ve hepsinin aynı olması da aslında tek kopya tutulması olarak düşünülebilir.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/5wRrtjqE2hj1Wtyjn4TVgs2ZjQA/0/da"><img src="http://feedads.g.doubleclick.net/~a/5wRrtjqE2hj1Wtyjn4TVgs2ZjQA/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/5wRrtjqE2hj1Wtyjn4TVgs2ZjQA/1/da"><img src="http://feedads.g.doubleclick.net/~a/5wRrtjqE2hj1Wtyjn4TVgs2ZjQA/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/BilgisayarKavramlari/~4/bUYgHmYBzgA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2010/06/26/volatile-tip-tanimlayicisi/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://www.bilgisayarkavramlari.com/2010/06/26/volatile-tip-tanimlayicisi/</feedburner:origLink></item>
		<item>
		<title>Karmaşıklık Sınıfları (Complexity Classes)</title>
		<link>http://feedproxy.google.com/~r/BilgisayarKavramlari/~3/33esl2FcBvM/</link>
		<comments>http://www.bilgisayarkavramlari.com/2010/06/17/karmasiklik-siniflari-complexity-classes/#comments</comments>
		<pubDate>Thu, 17 Jun 2010 12:26:10 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[algoritma analizi (teory of algorithms)]]></category>
		<category><![CDATA[average case]]></category>
		<category><![CDATA[best case]]></category>
		<category><![CDATA[big-o]]></category>
		<category><![CDATA[big-omega]]></category>
		<category><![CDATA[big-theta]]></category>
		<category><![CDATA[complexity class]]></category>
		<category><![CDATA[karmaşıklık sınıfı]]></category>
		<category><![CDATA[lower bound]]></category>
		<category><![CDATA[small-o]]></category>
		<category><![CDATA[small-omega]]></category>
		<category><![CDATA[upper bound]]></category>
		<category><![CDATA[worst case]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2010/06/17/karmasiklik-siniflari-complexity-classes/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Bilgisayar bilimlerine matematikten miras kalan karmaşıklık teorisi (complexity theory) konularından birisidir. Aslında problem veya algoritmaların çözüme ulaşmadaki karmaşıklığını ölçmek için kullanılır. Bu tanımın ardında, her problem veya algoritmanın bir fonksiyon gibi düşünülebilmesi, ve matematikteki fonksiyonların karmaşıklığını sınıflandırmak için kullanılan karmaşıklık sınıflarının (complexity classes) , algoritmalar için uygulanması yatmaktadır. Bilgisayar bilimlerinde [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Bilgisayar bilimlerine matematikten miras kalan karmaşıklık teorisi (complexity theory) konularından birisidir. Aslında problem veya algoritmaların çözüme ulaşmadaki karmaşıklığını ölçmek için kullanılır.</p>
<p>Bu tanımın ardında, her problem veya algoritmanın bir fonksiyon gibi düşünülebilmesi, ve matematikteki fonksiyonların karmaşıklığını sınıflandırmak için kullanılan karmaşıklık sınıflarının (complexity classes) , algoritmalar için uygulanması yatmaktadır.</p>
<p>Bilgisayar bilimlerinde kullanılan karmaşıklık sınıfları 5 tanedir.</p>
<ol>
<li>Küçük-o (small-o)</li>
<li>Büyük-O (big-o, veya big-oh diye de geçer)</li>
<li>Teta (Theta Θ, sadece büyük tetadan bahsedebiliz)</li>
<li>Büyük omega (big-Ω )</li>
<li>Küçük omega(small-ω )</li>
</ol>
<p>Bu beş sınıf, aynı fonksiyon için uygulanan ve bir fonksiyonun farklı özelliklerini anlatan sınıftır.</p>
<p>Bu sınıflar, bir algoritma hakkında bilgi edinmemizi sağlar. Bu bilgileri aşağıdaki şekilde sıralayabiliriz:</p>
<ul>
<li>Bir algoritmanın ölçeği  (Scalability)</li>
<li>Bir algoritmanın zaman ve hafıza ihtiyacı (hızı ve ne kadar yer kaplayacağı) (time and memory efficiency)</li>
</ul>
<p>Bu sonuçlara, algoritmanın kullanıldığı giriş bilgisine göre ulaşılır. Bir algoritmanın işlediği veri miktarına göre ne kadar zaman ve ne kadar yer gerektiğini gösterir.</p>
<p><strong>Örnek<br />
</strong></p>
<p>Örneğin klasik bir arama algoritması olan <a href="http://www.bilgisayarkavramlari.com/2008/11/09/dogrusal-arama-linear-search/">doğrusal arama (linear search)</a> algoritmasını ele alalım. Bu algoritma verilen bir dizide karışık olarak duran sayılardan bir tanesini bulmayı hedefler.</p>
<p>int a[10] = { 3, 7, 2, 5, 6, 1, 8, -12, 11, 45};</p>
<p>Yukarıdaki dizide bulunan bir sayının kaçıncı sırada olduğunu aramak isteyelim. Örneğin 8 kaçıncı sıradaki sayıdır?</p>
<p>Algoritma, ilk elemandan başlayarak son elemana kadar bütün sayılara bakar ve aranan sayıya rastlarsa sonlanır. Bu durumda aranan 8 sayısını bulmak için sırasıyla 3,7,2,5,6 ve 1 sayılarına bakılacak, nihayet 8 sayısı bulununca 7. Sırada bulunduğu sonucu ile algoritma bitecektir.</p>
<p>Algoritmanın yer ihtiyacı ne kadardır?</p>
<p>Bu algoritmanın üzerinde çalıştığı veri büyüklüğü dizinin büyüklüğüdür ve bu değer 10&#8242;dur. Dolayısıyla arama işleminin n sayı içerisinden yapılacağını düşünürsek, n sayıyı hafızada tutmamız gerektiğini görürüz. Demek ki algoritmamızın hafıza karmaşıklığı (memory complexity) n&#8217;dir.</p>
<p>Algoritmanın çalışma hızı nedir?</p>
<p>Arama işleminin n adet sayı üzerinde yapıldığını söylersek, aşağıdaki 3 durumu incelememiz gerekir:</p>
<ol>
<li>En kötü ihtimalle kaç adımda bulunur? (worst case)</li>
<li>En iyi ihtimalle kaç adımda bulunur? (best case)</li>
<li>Ortalama kaç adımda bulunur? (average case)</li>
</ol>
<p>Bu ihtimal analizini doğrusal arama algoritmamıza uyguladığımızda, karşılaşabileceğimiz en kötü durum aranan sayının dizinin en sonunda bulunması veya dizide hiç bulunmamasıdır. Bu durumda dizideki bütün elemanlara bakılması gerekecektir. Dolayısıyla en kötü durumda karmaşıklığımız n sayı için n olacaktır.</p>
<p>En iyi ihtimal ise, ilk bakılan sayının, aranan sayı olmasıdır. Bu durumda tek bir bakma işlemi yeterlidir. Bu durumdaki karmaşıklığımız ise 1 olacaktır.</p>
<p>Ortalama durum ise bu algoritmanın çok sefer çalışması sonucunda istatistiksel olarak ortalama kaç elemana bakılacağıdır. Bu dizide bulunan sayıların hepsinin aranma oranlarının eşit olduğunu kabul edersek, ortalama durum n/2 olur.</p>
<p>İşte yukarıdaki bu durum analizleri, bizim karmaşıklık sınıflarımızı veren analizlerdir.</p>
<p>O – En kötü durum analizi</p>
<p>Θ &#8211; Ortalama durum analizi</p>
<p>Ω- En iyi durum analizi</p>
<p>Aynı zamanda, bir fonksiyon için de o gösterimi üst sınırı (upper bound), gösterimi ise alt sınırı (lower bound) ifade eder.</p>
<p>Örnek olarak aşağıdaki fonksiyonu ele alacak olursak.</p>
<p>f(x) = 3x<sup>5</sup></p>
<p>Bu fonksiyona bir üst sınır çizmek istenirse, örneğin 7x<sup>5</sup> fonksiyonu çizilebilir.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/061710_1226_KarmaklkSn1.png" alt="" /></p>
<p>Mavi fonksiyon 7x<sup>5</sup> ve kırmızı fonksiyon ise f(x) fonksiyonudur.</p>
<p>Yukarıdaki şekilde görüldüğü üzere, x=0 noktasından büyük değerler için yani x&gt;0 için, mavi renkle gösterilen fonksiyon, kırmızı fonksiyonun üst sınırını oluşturmaktadır ve denilebilir ki, kırmızı fonksiyon hiçbir zaman mavi fonksiyonun üzerine geçemez.</p>
<p>Bu durumda mavi fonksiyon, kırmızının üst sınırı (upper bound) olmuş olur. Diğer bir deyişle, mavi fonksiyon, kırmızı fonksiyondan daha kötü bir fonksiyondur ve kırmızı fonksiyon en kötü ihtimalle mavi fonksiyon kadar kötü olabilir.</p>
<p>Bu durumu büyük-o ile gösterirsek:</p>
<p>f(x) ∈ O (x<sup>5</sup>)</p>
<p>şeklinde yazmamız yeterlidir. Bu gösterimin açılımı aşağıda verilmiştir:</p>
<p>f(x) ∈ O(g(x)) , öyle bir c değeri bulunursa ki, x<sub>0</sub>&gt;0 için,  x&gt;x<sub>0</sub> şartıyla, bütün f(x) ≤ c g(x) olsun.</p>
<p>Bu tanım, kısaca, şayet f(x) ∈ O(g(x)) bağlantısı verilirse, herhangi bir x0 noktasından başlanarak sonsuza kadar bütün f(x) ≤ c g(x) koşulunu sağlayan bir c değerinin bulunabileceğini anlatmaktadır.</p>
<p>Yukarıdaki tanımın tam tersi omega için geçerlidir.</p>
<p>f(x) ∈ Ω(g(x)) , öyle bir c değeri bulunursa ki, x<sub>0</sub>&gt;0 için,  x&gt;x<sub>0</sub> şartıyla, bütün f(x) ≥ c g(x) olsun.</p>
<p>Bu tanım, kısaca, şayet f(x) ∈ Ω(g(x)) bağlantısı verilirse, herhangi bir x0 noktasından başlanarak sonsuza kadar bütün f(x) ≥ c g(x) koşulunu sağlayan bir c değerinin bulunabileceğini anlatmaktadır.</p>
<p>Bu iki tanımda dikkat edilecek bir nokta, f(x) ile c*g(x) arasındaki bağlantının eşitliği de kapsamasıdır. Yani örneğin big-omega için, c*g(x) değeri f(x) fonksiyonundan küçük veya eşit olabilir.</p>
<p>Şayet bu tanımdaki eşitliği kaldırırsak, küçük-o ve küçük-ω tanımını elde ederiz. Yani küçük-o için, c*g(x) değerinin f(x) değerinden sürekli olarak büyük olması gerekir.</p>
<p>Theta gösterimi ise ortalama durum, yani eşitlik durumu içindir. Burada aranan şart f(x) ∈ Θ(g(x)) için c<sub>1</sub>*g(x)≥f(x)≥c<sub>2</sub>*g(x)&#8217;dir. Yani g(x) fonksiyonunun f(x) fonksiyonu ile aynı şekilde hareket ettiğini göstereniki sabit sayı, c<sub>1</sub> ve c<sub>2</sub> bulunabiliyorsa f(x) ∈ Θ(g(x)) denilebilir.</p>
<p>Bu durumda yukarıda listelediğimiz 5 sınıf aşağıdaki şekilde ilişkilendirebiliriz:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/061710_1226_KarmaklkSn2.png" alt="" /></p>
<p>Yukarıdaki şekilde anlatılmak istenen, sınıflar arasında, bazı kesişim durumlarının olduğudur. Görüldüğü üzere, en kötü durum (big-o) ile en iyi durum (big-Ω) kesişmesi sadece eşitlik durumunda olur. Bu durum ise teta ile gösterilmektedir. Benzer şekilde küçük-o ve küçük omega hiçbir zaman kesişemez  ve büyük-o ile küçük-o arasında ve büyük omega ile küçük omega arasındaki fark alanında eşitlik durumları bulunur.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/vtcUQQyR-l3DDTNQZwl0joDGxOY/0/da"><img src="http://feedads.g.doubleclick.net/~a/vtcUQQyR-l3DDTNQZwl0joDGxOY/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/vtcUQQyR-l3DDTNQZwl0joDGxOY/1/da"><img src="http://feedads.g.doubleclick.net/~a/vtcUQQyR-l3DDTNQZwl0joDGxOY/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/BilgisayarKavramlari/~4/33esl2FcBvM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2010/06/17/karmasiklik-siniflari-complexity-classes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.bilgisayarkavramlari.com/2010/06/17/karmasiklik-siniflari-complexity-classes/</feedburner:origLink></item>
		<item>
		<title>Gauss Karmaşık Sayı Çarpım Yöntemi</title>
		<link>http://feedproxy.google.com/~r/BilgisayarKavramlari/~3/FSJVCaKll88/</link>
		<comments>http://www.bilgisayarkavramlari.com/2010/06/14/gauss-karmasik-sayi-carpim-yontemi/#comments</comments>
		<pubDate>Sun, 13 Jun 2010 21:47:48 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Bilgisayar Matematiği]]></category>
		<category><![CDATA[çarpma]]></category>
		<category><![CDATA[complex number]]></category>
		<category><![CDATA[gauss]]></category>
		<category><![CDATA[karmaşık sayı]]></category>
		<category><![CDATA[multiplication]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2010/06/14/gauss-karmasik-sayi-carpim-yontemi/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Karmaşık sayıların (complex numbers) çarpımında kullanılan bu yöntem, çarpma işleminin toplamaya göre maliyetli olduğu bilgisayar uygulamalarında tercih edilir. Çarpmak istediğimiz iki karmaşık sayıyı (complex number) aşağıdaki şekilde gösterelim: (x + yi ) = (a + bi) · (c + di) Yöntemin çalışması aşağıdaki 3 sayının hesaplanması ile başlar: k1 = c · [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Karmaşık sayıların (complex numbers) çarpımında kullanılan bu yöntem, çarpma işleminin toplamaya göre maliyetli olduğu bilgisayar uygulamalarında tercih edilir.</p>
<p>Çarpmak istediğimiz iki karmaşık sayıyı (complex number) aşağıdaki şekilde gösterelim:</p>
<p><span style="font-family: Times New Roman; font-size: 12pt;">(x + yi ) = (<em>a</em> + <em>bi</em>) · (<em>c</em> + <em>di</em>)</span></p>
<p>Yöntemin çalışması aşağıdaki 3 sayının hesaplanması ile başlar:</p>
<p style="margin-left: 36pt;"><span style="font-family: Times New Roman; font-size: 12pt;"><em>k</em><sub>1</sub> = <em>c</em> · (<em>a</em> + <em>b</em>)<br />
</span></p>
<p style="margin-left: 36pt;"><span style="font-family: Times New Roman; font-size: 12pt;"><em>k</em><sub>2</sub> = <em>a</em> · (<em>d</em> − <em>c</em>)<br />
</span></p>
<p style="margin-left: 36pt;"><span style="font-family: Times New Roman; font-size: 12pt;"><em>k</em><sub>3</sub> = <em>b</em> · (<em>c</em> + <em>d</em>)<br />
</span></p>
<p style="margin-left: 36pt;"><span style="font-family: Times New Roman; font-size: 12pt;">x = <em>k</em><sub>1</sub> − <em>k</em><sub>3</sub><br />
</span></p>
<p style="margin-left: 36pt;"><span style="font-family: Times New Roman; font-size: 12pt;">y = <em>k</em><sub>1</sub> + <em>k</em><sub>2</sub>.<br />
</span></p>
<p>Görüldüğü üzere iki karmaşık sayının çarpımı sırasında 3 adet aritmetik çarpma ve 5 adet toplama / çıkarma kullanılmıştır. Aynı durum klasik karmaşık sayı çarpımı için aşağıdaki şekildedir:</p>
<p style="margin-left: 36pt;"><span style="font-family: Times New Roman; font-size: 12pt;">x = <em>a</em>·<em>c &#8211; b</em>·<em>d</em><br />
</span></p>
<p style="margin-left: 36pt;"><span style="font-family: Times New Roman; font-size: 12pt;">y = <em>a</em>·<em>d + b</em>·<em>c </em><br />
</span></p>
<p>Bu klasik yöntemde ise 4 çarpma ve 2 toplama / çıkarma işlemi kullanılmıştır. Kısacası gauss yöntemi, 1 çarpma işlemi yerine 3 adet toplama / çıkarma işlemi kullanır. Özellikle çarpmanın çok maliyetli olduğu yüksek basamaklı sayılarda bu yöntem avantaj sağlar.</p>
<p><strong>Örnek<br />
</strong></p>
<p>Yukarıda anlatılan yöntemi bir örnek üzerinden gösterelim.  Çarpmak istediğimiz sayılar aşağıdaki gibi olsun:</p>
<p>(3+4i) (2 + 5i)</p>
<p>Bu denklemi gauss yöntemi ile çözersek:</p>
<p style="margin-left: 36pt;"><span style="font-family: Times New Roman; font-size: 12pt;"><em>k</em><sub>1</sub> = <em>2</em> · (<em>3</em> + <em>4</em>) = 2 · 7 = 14<br />
</span></p>
<p style="margin-left: 36pt;"><span style="font-family: Times New Roman; font-size: 12pt;"><em>k</em><sub>2</sub> = <em>3</em> · (<em>5</em> − <em>2</em>) = 3 · 3 = 9<br />
</span></p>
<p style="margin-left: 36pt;"><span style="font-family: Times New Roman; font-size: 12pt;"><em>k</em><sub>3</sub> = <em>4</em> · (<em>2 </em>+ <em>5</em>) = 4 · 7 = 28<br />
</span></p>
<p style="margin-left: 36pt;"><span style="font-family: Times New Roman; font-size: 12pt;">x = <em>k</em><sub>1</sub> − <em>k</em><sub>3 </sub>= 14 – 28 = -14<br />
</span></p>
<p style="margin-left: 36pt;"><span style="font-family: Times New Roman; font-size: 12pt;">y = <em>k</em><sub>1</sub> + <em>k</em><sub>2</sub>. = 14 + 9 = 23<br />
</span></p>
<p><span>Sonuçta elde edilen karmaşık sayı:<br />
</span></p>
<p><span>( -14 + 23i )<br />
</span></p>
<p><span>Olarak bulunur.<br />
</span></p>
<p style="margin-left: 36pt;">

<p><a href="http://feedads.g.doubleclick.net/~a/jj3mI0taPllb6ROlr4TA6itvsS8/0/da"><img src="http://feedads.g.doubleclick.net/~a/jj3mI0taPllb6ROlr4TA6itvsS8/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/jj3mI0taPllb6ROlr4TA6itvsS8/1/da"><img src="http://feedads.g.doubleclick.net/~a/jj3mI0taPllb6ROlr4TA6itvsS8/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/BilgisayarKavramlari/~4/FSJVCaKll88" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2010/06/14/gauss-karmasik-sayi-carpim-yontemi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.bilgisayarkavramlari.com/2010/06/14/gauss-karmasik-sayi-carpim-yontemi/</feedburner:origLink></item>
		<item>
		<title>Veriyapıları ve algoritmalar final imtihanı çözümü</title>
		<link>http://feedproxy.google.com/~r/BilgisayarKavramlari/~3/PuCpAF9VeEM/</link>
		<comments>http://www.bilgisayarkavramlari.com/2010/06/11/veriyapilari-ve-algoritmalar-final-imtihani-cozumu/#comments</comments>
		<pubDate>Fri, 11 Jun 2010 08:45:48 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Sınavlar]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2010/06/11/veriyapilari-ve-algoritmalar-final-imtihani-cozumu/</guid>
		<description><![CDATA[Soru 0) Bir ağacın eleman sayısını bulan kodu yazınız (ağacın ikili ağaç olma zorunluluğu yoktur, ağaçtaki her düğümün çocuklarının bir dizide tutulduğunu kabul edebilirsiniz).(20 puan) int elemanSayisi(node *tree){ if(tree==null) return 0; int sayi = 0; for(int i =0;i&#60;cocuklar;i++){ sayi += elemanSayisi(cocuk[i]); } sayi++; return sayi; } Soru 1) Aşağıdaki şekilde bir adet başlangıç ve bir [...]]]></description>
			<content:encoded><![CDATA[<p><span style="font-family: Arial;">Soru 0) Bir ağacın eleman sayısını bulan kodu yazınız (ağacın ikili ağaç olma zorunluluğu yoktur, ağaçtaki her düğümün çocuklarının bir dizide tutulduğunu kabul edebilirsiniz).(20 puan)<br />
</span></p>
<p><span style="color: red; font-family: Arial;">int elemanSayisi(node *tree){<br />
</span></p>
<p><span style="color: red; font-family: Arial;"> if(tree==null)<br />
</span></p>
<p><span style="color: red; font-family: Arial;"> return 0;<br />
</span></p>
<p><span style="color: red; font-family: Arial;"> int sayi = 0;<br />
</span></p>
<p><span style="color: red; font-family: Arial;"> for(int i =0;i&lt;cocuklar;i++){<br />
</span></p>
<p><span style="color: red; font-family: Arial;"> sayi += elemanSayisi(cocuk[i]);<br />
</span></p>
<p><span style="color: red; font-family: Arial;"> }<br />
</span></p>
<p><span style="color: red; font-family: Arial;"> sayi++;<br />
</span></p>
<p><span style="color: red; font-family: Arial;"> return sayi;<br />
</span></p>
<p><span style="color: red; font-family: Arial;">}<br />
</span></p>
<p><span style="font-family: Arial;"><strong>Soru 1) Aşağıdaki şekilde bir adet başlangıç ve bir adet hedef düğümü alarak (Aldığınız bu düğümleri belirtiniz) aşağıdaki sorulara cevap veriniz. (30 puan)<br />
</strong></span></p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/061110_0845_Veriyaplarv1.png" alt="" /></p>
<ol>
<li><span style="font-family: Arial;"><strong>BFS (Breadth first search, sığ öncelikli arama) ve DFS( Depth first search, derin öncelikli arama) yöntemleri ile dolaşma sonuçlarını yazınız.<br />
</strong></span></li>
</ol>
<p><span style="color: red; font-family: Arial;"><strong>Başlangıç A ve bitiş E olarak kabul edilmiştir.<br />
</strong></span></p>
<p><span style="color: red; font-family: Arial;">BFS :<br />
</span></p>
<p><span style="color: red; font-family: Arial;">ACDFBE<br />
</span></p>
<p><span style="color: red; font-family: Arial;">DFS:<br />
</span></p>
<p><span style="color: red; font-family: Arial;">ABFDE</span> <span style="font-family: Arial;"><strong> </strong></span></p>
<p><span style="font-family: Arial;"><strong>2. Kruskal ve Prims algoritmalarına göre asgari tarama ağacı (minimum spanning tree) sonuçlarının nasıl bulunduğunu adım adım gösteriniz.<br />
</strong></span></p>
<p><span style="color: red; font-family: Arial;">Kruskal için en kısa düğümden en uzun düğüme doğru ağaç dolaşılır:<br />
</span></p>
<div>
<table style="border-collapse: collapse;" border="0">
<colgroup>
<col style="width: 307px;"></col>
<col style="width: 307px;"></col>
</colgroup>
<tbody>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border: solid black 0.5pt;"><span style="color: red; font-family: Arial;">Dolaşılan Düğümler</span></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;"><span style="color: red; font-family: Arial;">Kenarlar</span></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;"><span style="color: red; font-family: Arial;">AC</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;"><span style="color: red; font-family: Arial;">A-C</span></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;"><span style="color: red; font-family: Arial;">ACD</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;"><span style="color: red; font-family: Arial;">C-D</span></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;"><span style="color: red; font-family: Arial;">ACD-BE</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;"><span style="color: red; font-family: Arial;">B-E</span></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;"><span style="color: red; font-family: Arial;">ACDF-BE</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;"><span style="color: red; font-family: Arial;">C-F</span></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;"><span style="color: red; font-family: Arial;">ABCDEF</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;"><span style="color: red; font-family: Arial;">B-F</span></td>
</tr>
</tbody>
</table>
</div>
<p><span style="color: red; font-family: Arial;">Yukarıdaki tabloda sağdaki sütun, o adımda alınan kenarı, soldaki sütun ise o ana kadar alınmış düğümleri gösterir. Soldaki sütunda – işareti ile farklı adalar ayrılmıştır.<br />
</span></p>
<p><span style="color: red; font-family: Arial;">Prims algoritması<br />
</span></p>
<p><span style="color: red; font-family: Arial;">Sırasıyla alınan kenarlar: A-C, C-D,C-F,A-B,B-E<strong> </strong></span> <span style="font-family: Arial;"><strong> </strong></span></p>
<p><span style="font-family: Arial;"><strong>3. Yukarıdaki sorularda verdiğiniz cevaplar ışığında, bu soru için, hangi algoritmaların daha başarılı olduğunu  (DFS / BFS, Kruskal / Prims) açıklayınız.<br />
</strong></span></p>
<p><span style="color: red; font-family: Arial;">DFS/BFS için aynıdır. Kontrol edilen komşu düğüm sayıları (adjacency list):<br />
</span></p>
<p><span style="color: red; font-family: Arial;">DFS: A 2, C 2, D 2, F 1, B 1 , toplam : 8<br />
</span></p>
<p><span style="color: red; font-family: Arial;">BFS: A 2, B 2, F 2,  D 2 , toplam : 8<br />
</span></p>
<p><span style="color: red; font-family: Arial;">Kruskal / Prims için:<br />
</span></p>
<p><span style="color: red; font-family: Arial;">Kruskal algoritması daha hızlıdır.<br />
</span></p>
<p><span style="color: red; font-family: Arial;"> Kontrol edilen kenarlar.<br />
</span></p>
<p><span style="color: red; font-family: Arial;">Kruskal algoritması, 5 kenar kontrol etmiştir.<br />
</span></p>
<p><span style="color: red; font-family: Arial;">Prims algoritması 13 kenar kontrol etmiştir. Kontrol edilen kenar sayıları aşağıda sıralanmıştır:<br />
</span></p>
<p><span style="color: red; font-family: Arial;">2,3,4,2,2 , toplam : 13<strong><br />
</strong></span></p>
<p><span style="font-family: Arial;"><strong>Soru 2) Çalıştığınız firmada, bir kelime işlem programı (örneğin MS Word benzeri bir program düşünebilirsiniz) üzerinde yapılan işlemlerin geri / ileri alınmasını sağlayacak (Undo/Redo) kodu yazmanız isteniyor. Bu programda birden çok kişi, birden çok zamanda metin üzerinde değişiklik yapabiliyor (kullanıcılar aynı anda birbirlerinde bağımsız değişiklikler de yapabilir). Sizden istenen herhangi bir kişinin, herhangi bir zamanda yaptığı herhangi bir işlemi geri alabilmeniz için, programda yapılan işlemlerin tutulduğu uygun bir veri yapısı tasarlamanız.  Tasarımınızı çizip kullandığınız veri yapısı modelini açıklayınız.  (25 puan)<br />
</strong></span></p>
<p><span style="color: red; font-family: Arial;">typedef struct node {<br />
</span></p>
<p><span style="color: red; font-family: Arial;"> char * kullanici;<br />
</span></p>
<p><span style="color: red; font-family: Arial;"> char * tarih;<br />
</span></p>
<p><span style="color: red; font-family: Arial;"> islem * i;<br />
</span></p>
<p><span style="color: red; font-family: Arial;"> node * next;<br />
</span></p>
<p><span style="color: red; font-family: Arial;"> node * prev;<br />
</span></p>
<p><span style="color: red; font-family: Arial;">};<br />
</span></p>
<p><span style="color: red; font-family: Arial;">Yukarıdaki düğüm tasarımının amacı, veri yapımızın her düğümünde yapılan işlemi (ki bu işlemin detayı bizi ilgilendirmediği için bir gösterici olarak bırakılmıştır) kimin yaptığını ve tarihi / saat bilgisini tutmaktır.<br />
</span></p>
<p><span style="color: red; font-family: Arial;">Yukarıdaki yapı, ayrıca çift bağlı liste (doubly linked list) olarak tanımlanmıştır. Tek bağlı liste olarak da tasarlanabilir di.<br />
</span></p>
<p><span style="color: red; font-family: Arial;">Yukarıdaki liste, bir yığın (stack) olarak kullanılacaktır. İşlemler hem geri, hem de ileri alınabileceği için iki yığın gerekmektedir. İşlemler sadece geri alınsa ve geri alınan işlemler bir daha kullanılmamak üzere silinseydi tek yığın yeterli olurdu.<br />
</span></p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/061110_0845_Veriyaplarv2.png" alt="" /><span style="color: red; font-family: Arial;"><strong><br />
</strong></span></p>
<p><span style="color: red; font-family: Arial;">Şekilde görüldüğü üzere, yen işlemler 1. Yığına girerken herhangi bir geri alma işlemi varsa, işlemler 1. Yığından 2. Yığına taşınmakta. İleri alma işlemi ise, 2. Yığından 1. Yığına geri işlemleri yüklemekte.<br />
</span></p>
<p><span style="color: red; font-family: Arial;">Yeni işlem geldiğinde ayrıca 2. Yığındaki bilgiler silinerek artık işlemin tekrarlanması engellenebilir (Bu kısım şart olmamakla birlikte güncel programlardaki undo /redo işlemi bu şekilde çalışır)<br />
</span></p>
<p><span style="color: red; font-family: Arial;">Yukarıdaki geri / ileri alma işlemini tasarladıktan sonra kişi ve tarih bazlı geri alma tasarımını yapmamız gerekiyor. Bunun için ilave bir indeks oluşturup yığın üzerine bağlıyoruz:<strong><br />
</strong></span></p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/061110_0845_Veriyaplarv3.png" alt="" /><span style="color: red; font-family: Arial;"><strong><br />
</strong></span></p>
<p><span style="color: red; font-family: Arial;">Yukarıdaki şekilde görüldüğü üzere ilave bir ağaç kodlaması ile, yığın üzerindeki bazı düğümleri (node) bağladık. Bu düğümlere kolay erişimi sağlayan bir indekstir ve bir kişinin yaptığı işleme erişilmek istendiğinde, ağaç üzerinde aranıp ardından, yığın üzerinde, bulunan bu düğüme kadar geri alam işlemi yapılabilir.<br />
</span></p>
<p><span style="color: red; font-family: Arial;">Benzer bir ağacın, tarih için oluşturulması yeterlidir.<strong><br />
</strong></span></p>
<p><span style="font-family: Arial;"><strong>Soru3) Aşağıda bir dizi içerisinde verilen sayıları yığın ağacı (heap) aracılığı ile sıralayınız.  Sıralama işlemi sırasında dizideki değişiklikleri adım adım gösteriniz.  (öğrenci numaranızın son rakamı çift ise büyükten küçüğe, tek ise küçükten büyüğe sıralayınız) (25 puan)<br />
</strong></span></p>
<pre><code>int a[6] =  5,12,20,18,4,3
</code></pre>
<p><span style="color: red; font-family: Arial;">Sor büyükten küçüğe sıralama olarak yapılacaktır. Küçükten büyüğe sıralama için aşağıdaki adımların tersten yapılması yeterlidir.<br />
</span></p>
<p><span style="color: red; font-family: Arial;">Sıralamayı büyükten küçüğe göre yaptığımıza göre, min heap yani  küçükten büyüğe olacak.<br />
</span></p>
<p><span style="color: red; font-family: Arial;">Öncelikle heap inşa edilir. Mevcut durum aşağıdaki şekildedir:<br />
</span></p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/061110_0845_Veriyaplarv4.png" alt="" /><span style="color: red; font-family: Arial;"><br />
</span></p>
<p><span style="color: red; font-family: Arial;">Heap inşa edilişi yukarıdaki şekilde sırasıyla gösterilmiştir. Aynı sıra ile dizideki değişim aşağıda gösterilmiştir:<br />
</span></p>
<p><span style="color: red;">5,12,20,18,4,3<span style="font-family: Arial;"><br />
</span></span></p>
<p><span style="color: red;">5,4,20,18,12,3<br />
</span></p>
<p><span style="color: red;">4,5,20,18,12,3<br />
</span></p>
<p><span style="color: red;">4,5,3,18,12,20<br />
</span></p>
<p><span style="color: red;">3,5,4,18,12,20<br />
</span></p>
<p><span style="color: red;">Yukarıdaki inşa işleminden sonra sıralamaya geçilebilir.<br />
</span></p>
<p><span style="color: red;">İlk alınan sayı 3, heap&#8217;in en sonuna yerleştirilir ve geri kalan sayılar kendi arasında yeniden heap halini alır:<br />
</span></p>
<p><span style="color: red;">5,4,18,12,20 ,3<br />
</span></p>
<p><span style="color: red;">4,5,18,12,20 ,3<br />
</span></p>
<p><span style="color: red;">İkinci sayı alınıp heap yeniden inşa edilir<br />
</span></p>
<p><span style="color: red;">5,18,12,20 ,3,4<br />
</span></p>
<p><span style="color: red;">Üçüncü sayı alınır:<br />
</span></p>
<p><span style="color: red;">18,12,20 ,3,4,5<br />
</span></p>
<p><span style="color: red;">12,18,20 ,3,4,5<br />
</span></p>
<p><span style="color: red;">Dördüncü sayı:<br />
</span></p>
<p><span style="color: red;">18,20 ,3,4,5,12<br />
</span></p>
<p><span style="color: red;">Beşinci sayı:<br />
</span></p>
<p><span style="color: red;">20, 3,4,5,12,18<br />
</span></p>
<p><span style="color: red;">Son sayı:<br />
</span></p>
<p><span style="color: red;">3,4,5,12,18,20<br />
</span></p>
<p><span style="color: red;">Görüldüğü üzere dizi sıralanmıştır. Yukarıdaki bu adımlar heap çizimi üzerinde aşağdaki şekilde gösterilmiştir.<br />
</span></p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/061110_0845_Veriyaplarv5.png" alt="" /><span style="color: red;"><br />
</span></p>
<p style="margin-left: 35pt;"><em>&#8220;Programcılık %10 bilim, %20 yaratıcılık ve %70, yaratıcılığın bilimle çalışmasına çalışmaktır.&#8221;</em></p>
<p style="text-align: right; margin-left: 35pt;">
<p style="text-align: right; margin-left: 35pt;">
<p style="text-align: right; margin-left: 35pt;">

<p><a href="http://feedads.g.doubleclick.net/~a/A0W9841MMW76MMwhTC1EDk-glMk/0/da"><img src="http://feedads.g.doubleclick.net/~a/A0W9841MMW76MMwhTC1EDk-glMk/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/A0W9841MMW76MMwhTC1EDk-glMk/1/da"><img src="http://feedads.g.doubleclick.net/~a/A0W9841MMW76MMwhTC1EDk-glMk/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/BilgisayarKavramlari/~4/PuCpAF9VeEM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2010/06/11/veriyapilari-ve-algoritmalar-final-imtihani-cozumu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.bilgisayarkavramlari.com/2010/06/11/veriyapilari-ve-algoritmalar-final-imtihani-cozumu/</feedburner:origLink></item>
	</channel>
</rss>
