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

<channel>
	<title>Bilgisayar Kavramları &#187; graf teorisi (graph theory, çizge kuramı)</title>
	<atom:link href="http://www.bilgisayarkavramlari.com/category/graf-teorisi/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.bilgisayarkavramlari.com</link>
	<description>www.bilgisayarkavramlari.com</description>
	<lastBuildDate>Wed, 18 Aug 2010 21:13:27 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Bellman Ford Algoritması</title>
		<link>http://www.bilgisayarkavramlari.com/2010/05/26/bellman-ford-algoritmasi/</link>
		<comments>http://www.bilgisayarkavramlari.com/2010/05/26/bellman-ford-algoritmasi/#comments</comments>
		<pubDate>Wed, 26 May 2010 19:32:54 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[algoritma analizi (teory of algorithms)]]></category>
		<category><![CDATA[graf teorisi (graph theory, çizge kuramı)]]></category>
		<category><![CDATA[veri yapıları]]></category>
		<category><![CDATA[bellman ford]]></category>
		<category><![CDATA[dijkstra]]></category>
		<category><![CDATA[En kısa yol]]></category>
		<category><![CDATA[shortest path]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2010/05/26/bellman-ford-algoritmasi/</guid>
		<description><![CDATA[UAYRI!: Bu yazıda hatalar bulunmaktadır (Uğur Bey&#8217;e teşekkürler). Bu yazıda anlatılan algoritma verilen örnekteki özel olarak sıralanmış kenarlar için doğru çalışmakta ancak farklı durumlarda hata yapabilmektedir. Bellman-Ford algoritmasının tam ve doğru anlatımı için http://www.bilgisayarkavramlari.com/2010/08/05/bellman-ford-algoritmasi-2/ adresindeki yazıyı okuyabilirsiniz. Yazan : Şadi Evren ŞEKER Bu algoritmanın amacı, bir şekil (graph) üzerindeki, bir kaynaktan (source) bir hedefe(target veya [...]]]></description>
			<content:encoded><![CDATA[<p><span style="color: #ff0000;"><strong>UAYRI!: Bu yazıda hatalar bulunmaktadır (Uğur Bey&#8217;e teşekkürler). Bu yazıda anlatılan algoritma verilen örnekteki özel olarak sıralanmış kenarlar için doğru çalışmakta ancak farklı durumlarda hata yapabilmektedir. Bellman-Ford algoritmasının tam ve doğru anlatımı için <a href="http://www.bilgisayarkavramlari.com/2010/08/05/bellman-ford-algoritmasi-2/">http://www.bilgisayarkavramlari.com/2010/08/05/bellman-ford-algoritmasi-2/</a> adresindeki yazıyı okuyabilirsiniz.</strong></span></p>
<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 ve bir anlamda <a href="http://www.bilgisayarkavramlari.com/2010/05/13/dijkstra-algoritmasi-2/">Dijkstra algoritmasının</a> iyileştirilmişi olarak düşünülebilir.</p>
<p>Algoritma aslında <a href="http://www.bilgisayarkavramlari.com/2010/05/13/dijkstra-algoritmasi-2/">Dijkstra algoritmasından</a> daha kötü bir performansa sahiptir ancak graftaki ağırlıkların eksi olması durumunda <a href="http://www.bilgisayarkavramlari.com/2010/05/13/dijkstra-algoritmasi-2/">Dijkstra&#8217;nın</a> tersine başarılı çalışır.</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><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/052610_1932_BellmanFord1.png" alt="" /></p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/plugins/flash-video-player/default_video_player.gif" /></p>
<p>Algoritmanın çalışmasını yukarıdaki gibi eksi değerlere sahip bir şekil üzerinden anlamaya çalışalım.</p>
<p>Öncelikle düğümlere değer ataması yapılıyor. Başlangıç düğümüne 0, doğrudan erişilen düğümlere erişim değerleri ve erişilemeyen düğümlere <span style="font-family: Symbol;">¥</span> sonsuz değeri atanıyor.  Hedef düğüm olarak da E düğümünü tanımlayalım.</p>
<p>Yukarıdaki örnekte A düğümünden başlayacağımız düşünelim:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/052610_1932_BellmanFord3.png" alt="" /></p>
<p>Şimdi şekilde 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>Yukarıda, rastgele sıra ile dizilen bu kenarları sırasıyla dolaşalım ve bu dolaşma sırasında şu işlemi yapalım.</p>
<p>Örneğin AB kenarı , A ve B düğümleri arasında. Bu düğümlerden düşük değere sahip olan düğüm üzerine kenar değeri eklenip yüksek değere sahip olan düğüm üzerine yazılıyor.</p>
<p>Sırayla gidecek olursak:</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/052610_1932_BellmanFord5.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/052610_1932_BellmanFord7.png" alt="" /></p>
<p>BE 2, min (B,E ) 2, =&gt; 2 + 2  = 4</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/052610_1932_BellmanFord9.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/052610_1932_BellmanFord11.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/052610_1932_BellmanFord13.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/052610_1932_BellmanFord15.png" alt="" /></p>
<p>DF 5, min (D,F) = 0 =&gt; 0+5 = 5 F&#8217;nin değerinden daha büyük o yüzden güncellemiyoruz.</p>
<p>DE 7, min(D,E) = 0 =&gt; 0+7 = 7, yine E&#8217;nin değerinden büyük olduğu için güncellenmiyor.</p>
<p>Sonuçta graf aşağıdaki şekilde bitmiştir:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/052610_1932_BellmanFord17.png" alt="" /></p>
<p>Bu graftaki bütün düğümlerde, A düğümünden ne kadar maliyetle gidildiği bulunmuştur. Örnek hedef E düğümü ise, ulaşım maliyeti 4&#8242;dür.</p>
<p>Görüldüğü üzere eksi değere sahip düğümler olmasına rağmen herhangi bir problem yaşanmamıştır.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2010/05/26/bellman-ford-algoritmasi/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Edmonds Karp Algoritması</title>
		<link>http://www.bilgisayarkavramlari.com/2010/05/22/edmonds-karp-algoritmasi/</link>
		<comments>http://www.bilgisayarkavramlari.com/2010/05/22/edmonds-karp-algoritmasi/#comments</comments>
		<pubDate>Sat, 22 May 2010 08:54:02 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[algoritma analizi (teory of algorithms)]]></category>
		<category><![CDATA[graf teorisi (graph theory, çizge kuramı)]]></category>
		<category><![CDATA[veri yapıları]]></category>
		<category><![CDATA[edmonds karp]]></category>
		<category><![CDATA[graph]]></category>
		<category><![CDATA[maximum flow]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2010/05/22/edmonds-karp-algoritmasi/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Bu algoritmanın amacı, literatürde azami akış ( maximum flow ) olarak geçen ve düğümler (nodes) arasında akış kapasiteleri belirli bir şekildeki (graph) bir başlangıçtan bir hedefe en fazla akışın sağlandığı problemleri çözmektir. Azami akış (maximum flow) problemini örneğin şehirler arasında bağlı boru hattına veya tedarik zincirine benzetebiliriz. Örneğin aşağıdaki şekli [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Bu algoritmanın amacı, literatürde azami akış ( maximum flow ) olarak geçen ve düğümler (nodes) arasında akış kapasiteleri belirli bir <a href="http://www.bilgisayarkavramlari.com/2008/08/01/graf-sekil-graph/">şekildeki (graph)</a> bir başlangıçtan bir hedefe en fazla akışın sağlandığı problemleri çözmektir.</p>
<p>Azami akış (maximum flow) problemini örneğin şehirler arasında bağlı boru hattına veya tedarik zincirine benzetebiliriz. Örneğin aşağıdaki şekli ele alalım:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/052210_0854_EdmondsKarp1.png" alt="" /></p>
<p>Buradaki düğümler, şehirleri ve düğümler arasındaki kenarlar (edges) ise şehirler arasındaki boru hatlarının kapasitesini belirtsin. Amacımız A düğümünden E düğüme azami miktarda akış sağlayabilmek olsun.</p>
<p>Ford-Fulkerson çözüm için yukarıdaki şekilde öncelikle hedef düğüme giden yolu bulur.  Algoritma bu arama işlemi sırasında şayet derin öncelikli arama (depth first search ,DFS) kullanıyorsa ford fulkerson olarak isimlendirilir. Şayet aynı algoritma bu arama işlemi sırasında <a href="http://www.bilgisayarkavramlari.com/2010/05/22/sekillerde-sig-oncelikli-arama/">sığ öncelikli arama (breadth first search, BFS)</a> kullanırsa bu durumda da edmonds karp algoritması olarak isimlendirilir.</p>
<p>Biz yazımızın konusu olan Edmonds Karp algoritmasını anlamak için sığ öncelikli olarak arama işlemini gerçekleştirelim:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/052210_0854_EdmondsKarp3.png" alt="" /></p>
<p>BFS (sığ öncelikli arama) sonucunda bulunan yollarımız aşağıda listelenmiş olsun:</p>
<ul>
<li>A-D-E</li>
<li>A-B-E</li>
<li>A-C-D-E</li>
<li>A-C-F-B-E</li>
<li>A-C-F-D-E</li>
<li>A-B-F-D-E</li>
</ul>
<p>İlk bulacağımız yol (path) A-D-E olsun bu durumda algoritma bu yol üzerindeki en küçük kapasiteyi bulmaya çalışır:</p>
<p>min(A-D,D-E) = min(5,7) = 5</p>
<p>bu bulunan sayı aslında bu yol üzerinden akabilecek maksimum değerdir. Dolayısıyla bu yoldan 5 kapasitesinde akış yapılmasına karar verilir ve şekil üzerinde bu durum işaretlenir:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/052210_0854_EdmondsKarp5.png" alt="" /></p>
<p>Yukarıdaki şekilde buluna kırmızı sayılar, o yoldaki anlık akış miktarlarıdır.</p>
<p>Ardından  derin öncelikli arama işlemi devam eder ve örneğin A-B-E yolunu bulur.</p>
<p>min(A-B, B-E) = min(4,2) = 2</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/052210_0854_EdmondsKarp7.png" alt="" /></p>
<p>Bir sonraki yolumuz olan A-C-D-E yolunu hesaplayalım.</p>
<p>min(A-C,C-D,D-E) = min(1,1,2) = 1</p>
<p>Yukarıda dikkat edilecek bir nokta, D-E aralığının şeklin ilk halinde olan 7 olarak alınması yerine 2 olarak alınmasıdır. Bunun sebebi şeklin bu kenarındaki 5 miktarındaki kapasitenin şu anda kullanılıyor olması ve artık geriye 2 miktarında kapasite kalmasıdır.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/052210_0854_EdmondsKarp9.png" alt="" /></p>
<p>Bu adımsan sonra BFS algoritmamız ile bulduğumuz aşağıdaki yolları atlamamız gerekecektir:</p>
<ul>
<li>A-C-F-B-E</li>
<li>A-C-F-D-E</li>
</ul>
<p>Bunun sebebi bu yollarda bulunan A-C aralığının artık 0 kapasitesinin kalmış olması ve bu yollardan daha fazla akış elde edilememesidir.</p>
<p>Son olarak BFS algoritmamızın bulduğu A-B-F-D-E yolunu hesaplayalım:</p>
<p>min (A-B,B-F,F-D,D-E) = min ( 2,5,5,1) = 1</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/052210_0854_EdmondsKarp11.png" alt="" /></p>
<p>Yukarıdaki şekilde bütün düğümler arasındaki akışlar gösterilmiştir. Gerçekten de graftaki E düğümüne (hedef düğüme) gidebilen yollar maksimum kapasite ile doldurulmuştur.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2010/05/22/edmonds-karp-algoritmasi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ford Fulkerson Algoritması</title>
		<link>http://www.bilgisayarkavramlari.com/2010/05/22/ford-fulkerson-algoritmasi/</link>
		<comments>http://www.bilgisayarkavramlari.com/2010/05/22/ford-fulkerson-algoritmasi/#comments</comments>
		<pubDate>Sat, 22 May 2010 08:44:23 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[graf teorisi (graph theory, çizge kuramı)]]></category>
		<category><![CDATA[veri yapıları]]></category>
		<category><![CDATA[dfs]]></category>
		<category><![CDATA[graph]]></category>
		<category><![CDATA[maximum flow]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2010/05/22/ford-fulkerson-algoritmasi/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Bu algoritmanın amacı, literatürde azami akış ( maximum flow ) olarak geçen ve düğümler (nodes) arasında akış kapasiteleri belirli bir şekildeki (graph) bir başlangıçtan bir hedefe en fazla akışın sağlandığı problemleri çözmektir. Azami akış (maximum flow) problemini örneğin şehirler arasında bağlı boru hattına veya tedarik zincirine benzetebiliriz. Örneğin aşağıdaki şekli [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Bu algoritmanın amacı, literatürde azami akış ( maximum flow ) olarak geçen ve düğümler (nodes) arasında akış kapasiteleri belirli bir <a href="http://www.bilgisayarkavramlari.com/2008/08/01/graf-sekil-graph/">şekildeki (graph)</a> bir başlangıçtan bir hedefe en fazla akışın sağlandığı problemleri çözmektir.</p>
<p>Azami akış (maximum flow) problemini örneğin şehirler arasında bağlı boru hattına veya tedarik zincirine benzetebiliriz. Örneğin aşağıdaki şekli ele alalım:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/052210_0844_FordFulkers1.png" alt="" /></p>
<p>Buradaki düğümler, şehirleri ve düğümler arasındaki kenarlar (edges) ise şehirler arasındaki boru hatlarının kapasitesini belirtsin. Amacımız A düğümünden E düğüme azami miktarda akış sağlayabilmek olsun.</p>
<p>Ford-Fulkerson çözüm için yukarıdaki şekilde öncelikle hedef düğüme giden yolu bulur.  Algoritma bu arama işlemi sırasında şayet derin öncelikli arama (depth first search ,DFS) kullanıyorsa ford fulkerson olarak isimlendirilir. Şayet aynı algoritma bu arama işlemi sırasında <a href="http://www.bilgisayarkavramlari.com/2010/05/22/sekillerde-sig-oncelikli-arama/">sığ öncelikli arama (breadth first search, BFS)</a> kullanırsa bu durumda da edmonds karp algoritması olarak isimlendirilir.</p>
<p>Biz yazımızın konusu olan ford fulkerson algoritmasını anlamak için derin öncelikli olarak arama işlemini gerçekleştirelim:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/052210_0844_FordFulkers3.png" alt="" /></p>
<p>İlk bulacağımız yol (path) A-D-E olsun bu durumda algoritma bu yol üzerindeki en küçük kapasiteyi bulmaya çalışır:</p>
<p>min(A-D,D-E) = min(5,7) = 5</p>
<p>bu bulunan sayı aslında bu yol üzerinden akabilecek maksimum değerdir. Dolayısıyla bu yoldan 5 kapasitesinde akış yapılmasına karar verilir ve şekil üzerinde bu durum işaretlenir:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/052210_0844_FordFulkers5.png" alt="" /></p>
<p>Yukarıdaki şekilde buluna kırmızı sayılar, o yoldaki anlık akış miktarlarıdır.</p>
<p>Ardından  derin öncelikli arama işlemi devam eder ve örneğin A-C-D-E yolunu bulur.</p>
<p>min(A-C,C-D,D-E) = min(1,1,2) = 1</p>
<p>Yukarıda dikkat edilecek bir nokta, D-E aralığının şeklin ilk halinde olan 7 olarak alınması yerine 2 olarak alınmasıdır. Bunun sebebi şeklin bu kenarındaki 5 miktarındaki kapasitenin şu anda kullanılıyor olması ve artık geriye 2 miktarında kapasite kalmasıdır.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/052210_0844_FordFulkers7.png" alt="" /></p>
<p>Bir sonraki derin öncelikli arama yolumuz A-C-F-D-E olsun. Bu durumda yol üzerindeki kapasite hesabı aşağıdaki şekilde olacaktır:</p>
<p>min(A-C,C-F,F-D,D-E) = min (0,2,5,7) =0</p>
<p>Görüldüğü üzere bu yol artık kullanılamaz çünkü bu yoldaki kapasite 0&#8242;dır. Bunun sebebi bir önceki adımda bulunan yolun, A-C arasındaki kapasiteyi sonuna kadar kullanmış olmasıdır.</p>
<p>Sıradaki yolumuz A-B-F-D olsun:</p>
<p>min(A-B,B-F,F-D) = min( 4,5,5,1) = 1</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/052210_0844_FordFulkers9.png" alt="" /></p>
<p>Son olarak yolumuz A-B-E olarak verilsin :</p>
<p>min(A-B,B-E) = min (3,2) = 2</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/052210_0844_FordFulkers11.png" alt="" /></p>
<p>Yukarıdaki şekilde bütün düğümler arasındaki akışlar gösterilmiştir. Gerçekten de graftaki E düğümüne (hedef düğüme) gidebilen yollar maksimum kapasite ile doldurulmuştur.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2010/05/22/ford-fulkerson-algoritmasi/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Şekillerde Sığ Öncelikli Arama</title>
		<link>http://www.bilgisayarkavramlari.com/2010/05/22/sekillerde-sig-oncelikli-arama/</link>
		<comments>http://www.bilgisayarkavramlari.com/2010/05/22/sekillerde-sig-oncelikli-arama/#comments</comments>
		<pubDate>Sat, 22 May 2010 07:33:13 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[graf teorisi (graph theory, çizge kuramı)]]></category>
		<category><![CDATA[veri yapıları]]></category>
		<category><![CDATA[şekil]]></category>
		<category><![CDATA[bfs]]></category>
		<category><![CDATA[breadth first search]]></category>
		<category><![CDATA[graph]]></category>
		<category><![CDATA[sığ öncelikli arama]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2010/05/22/sekillerde-sig-oncelikli-arama/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Bu yazının amacı genel amaçlı şekillerde (graphs) sığ öncelikli aramayı (breadth first search , BFS) açıklamaktır. Bu yazı, ağaçlardaki sığ öncelikli arama ile karıştırılmamalıdır. Ağaçlar (trees) bilindiği üzere yönlü dairesel olmayan şekillerdir (directed acyclic graph) dolayısıyla ağaçlar üzerinde bu yazıda anlatılan sıra (queue) yapısına ihtiyaç duyulmaz. Sığ öncelikli arama bir [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Bu yazının amacı genel amaçlı <a href="http://www.bilgisayarkavramlari.com/2008/08/01/graf-sekil-graph/">şekillerde (graphs)</a> sığ öncelikli aramayı (breadth first search , BFS) açıklamaktır.</p>
<p>Bu yazı, <a href="http://www.bilgisayarkavramlari.com/2008/11/13/sig-oncelikli-arama-breadth-first-search/">ağaçlardaki sığ öncelikli arama</a> ile karıştırılmamalıdır<a href="http://www.bilgisayarkavramlari.com/2008/05/07/agaclar-tree/">. Ağaçlar (trees)</a> bilindiği üzere yönlü dairesel olmayan şekillerdir (directed acyclic graph) dolayısıyla ağaçlar üzerinde bu yazıda anlatılan <a href="http://www.bilgisayarkavramlari.com/2008/04/16/sira-queue/">sıra (queue)</a> yapısına ihtiyaç duyulmaz.</p>
<p>Sığ öncelikli arama bir başlangıç düğümünden başlayarak sıradaki komşuları dolaşan arama algoritmasıdır. Bu arama algoritmasında amaç önce başlangıç düğümüne yakın düğümlere bakmaktır.</p>
<p>Bu arama şekli suya atılan bir damlanın suda çıkardığı halkalara benzetilebilir. Başlangıç düğümüne en yakın halka sonra ikinci yakın halka ve sonra diğerleri şeklinde giden bir arama algoritmasıdır.</p>
<p>Bu durumu aşağıdaki örnek üzerinden anlamaya çalışalım:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/052210_0733_ekillerdeS1.png" alt="" /></p>
<p>Örnek olarak yukarıda bulunan şekli ele alalım. Örneğimizde başlangıç <a href="http://www.bilgisayarkavramlari.com/2008/08/01/dugum-node/">düğümü (node)</a> olarak A düğümünü seçtiğimizi ve aranan düğümün E düğümü olduğunu düşünelim .</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/052210_0733_ekillerdeS3.png" alt="" /></p>
<p>A düğümünün <a href="http://www.bilgisayarkavramlari.com/2008/11/13/komsuluk-listesi-adjacency-list/">komşuluk listesini (adjacency list)</a> çıkarıyoruz:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/052210_0733_ekillerdeS5.png" alt="" /></p>
<p>komşu(A) = {C,B}</p>
<p>Bu komşulara sırasıyla bakılıyor ve bu komşuların komşuluk listeleri çıkarılıyor:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/052210_0733_ekillerdeS7.png" alt="" /></p>
<p>bakılanlar: {A,B,C}</p>
<p>komşular = komşu (B) , komşu (C) = {D,F,E}</p>
<p>Arana düğüm E, bu adımda bulunmuştur.</p>
<p>Yukarıdaki örnekte görüldüğü üzere bir sonraki derinliğe inilmeden önce, o derinlikte olan (başlangıç düğümüne o uzaklıkta olan) bütün düğümler dolaşılıyor ve ardından bir alt seviyeye iniliyor.</p>
<p>Yukarıdaki örnekte bütün ağaç dolaşılmış gibi düşünülebilir. Örneğin şekil (graph) aşağıdaki gibi olsaydı:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/052210_0733_ekillerdeS9.png" alt="" /></p>
<p>Bu durumda Z düğümüne hiçbir zaman bakılmayacaktı çünkü aranan düğüm, Z düğümünden daha sığ bir derinlikte olacaktı.</p>
<p>Kısacası BFS arama algoritması ile aranan düğümün derinliğine kadar olan bütün düğümlere bakılır ancak bu derinlikten daha aşağıda olan düğümlere bakılmasına gerek yoktur.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2010/05/22/sekillerde-sig-oncelikli-arama/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dijkstra Algoritması</title>
		<link>http://www.bilgisayarkavramlari.com/2010/05/13/dijkstra-algoritmasi-2/</link>
		<comments>http://www.bilgisayarkavramlari.com/2010/05/13/dijkstra-algoritmasi-2/#comments</comments>
		<pubDate>Thu, 13 May 2010 20:17:01 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[algoritma analizi (teory of algorithms)]]></category>
		<category><![CDATA[graf teorisi (graph theory, çizge kuramı)]]></category>
		<category><![CDATA[veri yapıları]]></category>
		<category><![CDATA[dijkstra]]></category>
		<category><![CDATA[En kısa yol]]></category>
		<category><![CDATA[graph]]></category>
		<category><![CDATA[shortest path]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2010/05/13/dijkstra-algoritmasi-2/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Bilgisayar bilimlerinde kullanılan ve algoritmayı literatüre kazandıran kişinin ismini taşıyan dijkstra algoritması, verilen bir şekilde (graph) en kısa yolu bulmak için kullanılır. Bu algoritmanın çalışmasını örnek bir şekil( graph ) üzerinden göstermeye çalışalım. Bu gösterimin ardından Dijkstra algoritmasının başarısını ve zafiyetlerini tartışabiliriz. Örnek olarak yukarıda bulunan şekli ele alalım. Dijkstra [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Bilgisayar bilimlerinde kullanılan ve algoritmayı literatüre kazandıran kişinin ismini taşıyan dijkstra algoritması, verilen bir <a href="http://www.bilgisayarkavramlari.com/2008/08/01/graf-sekil-graph/">şekilde (graph)</a> en kısa yolu bulmak için kullanılır.</p>
<p>Bu algoritmanın çalışmasını örnek bir şekil( graph ) üzerinden göstermeye çalışalım. Bu gösterimin ardından Dijkstra algoritmasının başarısını ve zafiyetlerini tartışabiliriz.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/051310_2016_DijkstraAlg1.png" alt="" /> <img src="http://www.bilgisayarkavramlari.com/wp-content/plugins/flash-video-player/default_video_player.gif" /></p>
<p>Örnek olarak yukarıda bulunan şekli ele alalım. Dijkstra algoritması herhangi bir şekildeki bir düğümden diğer bütün düğümlere giden en kısa yolu hesaplar.</p>
<p>Örneğimizde başlangıç <a href="http://www.bilgisayarkavramlari.com/2008/08/01/dugum-node/">düğümü (node)</a> olarak A düğümünü seçtiğimizi düşünelim ve algoritmanın çalışmasını bu düğümden başlayarak gösterelim.</p>
<p>Algoritma başlangıçta bütün düğümlere henüz erişim olmadığını kabul ederek sonsuz (<span style="font-family: Symbol;">¥</span> ) değeri atar. Yani başlangıç durumunda henüz hiçbir düğüme gidemiyoruz.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/051310_2016_DijkstraAlg3.png" alt="" /></p>
<p>Ardından başlangıç düğümünün komşusu olan bütün düğümleri dolaşarak bu düğümlere ulaşım mesafesini günceller.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/051310_2016_DijkstraAlg5.png" alt="" /></p>
<p>Bu güncelleme işleminden sonra güncellenen düğümlerin komşularını günceller ve bütün düğümler güncellenene ve şekil üzerinde yeni bir güncelleme olmayana kadar bu işlem devam eder.</p>
<p>Örneğin yukarıda A düğümünün komşusu olan düğümler (B ve C) güncellendiler. Bir sonraki adımda bu düğümlerin komşuları güncellenecektir. İstediğimiz bir düğüm ile başlayalım. Örneğin önce B sonra C düğümünün komşularını güncelleyelim:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/051310_2016_DijkstraAlg7.png" alt="" /></p>
<p>Yukarıdaki şekilde, B düğümünün komşusu olan E ve F düğümleri güncellenmiştir. Bu güncelleme işlemi sırasında B düğümünün üzerindeki mevcut maliyet ile E ve F düğümlerine gidişten doğan maliyet toplanmıştır.</p>
<p>Örneğin E düğümü için 2 + 5 = 7 ve F düğümü için 2 + 2 = 4 değerleri bulunmuştur.</p>
<p>Şimdi bir sonraki düğüm olan C düğümünden güncelleme yapalım:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/051310_2016_DijkstraAlg9.png" alt="" /></p>
<p>Bu aşamada güncellenen düğümler, C düğümünün komşusu olan D ve F düğümleridir. Bu düğümlerden, F düğümü daha önce güncellenmişti ve değer olarak 7 taşımaktaydı, ancak yeni gelen değer, F  için C üzerinden 1 + 2 = 3 olarak hesaplanmış ve bu değer daha önceden hesaplanan 7 değerinden düşük olduğu için 7&#8242;nin üzerine yazılarak 3 olmuştur.</p>
<p>Algoritmanın çalışmasını sonraki düğümlerin güncellenmesi ile sürdürelim. Bu sefer örneğin D düğümünün komşularını güncelleyelim ( şu anda D, F ve E düğümleri aynı derecede yeni güncellenmiştir bunlardan herhangi birisi ile başlanması Dijkstra algoritmasına uygundur. Ancak <a href="http://www.bilgisayarkavramlari.com/2008/08/05/ozyineli-fonksiyonlar-recursive-functions/">recursive (özyineli)</a> bir kodlama yapılıyorsa koda göre elbette yakın olan komşular güncellenecektir)</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/051310_2016_DijkstraAlg11.png" alt="" /></p>
<p>D düğümünün hiçbir komşusu güncellenmemiştir bunun sebebi hesaplanan değerlerin mevcut değerlerden yüksek olması ve dolayısıyla daha iyi bir sonuç bulunamamasıdır.</p>
<p>F için 2 + 5 = 7 &gt; 3</p>
<p>E için 2 + 7 = 9 &gt; 4</p>
<p>Dolayısıyla bir sonraki düğümü seçerek devam ediyoruz</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/051310_2016_DijkstraAlg13.png" alt="" /></p>
<p>F düğümünün komşularında da bir değişiklik olmuyor ve son olarak E düğümü deneniyor:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/051310_2016_DijkstraAlg15.png" alt="" /></p>
<p>Son halimizde de bir değişiklik olmayarak şeklimiz (graph) kararlı bir halde ( daha fazla değişiklik olmadığı için) dolaşılmış ve bitmiş oluyor.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/051310_2016_DijkstraAlg17.png" alt="" /></p>
<p>Yukarıdaki bu grafta, düğümler üzerinde yazılı olan değerler, A düğümünden başlanarak her düğüme gidilebilen en kısa yol mesafesini vermektedir. Örneğin şekildeki F düğümüne ulaşma maliyeti 3 olarak hesaplanmıştır ve Dijkstra algoritması, A düğümünden F düğümüne daha kısa bir yol bulunamayacağını iddia eder ( eşit farklı yollar bulunabilir ama en kısa yol yine de 3 olur)</p>
<p><strong>Dijkstra algoritmasının zayıf yönü<br />
</strong></p>
<p>Algoritma ne yazık ki eksi (-) değer taşıyan bir kenar bulunması halinde başarılı çalışmaz. Bunun sebebi eksi (-) değerdeki kenarın sürekli olarak mevcut durumdan daha iyi bir sonuç üretmesi ve algoritmanın hiçbir zaman için kararlı hale gelememesidir.</p>
<p>Örneğin aşağıdaki basit şekli ele alalım:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/051310_2016_DijkstraAlg19.png" alt="" /></p>
<p>Yukarıdaki bu şekilde B-C kenarı (edge) -2 değerinde verilmiştir. Bu durumda A düğümünden başlayarak en kısa yolları hesaplamak istersek, öncelikli olarak A düğümünden komşusu olan düğümlere güncelleme yapılacaktır:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/051310_2016_DijkstraAlg21.png" alt="" /></p>
<p>Ardından bu düğümlerin komşuları güncellenecektir. İki düğümde birbirine -2 değerini ekleyerek daha kısa bir yol bulacak ve birbirlerini güncelleyerek daha kısa sonuçlara ulaşacaktır.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/051310_2016_DijkstraAlg23.png" alt="" /></p>
<p>Bu işlem ne yazık ki sonsuza kadar giden bir sürecin başlangıcıdır ve hiçbir zaman daha iyi bir sonuç bulma işlemi bitmez.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/051310_2016_DijkstraAlg25.png" alt="" /></p>
<p>Sürekli olarak mevcut durumdan daha iyi bir durum bulunacak ve daha küçük değerler güncellenecektir. Bu yüzden Dijkstra algoritması, eksi (-) değer taşıyan şekillerde (graph) başarılı çalışmaz.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2010/05/13/dijkstra-algoritmasi-2/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Hasse Çizgeleri (Hasse Diagrams)</title>
		<link>http://www.bilgisayarkavramlari.com/2010/02/15/hasse-cizgeleri-hasse-diagrams/</link>
		<comments>http://www.bilgisayarkavramlari.com/2010/02/15/hasse-cizgeleri-hasse-diagrams/#comments</comments>
		<pubDate>Mon, 15 Feb 2010 14:34:50 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Bilgisayar Matematiği]]></category>
		<category><![CDATA[graf teorisi (graph theory, çizge kuramı)]]></category>
		<category><![CDATA[veri yapıları]]></category>
		<category><![CDATA[hasse çizgeleri]]></category>
		<category><![CDATA[hasse diagrams]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2010/02/15/hasse-cizgeleri-hasse-diagrams/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Bilgisayar bilimleri de dahil olmak üzere çok sayıdaki bilim ve mühendislik alanında kullanılan bir modelleme biçimidir. Şekilde (graph) kullanılan düğümler (nodes) birer kümeyi ifade etmektedir. Çizimdeki geçişler (transitions) bir kümeden diğer kümeye bir eleman ile geçilebilme durumunu ifade eder. Buna göre bir kümeye eleman eklenmesi veya eleman çıkarılması bir adımlık [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Bilgisayar bilimleri de dahil olmak üzere çok sayıdaki bilim ve mühendislik alanında kullanılan bir modelleme biçimidir<a href="http://www.bilgisayarkavramlari.com/2008/08/01/graf-sekil-graph/">. Şekilde (graph)</a> kullanılan <a href="http://www.bilgisayarkavramlari.com/2008/08/01/dugum-node/">düğümler (nodes)</a> birer kümeyi ifade etmektedir. Çizimdeki <a href="http://www.bilgisayarkavramlari.com/2008/08/01/kenar-edge/">geçişler (transitions)</a> bir kümeden diğer kümeye bir eleman ile geçilebilme durumunu ifade eder. Buna göre bir kümeye eleman eklenmesi veya eleman çıkarılması bir adımlık bir iştir ve her iş bir geçiş olarak değerlendirilmelidir.</p>
<p>Konuyu örnekler üzerinden anlamaya çalışalım. Örneğin kümemiz  {a,b,c} olsun ve bu kümenin alt kümelerini hasse diyagramı (hasse diagram) olarak çizelim.</p>
<p>Öncelikle kümemizin alt kümelerinin kümesini (güç kümesini, power set) bulalım:</p>
<p>{Ø , {a}, {b}, {c}, {a, b}, {b, c} , { a,c} ,{a,b,c}}</p>
<p>Bu kümenin elemanları arasındaki hasse diyagramını çizelim:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/021510_1435_Hasseizgele1.png" alt="" /></p>
<p>Yukarıda görüldüğü üzere boş kümeden başlayarak her küme eklentisi ayrı bir okla gösterilmiştir. Yukarıdaki şekil, 3 boyutlu bir küpe bu açıdan benzetilebilir (yanda temsili bir küp çizilmiştir). Yukarıdaki şekilde, kümeye eleman eklenmesi bir geçiş durumu olarak tanımlanmış ve her geçiş, kümeye tek bir eleman eklenmesi olarak gösterilmiştir. Örneğin boş kümeden kümenin tamamı olan {a,b,c} kümesine geçiş mümkündür ama bu dolaylı geçiş (transition) doğrudan bir bağlantı ile gösterilmek yerine olduğu gibi yani dolaylı bir şekilde bırakılmıştır. Dolayısıyla şekildeki mesafe, bir kümeden diğer kümeye olan geçiş için gerekli adım sayısını vermektedir. Örneğin {a} kümesinden {a,b,c} kümesine geçiş için iki farklı yol bulunur ve ikisinde de iki adımda geçiş tamamlanır (ya {a,b} ya da {a,c} üzerinden)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2010/02/15/hasse-cizgeleri-hasse-diagrams/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kırmızı-Siyah Ağaçları (Red  Black Trees)</title>
		<link>http://www.bilgisayarkavramlari.com/2009/12/27/kirmizi-siyah-agaclari-red-black-trees/</link>
		<comments>http://www.bilgisayarkavramlari.com/2009/12/27/kirmizi-siyah-agaclari-red-black-trees/#comments</comments>
		<pubDate>Sun, 27 Dec 2009 13:10:21 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[algoritma analizi (teory of algorithms)]]></category>
		<category><![CDATA[graf teorisi (graph theory, çizge kuramı)]]></category>
		<category><![CDATA[veri yapıları]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2009/12/27/kirmizi-siyah-agaclari-red-black-trees/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Lütfen dikkat: Özellikle 147 adet yazımı kopyalayan ve hiçbir mailime cevap vermeyen is34.net sitesi yöneticisi başta olmak üzere, yazılarımı kopyalayan site yöneticileri. Emek ve vakit harcayarak ürettiğim yazılarımı lütfen kopyalamayınız. Şayet bu tip yazıları üreten insanların emeğini basit bir iki tıklama ile kopyalayarak web yayıncılığı yaptığınızı düşünüyorsanız, ve telif hakları [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p><span style="color:red">Lütfen dikkat: Özellikle 147 adet yazımı kopyalayan ve hiçbir mailime cevap vermeyen is34.net sitesi yöneticisi başta olmak üzere, yazılarımı kopyalayan site yöneticileri. Emek ve vakit harcayarak ürettiğim yazılarımı lütfen kopyalamayınız. Şayet bu tip yazıları üreten insanların emeğini basit bir iki tıklama ile kopyalayarak web yayıncılığı yaptığınızı düşünüyorsanız, ve telif hakları yasasına saygınız yoksa, ve içerik üreten insanları bu işten bezdirmek istiyorsanız yaptığınız hırsızlığa devam ediniz, ancak bundan sonra yazılarımın izinsiz bir şekilde kopyalanması durumunda hukuki işlem başlatacağımı belirtmek isterim.</span></p>
<p>Bilgisayar bilimlerinde, veriyi <a href="http://bilgisayarkavramlari.com/2008/05/07/agaclar-tree/">ağaçta (tree)</a> tutarken, ağacın dengeli (balanced) olmasını sağlayan bir algoritmadır. Algoritma, veriyi tutuş şekli sayesinde, arama, ekleme veya silme gibi temel işlemlerin en kötü durum analizi (worst case analysis) O(logn)&#8217;dir, yani algoritma n elman için bu işlemleri en kötü O(logn) zamanda yapmaktadır.</p>
<p>Kırmızı-siyah ağaçlar (red-black trees) tanım itibariyle ikili arama ağaçlarıdır (binary search tree) ve bu anlamda, herhangi bir <a href="http://www.bilgisayarkavramlari.com/2008/08/01/dugum-node/">düğümün</a> solunda kendisinden küçük ve sağında ise büyük verilerin durması beklenir. Ağaçta ayrıca her düğüm için bir renk özelliği tutulur. Yani bir <a href="http://www.bilgisayarkavramlari.com/2008/08/01/dugum-node/">düğüm</a> kırmızı veya siyah renk özelliği taşıyabilir. Ağaçtaki <a href="http://www.bilgisayarkavramlari.com/2008/08/01/dugum-node/">düğümlerin</a> taşıması gereken bu özellikler aşağıdaki şekilde sıralanabilir:</p>
<ol>
<li>Ağaçtaki her düğüm kırmızı ya da siyahtır</li>
<li>Kök düğüm (root node) her zaman için siyahtır.</li>
<li>Bütün yaprak düğümler (leaf nodes) siyahtır</li>
<li>Herhangi bir kırmızı düğümün bütün çocukları siyahtır.</li>
<li>Herhangi bir düğümden, yaprak düğüme kadar gidilen bütün yollarda eşit sayıda siyah düğüm bulunur.</li>
</ol>
<p>Yukarıdaki bu kurallar ışığında, herhangi bir düğümden, yapraklara kadar olan yolun, gidilebilecek en kısa yolun iki mislinden kısa olduğu garanti edilebilir. Diğer bir deyişle, ağacın aynı seviyedeki düğümleri aynı renktir. Ayrıca ağaçtaki renklendirme kökten başlayarak, siyah – kırmızı – siyah – kırmızı sıralamasıyla değişmektedir.</p>
<p>Örneğin aşağıdaki ağacı ele alalım:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/122709_1309_KrmzSiyahA1.png" alt="" /><span style="color:white"><br />
</span></p>
<p><span style="color:black">Yukarıda görülen örnek ağaçta, kök düğüm siyah, yapraktaki boş düğümler (null) siyah ve bu düğümler dışındaki her düğümün çocukları, kendisinin ters rengindedir. Örneğin kırmızı olan 13 düğümünün çocukları siyah, siyah olan 25 düğümünün çocukları ise kırmızıdır. Bu anlamda kutu ile gösterilen yaprak düğümler göz ardı edilirse, aynı seviyedeki düğümler aynı renkte olmaktadır.<br />
</span></p>
<p><span style="color:black"><strong>Arama işlemi (search)<br />
</strong></span></p>
<p><span style="color:black">Ağaç üzerinde bir değerin aranması, <a href="http://www.bilgisayarkavramlari.com/2008/05/07/ikili-arama-agaci-binary-search-tree/"></a></span>ikili arama ağacında (binary search tree)<span style="color:black"> gibi yapılır. Yani aranan değer önce kök düğümde (root node) aranır, şayet aranan değer daha büyükse sağa, küçükse sola devam edilir. Nihayetinde aranan değer bulunana veya boş (null) değere ulaşılana kadar bu işlem devam eder.<br />
</span></p>
<p><span style="color:black"><strong>Ekleme işlemi (insertion)<br />
</strong></span></p>
<p><span style="color:black">Ağaca bir düğümün nasıl eklendiğini algoritmasal olarak aşağıdaki şekilde açıklayabiliriz:<br />
</span></p>
<p><span style="color:black">Ekleme işlemi normal bir <a href="http://www.bilgisayarkavramlari.com/2008/05/07/ikili-arama-agaci-binary-search-tree/"></a></span>ikili arama ağacına (binary search tree)<span style="color:black"> ekler gibi başlar. Bu işlem sırasında yeni düğümün kırmızı olacağını kabul ederiz.<br />
</span></p>
<p><span style="color:black">Ekleme işlemi sırasında uyulması gereken 3 temel kural vardır:<br />
</span></p>
<ul>
<li><span style="color:black">Kök düğüm (root node) her zaman için siyahtır.<br />
</span></li>
<li><span style="color:black">Herhangi bir düğümden, yapraklara kadar uzanan herhangi bir yolda, eşit sayıda siyah düğüm bulunur.<br />
</span></li>
<li><span style="color:black">Bir kırmızı düğümün, kırmızı çocuğu bulunamaz.<br />
</span></li>
</ul>
<p><span style="color:black">Yukarıdaki istenmeyen durumlardan birisi oluştuğunda, ağaçtaki düğümlerin rengi değiştirilir ya da değiştirilemiyorsa ağaçta dengelemek için <a href="http://www.bilgisayarkavramlari.com/2008/05/15/agaclarda-dengeleme-rotation-balancing/"></a></span>döndürme (rotation)<span style="color:black"> işlemi yapılır.<br />
</span></p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/122709_1309_KrmzSiyahA3.png" alt="" /><span style="color:black"><br />
</span></p>
<p><span style="color:black">Örneğin, yukarıdaki şekilde gösterildiği üzere 16 sayısını ağaca eklemek isteyelim.<br />
</span></p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/122709_1309_KrmzSiyahA5.png" alt="" /><span style="color:white"><br />
</span></p>
<p><span style="color:black">16 değeri, 17&#8242;den küçük olduğu için, klasik bir ikili arama ağacında hareket eder gibi , ağacın sol tarafında devam edilecek ve 13 ile karşılaştırılacak.<br />
</span></p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/122709_1309_KrmzSiyahA7.png" alt="" /><span style="color:white"><br />
</span></p>
<p><span style="color:black">13&#8242;ten büyük olduğu için sağa bakılıyor. Ve 15&#8242;ten de büyük olduğu için 15&#8242;in sağına ekleniyor.<br />
</span></p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/122709_1309_KrmzSiyahA9.png" alt="" /><span style="color:white"><br />
</span></p>
<p><span style="color:black">Görüldüğü üzere yeni eklenen 16, 15&#8242;ten büyük ve sağındaki boş yere yerleştirilmiştir. Bu yerleştirme sonucunda iki ardışık kırmızı durumu oluşmadığı için sorun yoktur. Yani bir siyah düğüm altına kırmızı düğüm eklenmiştir. Şimdi örnek olarak sırasıyla 30 ve 32 sayılarını ekleyelim.<br />
</span></p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/122709_1309_KrmzSiyahA11.png" alt="" /><span style="color:black"><br />
</span></p>
<p><span style="color:black">Ağaca yukarıdaki şekilde 30 değeri eklenince, ağacın en sağına yerleşmekte ve istenmeyen bir durum olan iki kırmızı arka arkaya gelmektedir. Çözüm olarak ağaçtaki düğümlerin rengi değiştirilmelidir.<br />
</span></p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/122709_1309_KrmzSiyahA13.png" alt="" /><span style="color:black"><br />
</span></p>
<p><span style="color:black">Öncelikle, 30&#8242;un hemen üzerinde bulunan 27 düğümü, iki kırmızı düğüm arka arkaya olamayacağı için siyaha çevrilir. Siyaha çevrilen 27 numaralı düğümün büyük babası 23 numaralı düğümdür. Dolayısıyla 27 numaralı düğümün amcası 18 numaralı düğüm olur. 25 numaralı düğümün kırmızıya çevrilmesi, 23 numaralı büyük baba için problem oluşturur çünkü bir kırmızı düğümün çocukları siyah olmalıdır. Aynı zamanda problem 17 numaralı düğümden yaprağa kadar giden yolda da eşit miktarda siyah düğüm bulunmalıdır. Yukarıdaki örnekte 23 numaralı düğümün siyah kalması durumunda, 17 numaralı düğümden gidilebilen sağ yol ile sol yol arasında düğüm sayıları farklı olmaktadır.<br />
</span></p>
<p><span style="color:black">Çözüm olarak 17 numaralı düğüm kırmızı yapılabilir ancak bu durumda da kök düğümün kırmızı olamayacağı kuralı ile ihtilafa düşülür. Dolayısıyla bu adımda çözüm 13 ve 23 numaralı düğümlerin siyah yapılmasıdır.<br />
</span></p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/122709_1309_KrmzSiyahA15.png" alt="" /><span style="color:black"><br />
</span></p>
<p><span style="color:black">Ağacın çalışma şeklini daha iyi anlayabilmek için ağaca bir de 32 değerinde bir düğüm eklemeyi deneyelim:<br />
</span></p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/122709_1309_KrmzSiyahA17.png" alt="" /><span style="color:black"><br />
</span></p>
<p><span style="color:black">Yukarıdaki örnekte görüldüğü üzere, 32 değeri, bir önceki adımda eklediğimi 30 değerinin sağına gelmektedir. Hemen dikkat edilebilecek bir problem, 30-32 ikilisinin arka arkaya kırmızı olmasıdır. Bu durumda 30 düğümünün siyah yağılması veya 32 düğümünün siyah yapılması problemi çözmez çünkü kökten yapraklara kadar giden yolda eşit sayıda siyah düğüm bulunmalıdır. Bu yola yeni bir siyah düğüm eklenmesi bu dengeyi bozar. Çözüm olarak saat yönünün tersine döndürme işlemi uygulanıp çocukların siyah yapılması gerekir. Bu durumu aşağıdaki şekil üzerinden açıklamaya çalışalım:<br />
</span></p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/122709_1309_KrmzSiyahA19.png" alt="" /><span style="color:black"><br />
</span></p>
<p><span style="color:black">Yukarıdaki 2 problem bulunuyor:<br />
</span></p>
<ol>
<li><span style="color:black">İki kırmızı düğüm arka arkaya<br />
</span></li>
<li><span style="color:black">Yolda tek siyah düğüm bulunmasına izin verilmiş, yapraklara kadar giden ikinci bir siyah düğüm çıkarma hakkımız yok.<br />
</span></li>
</ol>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/122709_1309_KrmzSiyahA21.png" alt="" /><span style="color:black"><br />
</span></p>
<p><span style="color:black">Yukarıdaki yeni halinde, kural bozulmaksızın hem tek siyah ile yaprağa ulaşılıyor hem de iki kırmızı ihlalinden kurtulunuyor.<br />
</span></p>
<p><span style="color:black">Benzer bir çözüm aşağıdaki şekilde olabilirdi:<br />
</span></p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/122709_1309_KrmzSiyahA23.png" alt="" /><span style="color:black"><br />
</span></p>
<p><span style="color:black">Ancak yukarıdaki bu yeni halimiz ağacın bütünüyle uyuşmamaktadır. Yani döndürme işleminin yapıldığı ağacın üst düğümü 25 olduğu ve kırmızı olduğu için bu ikinci çözüm yeni bir kırmızı kırmızı komşuluğu doğuracaktır. Dolayısıyla ilk örnekte olduğu gibi problemi çözebiliriz:<br />
</span></p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/122709_1309_KrmzSiyahA25.png" alt="" /><span style="color:black"><br />
</span></p>
<p><span style="color:black">Yukarıdaki yeni halimizde kuralların tamamına uyarak ağaca yeni sayıyı eklemiş bulunuyoruz. Benzer bir durumu oluşturup daha yukarıdan <a href="http://www.bilgisayarkavramlari.com/2008/05/15/agaclarda-dengeleme-rotation-balancing/"></a></span>döndürme (rotation)<span style="color:black"> işleminin nasıl yapıldığını, ağaca 29 sayısını ekleyerek görebiliriz. Bakın 29 sayısı eklenince de yapılan işlem aslında aynıdır sadece daha büyük bir döndürme işlemi gerçekleştirilmiş olacaktır:<br />
</span></p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/122709_1309_KrmzSiyahA27.png" alt="" /><span style="color:black"><br />
</span></p>
<p><span style="color:black">İki kırmızı durumu oluşuyor. Bu noktada artık ikisinden birisinin siyah olması sorunu çözmez çünkü yaprağa kadar olan yolda her halükarda bir fazla siyah düğüm oluşur.<br />
</span></p>
<p><span style="color:black">Çözüm olarak sırasıyla kırmızı-siyah dönüşümü yapıyoruz:<br />
</span></p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/122709_1309_KrmzSiyahA29.png" alt="" /><span style="color:black"><br />
</span></p>
<p><span style="color:black">Görüldüğü üzere köke kadar giden yolda kırmızı-kırmızı durumunu engellemek için düğümler bir kırmızı bir de siyah sırasına dönüştürüldü. Şimdi problem 23 numaralı düğümün sağ ve sol taraflarındaki yol uzunluğunun farklı olması. Yani 23 numaralı düğümün sol tarafındaki problem çözülürse 17 numaralı düğüm için bir problem yok<br />
</span></p>
<p><span style="color:black">Döndürme işlemi gerçekleştiriyoruz:<br />
</span></p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/122709_1309_KrmzSiyahA31.png" alt="" /><span style="color:black"><br />
</span></p>
<p><span style="color:black">Yukarıda görüldüğü üzere 25 numaralı düğüm23 ve 30 numaralı düğümler arasındayken, bu düğümlerin atası durumuna geçmiştir.<br />
</span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2009/12/27/kirmizi-siyah-agaclari-red-black-trees/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Yerleşim Sıralaması (Topological Sort, İlinge Sıralaması)</title>
		<link>http://www.bilgisayarkavramlari.com/2009/12/24/yerlesim-siralamasi-topological-sort-ilinge-siralamasi/</link>
		<comments>http://www.bilgisayarkavramlari.com/2009/12/24/yerlesim-siralamasi-topological-sort-ilinge-siralamasi/#comments</comments>
		<pubDate>Thu, 24 Dec 2009 12:50:17 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[graf teorisi (graph theory, çizge kuramı)]]></category>
		<category><![CDATA[veri yapıları]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2009/12/24/yerlesim-siralamasi-topological-sort-ilinge-siralamasi/</guid>
		<description><![CDATA[Yazan: Şadi Evren ŞEKER Lütfen dikkat: Özellikle 147 adet yazımı kopyalayan ve hiçbir mailime cevap vermeyen is34.net sitesi yöneticisi başta olmak üzere, yazılarımı kopyalayan site yöneticileri. Emek ve vakit harcayarak ürettiğim yazılarımı lütfen kopyalamayınız. Şayet bu tip yazıları üreten insanların emeğini basit bir iki tıklama ile kopyalayarak web yayıncılığı yaptığınızı düşünüyorsanız, ve telif hakları yasasına [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan: Şadi Evren ŞEKER</p>
<p><span style="color:red">Lütfen dikkat: Özellikle 147 adet yazımı kopyalayan ve hiçbir mailime cevap vermeyen is34.net sitesi yöneticisi başta olmak üzere, yazılarımı kopyalayan site yöneticileri. Emek ve vakit harcayarak ürettiğim yazılarımı lütfen kopyalamayınız. Şayet bu tip yazıları üreten insanların emeğini basit bir iki tıklama ile kopyalayarak web yayıncılığı yaptığınızı düşünüyorsanız, ve telif hakları yasasına saygınız yoksa, ve içerik üreten insanları bu işten bezdirmek istiyorsanız yaptığınız hırsızlığa devam ediniz, ancak bundan sonra yazılarımın izinsiz bir şekilde kopyalanması durumunda hukuki işlem başlatacağımı belirtmek isterim.</span></p>
<p>Bilgisayar bilimlerinde, <a href="http://www.bilgisayarkavramlari.com/2008/12/30/yonlu-duz-agaclar-directed-acyclic-graph/">yönlü dairesel olmayan şekiller (directed acyclic graphs)</a> üzerinde çalışan bir <a href="http://www.bilgisayarkavramlari.com/2008/08/09/siralama-algoritmalari-sorting-algorithms/">sıralama algoritmasıdır (sorting algorithm).</a> Algoritma tanımı itibariyle tek köklü ve çok köklü <a href="http://www.bilgisayarkavramlari.com/2008/05/07/agaclar-tree/">ağaçlar (tree)</a> üzerinde çalışmak için tasarlanmıştır denilebilir. Örneğin aşağıdaki ağacı ve sıralama algoritmasının çalışması sonucunda elde edilen neticeyi inceleyerek konuyu anlamaya başlayalım:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/122409_1250_YerleimSral1.png" alt="" /></p>
<p>Yukarıdaki <a href="http://www.bilgisayarkavramlari.com/2008/08/01/graf-sekil-graph/">şeklin</a>, yerleşim sıralaması aşağıdakilerin herhangi birisi olabilir:</p>
<p>5783219</p>
<p>5782319</p>
<p>5781291</p>
<p>5873219</p>
<p>5872319</p>
<p>5871291</p>
<p>5732819</p>
<p>5723819</p>
<p>5732891</p>
<p>5723891</p>
<p>5819732</p>
<p>5891732</p>
<p>5819723</p>
<p>5891723</p>
<p>Görüldüğü üzere yerleşim sıralamasındaki amaç, bir şekilde daha üst seviyede bulunan, veya bir düğümü göstermekte olan diğer düğümün, sıralama sonucunda daha önce gelmesidir. Yukarıdaki şekilde örneğin 5 numaralı düğüm, 7 ve 8 numaralı düğümleri işaret etmektedir. Bu durumda, sıralama sonucunda hiçbir şekilde 7 veya 8, 5&#8242;ten önce gelemez.</p>
<p>Yukarıdaki örnek, tek köklü bir ağaçtır ve bu ağaçta sıralama sonucunda her zaman için kök düğüm (yukarıdaki örnekte 5 numaralı düğüm) sıralama sonucunun başında yer almalıdır. Ancak yerleşim sıralaması algoritması (toplogy sort algorithm) birden fazla kökü bulunan şekiller için de çalışmaktadır. Bu durumda, kök olan bütün düğümler aynı seviyede kabul edilir. Örneğin aşağıdaki şekli ele alalım:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/122409_1250_YerleimSral3.png" alt="" /></p>
<p>Yukarıda verilen yerleşimin sıralanma alternatifleri aşağıda listelenmiştir:</p>
<p>437219</p>
<p>473219</p>
<p>347219</p>
<p>374219</p>
<p>734219</p>
<p>743219</p>
<p>437129</p>
<p>473129</p>
<p>347129</p>
<p>374129</p>
<p>734129</p>
<p>743129</p>
<p>…</p>
<p>Yukarıdaki sonuçların elde edilmesini sağlayan algoritmayı aşağıdaki şekilde tanımlayabiliriz:</p>
<pre>A: Boş bir liste olsun (veya dizi)</pre>
<pre><a href="http://www.bilgisayarkavramlari.com/2008/08/01/graf-sekil-graph/">Şekil üzerinde (graph)</a> kendisine gidilmeyen bir düğüm varken</pre>
<pre>   Bu düğümü alıp A listesine ekle</pre>
<pre>   düğümü şekilden (graph) sil</pre>
<p>Görüldüğü üzere sıralama algoritmasında kendisine gidilmeyen düğümlerden herhangi birisini (ki bu düğüm aslında köklerden birisidir) alarak ilerliyoruz. Bu düğüm silindikten sonra yeni kökler çıkıyor. Örneğin yukarıdaki şekil sıralanırken aşağıdaki adımlardan geçebilir:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/122409_1250_YerleimSral5.png" alt="" /></p>
<p>Sırlama için örneğin 4&#8242;ü alalım. Sonuç : 4</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/122409_1250_YerleimSral7.png" alt="" /></p>
<p>Bu düğüm silindi artık yeni köklerimiz : 2,3,7 oldu ve biz örneğin 2&#8242;yi alalım. Sonuç : 42</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/122409_1250_YerleimSral9.png" alt="" /></p>
<p>Yeni halinde alabileceğimiz kök düğümler sadece 3 ve 7&#8242;dir. Örnek olarak 7&#8242;yi alalım. Sonuç 427</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/122409_1250_YerleimSral11.png" alt="" /></p>
<p>Yeni halinde sadece 3 alınabilir çünkü diğer düğümlerin hepsine (1 ve 9) bir şekilde gidilen bir başka düğüm bulunmaktadır. Sonuç 4273</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/122409_1250_YerleimSral13.png" alt="" /></p>
<p>Son olarak sırasıyla 1 ve sonrada 9&#8242;u alırsak sıralama işlemimiz tamamlanmış olur: Sonuç 427319 olarak bulunur.</p>
<p>Yukarıdaki algoritmanın, daire içeren bir <a href="http://www.bilgisayarkavramlari.com/2008/08/01/graf-sekil-graph/">şekilde (graph)</a> çalışmayacağı barizdir. Bunun sebebi daireye ulaşıldığında bir şekilde kendisine gitmeyen bir düğüm elde edilememesidir. Örneğin <a href="http://www.bilgisayarkavramlari.com/2008/08/01/graf-sekil-graph/">graf (graph)</a> aşağıdaki şekilde verilmiş olsun:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/122409_1250_YerleimSral15.png" alt="" /></p>
<p>Yukarıdaki durumda, ne 9 ne de 1 alınamaz çünkü ikisini de gösteren birer düğüm bulunmaktadır. Bu durumda algoritmamız çalışmaz, zaten yerleşim sıralamasına göre (topological sort) hangi düğümün önce geleceği de belirsizdir.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2009/12/24/yerlesim-siralamasi-topological-sort-ilinge-siralamasi/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Yansıma(Reflexivity)</title>
		<link>http://www.bilgisayarkavramlari.com/2009/12/05/yansimareflexivity/</link>
		<comments>http://www.bilgisayarkavramlari.com/2009/12/05/yansimareflexivity/#comments</comments>
		<pubDate>Sat, 05 Dec 2009 15:24:47 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[graf teorisi (graph theory, çizge kuramı)]]></category>
		<category><![CDATA[veri yapıları]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2009/12/05/yansimareflexivity/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Yansıma, bilgisayar bilimlerinin de içerisinde bulunduğu bir grup bilim ve mühendislik alanında kullanılan mantıksa gösterimler ve muntazam diller (Formal languages) ve ayrıca bu dillerin dayandığı matematik ve mantıksal gösterimler sırasında kullanılan temel özelliktir. Yansıma özelliği bir bağıntı (relation), matris ya da şekilde (graph) üzerinde bir işlemin geri gelebilmesi, yansıyabilmesi veya [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Yansıma, bilgisayar bilimlerinin de içerisinde bulunduğu bir grup bilim ve mühendislik alanında kullanılan mantıksa gösterimler ve <a href="http://www.bilgisayarkavramlari.com/2009/06/25/muntazam-diller-formal-languages/">muntazam diller (Formal languages)</a> ve ayrıca bu dillerin dayandığı matematik ve mantıksal gösterimler sırasında kullanılan temel özelliktir.</p>
<p>Yansıma özelliği bir bağıntı (relation), matris ya da <a href="http://www.bilgisayarkavramlari.com/2008/08/01/graf-sekil-graph/">şekilde (graph)</a> üzerinde bir işlemin geri gelebilmesi, yansıyabilmesi veya ters dönebilmesi olarak düşünülebilir. Örneğin A matrisi için  x <span>∈</span><span style="font-family:Symbol"> </span> A, (x,x) <span style="font-family:Symbol"> </span><span>∈</span> R yazılabilir. Veya bir A bağlantı kümesi için x <span>∈ </span><span style="font-family:Symbol"></span> A, x R x.yazmak doğrudur. Bu anlatımı görsel olarak göstermemiz gerekirse:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/120509_1524_YansmaRefle1.png" alt="" /></p>
<p>Yukarıdaki matriste görülen köşegen (diyagon) değerleri tanımlı olan kare matrise yansıma özelliği olan matris ismi verilir.</p>
<p>Benzer şekilde bir bağıntıda (relation) bulunan bütün elemanların kendi üzerinde yansıması tanımlı olmalıdır. Örneğin aşağıda verilen bağıntılardan hangilerinin yansıma özelliği (reflexivity) olduğunu bulmaya çalışalım.</p>
<p>R<sub>1</sub>={ (1,1),(2,2),(3,3),(4,4) }</p>
<p>R<sub>2</sub>={ (1,2),(2,3),(3,2),(2,1) }</p>
<p>R<sub>3</sub>={ (1,1),(2,2),(2,1),(1,2) }</p>
<p>R<sub>4</sub>={ (3,1),(2,2),(3,3),(1,1) }</p>
<p>Yukarıda verilen bağıntılardan (relation) sadece R<sub>2</sub>yansıma özelliği olmayan bir bağlantıdır. Bunun dışındaki R<sub>1</sub>, R<sub>4 </sub>ve R<sub>3</sub>için yansıma özelliği vardır diyebiliriz. Sebebi bu bağlantılarda bulunan bütün değerlerin kendi üzerinde yansıması mümkündür. Örneğin R<sub>1</sub>için kullanılan 1,2,3 ve 4 değerleri veya R<sub>2</sub>için kullanılan 1 ve 2 değerleri bu bağlantıların kendi içlerinde yansımışlardır (reflexive)</p>
<p>Yukarıda matris (masfuf) ve bağlantı için açıkladığımız yansıma özelliğini <a href="http://www.bilgisayarkavramlari.com/2008/08/01/graf-sekil-graph/">şekillere (graph)</a> uygulamamamız da mümkündür. Örneğin aşağıdaki şekilleri ele alalım:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/120509_1524_YansmaRefle3.png" alt="" /></p>
<p>Yukarıdaki şekillerden sadece b ve d şekillerinin yansıma özelliği bulunur. Bunun sebebi bu şekillerde bulunan düğümlerin (nodes) tamamının kendisine dönebilmesidir. Buna karşılık c şeklinde veya a şeklinde bir yansımadan bahsedilemez.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2009/12/05/yansimareflexivity/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Internal Path Reduction Trees ( İç Yol İndirgeme Ağaçları)</title>
		<link>http://www.bilgisayarkavramlari.com/2009/12/03/internal-path-reduction-trees-ic-yol-indirgeme-agaclari/</link>
		<comments>http://www.bilgisayarkavramlari.com/2009/12/03/internal-path-reduction-trees-ic-yol-indirgeme-agaclari/#comments</comments>
		<pubDate>Thu, 03 Dec 2009 13:40:08 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[algoritma analizi (teory of algorithms)]]></category>
		<category><![CDATA[graf teorisi (graph theory, çizge kuramı)]]></category>
		<category><![CDATA[veri yapıları]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2009/12/03/internal-path-reduction-trees-ic-yol-indirgeme-agaclari/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Bilgisayar bilimlerinde kullanılan veri saklama ve veriye kolay ulaşma yöntemlerinden birisi de ağaçlardır. Çok farklı şekillerde ağaçların kodlanması ve modellenmesi mümkündür. Bu özel ağaçlardan birisi de iç yol indirgeme ağaçlarıdır (internal path reduction tree, IPR Tree). Bir ipr ağacı kısaca bir ikili ağaçtır (binary tree). Ayrıca IPR ağaçlarının dengeli olması [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Bilgisayar bilimlerinde kullanılan veri saklama ve veriye kolay ulaşma yöntemlerinden birisi de ağaçlardır. Çok farklı şekillerde ağaçların kodlanması ve modellenmesi mümkündür. Bu özel ağaçlardan birisi de iç yol indirgeme ağaçlarıdır (internal path reduction tree, IPR Tree).</p>
<p>Bir ipr ağacı kısaca bir <a href="http://www.bilgisayarkavramlari.com/2008/05/07/ikili-agac-binary-tree/">ikili ağaçtır (binary tree).</a> Ayrıca IPR ağaçlarının dengeli olması şarttır (balanced tree).</p>
<p>Aynı şekilde ağacı sürekli olarak dengeli tutan ve bir <a href="http://www.bilgisayarkavramlari.com/2008/05/07/ikili-agac-binary-tree/">ikili ağaç olan (binary tree)</a> AVL ağaçları ile kıyaslandığında performans olarak eşit veya daha iyi olması söz konusudur. Yani IPR ağaçları <a href="http://www.bilgisayarkavramlari.com/2008/05/15/avl-agaci-avl-tree/">AVL ağaçlarından ( avl tree)</a> kötü performansta olamazlar, iyi veya en kötü durumda eşit performans gösterirler.</p>
<p>IPR ağaçlarının derinlik hesaplamasında ağacın <a href="http://www.bilgisayarkavramlari.com/2008/10/25/ic-yol-uzunlugu-internal-path-length/">iç yol uzunluğu (internal path length)</a> hesaplanır. Bu değerin hesaplanışını hatırlayacak olursak, ağaçtaki iç düğümlere erişmek için yapılan işlem sayısının toplamıdır.  aşağıdaki temsili ağaçta iç yol uzunluğu 3&#8242;tür.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/120309_1340_InternalPat1.png" alt="" /></p>
<p>Tam bu noktada kaynaklardaki bir ayrılıktan bahsetmekte yarar vardır. Bazı kaynaklar kök düğüme (root node) erişimin maliyetini 0 kabul ederken bazı kaynaklar bu maliyeti 1 kabul etmektedir. Örneğin yukarıdaki örnekte şayet kök düğüme erişim maliyeti 0 kabul edilirse ağacın toplam iç yol uzunluğu</p>
<p>0+ 1 + 2 + 0 = 3</p>
<p>Olarak hesaplanır. Ancak bazı kaynaklar iç yol uzunluğunu hesaplarken kök düğümün maliyetini 1 olarak alıp bütün düğümlere (sadece <a href="http://www.bilgisayarkavramlari.com/2008/10/25/ic-dugum-internal-nodes/">iç düğümlere (internal nodes)</a> değil, hem iç hem de dış düğümlere (external nodes) olan uzaklık) olarak hesaplamaktadır.</p>
<p>Bu durumda yukarıdaki ağacın iç yol uzunluğu:</p>
<p>1 + 2 + 2 + 3 + 3 + 4 = 15</p>
<p>Olarak bulunur.</p>
<p>IPR ağacının çalışması sırasında istenen bir hesaplama yöntemi kullanılabilir, sonuç değişmemektedir.</p>
<p>IPR ağacı üzerinde yapılabilecek işlemleri aşağıdaki şekilde sıralayabiliriz:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/120309_1340_InternalPat2.png" alt="" /></p>
<p>Yukarıda sıralanan dört ayrı işlem, IPR ağaçlarında karşılaşılabilecek durumlardır. Bu durumları sıralayacak olursak, yukarıdaki 4 şekil için sırasıyla:</p>
<p>n <sub>c</sub> &gt; n <sub>b</sub> =&gt; sola döndür</p>
<p>n <sub>x</sub> &gt; n <sub>a</sub> =&gt; çift sola döndür</p>
<p>n <sub>c</sub> &gt; n <sub>a</sub> =&gt; sağa döndür</p>
<p>n <sub>x</sub> &gt; n <sub>a</sub> =&gt; çift sağa döndür</p>
<p>olarak sıralanabilir.</p>
<p>Yukarıdaki açıklamalardan sonra aşağıdaki kelimeleri bir ağaca yerleştirerek IPR ağacının nasıl çalıştığını görelim. Burada dikkat edilecek bir husus, IPR ağacının sadece yerleştirme (insertion) kuralının <a href="http://www.bilgisayarkavramlari.com/2008/05/07/ikili-arama-agaci-binary-search-tree/">ikili arama ağacından (binary search tree)</a> farklı olduğudur. Bunun dışında, ağaçta arama yapma işlemi veya bir bilgiyi değiştirme işlemi <a href="http://www.bilgisayarkavramlari.com/2008/05/07/ikili-arama-agaci-binary-search-tree/">ikili arama ağacı (binary search tree)</a> ile aynıdır.</p>
<p>Örnek olarak yerleştireceğimiz (insert) kelimeler aşağıdaki kelimeler olsun:</p>
<p>Şadi, Evren, ŞEKER, www, bilgisayar, kavramları, com</p>
<p>Yukarıdaki 7 kelimeyi verilen sırayla yerleştirmeye çalışalım:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/120309_1340_InternalPat4.png" alt="" width="234" height="791" /></p>
<p>Yukarıdaki ekleme işlemleri sırasında, klasik bir ikili arama ağacına ekleme dışında bir işlem yapılmamıştır. Ancak ağacın son halinde, eklenen son kelime ( &#8220;com&#8221; kelimesi) ile birlikte ağacın dengesi bozulmuştur. Bu aşamaya kadar ağaçta bir dengesizlik bulunmamaktadır.</p>
<p>Ağacın son halindeki durum çift sağa döndürme gerektirip, döndürülmüş hali aşağıda gösterilmiştir:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/120309_1340_InternalPat6.png" alt="" /></p>
<p>Bu döndürme işlemi iki aşamada yapılmıştır. Birinci aşamada çift sağa döndürürken x = kavramları, z = evren ve y = şadi şeklinde düşünülebilir. Ardından oluşan yeni ağacın hem solunda hem de sağında yeniden döndürme işlemleri icra edilmiştir.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2009/12/03/internal-path-reduction-trees-ic-yol-indirgeme-agaclari/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
