<?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>Algorithm Archives - Halil Durmus</title>
	<atom:link href="https://www.halildurmus.com/tag/algorithm/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.halildurmus.com/tag/algorithm/</link>
	<description>Official Website</description>
	<lastBuildDate>Thu, 10 Dec 2020 13:17:30 +0000</lastBuildDate>
	<language>tr</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://www.halildurmus.com/wp-content/uploads/2020/06/1-HalilDurmusRetina-150x150.png</url>
	<title>Algorithm Archives - Halil Durmus</title>
	<link>https://www.halildurmus.com/tag/algorithm/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Derin Öncelikli Arama (Depth First Search)</title>
		<link>https://www.halildurmus.com/2020/12/10/derin-oncelikli-arama-depth-first-search/</link>
					<comments>https://www.halildurmus.com/2020/12/10/derin-oncelikli-arama-depth-first-search/#respond</comments>
		
		<dc:creator><![CDATA[Halil Durmuş]]></dc:creator>
		<pubDate>Thu, 10 Dec 2020 13:17:27 +0000</pubDate>
				<category><![CDATA[Bilgisayar]]></category>
		<category><![CDATA[Genel]]></category>
		<category><![CDATA[Algorithm]]></category>
		<category><![CDATA[Depth First Search]]></category>
		<category><![CDATA[Derin Öncelikli Arama]]></category>
		<category><![CDATA[DFS]]></category>
		<category><![CDATA[node]]></category>
		<category><![CDATA[stack]]></category>
		<guid isPermaLink="false">https://www.halildurmus.com/?p=3891</guid>

					<description><![CDATA[<p>Türkçesi “ Derinlik öncelikli arama ” şeklinde geçen&#160;DFS&#160;bizim belirlediğimiz bir&#160;kök node’dan başlıyor ve herhangi bir çocuğunu seçiyor. Daha sonra bu çocuktan daha önce gezmediğimiz herhangi bir node’a gidiliyor. Bu seçimlerdeki iki kuralımız var birincisi seçeceğimiz node’a direkt yol olmalı diğeri ise o node daha önce gezilmemiş olmalı. Bu kuralları uygulayarak rekürsif bir şekilde geziliyor. Ancak [&#8230;]</p>
<p>The post <a href="https://www.halildurmus.com/2020/12/10/derin-oncelikli-arama-depth-first-search/">Derin Öncelikli Arama (Depth First Search)</a> appeared first on <a href="https://www.halildurmus.com">Halil Durmus</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Türkçesi “ Derinlik öncelikli arama ” şeklinde geçen&nbsp;DFS&nbsp;bizim belirlediğimiz bir&nbsp;kök node’dan başlıyor ve herhangi bir çocuğunu seçiyor. Daha sonra bu çocuktan daha önce gezmediğimiz herhangi bir node’a gidiliyor. Bu seçimlerdeki iki kuralımız var birincisi seçeceğimiz node’a direkt yol olmalı diğeri ise o node daha önce gezilmemiş olmalı. Bu kuralları uygulayarak rekürsif bir şekilde geziliyor.</p>



<p class="wp-block-paragraph">Ancak öyle bir node’a geliyoruz ki gidilecek yer kalmıyor. Çünkü direkt bağlantımızın olduğu bütün node’lar&nbsp;daha önceden gezilmiş. Böyle bir durumda ise bu node’dan önce en son gezdiğimiz node’a geri dönüyoruz ve başka tercihler var mı diye bakıyoruz. Algoritma rekürsif olarak çalıştığı için her takıldığımız noktada bir üste çıkmamıza olanak sağlıyor. Algoritmamız başladığımız yere geldiğimizde ve hali hazırda bütün çocuklarımızı gezdiğimizde bitiyor.</p>



<h3 class="wp-block-heading">Sözde Kod</h3>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<pre class="wp-block-code"><code>DFS(G)
   for each u ∈ V do
      color&#91;u] &lt;- white 
      pred&#91;u] &lt;- NIL
   time &lt;- 0
   for each u ∈ V do
      if color&#91;u] = white                      
   then
         DFS-VISIT(G, u)
</code></pre>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<pre class="wp-block-code"><code>DFS-VISIT(G, u)
   color&#91;u]&lt;- gray 
   d&#91;u]&lt;- time &lt;- time + 1
   for each v∈ Adj&#91;u] do
      if color&#91;v] = white    then 
         pred&#91;v] &lt;- u
   	 DFS-VISIT(G, v) 	
   color&#91;u] &lt;- black 
   f&#91;u]&lt;- time &lt;- time + 1
</code></pre>
</div>
</div>



<h5 class="wp-block-heading"> Derin Öncelikli Arama İşlem Adımları:</h5>



<ul class="wp-block-list"><li>Önce bir başlangıç node’u seçilir ve ziyaret edilir.</li><li>Seçilen node’un bir komşusu seçilir ve ziyaret edilir.</li><li>2.adım ziyaret edecek komşu kalmayıncaya kadar tekrar edilir.</li><li>Komşu kalmadığında tekrar geri dönülür ve önceki ziyaret edilmiş node’lar için adım 2 ve 3 tekrar edilir.</li></ul>



<p class="wp-block-paragraph">Aşağıdaki somut örnek üzerinde söylediklerimizi inceleyelim.</p>



<h3 class="wp-block-heading">Derin Öncelikli Arama Örneği</h3>



<p class="has-medium-font-size wp-block-paragraph"><strong>Aşama 1:</strong></p>



<p class="wp-block-paragraph">Her bir node&#8217;lar üzerinde gideceği komşuları belirlenir.</p>



<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="754" height="391" src="https://www.halildurmus.com/wp-content/uploads/2020/10/506-Depth-First-Search-DFS.png" alt="" class="wp-image-3892" srcset="https://www.halildurmus.com/wp-content/uploads/2020/10/506-Depth-First-Search-DFS.png 754w, https://www.halildurmus.com/wp-content/uploads/2020/10/506-Depth-First-Search-DFS-300x156.png 300w, https://www.halildurmus.com/wp-content/uploads/2020/10/506-Depth-First-Search-DFS-375x195.png 375w" sizes="(max-width: 754px) 100vw, 754px" /></figure>



<p class="wp-block-paragraph"></p>



<p class="has-medium-font-size wp-block-paragraph"><strong>Aşama 2:</strong></p>



<p class="wp-block-paragraph">Öncelikle bir root (başlangıç node) seçmemiz gerekir. Root olarak A node&#8217;nu seçiyoruz. A&#8217;nın komşuları F ve G node&#8217;ları var.</p>



<figure class="wp-block-image size-large"><img decoding="async" width="736" height="481" src="https://www.halildurmus.com/wp-content/uploads/2020/10/507-Depth-First-Search-DFS-1.png" alt="" class="wp-image-3897" srcset="https://www.halildurmus.com/wp-content/uploads/2020/10/507-Depth-First-Search-DFS-1.png 736w, https://www.halildurmus.com/wp-content/uploads/2020/10/507-Depth-First-Search-DFS-1-300x196.png 300w" sizes="(max-width: 736px) 100vw, 736px" /></figure>



<p class="wp-block-paragraph">Stack&#8217;de A eklenmiş olur. A&#8217;nın gidebileceği  F ve G node&#8217;ları vardır. Herhangi bir çocuğundan başlamamız lazım. </p>



<p class="has-medium-font-size wp-block-paragraph"><strong>Aşama 3:</strong></p>



<figure class="wp-block-image size-large"><img decoding="async" width="736" height="481" src="https://www.halildurmus.com/wp-content/uploads/2020/10/508-Depth-First-Search-DFS-2.png" alt="" class="wp-image-3898" srcset="https://www.halildurmus.com/wp-content/uploads/2020/10/508-Depth-First-Search-DFS-2.png 736w, https://www.halildurmus.com/wp-content/uploads/2020/10/508-Depth-First-Search-DFS-2-300x196.png 300w" sizes="(max-width: 736px) 100vw, 736px" /></figure>



<p class="wp-block-paragraph">F seçelim. F&#8217;den direkt yol olan E node vardır. Böylelikle stacke F node da eklenmiş olur. F node&#8217;nun gidebileceği tek bir yer var. E node&#8217;na gitmiş oluyoruz.</p>



<p class="has-medium-font-size wp-block-paragraph"><strong>Aşama 4:</strong></p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="736" height="481" src="https://www.halildurmus.com/wp-content/uploads/2020/10/509-Depth-First-Search-DFS.png" alt="" class="wp-image-3899" srcset="https://www.halildurmus.com/wp-content/uploads/2020/10/509-Depth-First-Search-DFS.png 736w, https://www.halildurmus.com/wp-content/uploads/2020/10/509-Depth-First-Search-DFS-300x196.png 300w" sizes="auto, (max-width: 736px) 100vw, 736px" /></figure>



<p class="wp-block-paragraph">Stacke E node da eklenmiş olur. E&#8217;nin gidebileceği komşuları  C, D ve G nodelarıdır. Örnekte C node&#8217;nu tercih ediyoruz.</p>



<p class="has-medium-font-size wp-block-paragraph"><strong>Aşama 5:</strong></p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="736" height="481" src="https://www.halildurmus.com/wp-content/uploads/2020/10/510-Depth-First-Search-DFS-1.png" alt="" class="wp-image-3900" srcset="https://www.halildurmus.com/wp-content/uploads/2020/10/510-Depth-First-Search-DFS-1.png 736w, https://www.halildurmus.com/wp-content/uploads/2020/10/510-Depth-First-Search-DFS-1-300x196.png 300w" sizes="auto, (max-width: 736px) 100vw, 736px" /></figure>



<p class="wp-block-paragraph">Stacke C node da eklenmiş olur. C node&#8217;dan A ve D nodelarına gidebiliriz. A node&#8217;ya gidiyoruz. A node&#8217;na daha önce uğradığımızı fark ederiz. </p>



<p class="has-medium-font-size wp-block-paragraph"><strong>Aşama 6:</strong></p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="736" height="481" src="https://www.halildurmus.com/wp-content/uploads/2020/10/511-Depth-First-Search-DFS.png" alt="" class="wp-image-3901" srcset="https://www.halildurmus.com/wp-content/uploads/2020/10/511-Depth-First-Search-DFS.png 736w, https://www.halildurmus.com/wp-content/uploads/2020/10/511-Depth-First-Search-DFS-300x196.png 300w" sizes="auto, (max-width: 736px) 100vw, 736px" /></figure>



<p class="wp-block-paragraph">C node&#8217;dan A ya daha önce uğramış olduğumuz için C node&#8217;ndan D node&#8217;na gideriz. </p>



<p class="has-medium-font-size wp-block-paragraph"><strong>Aşama 7:</strong></p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="736" height="481" src="https://www.halildurmus.com/wp-content/uploads/2020/10/512-Depth-First-Search-DFS.png" alt="" class="wp-image-3902" srcset="https://www.halildurmus.com/wp-content/uploads/2020/10/512-Depth-First-Search-DFS.png 736w, https://www.halildurmus.com/wp-content/uploads/2020/10/512-Depth-First-Search-DFS-300x196.png 300w" sizes="auto, (max-width: 736px) 100vw, 736px" /></figure>



<p class="wp-block-paragraph">Daha önce D node&#8217;na uğramadığımız için D node&#8217;nu stacke ekleriz. D node&#8217;ndan gidebileceği komşular C ve F nodelarıdır. İlk tercihimiz. C node olur. Daha önce buraya uğradığımızı fark ederiz.</p>



<p class="has-medium-font-size wp-block-paragraph"><strong>Aşama 8:</strong></p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="736" height="482" src="https://www.halildurmus.com/wp-content/uploads/2020/10/513-Depth-First-Search-DFS.png" alt="" class="wp-image-3903" srcset="https://www.halildurmus.com/wp-content/uploads/2020/10/513-Depth-First-Search-DFS.png 736w, https://www.halildurmus.com/wp-content/uploads/2020/10/513-Depth-First-Search-DFS-300x196.png 300w" sizes="auto, (max-width: 736px) 100vw, 736px" /></figure>



<p class="wp-block-paragraph">D node&#8217;ndan gidebileceği bir diğer node F node, orayada daha önce uğradığımızı biliyoruz.</p>



<h5 class="wp-block-heading">Aşama 9:</h5>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="736" height="481" src="https://www.halildurmus.com/wp-content/uploads/2020/10/514-Depth-First-Search-DFS.png" alt="" class="wp-image-3904" srcset="https://www.halildurmus.com/wp-content/uploads/2020/10/514-Depth-First-Search-DFS.png 736w, https://www.halildurmus.com/wp-content/uploads/2020/10/514-Depth-First-Search-DFS-300x196.png 300w" sizes="auto, (max-width: 736px) 100vw, 736px" /></figure>



<p class="wp-block-paragraph">D node&#8217;nun gidebileceği başka hiçbir yer kalmadı.</p>



<p class="has-medium-font-size wp-block-paragraph"><strong>Aşama 10:</strong></p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="736" height="481" src="https://www.halildurmus.com/wp-content/uploads/2020/10/515-Depth-First-Search-DFS.png" alt="" class="wp-image-3905" srcset="https://www.halildurmus.com/wp-content/uploads/2020/10/515-Depth-First-Search-DFS.png 736w, https://www.halildurmus.com/wp-content/uploads/2020/10/515-Depth-First-Search-DFS-300x196.png 300w" sizes="auto, (max-width: 736px) 100vw, 736px" /></figure>



<p class="wp-block-paragraph">D node&#8217;nun gidebilecek yeri kalmadığı için stackten onu siliyoruz. Stackten sildiğimiz node peşine hangi node var ise oradan devam edilir.(C node)</p>



<p class="wp-block-paragraph">C node&#8217;nun komşuları A ve D nodeları idi. A ve D nodelarını daha önce gitmiştik. Başka gidebileceğimiz yer kalmadığı için C node&#8217;nu stackten çıkarıyoruz.</p>



<p class="has-medium-font-size wp-block-paragraph"><strong>Aşama 11:</strong></p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="736" height="481" src="https://www.halildurmus.com/wp-content/uploads/2020/10/516-Depth-First-Search-DFS.png" alt="" class="wp-image-3906" srcset="https://www.halildurmus.com/wp-content/uploads/2020/10/516-Depth-First-Search-DFS.png 736w, https://www.halildurmus.com/wp-content/uploads/2020/10/516-Depth-First-Search-DFS-300x196.png 300w" sizes="auto, (max-width: 736px) 100vw, 736px" /></figure>



<p class="wp-block-paragraph">Stackten sildiğimiz node peşine hangi node var ise oradan devam edilir.(E node) E node ile daha önce C node&#8217;na gitmiştik. E node&#8217;ndan gidebileceğimiz komşular D ve G kaldı. D node&#8217;na gittiğimizde, D node&#8217;na daha önceden uğradığımızı görüyoruz.</p>



<p class="has-medium-font-size wp-block-paragraph"><strong>Aşama 12:</strong></p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="736" height="481" src="https://www.halildurmus.com/wp-content/uploads/2020/10/517-Depth-First-Search-DFS.png" alt="" class="wp-image-3907" srcset="https://www.halildurmus.com/wp-content/uploads/2020/10/517-Depth-First-Search-DFS.png 736w, https://www.halildurmus.com/wp-content/uploads/2020/10/517-Depth-First-Search-DFS-300x196.png 300w" sizes="auto, (max-width: 736px) 100vw, 736px" /></figure>



<p class="wp-block-paragraph">E node&#8217;ndan gidebileceğimiz G node kaldı. G node&#8217;na daha önceden uğramamışız.</p>



<p class="has-medium-font-size wp-block-paragraph"><strong>Aşama 13:</strong></p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="736" height="482" src="https://www.halildurmus.com/wp-content/uploads/2020/10/518-Depth-First-Search-DFS.png" alt="" class="wp-image-3908" srcset="https://www.halildurmus.com/wp-content/uploads/2020/10/518-Depth-First-Search-DFS.png 736w, https://www.halildurmus.com/wp-content/uploads/2020/10/518-Depth-First-Search-DFS-300x196.png 300w" sizes="auto, (max-width: 736px) 100vw, 736px" /></figure>



<p class="wp-block-paragraph">G node&#8217;nu stacke eklenir. G node&#8217;ndan gidebileceğimiz komşu node&#8217;lar yoktur. G node&#8217;nu da stackten silebiliriz.</p>



<p class="has-medium-font-size wp-block-paragraph"><strong>Aşama 14:</strong></p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="736" height="482" src="https://www.halildurmus.com/wp-content/uploads/2020/10/519-Depth-First-Search-DFS.png" alt="" class="wp-image-3909" srcset="https://www.halildurmus.com/wp-content/uploads/2020/10/519-Depth-First-Search-DFS.png 736w, https://www.halildurmus.com/wp-content/uploads/2020/10/519-Depth-First-Search-DFS-300x196.png 300w" sizes="auto, (max-width: 736px) 100vw, 736px" /></figure>



<p class="wp-block-paragraph">Stackten sildiğimiz node peşine hangi node var ise oradan devam edilir.(E node) E node&#8217;nun komşuları C, D ve G hepsine uğramış olduk. E node&#8217;nun gidebileceği başka bir yer kalmadığı için E node da stackten sileriz.</p>



<p class="has-medium-font-size wp-block-paragraph"><strong>Aşama 15:</strong></p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="736" height="482" src="https://www.halildurmus.com/wp-content/uploads/2020/10/520-Depth-First-Search-DFS.png" alt="" class="wp-image-3910" srcset="https://www.halildurmus.com/wp-content/uploads/2020/10/520-Depth-First-Search-DFS.png 736w, https://www.halildurmus.com/wp-content/uploads/2020/10/520-Depth-First-Search-DFS-300x196.png 300w" sizes="auto, (max-width: 736px) 100vw, 736px" /></figure>



<p class="wp-block-paragraph">Stackten sildiğimiz node peşine hangi node var ise oradan devam edilir.(F node) F node&#8217;nun gidebileceği E node var. E node&#8217;na da daha önce uğradığı için gidecek başka bir yer kalmadı. F node stackten silinir.</p>



<p class="has-medium-font-size wp-block-paragraph"><strong>Aşama 16:</strong></p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="736" height="482" src="https://www.halildurmus.com/wp-content/uploads/2020/10/521-Depth-First-Search-DFS.png" alt="" class="wp-image-3911" srcset="https://www.halildurmus.com/wp-content/uploads/2020/10/521-Depth-First-Search-DFS.png 736w, https://www.halildurmus.com/wp-content/uploads/2020/10/521-Depth-First-Search-DFS-300x196.png 300w" sizes="auto, (max-width: 736px) 100vw, 736px" /></figure>



<p class="wp-block-paragraph">Stack&#8217;te sadece A node kalır. A&#8217;nın komşuları F ve G node&#8217;larıdır. F&#8217;ye daha önce uğradığı için G node&#8217;na giden yolu kullanır. </p>



<p class="has-medium-font-size wp-block-paragraph"><strong>Aşama 17:</strong></p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="736" height="472" src="https://www.halildurmus.com/wp-content/uploads/2020/10/522-Depth-First-Search-DFS.png" alt="" class="wp-image-3912" srcset="https://www.halildurmus.com/wp-content/uploads/2020/10/522-Depth-First-Search-DFS.png 736w, https://www.halildurmus.com/wp-content/uploads/2020/10/522-Depth-First-Search-DFS-300x192.png 300w" sizes="auto, (max-width: 736px) 100vw, 736px" /></figure>



<p class="wp-block-paragraph">G&#8217;ye daha önce uğramış olduğumuz için A stack&#8217;ine geri döner. A node&#8217;nun gidebileceği başka bir node kalmadığı için A node&#8217;nu da stackten sileriz. Böylelikle stackte hiçbir node kalmamış olur.</p>



<p class="has-medium-font-size wp-block-paragraph"><strong>Aşama 18:</strong></p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="714" height="453" src="https://www.halildurmus.com/wp-content/uploads/2020/10/523-Depth-First-Search-DFS.png" alt="" class="wp-image-3913" srcset="https://www.halildurmus.com/wp-content/uploads/2020/10/523-Depth-First-Search-DFS.png 714w, https://www.halildurmus.com/wp-content/uploads/2020/10/523-Depth-First-Search-DFS-300x190.png 300w" sizes="auto, (max-width: 714px) 100vw, 714px" /></figure>



<p class="wp-block-paragraph"></p>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<h4 class="has-text-align-center wp-block-heading">Derin Öncelikli Arama </h4>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="300" height="300" src="https://www.halildurmus.com/wp-content/uploads/2020/10/dfs.gif" alt="" class="wp-image-3917"/></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<h4 class="has-text-align-center wp-block-heading"><a href="https://www.halildurmus.com/2020/10/04/enine-arama-breadth-first-search/" target="_blank" rel="noreferrer noopener">Enine Arama</a></h4>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="350" height="350" src="https://www.halildurmus.com/wp-content/uploads/2020/10/bfs.gif" alt="" class="wp-image-3918"/></figure>
</div>
</div>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><strong>Kaynakça</strong>: <strong><a href="https://akifhatipoglu.wordpress.com/2014/07/16/depth-first-search-breadth-first-search/">Akifhatipoglu</a></strong>, <strong><a href="https://stanford.edu/~shervine/l/tr/teaching/cs-221/cheatsheet-states-models" target="_blank" rel="noreferrer noopener">Stanford</a></strong>, <strong><a href="https://dergipark.org.tr/en/download/article-file/335278" target="_blank" rel="noreferrer noopener">Dergipark</a></strong>, <strong><a href="https://www.geeksforgeeks.org/depth-first-search-or-dfs-for-a-graph/" target="_blank" rel="noreferrer noopener">Geeksforgeeks</a></strong>, <a href="https://www.tutorialspoint.com/data_structures_algorithms/depth_first_traversal.htm"><strong>Tutorialspoint</strong></a></p>



<p class="wp-block-paragraph"><a href="https://www.youtube.com/watch?v=09_LlHjoEiY" target="_blank" rel="noreferrer noopener"><strong>ALGORITHMS COURSE &#8211; GRAPH THEORY TUTORIAL FROM A GOOGLE ENGINEER</strong></a></p>
<p>The post <a href="https://www.halildurmus.com/2020/12/10/derin-oncelikli-arama-depth-first-search/">Derin Öncelikli Arama (Depth First Search)</a> appeared first on <a href="https://www.halildurmus.com">Halil Durmus</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.halildurmus.com/2020/12/10/derin-oncelikli-arama-depth-first-search/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Dijkstra Algoritması</title>
		<link>https://www.halildurmus.com/2020/10/26/dijkstra-algoritmasi/</link>
					<comments>https://www.halildurmus.com/2020/10/26/dijkstra-algoritmasi/#respond</comments>
		
		<dc:creator><![CDATA[Halil Durmuş]]></dc:creator>
		<pubDate>Mon, 26 Oct 2020 19:30:27 +0000</pubDate>
				<category><![CDATA[Bilgisayar]]></category>
		<category><![CDATA[Genel]]></category>
		<category><![CDATA[Algorithm]]></category>
		<category><![CDATA[Computer Engineer]]></category>
		<category><![CDATA[Computer Science]]></category>
		<category><![CDATA[Dijkstra algorithm]]></category>
		<guid isPermaLink="false">https://www.halildurmus.com/?p=3787</guid>

					<description><![CDATA[<p>Dijkstra algoritması, örneğin yol ağlarını temsil edebilen bir grafikteki düğümler arasındaki en kısa yolları bulmak için bir algoritmadır. Bilgisayar bilimcisi Edsger W. Dijkstra tarafından 1956&#8217;da tasarlandı ve üç yıl sonra yayınlandı. Algoritma birçok varyantta mevcuttur. Dijkstra algoritması en kısayolu belirlerken Greedy(Açgözlü) yaklaşımını kullanır. Yani bir düğümden diğer bir düğüme geçerken olası en iyi yerel çözümü [&#8230;]</p>
<p>The post <a href="https://www.halildurmus.com/2020/10/26/dijkstra-algoritmasi/">Dijkstra Algoritması</a> appeared first on <a href="https://www.halildurmus.com">Halil Durmus</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Dijkstra algoritması, örneğin yol ağlarını temsil edebilen bir grafikteki düğümler arasındaki en kısa yolları bulmak için bir algoritmadır. Bilgisayar bilimcisi Edsger W. Dijkstra tarafından 1956&#8217;da tasarlandı ve üç yıl sonra yayınlandı. Algoritma birçok varyantta mevcuttur.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="375" height="497" src="https://www.halildurmus.com/wp-content/uploads/2020/08/485-Dijkstra.jpg" alt="Edsger W. Dijkstra" class="wp-image-3808" srcset="https://www.halildurmus.com/wp-content/uploads/2020/08/485-Dijkstra.jpg 375w, https://www.halildurmus.com/wp-content/uploads/2020/08/485-Dijkstra-226x300.jpg 226w" sizes="auto, (max-width: 375px) 100vw, 375px" /></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Dijkstra algoritması en kısayolu belirlerken Greedy(Açgözlü) yaklaşımını kullanır. Yani bir düğümden diğer bir düğüme geçerken olası en iyi yerel çözümü göz önüne alır. Her seferinde bir sonraki düğüme ilerleme Greedy yaklaşımına göre yapılır.</p>



<div class="hcb_wrap"><pre class="prism undefined-numbers lang-"><code>Dijkstra(G,w,s)                            //Başlat
{
     for(each u ∈ V)  
     {
           d[u]= ∞;
           colur[u]=white;
     }
     d[s]=0;
     pred[s]=NIL;
     Q = (tüm köşeler kuyruk);
     
     while (Non-Empty(Q))        //Tüm köşeleri işle.
     {
           u=Extract-Min(Q);       //Yeni köşe bul.
           for (each v ∈ Adj[u] )
                 if(d[u] + w(u, v) &lt; d[v])
                 {
                         d[v] = d[u] + w(u,v);
                         Azaltma-Anahtarı(Q, v, d[v]);
                         pred[v] = u;
                 }
           color[u] = black;
     }
}</code></pre></div>



<p class="wp-block-paragraph">Bu algoritmanın çalışmasını örnek bir şekil( graph ) üzerinden göstermeye çalışacağım. Bu gösterimin ardından Dijkstra algoritmasının başarısını ve eksik taraflarını tartışabiliriz.</p>



<h4 class="wp-block-heading">Aşama 0:</h4>



<p class="wp-block-paragraph">Örneğimizde başlangıç&nbsp;düğümü (node)&nbsp;olarak s düğümünü seçtiğimizi düşünelim ve algoritmanın çalışmasını bu düğümden başlayarak gösterelim.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="481" height="324" src="https://www.halildurmus.com/wp-content/uploads/2020/08/471-Dijkstras-Algorithm.png" alt="" class="wp-image-3788" srcset="https://www.halildurmus.com/wp-content/uploads/2020/08/471-Dijkstras-Algorithm.png 481w, https://www.halildurmus.com/wp-content/uploads/2020/08/471-Dijkstras-Algorithm-300x202.png 300w" sizes="auto, (max-width: 481px) 100vw, 481px" /></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Algoritma başlangıçta bütün düğümlere henüz erişim olmadığını kabul ederek sonsuz (&nbsp;∞) değeri atar. Yani başlangıç durumunda henüz hiçbir düğüme gidemiyoruz.</p>



<p class="wp-block-paragraph"></p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="366" height="322" src="https://www.halildurmus.com/wp-content/uploads/2020/08/478-Initialization-Dijkstra-.png" alt="" class="wp-image-3790" srcset="https://www.halildurmus.com/wp-content/uploads/2020/08/478-Initialization-Dijkstra-.png 366w, https://www.halildurmus.com/wp-content/uploads/2020/08/478-Initialization-Dijkstra--300x264.png 300w" sizes="auto, (max-width: 366px) 100vw, 366px" /></figure>



<p class="wp-block-paragraph"></p>



<h4 class="wp-block-heading">Aşama 1:</h4>



<p class="wp-block-paragraph">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üncellenir.</p>



<p class="wp-block-paragraph"></p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="481" height="324" src="https://www.halildurmus.com/wp-content/uploads/2020/08/472-Dijkstras-Algorithm.png" alt="" class="wp-image-3789" srcset="https://www.halildurmus.com/wp-content/uploads/2020/08/472-Dijkstras-Algorithm.png 481w, https://www.halildurmus.com/wp-content/uploads/2020/08/472-Dijkstras-Algorithm-300x202.png 300w" sizes="auto, (max-width: 481px) 100vw, 481px" /></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Adj[s]= {a,b}, a ve b üzerindeki düğümleri güncellenir.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="366" height="322" src="https://www.halildurmus.com/wp-content/uploads/2020/08/479-Step-1-Dijkstra-.png" alt="" class="wp-image-3792" srcset="https://www.halildurmus.com/wp-content/uploads/2020/08/479-Step-1-Dijkstra-.png 366w, https://www.halildurmus.com/wp-content/uploads/2020/08/479-Step-1-Dijkstra--300x264.png 300w" sizes="auto, (max-width: 366px) 100vw, 366px" /></figure>



<p class="wp-block-paragraph">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>



<h4 class="wp-block-heading">Aşama 2:</h4>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="481" height="324" src="https://www.halildurmus.com/wp-content/uploads/2020/08/473-Dijkstras-Algorithm.png" alt="" class="wp-image-3793" srcset="https://www.halildurmus.com/wp-content/uploads/2020/08/473-Dijkstras-Algorithm.png 481w, https://www.halildurmus.com/wp-content/uploads/2020/08/473-Dijkstras-Algorithm-300x202.png 300w" sizes="auto, (max-width: 481px) 100vw, 481px" /></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Aşama 1&#8217;den sonra, a öncelik kuyruğunda minimum değere sahiptir.    Adj[a]= {b, c, d} olarak, b, c, d üzerinde çalışın ve bilgileri güncelleyin.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="366" height="322" src="https://www.halildurmus.com/wp-content/uploads/2020/08/479-Step-2-Dijkstra-.png" alt="" class="wp-image-3794" srcset="https://www.halildurmus.com/wp-content/uploads/2020/08/479-Step-2-Dijkstra-.png 366w, https://www.halildurmus.com/wp-content/uploads/2020/08/479-Step-2-Dijkstra--300x264.png 300w" sizes="auto, (max-width: 366px) 100vw, 366px" /></figure>



<p class="wp-block-paragraph"></p>



<h4 class="wp-block-heading">Aşama 3:</h4>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="481" height="324" src="https://www.halildurmus.com/wp-content/uploads/2020/08/474-Dijkstras-Algorithm.png" alt="" class="wp-image-3796" srcset="https://www.halildurmus.com/wp-content/uploads/2020/08/474-Dijkstras-Algorithm.png 481w, https://www.halildurmus.com/wp-content/uploads/2020/08/474-Dijkstras-Algorithm-300x202.png 300w" sizes="auto, (max-width: 481px) 100vw, 481px" /></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Aşama 2&#8217;den sonra, b öncelik kuyruğunda minimum anahtara sahiptir. Adj[b] = {a, c} olarak a, c üzerinde çalışın ve bilgileri güncelleyin.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="366" height="322" src="https://www.halildurmus.com/wp-content/uploads/2020/08/481-Step-3-Dijkstra-.png" alt="" class="wp-image-3797" srcset="https://www.halildurmus.com/wp-content/uploads/2020/08/481-Step-3-Dijkstra-.png 366w, https://www.halildurmus.com/wp-content/uploads/2020/08/481-Step-3-Dijkstra--300x264.png 300w" sizes="auto, (max-width: 366px) 100vw, 366px" /></figure>



<h4 class="wp-block-heading">Aşama 4:</h4>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="481" height="324" src="https://www.halildurmus.com/wp-content/uploads/2020/08/475-Dijkstras-Algorithm.png" alt="" class="wp-image-3800" srcset="https://www.halildurmus.com/wp-content/uploads/2020/08/475-Dijkstras-Algorithm.png 481w, https://www.halildurmus.com/wp-content/uploads/2020/08/475-Dijkstras-Algorithm-300x202.png 300w" sizes="auto, (max-width: 481px) 100vw, 481px" /></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Aşama 3&#8217;den sonra, c öncelik kuyruğunda minimum anahtara sahiptir. Adj[c] = {d} olarak, d üzerinde çalışın ve bilgileri güncelleyin.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="366" height="322" src="https://www.halildurmus.com/wp-content/uploads/2020/08/482-Step-4-Dijkstra-.png" alt="" class="wp-image-3801" srcset="https://www.halildurmus.com/wp-content/uploads/2020/08/482-Step-4-Dijkstra-.png 366w, https://www.halildurmus.com/wp-content/uploads/2020/08/482-Step-4-Dijkstra--300x264.png 300w" sizes="auto, (max-width: 366px) 100vw, 366px" /></figure>



<h4 class="wp-block-heading">Aşama 5:</h4>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="481" height="324" src="https://www.halildurmus.com/wp-content/uploads/2020/08/476-Dijkstras-Algorithm.png" alt="" class="wp-image-3802" srcset="https://www.halildurmus.com/wp-content/uploads/2020/08/476-Dijkstras-Algorithm.png 481w, https://www.halildurmus.com/wp-content/uploads/2020/08/476-Dijkstras-Algorithm-300x202.png 300w" sizes="auto, (max-width: 481px) 100vw, 481px" /></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Aşama 4&#8217;den sonra, d öncelik kuyruğunda minimum anahtara sahiptir. Adj[d] = {c} olarak, c üzerinde çalışın ve bilgileri güncelleyin.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="366" height="261" src="https://www.halildurmus.com/wp-content/uploads/2020/08/483-Step-5-Dijkstra-.png" alt="" class="wp-image-3803" srcset="https://www.halildurmus.com/wp-content/uploads/2020/08/483-Step-5-Dijkstra-.png 366w, https://www.halildurmus.com/wp-content/uploads/2020/08/483-Step-5-Dijkstra--300x214.png 300w" sizes="auto, (max-width: 366px) 100vw, 366px" /></figure>



<p class="wp-block-paragraph" style="font-size:18px"><strong>En Kısa Yol Ağacı</strong>: </p>



<p class="wp-block-paragraph" style="font-size:18px"><em>T = (V, A),</em></p>



<p class="wp-block-paragraph" style="font-size:18px"><em>A = {(pred[v], v) | v ∈ V \ {s}}</em></p>



<p class="wp-block-paragraph">Pred[d] dizisi ağacı inşa etmek için kullanılır.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="481" height="324" src="https://www.halildurmus.com/wp-content/uploads/2020/08/477-Dijkstras-Algorithm.png" alt="" class="wp-image-3804" srcset="https://www.halildurmus.com/wp-content/uploads/2020/08/477-Dijkstras-Algorithm.png 481w, https://www.halildurmus.com/wp-content/uploads/2020/08/477-Dijkstras-Algorithm-300x202.png 300w" sizes="auto, (max-width: 481px) 100vw, 481px" /></figure>



<p class="wp-block-paragraph"></p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="292" height="122" src="https://www.halildurmus.com/wp-content/uploads/2020/08/484-Dijkstra-.png" alt="" class="wp-image-3805"/></figure>



<p class="wp-block-paragraph"></p>



<h4 class="wp-block-heading"><strong>Dijkstra Algoritmasının Zayıf Yönü</strong></h4>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Dijkstra Algoritması&#8217; nın 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 class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><strong>Kaynakça: <a href="http://www.zafercomert.com/IcerikDetay.aspx?zcms=70" target="_blank" rel="noreferrer noopener">Zafercomert</a></strong>, <strong><a href="http://bilgisayarkavramlari.sadievrenseker.com/2010/05/13/dijkstra-algoritmasi-2/#:~:text=Bilgisayar%20bilimlerinde%20kullan%C4%B1lan%20ve%20algoritmay%C4%B1,shortest%20path)%20bulmak%20i%C3%A7in%20kullan%C4%B1l%C4%B1r.&amp;text=Dijkstra%20algoritmas%C4%B1%20herhangi%20bir%20%C5%9Fekildeki,giden%20en%20k%C4%B1sa%20yolu%20hesaplar." target="_blank" rel="noreferrer noopener">Bilgisayarkavramlari</a></strong>, <strong><a href="https://www.codingame.com/playgrounds/1608/shortest-paths-with-dijkstras-algorithm/dijkstras-algorithm" target="_blank" rel="noreferrer noopener">Codingame</a></strong>, <strong><a href="https://cp-algorithms.com/graph/dijkstra.html" target="_blank" rel="noreferrer noopener">CPalgorithms</a></strong>, <a href="https://www.hackerearth.com/practice/algorithms/graphs/shortest-path-algorithms/tutorial/" target="_blank" rel="noreferrer noopener"><strong>Hackerearth</strong></a></p>
<p>The post <a href="https://www.halildurmus.com/2020/10/26/dijkstra-algoritmasi/">Dijkstra Algoritması</a> appeared first on <a href="https://www.halildurmus.com">Halil Durmus</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.halildurmus.com/2020/10/26/dijkstra-algoritmasi/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Enine Arama (Breadth-first Search)</title>
		<link>https://www.halildurmus.com/2020/10/04/enine-arama-breadth-first-search/</link>
					<comments>https://www.halildurmus.com/2020/10/04/enine-arama-breadth-first-search/#respond</comments>
		
		<dc:creator><![CDATA[Halil Durmuş]]></dc:creator>
		<pubDate>Sun, 04 Oct 2020 13:56:09 +0000</pubDate>
				<category><![CDATA[Bilgisayar]]></category>
		<category><![CDATA[Genel]]></category>
		<category><![CDATA[Algorithm]]></category>
		<category><![CDATA[Breadth-first]]></category>
		<category><![CDATA[Çizge Arama]]></category>
		<category><![CDATA[Enine Arama]]></category>
		<category><![CDATA[Konrad Zuse]]></category>
		<guid isPermaLink="false">https://www.halildurmus.com/?p=3841</guid>

					<description><![CDATA[<p>Bilgisayar biliminde,&#160;sığ öncelikli arama&#160;ya da&#160;enine arama,&#160;bir&#160;çizgenin düğümlerini, başlangıç noktasına daha yakın olanlara öncelik vererek&#160;arayan&#160;bir&#160;algoritmadır. Enine arama algoritması ziyaret ettiği düğümlerin bütün komşularını bir&#160;kuyruğa&#160;ekler ve ziyaret edeceği düğümleri kuyruktaki sıraya göre seçer. Eğer arama yapılan çizge bir&#160;ağaç&#160;ise kuyruk kullanmaya gerek olmaz. Bir çizge aramasındaki en basit algoritmalardan biridir ve pek çok önemli çizge algoritmasının ilk örneğidir. [&#8230;]</p>
<p>The post <a href="https://www.halildurmus.com/2020/10/04/enine-arama-breadth-first-search/">Enine Arama (Breadth-first Search)</a> appeared first on <a href="https://www.halildurmus.com">Halil Durmus</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Bilgisayar biliminde,&nbsp;sığ öncelikli arama&nbsp;ya da&nbsp;enine arama,&nbsp;bir&nbsp;çizgenin düğümlerini, başlangıç noktasına daha yakın olanlara öncelik vererek&nbsp;arayan&nbsp;bir&nbsp;algoritmadır.  Enine arama algoritması ziyaret ettiği düğümlerin bütün komşularını bir&nbsp;kuyruğa&nbsp;ekler ve ziyaret edeceği düğümleri kuyruktaki sıraya göre seçer. Eğer arama yapılan çizge bir&nbsp;ağaç&nbsp;ise kuyruk kullanmaya gerek olmaz.</p>



<p class="wp-block-paragraph">Bir çizge aramasındaki en basit algoritmalardan biridir ve pek çok önemli çizge algoritmasının ilk örneğidir. Prim&#8217;in minumum kapsayan ağaç algoritması ve Dijkstra&#8217;nın tek kaynaklı en kısa yollar algoritması ile benzer fikirleri kullanır. Algoritma yönlü ve yönsüz çizgelerin her ikisi içinde çalışır.</p>



<p class="wp-block-paragraph">Sığ öncelikli arama 1945&#8217;te Michael Burke ve&nbsp;Konrad Zuse&nbsp;tarafından çizgelerde bağlı bileşenleri tespit etmek için geliştirilmiştir. Ancak, bu algoritmanın sunulduğu doktora tezi kabul edilmemiştir ve 1972 yılında yayınlanmıştır.&nbsp;1959&#8217;da&nbsp;E. F. Moore&nbsp;tarafından, bir labirentteki en kısa yolu bulmak için,&nbsp;1961 yılında ondan bağımsız bir şekilde C. Y. Lee tarafından devrelerde bağlantıların belirlenmesi amacıyla tekrar icat edilmiştir.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="354" height="472" src="https://www.halildurmus.com/wp-content/uploads/2020/09/499-Konrad_Zuse.jpg" alt="" class="wp-image-3851" srcset="https://www.halildurmus.com/wp-content/uploads/2020/09/499-Konrad_Zuse.jpg 354w, https://www.halildurmus.com/wp-content/uploads/2020/09/499-Konrad_Zuse-225x300.jpg 225w" sizes="auto, (max-width: 354px) 100vw, 354px" /><figcaption><strong>Konrad Zuse</strong></figcaption></figure>



<p class="wp-block-paragraph"></p>



<h4 class="wp-block-heading">Nasıl Çalışır?</h4>



<p class="wp-block-paragraph">İlerleme yolunu bulmak için algoritma her tepeyi beyaz, gri veya siyah renkle boyar. Tüm tepeler beyaz ile başlar, sonradan gri ve en son siyah olur. Arama sırasında bir tepe ile ilk defa karşılaşıldığında o tepe <strong>bulunan (discovered)</strong> olur ve o andan itibaren tepe artık beyaz renkli değildir. Gri ve siyah tepeler bulunan tepelerdir, fakat enine ilerlemek için bunlar arasından hangisinin seçileceğine karar verilir. Eğer <em>(u,v) ∈ E</em> ve <em>u </em> tepesi siyah ise, <em>v</em> tepesi de siyah veya gridir, böylece siyah tepelere bitişik olan tüm tepeler gezilir. Gri tepeler bazı beyaz tepelerle bitişik olabilir; bulunan ve bulunmayan tepeler arasındaki sınırı gösterirler. </p>



<p class="wp-block-paragraph">Enine arama başlangıçta sadece <em>s</em> kaynak tepesi olan kökü içererek enine ağacı oluşturur. Daha önce bulunan  <em>u</em> tepesinin bitişiklik listesi gezinirken beyaz <em>v </em>tepesi bulunduğunda <em>v</em> tepesi ve <em>(u,v)</em> ayrıtı ağaca eklenir.<em> u</em> tepesine <em>v</em>&#8216;nin <em>öncülü(predecessor)</em> ya da <em>ebeveyni (parent)</em> denir. Bir tepe en fazla bir kez bulunduğundan, en fazla bir ebeveyni olur. Enine ağaçta<em> s </em>köküne bağlı olarak ata (ancestor) ve torun(descendant) ilişkisi şu şekilde tanımlanır: eğer ağaçta <em>s </em>kökünden <em>v</em> tepesine olan basit yolda <em>u </em>tepesi varsa, bu durumda <em>u</em>, <em>v </em>nin atası  <em>v </em>de <em>u </em>nun torunu olarak isimlendirilir.</p>



<p class="wp-block-paragraph">Aşağıda yer alan BFS enine arama işlemi, girdi çizgeyi <em>G = </em>(<em>V, E</em>) nin bitişiklik listesi kullanılarak gösterildiğini varsayar. Çizgede her tepeye birkaç ek özellik ilave eder. Her <em>u</em> ∈ <em>V</em> tepesinin rengini u.color özelliği ile ve u nun öncülünü (predecessor) ise u.π özelliği içinde saklarız. Eğer u, öncül tepeye sahip değilse (örneğin eğer <em>u</em>=<em>s</em> veya <em>u</em> henüz bulunmayan bir tepeyse) bu durumda u.<em>π</em> = NIL olur. <em>u</em>.<em>d</em> özelliği ile algoritma tarafından hesaplanan <em>s</em> kaynağından <em>u</em> tepesine olan uzaklık tutulur. Gri teplerin kümesini kontrol etmek için algoritma ayrıca ilk-giriş, ilk-çıkış kuyruğu Q yu kullanır.</p>



<h4 class="wp-block-heading">Sözde Kod</h4>



<div class="hcb_wrap"><pre class="prism on-numbers lang-plane"><code>BFS (G.s)
  for her u∈ G.V - {s} tepesi
      u.color = ∈WHİTE
      u.d = ∞
      u.π= NIL
  s.color = GRAY
  s.d = NIL
  Q = Ø
  ENQUEUE(Q,s)
  while Q ≠ Ø
      u= DEQUEUE(Q)
  for her v ∈ G.Adj[u]
      if v.color == WHİTE
         v.color =GRAY
         v.d = u.d + 1
         v.π = u
         ENQUEUE(Q,v)
      u.color = BLACK
</code></pre></div>



<p class="wp-block-paragraph">Aşağıda örnek üzerinde BFS&#8217;nin ilerleme durumunu göstermektedir. </p>



<p class="wp-block-paragraph">BFS işlemi aşağıdaki gibi çalışmaktadır. <em>s</em> kaynak tepesi hariç, satır 1-4 her tepeyi beyaza boyar, her <em>u</em> tepesi için <em>u</em>.<em>d</em> yi sonsuz olarak belirler ve her tepenin ebeveynini(parent) NIL olarak belirler. Satır 5, işlemler başladığında bulunan olarak düşündüğümüz <em>s</em> tepesini griye boyar. Satır 6, <em>s</em>.<em>d</em> yi 0 olarak başlatır ve satır7 kaynağın öncülünü (predecessor) NIL olarak belirler. Satır 8-9 sadece s tepesini içeren Q kuyruğunu başlatır. </p>



<p class="wp-block-paragraph">Satır 10-18 deki while döngüsü, bitişiklik listesi tam olarak elden geçirilmemiş bulunan tepeler yani gri tepeler kaldıkça tekrarlanır. Bu while döngüsü aşağıdaki değişmezi korur.</p>



<p class="wp-block-paragraph">Satır 10 daki testte, Q kuyruğu  gri tepeler kümesinden oluşur.</p>



<h4 class="wp-block-heading">Örnek</h4>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="944" src="https://www.halildurmus.com/wp-content/uploads/2020/09/497-Enine-Arama-1024x944.png" alt="" class="wp-image-3844" srcset="https://www.halildurmus.com/wp-content/uploads/2020/09/497-Enine-Arama-1024x944.png 1024w, https://www.halildurmus.com/wp-content/uploads/2020/09/497-Enine-Arama-300x277.png 300w, https://www.halildurmus.com/wp-content/uploads/2020/09/497-Enine-Arama-768x708.png 768w, https://www.halildurmus.com/wp-content/uploads/2020/09/497-Enine-Arama-810x747.png 810w, https://www.halildurmus.com/wp-content/uploads/2020/09/497-Enine-Arama.png 1067w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption>Yönsüz bir çizge üzerinde BFS  işlemi. BFS ile üretilen üç ayrıt gölgeli olarak gösterilmiştir. Her <em>u</em> tepesi içinde<em> u.d</em> değeri görünmektedir. Satır 10-18 deki while döngüsünün her adımının başlangıcında Q kuyruğunu gösterilmiştir. Tepe uzaklıkları kuyruk içindeki tepelerin altında görünmektedir. </figcaption></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">İlk iterasyona (a)  göre Q kuyruğundaki tek gri tepe ve tek tepe, <em>s</em> kaynak tepesidir. Satır 11, <em>Q </em>kuyruğunun en başındaki <em>u </em>gri tepesini ele alarak onu <em>Q</em> dan atar. Satır 12-17 deki for döngüsü <em>u</em> nun bitişiklik listesindeki her ve tepesini inceler. Eğer <em>v</em> beyaz ise, henüz keşfedilmemiştir ve satır 14-17 nin çalıştırılması ile işlem onu keşfeder. İşlem <em>v</em> tepesini griye boyar, uzaklığını <em>v.d</em> iken <em>u.d+1</em> ye olarak belirler, <em>u</em> nun ebeveyni olarak <em>v.π</em> yi kaybeder v onu <em>Q</em> kuyruğunun en sonuna yerleştirir. <em>u</em> nun bitişiklik listesindeki tüm tepeler işlem tarafından bir kez daha incelenir incelenmez satır 18 onu siyaha boyar. Döngü değişmezi korunur çünkü bi tepe griye boyandığında (satır 14 de) o aynı zamanda sıraya alınır (satır 17 de) ve bir tepe kuruktan çıkarıldığında (satır 11  de) o aynı zamanda siyaha boyanır(satır 18 de).</p>



<p class="wp-block-paragraph">Enine aramanın sonuçları verilen bir tepenin komşularının satır 12 de ziyaret edilme derecesine bağlı olabilmektedir; enine ağaç farklı olabilir, fakat algoritma ile hesaplanmış olan d uzaklıkları farklı değildir. </p>



<p class="wp-block-paragraph"><strong>Kaynakça</strong>: <a rel="noreferrer noopener" href="https://en.wikipedia.org/wiki/Breadth-first_search" target="_blank"><strong>Wikipedia</strong></a>, <strong><a href="https://www.geeksforgeeks.org/breadth-first-search-or-bfs-for-a-graph/">Geeksforgeeks</a></strong>, <strong><a href="https://www.hackerearth.com/practice/algorithms/graphs/breadth-first-search/tutorial/" target="_blank" rel="noreferrer noopener">Hackerearth</a></strong>, <strong><a href="https://www.tutorialspoint.com/data_structures_algorithms/breadth_first_traversal.htm" target="_blank" rel="noreferrer noopener">Tutorialspoint</a></strong></p>



<p class="wp-block-paragraph"><a href="https://www.youtube.com/watch?v=PPAp_w_oXzw"><strong>Bilgisayar Kavramı</strong></a></p>



<p class="wp-block-paragraph">U.NURİYEV, E.NASİBOĞLU, T. ÖNER. (2017). Algoritmalara Giriş Ankara: Palme Yayıncılık (589-602)</p>
<p>The post <a href="https://www.halildurmus.com/2020/10/04/enine-arama-breadth-first-search/">Enine Arama (Breadth-first Search)</a> appeared first on <a href="https://www.halildurmus.com">Halil Durmus</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.halildurmus.com/2020/10/04/enine-arama-breadth-first-search/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
