<?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; Veri Sıkıştırma (Data Compression)</title>
	<atom:link href="http://www.bilgisayarkavramlari.com/category/veri-sikistirma-data-compression/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.bilgisayarkavramlari.com</link>
	<description>www.bilgisayarkavramlari.com</description>
	<lastBuildDate>Sun, 29 Jan 2012 21:38:15 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Elias Kodlaması (Elias Code)</title>
		<link>http://www.bilgisayarkavramlari.com/2011/12/06/elias-kodlamasi-elias-code/</link>
		<comments>http://www.bilgisayarkavramlari.com/2011/12/06/elias-kodlamasi-elias-code/#comments</comments>
		<pubDate>Tue, 06 Dec 2011 06:33:39 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Veri Sıkıştırma (Data Compression)]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/?p=6082</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Veri sıkıştırmada veya verinin ikilik tabanda gösterilmesinde kullanılan bir algoritmadır. Basit bir çevirim fonksiyonu olarak da düşünülebilir. Bu yazı kapsamında birkça farklı elias kodu (elias code) şekli anlatılacaktır. Elias-Υ Kod (Elias &#8211; Υ  Code): Elias upsilon kodlaması olarak okunur. İki formül bu kodlama için gereklidir. kd = taban(log2 k) kr = [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Veri sıkıştırmada veya verinin ikilik tabanda gösterilmesinde kullanılan bir algoritmadır. Basit bir çevirim fonksiyonu olarak da düşünülebilir. Bu yazı kapsamında birkça farklı elias kodu (elias code) şekli anlatılacaktır.</p>
<p><strong>Elias-Υ Kod (Elias &#8211; Υ  Code)</strong>: Elias upsilon kodlaması olarak okunur.</p>
<p>İki formül bu kodlama için gereklidir.</p>
<p>k<sub>d</sub> = taban(log<sub>2</sub> k)</p>
<p>k<sub>r</sub> = k<sub>d</sub> - 2 <sup>log<sub>2</sub> k</sup><br />
Yukarıdaki formülde k değeri, çevirimini istediğimiz değerdir. Elias-Upsilon kodlaması ise bu değerlerden ilkinin <a href="http://www.bilgisayarkavramlari.com/2011/12/06/tekil-kodlama-unary-coding/">tekil kodlaması (unary coding)</a> ile ikincisinin <a href="http://www.bilgisayarkavramlari.com/2011/12/06/tekil-kodlama-unary-coding/">ikli kodlaması (binary coding)</a> birleşimidir (yan yana yazılması, üleştirilmesi)</p>
<p>Örnek olarak bazı sayıların çevirimleri aşağıda verilmiştir:</p>
<table border="0">
<tbody>
<tr>
<td>k</td>
<td>kd</td>
<td>kr</td>
<td>Elias-Upslion</td>
</tr>
<tr>
<td>1</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td colspan="1">2</td>
<td colspan="1">1</td>
<td colspan="1">0</td>
<td colspan="1">10 0</td>
</tr>
<tr>
<td colspan="1">15</td>
<td colspan="1">3</td>
<td colspan="1">7</td>
<td colspan="1">1110 111</td>
</tr>
<tr>
<td colspan="1">255</td>
<td colspan="1">7</td>
<td colspan="1">127</td>
<td colspan="1">11111110 1111111</td>
</tr>
<tr>
<td colspan="1">1023</td>
<td colspan="1">9</td>
<td colspan="1">511</td>
<td colspan="1">1111111110 111111111</td>
</tr>
</tbody>
</table>
<p>Yukarıdaki tabloda görüldüğü üzere sayılar büyüdükçe kodlama uzunluğu da değişmektedir.</p>
<p><strong>Elias-δ  Kodu (Elias-<strong>δ</strong>   Code)</strong> : Elias-Delta kodlama olarak okunabilir.</p>
<p>Yukarıda anlatılan elias-upsilon kodlamasını daha az bit ile gösterebilmek için geliştirilmiştir. Basitçe elias-upsilon kodlaması yaklaşık 2 log <sub>2</sub>( k) kadar bit gerektirmektedir. Bu bit sayısını azaltmak için elias-delta kodlaması kd ve kr hesaplamalarına ilave olarak iki değer daha hesaplar.</p>
<p>k<sub>dd</sub> = taban(log<sub>2</sub>(k<sub>d</sub> + 1))</p>
<p>k<sub>dr</sub> = k<sub>d</sub> &#8211; 2 <sup>log<sub>2</sub>(k<sub>d</sub> + 1))</sup><br />
Görüldüğü üzere aslında elias-delta kodlamasında yapılan işlem, elias-upsilon kodlamasında bulunan kd değerini yeniden aynı formüllere koymak ve kd üzerinden kdd ve kdr değerlerini hesaplamaktır. Ardından bulunan kdd kdr ve kr değerleri birleştirilerek elias-delta kodu sonucu bulunur.</p>
<p>Örnek bazı saylar aşağıda verilmiştir:</p>
<table border="0">
<tbody>
<tr>
<td>k</td>
<td>kd</td>
<td>kr</td>
<td rowspan="1">kdd</td>
<td rowspan="1">kdr</td>
<td>Elias-Delta</td>
</tr>
<tr>
<td>1</td>
<td>0</td>
<td>0</td>
<td rowspan="1">0</td>
<td rowspan="1">0</td>
<td>0</td>
</tr>
<tr>
<td colspan="1">2</td>
<td colspan="1">1</td>
<td colspan="1">0</td>
<td rowspan="1">1</td>
<td rowspan="1">0</td>
<td colspan="1">10 0 0</td>
</tr>
<tr>
<td colspan="1">15</td>
<td colspan="1">3</td>
<td colspan="1">7</td>
<td rowspan="1">2</td>
<td rowspan="1">0</td>
<td colspan="1">110 00 111</td>
</tr>
<tr>
<td colspan="1">255</td>
<td colspan="1">7</td>
<td colspan="1">127</td>
<td rowspan="1">3</td>
<td rowspan="1">0</td>
<td colspan="1">1110 000 1111111</td>
</tr>
<tr>
<td colspan="1">1023</td>
<td colspan="1">9</td>
<td colspan="1">511</td>
<td rowspan="1">3</td>
<td rowspan="1">2</td>
<td colspan="1">1110 010 111111111</td>
</tr>
</tbody>
</table>
<p>Yukarıda görüldüğü üzere genel olarak sayılar büyüdükçe elias-upsilon kodlamasına göre daha az bit gerekmektedir. düşük sayılarda daha fazla bit gerektiği görülmekte ve biraz da olsa işlem karmaşıklığı artmaktadır.</p>

<p class="sayac_bilgi">133 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2011/12/06/elias-kodlamasi-elias-code/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tekil Kodlama (Unary Coding)</title>
		<link>http://www.bilgisayarkavramlari.com/2011/12/06/tekil-kodlama-unary-coding/</link>
		<comments>http://www.bilgisayarkavramlari.com/2011/12/06/tekil-kodlama-unary-coding/#comments</comments>
		<pubDate>Tue, 06 Dec 2011 06:09:18 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Veri Sıkıştırma (Data Compression)]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/?p=6078</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Verilerin tekil karşılıkla kodlanmasıdır. Buna göre her verinin kendisine ait bir basamakta karşılığı bulunur. Basitçe k değerindeki bir sayının kodlanması için k adet 1 ve sonuna bir adet 0 konulur. Örneğin aşağıda bazı sayıların tekil kodlama (unary coding) karşılıkları verilmiştir: 1 &#8211;&#62; 10 2 &#8211;&#62; 110 3 &#8211;&#62; 1110 11 [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Verilerin tekil karşılıkla kodlanmasıdır. Buna göre her verinin kendisine ait bir basamakta karşılığı bulunur.</p>
<p>Basitçe k değerindeki bir sayının kodlanması için k adet 1 ve sonuna bir adet 0 konulur.</p>
<p>Örneğin aşağıda bazı sayıların tekil kodlama (unary coding) karşılıkları verilmiştir:</p>
<p>1 &#8211;&gt; 10</p>
<p>2 &#8211;&gt; 110</p>
<p>3 &#8211;&gt; 1110</p>
<p>11 &#8211;&gt; 111111111110</p>
<p>Buna göre, 1023 sayısının karşılığı olarak 1023 adet 1 ve ardından 0 gelmesi gerekir.</p>
<p>Tekil kodlama düşük seviyeli sinyal işleme için bazı durumlarda kullanışlıdır ve her veri ünitesinin (her sayının) bitişini belirten bir sinyal olarak 0 kullanılmıştır. Ancak tekil kodlamanın en büyük mahsuru veriyi çok uzun kodlaması ve bunun sonucunda yer israfıdır.</p>
<p>Örneğin ikili kodlama (binary coding) için veriler ikilik tabana çevrilir. Bu durumda yukarıdaki örnekte verilen sayıların karşılıkları aşağıdaki şekilde olacaktır:</p>
<p>1 &#8211;&gt; 1</p>
<p>2 &#8211;&gt; 10</p>
<p>3 &#8211;&gt; 11</p>
<p>11 &#8211;&gt; 1011</p>
<p>Görüldüğü üzere çok daha az yer kaplayan veriler elde edilebilmektedir ancak bu değerlerin sürekli olarak 1 ve 0 olarak değişmesi söz konusudur. Diğer yandan veriler arasında bir ayrım söz konusu değildir. Örneğin tekil kodlama ile yollanan aşağıdaki dizgiyi (string) ele alalım:</p>
<p>101101110</p>
<p>Bu dizginin karşılığının 123 olduğu kolayca bulunabilirken aynı verinin ikili kodlamadaki karşılığı</p>
<p>11011</p>
<p>olmakta ve bu verinin 123 mü yoksa 11 mi olduğu bilinememektedir.</p>

<p class="sayac_bilgi">59 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2011/12/06/tekil-kodlama-unary-coding/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SimHash (Benzerlik Özeti)</title>
		<link>http://www.bilgisayarkavramlari.com/2011/11/19/simhash-benzerlik-ozeti/</link>
		<comments>http://www.bilgisayarkavramlari.com/2011/11/19/simhash-benzerlik-ozeti/#comments</comments>
		<pubDate>Sat, 19 Nov 2011 10:35:03 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Doğal Dil İşleme (NLP)]]></category>
		<category><![CDATA[Dosya Organizasyonu (File Organisation)]]></category>
		<category><![CDATA[Veri Sıkıştırma (Data Compression)]]></category>
		<category><![CDATA[yapay zeka (artificial intelligence)]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/?p=6062</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Bilgisayar bilimlerinde, özellikle metin işlemenin yoğun olduğu, arama motoru gibi uygulamalarda dosyaların veya web sitelerinin birbirine olan benzerliğini bulmak için kullanılan bir algoritmadır. Algoritmaya alternatif olarak klasik hash fonksiyonları kullanılabilir. Yani, örneğin iki sayfasnın ayrı ayrı hash değerleri alınıp bu değerleri karşılaştırmak mümkündür. Ancak simhash algoritması, bu yönteme göre daha [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Bilgisayar bilimlerinde, özellikle metin işlemenin yoğun olduğu, arama motoru gibi uygulamalarda dosyaların veya web sitelerinin birbirine olan benzerliğini bulmak için kullanılan bir algoritmadır. </p>
<p>Algoritmaya alternatif olarak klasik <a href="http://www.bilgisayarkavramlari.com/2008/05/26/ozetleme-fonksiyonlari-hash-function/">hash fonksiyonları</a> kullanılabilir. Yani, örneğin iki sayfasnın ayrı ayrı hash değerleri alınıp bu değerleri karşılaştırmak mümkündür. Ancak simhash algoritması, bu yönteme göre daha fazla hız ve performans sunar. </p>
<p>Sim hash algoritması, iki dosyayı birer vektör olarak görür ve bu <a href="http://www.bilgisayarkavramlari.com/2008/01/12/mesafe-vektoru-distance-vector/">vektorler (yöney, vector)</a> arasındaki cosinüs (cosine) bağlantısını bulmaya çalışır. </p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/yoneykosinus.png" alt="Yoneykosinus" title="yoneykosinus.png" border="0" width="265" height="141" /></p>
<p>Yukarıdaki şekilde temsil edildiği üzere iki dokümanın ayrı ayrı birere vektör olması durumunda, aralarında cos (x) olarak gösterilen bir açı ile bağlantı bulunması mümkündür.</p>
<p>Algoritma, öncelikle işlediği metindeki kelimelerin ağırlıklarını (weight) çıkarmakta ve buna göre kelimeleri sıralamaktadır. </p>
<p>Sıralanan her kelimeye, b uzunluğunda, yegane (unique) değer döndüren bir fonksiyon kullanılır. Örneğin her kelime için farklı bir hash  sonucu döndüren fonksiyon kullanılır. </p>
<p>b boyutundaki bir vektörün ağırlık değeri hesaplanırken, her kelimedeki 1 değeri için +1 ve 0 değeri için -1 değeri ağırlığa eklenir.</p>
<p>Son olarak üretilen ağırlık vektöründeki + değerler 1, 0 ve &#8211; değerler ise 0 olarak çevirilir.</p>
<p><b>Örnek</b></p>
<p>Yukarıdaki algoritmanın çalışmasını bir örnek üzerinden anlatalım. Algoritmanın üzerinde çalışacağı metin aşağıdaki şekilde verilmiş olsun:</p>
<p>www bilgisayar kavramları com bilgisayar kavramlarının anlatıldığı bir bilgisayar sitesidir ve com uzantılıdır</p>
<p>Yukarıdaki bu metni, algoritmanın anlatılan adımlarına göre işleyelim:</p>
<p>İlk adımımız, algoritmadaki kelimelerini ağırlıklarının çıkarılmasıdır. Bu adımı çeşitli şekillerde yapmak mümkündür ancak biz örneğimizde kolay olması açısından kelime <a href="http://www.bilgisayarkavramlari.com/2008/02/21/veri-guvenliginde-frekans-analizi-cryptoanalysis/">frekanslarını (tekrar sayısı, frequency)</a> kullanacağız. Buna göre metindeki kelimelerin tekrar sayılarına göre sıralanmış hali aşağıda verilmiştir:</p>
<p>bilgisayar 3 com 2 kavramları 1 kavramlarının 1 anlatıldığı 1 bir 1 www 1 sitesidir 1 ve 1 uzantılıdır 1</p>
<p>Yukarıda geçen her kelime için bir parmak izi (fingerprint) değeri üretiyoruz. Bu değerin özelliği, kelimeler arasında yegane (unique) bir değer bulmaktır. Bu değer, herhangi bir hash fonksiyonu üzerinden de üretilebilir. Biz örneğimizde kolalık olması açısından her kelime için rast gele bir değer kendimiz atayacağız. Ancak gerçek bir uygulamada rast gele değerlerin kullanılması mümkün değildir. Bunun sebebi, aynı kelimenin tekrar gelmesi halinde yine aynı değerin üretilmesi zorunluluğudur. Bu yazıdaki amaç algoritmayı anlatmak olduğu için birer hash sonucu olarak rast gele değerler kullanılacaktır. </p>
<p>bilgisayar 10101010  com 11000000 kavramları 01010101 kavramlarının 10100101 anlatıldığı 11101110 bir 01011111 www 11110001 sitesidir 10101110 ve 00001111 uzantılıdır 00100010</p>
<p></p>
<p>3. adımda, yukarıdaki değerleri topluyoruz. Toplama işlemi sırasında 1 değerleri için +1 ve 0 değerleri için -1 alıyoruz.</p>
<p>
10101010<br />
11000000<br />
01010101<br />
10100101<br />
11101110<br />
01011111<br />
11110001<br />
10101110<br />
00001111<br />
00100010<br />
&#8212;&#8212;&#8211;<br />
2 0 2 -4 0 2 2 0
</p>
<p>Son olarak, yukarıdaki değerleri ikilik tabana çeviriyoruz: 10100110 bu değer bizi simhash sonucumuz olarak bulunuyor.</p>
<p>Örneğin yeni bir dosyayı daha işlemek istediğimizde, bu dosyadaki kelime yoğunluğuna göre yukarıda bulduğumuz simhash değerine yakın bir değer çıkmasını bekleriz. </p>
<p>Diyelim ki yeni bir dosyada da sadece &#8220;bilgisayar kavramları com&#8221; yazıyor olsun. Bu yazının sim hash değerini bularak karşılaştırmaya çalışalım:</p>
<p>bilgisayar 10101010  com 11000000 kavramları 01010101</p>
<p>
10101010<br />
11000000<br />
01010101<br />
&#8212;&#8212;&#8212;<br />
1 1 -1 -1 -1 1 1 1
</p>
<p>Değerin ikilik tabana çevrilmiş hali : 11000111</p>
<p>Orjinal dokümandan çıkardığımız simhash değeri ile farklı olan bit sayısı 3&#8242;tür. Bunun anlamı yukarıdaki bilgisayar kavramları com yazısının orjinal yazıya 3 mesafesinde yakın olduğudur. </p>

<p class="sayac_bilgi">136 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2011/11/19/simhash-benzerlik-ozeti/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Eşlik Kontrol Matrisi (Parity Check Matrix)</title>
		<link>http://www.bilgisayarkavramlari.com/2011/04/20/eslik-kontrol-matrisi-parity-check-matrix/</link>
		<comments>http://www.bilgisayarkavramlari.com/2011/04/20/eslik-kontrol-matrisi-parity-check-matrix/#comments</comments>
		<pubDate>Wed, 20 Apr 2011 05:26:26 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Bilgisayar Matematiği]]></category>
		<category><![CDATA[Network(Ağ)]]></category>
		<category><![CDATA[Veri Sıkıştırma (Data Compression)]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2011/04/20/eslik-kontrol-matrisi-parity-check-matrix/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Hata kontrolü için kullanılan yöntemlerden birisidir. Veri güvenliği, veri iletimi veya veri sıkıştırma gibi alanlarda kullanılır. Genelde H sembolü ile gösterilir. Basitçe sistemde kullanılan üreteç matristen (generating matrix) çıkarılabilir. Bir eşlik kontrol matrisinin yapısı aşağıda verilmiştir: G = [I&#124;P] şeklinde bir üreteç matris olmak üzere H = [PT&#124;I] şeklinde bir [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER
</p>
<p>Hata kontrolü için kullanılan yöntemlerden birisidir. Veri güvenliği, veri iletimi veya veri sıkıştırma gibi alanlarda kullanılır. Genelde H sembolü ile gösterilir. Basitçe sistemde kullanılan <a href="http://www.bilgisayarkavramlari.com/2011/04/20/uretec-matris-generator-matrix/">üreteç matristen (generating matrix)</a> çıkarılabilir. Bir eşlik kontrol matrisinin yapısı aşağıda verilmiştir:
</p>
<p>G = [I|P] şeklinde bir üreteç matris olmak üzere
</p>
<p>H = [P<sup>T</sup>|I] şeklinde bir eşlik kontrol matrisi üretilebilir.
</p>
<p>Örneğin aşağıdaki şekilde bir üreteç matrisimiz olsun:
</p>
<p><span style="font-family:Times New Roman; font-size:12pt">Örneğin aşağıdaki üreteç matrisi ele alalım:<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">| 1 0 0 1 1 |<br/>| 0 1 0 1 0 | = G<br/>| 0 0 1 1 1 |<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">Bu matrisin ilk kısmı olan 3×3 boyutlarındaki bölüm birim matristir<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">| 1 0 0 |<br/>| 0 1 0 | = I<br/>| 0 0 1 |<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">İkinci kısım ise P ile gösterilen üreteç matrisin özel parçasıdır:<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">| 1 1 |<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">| 1 0 | = P<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">| 1 1 |<br />
</span></p>
<p>Yukarıdaki parçaları birleştirmeden önce P matrisinin <a href="http://www.bilgisayarkavramlari.com/2008/12/29/matris-tersyuz-matrix-transpose/">tersyüzünü (transpose)</a> alıyoruz:
</p>
<p>|111|
</p>
<p>|101| = P<sup>T</sup>
	</p>
<p>Ardından birim matris ile birleştiriyoruz:
</p>
<p>|11110|
</p>
<p>|10101| = H
</p>
<p>Şeklinde yukarıda verilen üreteç matrisin, eşlik kontrol matrisi bulunur. </p>

<p class="sayac_bilgi">242 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2011/04/20/eslik-kontrol-matrisi-parity-check-matrix/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kod Kelimesi</title>
		<link>http://www.bilgisayarkavramlari.com/2011/04/19/kod-kelimesi/</link>
		<comments>http://www.bilgisayarkavramlari.com/2011/04/19/kod-kelimesi/#comments</comments>
		<pubDate>Tue, 19 Apr 2011 10:50:56 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Derleyiciler]]></category>
		<category><![CDATA[Network(Ağ)]]></category>
		<category><![CDATA[Programlama Dilleri]]></category>
		<category><![CDATA[Veri Güvenliği(Cryptography)]]></category>
		<category><![CDATA[Veri Sıkıştırma (Data Compression)]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2011/04/19/kod-kelimesi/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Haberleşmede kullanılan bir terimdir. Bir kod kelimesi (code word), belirli bir teşrifatın (protocol, protokol) anlamlı en küçük parçasıdır. Her kod kendi başına tek bir anlam ifade eder ve bu anlam yeganedir (unique). Aynı yaklaşım programlama dilleri için de geçerlidir. Her programlama dilinde bulunan her kelime tek bir anlam ifade eder. [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER
</p>
<p>Haberleşmede kullanılan bir terimdir. Bir kod kelimesi (code word), belirli bir <a href="http://www.bilgisayarkavramlari.com/2009/08/22/3317/">teşrifatın (protocol, protokol)</a> anlamlı en küçük parçasıdır. Her kod kendi başına tek bir anlam ifade eder ve bu anlam yeganedir (unique).
</p>
<p>Aynı yaklaşım programlama dilleri için de geçerlidir. Her programlama dilinde bulunan her kelime tek bir anlam ifade eder.
</p>
<p>Örneğin bir programlama dilindeki &#8220;if&#8221; kelimesi, bu dildeki <a href="http://www.bilgisayarkavramlari.com/2008/01/03/derleyici-compiler/">kaynak kodda bulunan (source code)</a> kod kelimesidir (code word).
</p>
<p>Benzer durum herhangi bir haberleşme teşrifatında da olabilir.
</p>
<p>Kod kelimeleri kullanıldıkları yere göre kanal kelimeleri (channel code words) veya kaynak kelimeleri (source code words) olarak isimlendirilebilir. İlki haberleşme ikincisi ise programlama tabiridir.
</p>
<p>Ancak kavramsal olarak kaynak kelimelerinin veri sıkıştırma (data compression) veya veri güvenliği (cryptography) gibi alanlarda kullanılması da mümkündür. Örneğin uzun bir kelimeyi, daha kısa bir kelime ile ifade etmenin anlamı, bu kelimenin yerine geçen bir kaynak kod kullanılmasıdır.
</p>
<p>Benzer şekilde kanal kodları, gürültülü ortamlarda veri iletişimini güvenli hale getirmek için gereksiz ilave bilgiler içerebilir. Yani kod kelimeleri, yerine kullanıldıkları anlamdan uzun veya kısa olabilmektedirler.
</p>
<p>Veri güvenliği açısından da bir kod kelimesi, yerine kullanıldığı kelimeye dönüşü sadece belirli kişiler tarafından yapılabilen şifreli metindir. </p>

<p class="sayac_bilgi">197 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2011/04/19/kod-kelimesi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Çift Özetleme (Double Hashing)</title>
		<link>http://www.bilgisayarkavramlari.com/2010/01/18/cift-ozetleme-double-hashing/</link>
		<comments>http://www.bilgisayarkavramlari.com/2010/01/18/cift-ozetleme-double-hashing/#comments</comments>
		<pubDate>Mon, 18 Jan 2010 12:01:23 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Dosya Organizasyonu (File Organisation)]]></category>
		<category><![CDATA[Veri Güvenliği(Cryptography)]]></category>
		<category><![CDATA[Veri Sıkıştırma (Data Compression)]]></category>
		<category><![CDATA[veri yapıları]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2010/01/18/cift-ozetleme-double-hashing/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Bilgisayar bilimlerinde kullanılan özetleme fonksiyonları, genellikle büyük bir verinin daha küçük bir hale getirilmesine yarar. Bu anlamda özetleme fonksiyonları veri doğrulama (data verification) , veri bütünlüğü (data integrity), veri güvenliği (security) ve şifreleme (encryption) gibi pek çok alanda kullanılırlar. Özetleme fonksiyonlarının bir problemi, büyük bir veriyi özetledikten sonra, çakışma olması [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Bilgisayar bilimlerinde kullanılan <a href="http://www.bilgisayarkavramlari.com/2008/05/26/ozetleme-fonksiyonlari-hash-function/">özetleme fonksiyonları</a>, genellikle büyük bir verinin daha küçük bir hale getirilmesine yarar. Bu anlamda özetleme fonksiyonları veri doğrulama (data verification) , veri bütünlüğü (data integrity), veri güvenliği (security) ve şifreleme (encryption) gibi pek çok alanda kullanılırlar.</p>
<p>Özetleme fonksiyonlarının bir problemi, büyük bir veriyi özetledikten sonra, çakışma olması durumudur. Çalışma (collision) kısaca aynı özet değerine sahip iki farklı verinin olmasıdır.</p>
<p>Örneğin en basit özetleme fonksiyonlarından birisi olan kalan ( mod ) işlemini ele alalım. 0 ile 100 arasındaki sayıları, 0 ile 10 arasındaki sayılarla özetlemek istersek, mod 10 kullanmamız mümkündür. Bu durumda her sayının 0 – 10 aralığında bir karşılığı bulunacaktır.</p>
<p>Ancak 41 mod 10 ile 51 mod 10 aynı sonucu verir. Bu durumda bir çakışma olmuş denilebilir.</p>
<p>Çakışmayı engellemek için veri yapılar üzerinde sondalama yöntemleri kullanılabilir. En meşhurları olan <a href="http://www.bilgisayarkavramlari.com/2008/11/01/dogrusal-sondalama-linear-probing-progressive-overflow/">doğrusal sondalama (linear probing)</a> ve <a href="http://www.bilgisayarkavramlari.com/2010/01/18/ikinci-dereceden-sondalama-quadratic-probing/">ikinci dereceden sondalama (quadratic probign)</a> yöntemleri bu problemin çözümü için geliştirilmiş yöntemlerdir.</p>
<p>Bu yazının konusu olan çift özetleme (double hashing) yöntemi de işte tam bu noktada devreye girer. Yani bir şekilde özetleme fonksiyonundan çıkan sonuçların, çakışması (collision) durumunda, ikinci ve farklı bir özetleme fonksiyonu kullanılarak veri yapısı üzerinde farklı bir noktada arama veya veri ekleme işlemine devam edilebilir.</p>
<p>Örneğin veri yapısına ekleme işlemini ele alalım. Verinin hangi adrese ekleneceğini bulmak için öncelikle <a href="http://www.bilgisayarkavramlari.com/2009/01/16/aday-anahtar-candidate-key/">anahtar (key)</a> bir özetleme fonksiyonuna sokulur.  Bu ilk özetleme fonksiyonuna Ö<sub>1</sub> ismini verelim.</p>
<p>Adres = Ö1 (anahtar)  formülü ile adresi buluruz. Diyelim ki bu adres dolu ve buraya yeni verimizi ekleyemiyoruz. Bu durumda ikinci bir adres aranmalıdır. İşte bu noktada ikinci özetleme fonksiyonu Ö<sub>2</sub> devreye girer ve verinin yerleştirilebileceği boş bir adres bulunana kadar bu fonksiyon kullanılmaya devam edilir.</p>
<p>Bu durumu 10 adet hücresi bulunan boş bir veri yapısı üzerinden sırasıyla 21,31,41,51 sayılarının eklenmesi şeklinde görelim. Ö1 fonksiyonu olarak</p>
<p>Adres = anahtar mod 10</p>
<p>Ve ikinci özetleme fonksiyonu olarak Ö2 :</p>
<p>Adres = (( anahatar mod 7 ) x 3 ) mod 10</p>
<p>Fonksiyonlarını alalım. Bu fonksiyonlar örnek olarak alınmıştır ve farklı fonksiyonlar üzerinden de çift özetleme (double hashing) yapılabilir.</p>
<p>Sırasıyla sayılarımızın üzerinden geçiyoruz. İlk sayımız 21 mo 10 = 1 olarak bulunur.</p>
<div>
<table style="border-collapse:collapse" border="0">
<colgroup>
<col style="width: 75px;"></col>
<col style="width: 75px;"></col>
</colgroup>
<tbody>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">0</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">21</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">3</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">4</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">5</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">6</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">7</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">8</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">9</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
</tbody>
</table>
</div>
<p>İlk özetleme fonksiyonu sonucu olarak 1 numaralı adrese yerleştirilir. Ardından ikinci sayıya geçilir:</p>
<p>31 mod 10 = 1 bulunur ve bu adres dolu olduğu için çakışma olur. Çözüm olarak ikinci özetleme fonksiyonu kullanılır.</p>
<p>( ( 31 mod 7 ) x 3 ) mod 10 = 9 olarak bulunur ve bu adrese yerleştirilir:</p>
<div>
<table style="border-collapse:collapse" border="0">
<colgroup>
<col style="width: 75px;"></col>
<col style="width: 75px;"></col>
</colgroup>
<tbody>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">0</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">21</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">3</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">4</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">5</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">6</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">7</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">8</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">9</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">31</td>
</tr>
</tbody>
</table>
</div>
<p>Ardından 41 sayısı için 1. özetleme fonksiyonu çalıştırılır ve 1 numaralı adres dolu olduğu için çakışma oluşur. Çözüm olarak ikinci özetleme fonksiyonu çalıştırılır:</p>
<p>( ( 41 mod 7 ) x 3 ) mod 10 = 8</p>
<div>
<table style="border-collapse:collapse" border="0">
<colgroup>
<col style="width: 75px;"></col>
<col style="width: 75px;"></col>
</colgroup>
<tbody>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">0</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">21</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">3</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">4</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">5</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">6</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">7</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">8</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">41</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">9</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">31</td>
</tr>
</tbody>
</table>
</div>
<p>Benzer şekilde 51 için çakışma olur ve ikinci özet fonksiyonu çalıştırılır.</p>
<p>( ( 51 mod 7 ) x 3 ) mod 10 = 6</p>
<div>
<table style="border-collapse:collapse" border="0">
<colgroup>
<col style="width: 75px;"></col>
<col style="width: 75px;"></col>
</colgroup>
<tbody>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">0</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">21</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">3</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">4</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">5</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">6</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">51</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">7</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">8</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">41</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">9</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">31</td>
</tr>
</tbody>
</table>
</div>
<p>Görüldüğü üzere ikinci özetleme fonksiyonu, ilkinde bir çakışma olması halinde kullanılmaktadır. Peki acaba ikinci özetleme fonksiyonunda da çakışma olursa ne yapılır?</p>
<p>Bu durumu örneğimize devam edip 61 sayısını eklemek istediğimizde görebiliriz.</p>
<p>( ( 61 mod 7 ) x 3 ) mod 10 = 8</p>
<p>Bulunacaktır ve 8 numaralı adres doludur. Bu durumda ikinci özetleme fonksiyonuna ikinci kere sokularak farklı bir adres aranır:</p>
<p>(( 8 mod 7 ) x 3 ) mod 10 = 3 olarak bulunur ve bu adrese yerleştirilir.</p>
<div>
<table style="border-collapse:collapse" border="0">
<colgroup>
<col style="width: 75px;"></col>
<col style="width: 75px;"></col>
</colgroup>
<tbody>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">0</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">21</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">3</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">61</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">4</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">5</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">6</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">51</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">7</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">8</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">41</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">9</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">31</td>
</tr>
</tbody>
</table>
</div>
<p>Görüldüğü üzere ikinci özetleme fonksiyonunun ilk özetleme fonksiyonu ile aralarında asal olması, belirli bir adres dizilimine girilmesine engellemekte bu sayede veri yapısı üzerinde boş yer bulunuyorsa mutlaka belirli bir denemeden sonra bu adrese erişilmesi garanti edilmiş olmaktadır.</p>

<p class="sayac_bilgi">328 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2010/01/18/cift-ozetleme-double-hashing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>İkinci Dereceden Sondalama (Quadratic Probing)</title>
		<link>http://www.bilgisayarkavramlari.com/2010/01/18/ikinci-dereceden-sondalama-quadratic-probing/</link>
		<comments>http://www.bilgisayarkavramlari.com/2010/01/18/ikinci-dereceden-sondalama-quadratic-probing/#comments</comments>
		<pubDate>Mon, 18 Jan 2010 10:45:24 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Dosya Organizasyonu (File Organisation)]]></category>
		<category><![CDATA[Veri Güvenliği(Cryptography)]]></category>
		<category><![CDATA[Veri Sıkıştırma (Data Compression)]]></category>
		<category><![CDATA[veri yapıları]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2010/01/18/ikinci-dereceden-sondalama-quadratic-probing/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Özellikle özetleme fonksiyonlarının (hashing functions) bilgileri sınıflandırması sırasında kullanılan formülün ikinci dereceden olması durumudur. Özetleme fonksiyonlarında, sık kullanılan doğrusal sondalama (linear probing) yönteminin tersine, bir bilgiyi tasnif ederken, ardışık olarak veriler üzerinde hareket etmez, bunun yerine her defasında baktığı uzaklığı ikinci dereceden bir denklem ile arttırır. Konuyu anlamaya öncelikle doğrusal [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Özellikle <a href="http://www.bilgisayarkavramlari.com/2008/05/26/ozetleme-fonksiyonlari-hash-function/">özetleme fonksiyonlarının (hashing functions)</a> bilgileri sınıflandırması sırasında kullanılan formülün ikinci dereceden olması durumudur.</p>
<p>Özetleme fonksiyonlarında, sık kullanılan <a href="http://www.bilgisayarkavramlari.com/2008/11/01/dogrusal-sondalama-linear-probing-progressive-overflow/">doğrusal sondalama (linear probing)</a> yönteminin tersine, bir bilgiyi tasnif ederken, ardışık olarak veriler üzerinde hareket etmez, bunun yerine her defasında baktığı uzaklığı ikinci dereceden bir denklem ile arttırır.</p>
<p>Konuyu anlamaya öncelikle doğrusal fonksiyonları hatırlayarak başlayalım.</p>
<p><strong>Bilindiği üzere doğrusal fonksiyonlar :<br />
</strong></p>
<p>y = ax + b şeklinde yazılabilen birinci dereceden fonksiyonlardır. Bu durumda özetleme fonksiyonu veriyi sınıflandırırken bir çakışma (collision) olması durumunda bir sonraki veri hücresine bakar, ve bu şekilde aranan veriye ulaşana kadar devam eder. Örneğin 10 hücreli bir sınıflama için mod 10 fonksiyonunu kullanacağımızı düşünelim.</p>
<p>Bu durumda ilk başta aşağıdaki şekilde boş olan veri yapımıza sırasıyla 21,31,41,51 sayılarının geldiğini kabul edelim.</p>
<div>
<table style="border-collapse:collapse" border="0">
<colgroup>
<col style="width: 75px;"></col>
<col style="width: 75px;"></col>
</colgroup>
<tbody>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">0</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">3</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">4</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">5</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">6</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">7</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">8</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">9</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
</tbody>
</table>
</div>
<p>Dikkat edileceği üzere bu sayılar özellikle çakışma olsun diye mod 10 fonksiyonuna konulduğunda hep 1 olarak çıkan sayılardan seçilmiştir.</p>
<p>Şimdi bu sayıları yerleştirecek olursak ilk gelen sayı 21 mod 10 = 1 olduğu için 1. Hücreye yerleştirilecektir.</p>
<div>
<table style="border-collapse:collapse" border="0">
<colgroup>
<col style="width: 75px;"></col>
<col style="width: 75px;"></col>
</colgroup>
<tbody>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">0</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">21</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">3</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">4</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">5</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">6</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">7</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">8</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">9</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
</tbody>
</table>
</div>
<p>Ardından gelen 31 sayısı yine 1. Hücreye yerleştirilmek istenecek ancak burası dolu olduğu için doğrusal sondalama kullanarak bir sonraki hücreye yerleştirme yapılıyor:</p>
<div>
<table style="border-collapse:collapse" border="0">
<colgroup>
<col style="width: 75px;"></col>
<col style="width: 75px;"></col>
</colgroup>
<tbody>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">0</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">21</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">31</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">3</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">4</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">5</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">6</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">7</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">8</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">9</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
</tbody>
</table>
</div>
<p>Diğer sayılar için durum değişmiyor ve aynı yaklaşım izlenmeye devam ediliyor:</p>
<div>
<table style="border-collapse:collapse" border="0">
<colgroup>
<col style="width: 75px;"></col>
<col style="width: 75px;"></col>
</colgroup>
<tbody>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">0</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">21</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">31</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">3</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">41</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">4</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">51</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">5</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">6</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">7</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">8</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">9</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
</tbody>
</table>
</div>
<p>Görüldüğü üzere elimizdeki sayıların tamamı başarılı bir şekilde yerleştirilmiştir. Konuyu daha iyi anlayabilmek için farklı bir örnek olarak 33 sayısını yerleştirmek istediğimizi düşünelim. Bu durumda 33 mod 10 = 3 hücresi dolu olduğu için işlem değişmeden yukarıda olduğu gibi uygulanacaktır:</p>
<div>
<table style="border-collapse:collapse" border="0">
<colgroup>
<col style="width: 75px;"></col>
<col style="width: 75px;"></col>
</colgroup>
<tbody>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">0</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">21</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">31</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">3</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">41</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">4</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">51</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">5</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">33</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">6</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">7</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">8</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">9</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
</tbody>
</table>
</div>
<p><strong>İkinci dereceden sondalama (quadratic probing)<br />
</strong></p>
<p>Doğrusal sondalamayı anladıktan (hatırladıktan) sonra ikinci dereceden sondalamadan bahsedebiliriz. Buradaki yaklaşımda kullanılan formül bir <a href="http://www.bilgisayarkavramlari.com/2008/05/26/ozetleme-fonksiyonlari-hash-function/">özetleme fonksiyonunda</a> geçildikten sonra çakışma olması durumunda (collision) sürekli olarak bir sonraki hücreye bakmak yerine, her defasında üssel fonksiyon değeri kadar ilerlemektir.</p>
<p>Örneğin yukarıdaki sayılar için aynı veri yapısına ikinci dereceden sondalama ile ekleme işlemi yapalım:</p>
<div>
<table style="border-collapse:collapse" border="0">
<colgroup>
<col style="width: 75px;"></col>
<col style="width: 75px;"></col>
</colgroup>
<tbody>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">0</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">21</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">3</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">4</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">5</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">6</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">7</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">8</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">9</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
</tbody>
</table>
</div>
<p>İlk gelen sayı, bir çakışma olmadığı için doğal hücresine yerleştiriliyor. Ardından gelen 31 sayısı için çakışma oluyor. Bu durumda sonraki bakılacak olan hücrenin karesi alınıyor, şu anda ilk çakışma yaşandığı için 1<sup>2</sup> = 1 yani doğal hücreden bir sonraki hücreye bakıyoruz:</p>
<div>
<table style="border-collapse:collapse" border="0">
<colgroup>
<col style="width: 75px;"></col>
<col style="width: 75px;"></col>
</colgroup>
<tbody>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">0</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">21</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">31</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">3</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">4</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">5</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">6</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">7</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">8</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">9</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
</tbody>
</table>
</div>
<p>Bu hücre boş olduğu için yerleştirme işlemi tamamlanıyor ve sıradaki sayıya geçiliyor.</p>
<p>Sayımız 41 ve doğal hücresi olan 1. Adreste çakışma yaşanıyor,</p>
<p>ardından 1<sup>2</sup> = 1 sonraki hücrede de (yani 2. Hücre) çakışma yaşanıyor,</p>
<p>ardından gelen 2<sup>2</sup> = 4 sonraki hücreye bakılıyor. Dolayısıyla doğrusal sondalamada olduğu gibi 3. Hücreye bakmak yerine 5. Hücreye bakıyoruz:</p>
<div>
<table style="border-collapse:collapse" border="0">
<colgroup>
<col style="width: 75px;"></col>
<col style="width: 75px;"></col>
</colgroup>
<tbody>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">0</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">21</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">31</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">3</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">4</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">5</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">41</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">6</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">7</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">8</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">9</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
</tbody>
</table>
</div>
<p>Sırada 51 bulunuyor ve benzer şekilde doğal hücresi dolu, 1<sup>2</sup> = 1 sonraki hücre dolu, 2<sup>2</sup> = 4 sonraki hücre dolu ve nihayet 3<sup>2</sup> = 9 sonraki hücre boş bulunup yerleştiriliyor.</p>
<div>
<table style="border-collapse:collapse" border="0">
<colgroup>
<col style="width: 75px;"></col>
<col style="width: 75px;"></col>
</colgroup>
<tbody>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">0</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">51</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">21</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">31</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">3</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">4</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">5</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">41</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">6</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">7</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">8</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">9</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
</tbody>
</table>
</div>
<p>Yukarıdaki yerleştirme işlemi sırasında mod10 kullanıldığı unutulmamalıdır, bu yüzden 0. Hücreye yerleştirme işlemi yapılmıştır.</p>
<p style="text-align: justify">Doğrusal sondalama örneğinde olduğu gibi, 33 sayısını da eklemek istediğimizde doğal hücresi boş olduğu için herhangi bir sondalamaya gerek kalmadan yerleştirme işlemi yapılabilir:</p>
<div>
<table style="border-collapse:collapse" border="0">
<colgroup>
<col style="width: 75px;"></col>
<col style="width: 75px;"></col>
</colgroup>
<tbody>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">0</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">51</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">21</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">31</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">3</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">33</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">4</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">5</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">41</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">6</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">7</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">8</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">9</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"></td>
</tr>
</tbody>
</table>
</div>
<p style="text-align: justify">
<p style="text-align: justify">Doğrusal sondalamada özetleme fonksiyonundan sonra sırasıyla veri yapısındaki hücrelere bakılır. Bu durum için aşağıdakine benzer bir döngü yazılması gerekir:</p>
<p style="text-align: justify"><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/011810_1045_kinciDerece1.png" alt="" /></p>
<p style="text-align: justify">Görüldüğü üzere, öncelikle özetleme fonksiyonuna (h) anahtar verilip doğal adres bulunuyor. Bu adresin dolu olması ve sonraki adreslerin de dolu olması durumunda adres değeri arttırılarak devam ediliyor.</p>
<p style="text-align: justify">İkinci dereceden sondalama kullanılsaydı, bu kodu aşağıdaki şekilde yazmamız gerekecekti:</p>
<p style="text-align: justify"><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/011810_1045_kinciDerece2.png" alt="" /></p>
<p style="text-align: justify">Yukarıdaki yeni haliyle kodumuz, her defasında artış miktarının karesi kadar sonraki hücreye bakmaktadır.</p>
<p style="text-align: justify">Yukarıdaki müsvedde kodlar (pseudo codes) ve örnekler fikir vermesi açısından yazılmış olup, özetleme fonksiyonu, doğrusal sondalama ve ikinci dereceden sondalama işlemleri için farklı fonksiyonlar kullanılabilir. Buradaki amaç, ikinci dereceden sondalamada kullanılan fonksiyonun ikinci derece bir denklem olmasıdır.</p>

<p class="sayac_bilgi">249 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2010/01/18/ikinci-dereceden-sondalama-quadratic-probing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>LZW Sıkıştırma algoritması</title>
		<link>http://www.bilgisayarkavramlari.com/2010/01/04/lzw-sikistirma-algoritmasi/</link>
		<comments>http://www.bilgisayarkavramlari.com/2010/01/04/lzw-sikistirma-algoritmasi/#comments</comments>
		<pubDate>Mon, 04 Jan 2010 19:03:48 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Veri Sıkıştırma (Data Compression)]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2010/01/04/lzw-sikistirma-algoritmasi/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Bilgisayar bilimlerinde kullanılan kayıpsız sıkıştırma (lossless compression) algoritmalarından birisidir. İsmini, algoritmayı 1978 yılında bulan Lempel Ziv ve Welch isimli kişilerin baş harflerinden almıştır. Algoritma, sıkıştırılacak metin içerisinde harf harf ilerleyerek, mümkün olan en fazla harfi içeren kelimeyi sözlüğe eklemeye çalışmakta ve bu sırada da sözlükteki karşılığı ile metni değiştirmektedir. Böylelikle [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Bilgisayar bilimlerinde kullanılan <a href="http://www.bilgisayarkavramlari.com/2008/12/17/kayipsiz-sikistirma-lossless-compression/">kayıpsız sıkıştırma (lossless compression)</a> algoritmalarından birisidir. İsmini, algoritmayı 1978 yılında bulan Lempel Ziv ve Welch isimli kişilerin baş harflerinden almıştır.</p>
<p>Algoritma, sıkıştırılacak metin içerisinde harf harf ilerleyerek, mümkün olan en fazla harfi içeren kelimeyi sözlüğe eklemeye çalışmakta ve bu sırada da sözlükteki karşılığı ile metni değiştirmektedir. Böylelikle sıkıştırma işlemi gerçekleşmiş olur. Örneğin 4 harf uzunluğunda bir kelimeyi sözlüğe eklemeyi başardıysak, karşı tarafa gönderilen mesajda tek bir sembol bu dört harflik mesajı içerecektir.</p>
<p>Algoritmanın bir özelliği sözlüğün karşı tarafa iletilmesini gerektirmemesidir. Yani yollanan mesaj içerisinde harflerden oluşan bir sözlük bulunmakla birlikte çok harfli kelimeleri içeren sözlük dinamik olarak oluşturulur ve açan taraf da bu sözlüğü yine dinamik bir şekilde oluşturarak mesajı açar.</p>
<p><strong>Algoritmanın sıkıştırması<br />
</strong></p>
<p>Algoritma sıkıştırma işlemi sırasında basitçe, sıkıştırılacak olan metin üzerinde, sözlükte olan bir kelimeyle uyuşan harfler bulduğu sürece ilerler. Farklı bir harfe rastladığı zaman, o ana kadar uyumlu bulduğu harflerden oluşan kelimenin kodunu sonuca yazar ve yeni harfi içeren kelimeyi sözlüğe ekler.</p>
<p>Müsvedde kod (pseudo code) olarak aşağıdaki şekilde yazılabilir:</p>
<ol>
<li>Metinden bir harf al</li>
<li>Sözlükte harfi ara</li>
<li>Metindeki sıradaki harfi aldığında sözlükteki bir kayda karşılık geliyorsa metinden harf almaya devam et</li>
<li>Şimdiye kadar uyan sözlük değerini sonuca bas</li>
<li>Uyumu bozan yeni harfle birlikte şimdiye kadar uyan sözlük kaydını, yeni sözlük kaydı olarak ekle</li>
<li>Metin bitmediyse 2. Adımdan uymayan bu yeni harf ile devam et.</li>
</ol>
<p>Bu durumu aşağıdaki örnek üzerinden inceleyelim.</p>
<p>Sıkıştırmak istediğimiz mesajımız: &#8220;sadisadisadi&#8221; olsun.</p>
<p>Öncelikle yukarıda bulunan harflerimizi içeren bir sözlük oluşturuyoruz. Bu sözlük her iki tarafta da bulunmalıdır. Bu örnekte sadece 4 farklı harf olduğu için 4 harf içeren bir sözlüğümüzün olması yeterlidir. Ancak genel kullanımda, örneğin ascii tablosu böyle bir sözlük olarak bütün bilgisayarlarda kayıtlıdır ve ilave bir transfere ihtiyaç duyulmaz.</p>
<p>a-1,d-2,i-3,s-4 şeklinde 4 harflik alfabemizi ve karşılığı olan sayıları belirleyelim.</p>
<p>Mesajımızı işlemeye başlıyoruz. Aşağıda : işaretinin sol tarafı sıkıştırılacak olan metin ve sağ tarafı sıkıştırma işleminin sonucu olarak düşünülebilir. Mesajın ilk harfinden başlayalım:</p>
<p>Sadisadisadi</p>
<p>Buradaki s harfi sözlüğümüzde zaten bulunuyor ve çıktımıza sözlükten 4 sayısını koyuyoruz:</p>
<p>SAdisadisadi : 4</p>
<p>Yukarıda, sözlükten ilk harfi sonuca koyduk ve sıradaki harfi aldık. Sözlüğümüzde s harfi bulunmakta ve şimdiye kadar karşılaştığımız en uzun sözlük kaydı bu harf olmaktadır. Yeni gelen a harfi ile birlikte bir s harfi olmadığı için bu harfi sonuca harf olarak 1 şeklinde yazıyoruz, ilk kez karşılaştığımız durumu sözlüğe ekliyoruz ve sa için 5 kaydını giriyoruz. Sözlüğün yeni hali ve mesaj aşağıdaki şekildedir:</p>
<p>Sözlük : a-1,d-2,i-3,s-4,sa-5</p>
<p>sADisadisadi : 4 1</p>
<p>Şu anda a harfiyle başlayan bir kelime üzerinde işlem yapıyorduk. Bu kelime sadece a harfini içeren sözlük girdisiydi ve yeni bir harf olarak d harfi geldi. Bu durumda ad ile başlayan bir sözlük girdisi olmadığı için sözlüğe bu yeni kaydı ekleyip, sonuç kısmına d harfini olduğu gibi alıyoruz:</p>
<p>Sözlük : a-1,d-2,i-3,s-4,sa-5,ad-6</p>
<p>saDİsadisadi : 4 1 2</p>
<p>Yukarıdaki durumlara benzer şekilde, İ harfi ilk defa karşılaştığımız bir durum. Sözlükteki d harfini işlerken karşılaştığımız için Dİ kaydını ekliyor ve i harfini sonuca alıyoruz:</p>
<p>Sözlük : a-1,d-2,i-3,s-4,sa-5,ad-6,di-7</p>
<p>sadİSadisadi : 4 1 2 3</p>
<p>Aynı durum is için geçerlidir, i harfini sonuca alıp, sözlüğe ilk karşılaştığımız is durumunu ekliyoruz:</p>
<p>Sözlük : a-1,d-2,i-3,s-4,sa-5,ad-6,di-7,is-8</p>
<p>sadiSAdisadi : 4 1 2 3 5</p>
<p>İşte yukarıdaki sa durumunda ilk defa sözlükte iki harfi birden bulunan bir kayıt yakalıyoruz. Sa harfleri 5. Kayıtta bulunuyor. Bu durumda sözlükte olmayan bir harf bulana kadar işlemeye devam ediyoruz ve d harfine gelince sözlükteki kaydın dışına çıkılmış olunuyor:</p>
<p>Sözlük : a-1,d-2,i-3,s-4,sa-5,ad-6,di-7,is-8,sad-9, dis-10</p>
<p>sadisaDİsadi : 4 1 2 3 5 7</p>
<p>Benzer şekilde di kaydının, sözlükte olmayan bir hale gelmesi, sıkıştırılacak metindeki s harfinin eklenmesi ile sağlanıyor. Sözlüğe ekleyip mesajın kalanına devam ediyoruz.</p>
<p>Sözlük : a-1,d-2,i-3,s-4,sa-5,ad-6,di-7,is-8,sad-9, dis-10,sadi-11</p>
<p>sadisadiSADi : 4 1 2 3 5 7 9</p>
<p>Yukarıda, ilk defa sözlükte 3 harfli bir kayıt yakaladık. Bu kaydın metinle uyuşmayan ilk durumu sondaki i harfi gelmesidir. Yukarıdaki durumlara benzer şekilde uyan kısmını sözlükten alıp sonuca yazıyor, uymayan halini de uymayan kelimeyi ekleyerek sözlüğe yazıyoruz.</p>
<p>Son olarak sonda tek harf olan i kalıyor ve bunu da sözlük karşılığı olan 3 yazarak sonuca alıyoruz.</p>
<p>Sözlük : a-1,d-2,i-3,s-4,sa-5,ad-6,di-7,is-8,sad-9, dis-10,sadi-11</p>
<p>sadisadiSADi : 4 1 2 3 5 7 9 3</p>
<p>Görüldüğü üzere metin 12 harfliyken sonuç mesajında 8 sayı bulunmaktadır. Dolayısıyla bu örnekte %33 başarı sağladığımızı söyleyebiliriz.</p>
<p><strong>Algoritmanın açması<br />
</strong></p>
<p>Yukarıda sıkıştırılması anlatılan mesajın, nasıl açıldığını anlatmaya çalışalım.</p>
<p>Algoritma açma işlemi sırasında, sıkıştırılmış mesajdan bir değer okur ve bunun karşılığını sözlükten bularak açılmış mesaj olarak çıkartır. Ayrıca sözlüye her yeni gelen harfi, sözlükten bulduğu bir önceki kayda ekleyerek sözlüğe yeni bir kayıt olarak ekler.</p>
<p>Bu durumu müsvedde kod olarak yazmaya çalışırsak:</p>
<ol>
<li>Şifreli mesajdan bir sembol oku</li>
<li>Sözlükte karşılığını ara</li>
<li>Sözlükte karşılığını bulduğun sürece sıkıştırılmış metni okumaya devam et.</li>
<li>Farklı harfe kadar bulduğun sözlük girdisini açılmış mesaja ekle, farklı harfi sözlük girdisine ilave ederek sözlüğe kaydet</li>
<li>Metin bitmediyse 2. Adımdan yeni harf ile devam et</li>
</ol>
<p>Yukarıdaki açma algoritmasının daha önceden sıkıştırdığımız mesajı nasıl açtığını inceleyelim:</p>
<p>Açmak istediğimiz mesaj &#8220;4 1 2 3 5 7 9 3&#8243; olarak verilmiş olsun ve ilk sözlüğümüz a-1,d-2,i-3,s-4 şeklinde 4 harf içersin.</p>
<p>Mesajı işlemeye ilk sembol olan 4 ile başlıyor ve sonucu hemen sözlükten bulup yazıyoruz.</p>
<p>Sözlük: a-1,d-2,i-3,s-4,sa-5</p>
<p><strong>4 1</strong> 2 3 5 7 9 3 : s</p>
<p>Şifreli mesajda bir sonraki sembole geçildiğinde bu iki sembolün birleşimini yukarıda görüldüğü üzere sözlüğe ekliyoruz (4-s ve 1-a harfleri olduğu için sözlüğe yeni bir sa kaydı ekleniyor) ve sembol karşılığı sonuca yazılıyor. Aynı durum sonraki adımlarda da devam ediyor:</p>
<p>Sözlük: a-1,d-2,i-3,s-4,sa-5,ad-6</p>
<p>4<strong> 1 2</strong> 3 5 7 9 3 : s a</p>
<p>Sözlük: a-1,d-2,i-3,s-4,sa-5,ad-6,di-7</p>
<p>4 1<strong> 2 3</strong> 5 7 9 3 : s a d</p>
<p>Sözlük: a-1,d-2,i-3,s-4,sa-5,ad-6,di-7,is-8</p>
<p>4 1 2<strong> 3 5</strong> 7 9 3 : s a d i</p>
<p>Buraya kadar olan örneklerde hep tek harfli kayıt sözlükten bulunmuş ve yazılmıştır. İlk defa çok harfli bir kayıt olan 5. Kayda rastlanmıştır. Algoritma aynı yaklaşımla açmaya devam edecek ve sözlük kaydını sonuca yazdıktan sonra yeni kaydı sözlüğe ekleyecektir:</p>
<p>Sözlük: a-1,d-2,i-3,s-4,sa-5,ad-6,di-7,is-8,sad-9</p>
<p>4 1 2 3 <strong>5 7</strong> 9 3 : s a d i sa</p>
<p>Yukarıdaki örnekte dikkat edilecek bir husus, 5 girdisinden sonra 7 gelince bu iki girdiyi birleştirerek sadi şeklide sözlüğe bir kayıt girmek yerine, 5 girdisinin sonuna 7 girdisindeki ilk harfi eklemektir. Buna dikkat edilmesi gerekir çünkü lzw algoritması her adımda tek bir harf ilave etmektedir.</p>
<p>Sözlük: a-1,d-2,i-3,s-4,sa-5,ad-6,di-7,is-8,sad-9,dis-10</p>
<p>4 1 2 3 5 <strong>7 9</strong> 3 : s a d i sa di</p>
<p>Sözlük: a-1,d-2,i-3,s-4,sa-5,ad-6,di-7,is-8,sad-9,dis-10,sadi-11</p>
<p>4 1 2 3 5 7 <strong>9 3</strong> : s a d i sa di sad</p>
<p>Sözlük: a-1,d-2,i-3,s-4,sa-5,ad-6,di-7,is-8,sad-9,dis-10,sadi-11</p>
<p>4 1 2 3 5 7 9 3 : s a d i sa di sad i</p>

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

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

<p class="sayac_bilgi">403 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2009/11/24/dfa-metin-arama-algoritmasi-dfa-text-search/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kaba Kuvvet Metin Arama Algoritması (Bruteforce Text Search Algorithm)</title>
		<link>http://www.bilgisayarkavramlari.com/2009/11/24/kaba-kuvvet-metin-arama-algoritmasi-bruteforce-text-search-algorithm/</link>
		<comments>http://www.bilgisayarkavramlari.com/2009/11/24/kaba-kuvvet-metin-arama-algoritmasi-bruteforce-text-search-algorithm/#comments</comments>
		<pubDate>Tue, 24 Nov 2009 02:33:26 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[algoritma analizi (teory of algorithms)]]></category>
		<category><![CDATA[C/C++]]></category>
		<category><![CDATA[JAVA]]></category>
		<category><![CDATA[Veri Sıkıştırma (Data Compression)]]></category>
		<category><![CDATA[veri yapıları]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2009/11/24/kaba-kuvvet-metin-arama-algoritmasi-bruteforce-text-search-algorithm/</guid>
		<description><![CDATA[Yazan: Şadi Evren ŞEKER 1. Algoritmanın başarısı 2. Algoritmanın çalışması ve bir örnek 3. Algoritmanın kodlanması Bilgisayar bilimlerinde bir metnin içerisinde başka bir metnin aranması için kullanılan en ilkel ve dolayısıyla en düşük performanslı arama algoritmasıdır (search algorithm). Algoritma hedef metinde, aranan metni harf harf bulmaya çalışır. Bu yapısından dolayı diziler üzerinde kullanılan doğrusal arama [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan: Şadi Evren ŞEKER</p>
<p class="shutter"><a href="#1">1. Algoritmanın başarısı</a><br />
<a href="#2">2. Algoritmanın çalışması ve bir örnek</a><br />
<a href="#3">3. Algoritmanın kodlanması</a></p>
<p>Bilgisayar bilimlerinde bir metnin içerisinde başka bir metnin aranması için kullanılan en ilkel ve dolayısıyla en düşük performanslı <a href="http://www.bilgisayarkavramlari.com/2009/11/23/arama-algoritmalari-search-algorithms/">arama algoritmasıdır (search algorithm).</a> Algoritma hedef metinde, aranan metni harf harf bulmaya çalışır. Bu yapısından dolayı diziler üzerinde kullanılan <a href="http://www.bilgisayarkavramlari.com/2008/11/09/dogrusal-arama-linear-search/">doğrusal arama (linear search)</a> algoritmasına oldukça benzer ve literatürde doğrusal metin araması (linear text search) ismi de verilmektedir.</p>
<p><strong><a name="1"></a>1 Algoritmanın başarısı<br />
</strong></p>
<p>Kaba kuvvet algoritması, isminden de anlaşılacağı üzere çok zeki olmayan ve başarısını bilgisayarın yüksek hızda çalışmasından alan bir algoritmadır. Algoritma basitçe metinin tamamını çok zeki olmayan bir şekilde dolaşır ve aranan kelimenin ilk harfini bulana kadar bu işleme devam eder. Bulduğu anda geri kalan harfleri eşleştirmeye çalışır. Şayet harflerden birisini eşleştiremezse, kelimenin ilk harfini bulduğu yere geri dönerek arama işlemine devam eder. Gerçi çok zeki olmadığı için kelimenin tamamını eşleştirse bile yine de ilk harfi bulduğu yere geri dönerek arama işlemine devam eder.</p>
<p><strong><a name="2"></a>2 Algoritmanın çalışması ve bir örnek<br />
</strong></p>
<p>Kaba kuvvet metin arama algoritmasının (bruteforce text search algorithm) çalışmasını aşağıdaki örnek üzerinden anlamaya çalışalım.</p>
<p>Aranan kelimemiz : bilgi</p>
<p>Aranan metin: wwwbilgisayarkavramlaricom</p>
<p>Olarak veriliyor olsun. Bu durumda algoritma ilk harften başlayarak &#8220;bilgi&#8221; kelimesini aranan metin içerisinde bulmaya çalışacaktır.</p>
<pre>  wwwbilgisayarkavramlaricom</pre>
<pre>  b....</pre>
<p>Öncelikle ilk harften başlanarak harfler karşılaştırılıyor. Aranan kelimenin ilk harfi &#8220;b&#8221; olduğu için bu harf bulunana kadar arama işlemi devam ediyor:</p>
<pre>  wwwbilgisayarkavramlaricom</pre>
<pre>   b....</pre>
<pre>  wwwbilgisayarkavramlaricom</pre>
<pre>    b....</pre>
<pre>  wwwbilgisayarkavramlaricom</pre>
<pre>     BILGI</pre>
<p>&#8220;b&#8221; harfi ile başlayan bir yer bulundu. Artık diğer harfler karşılaştırılabilir. Sırasıyla &#8220;I&#8221;,&#8221;L&#8221;.. harfleri karşılaştırılıyor ve harfler tuttuğu sürece karşılaştırma işlemi devam ediyor. Şayet harflerden birisi beklenen sırada gelmezse karşılaştırma işlemi kesilip kalınan yerden devam ediliyor.</p>
<pre>  wwwBILGIsayarkavramlaricom</pre>
<pre>      b....</pre>
<p>Aslında bu harflere bakılmış olmasına rağmen yine de aranıyor. Malum kaba kuvvet arama algoritması akıllı bir algoritma değildir ve bütün ihtimalleri dener. Dolayısıyla aslında bakmış olduğumu ve bakılmasının bir anlamı olmayan bu harflere de bu algoritma kapsamında bakılıyor.</p>
<pre>  wwwBILGIsayarkavramlaricom</pre>
<pre>       b....</pre>
<p>Arama işlemi aşağıdaki şekilde geri kalan harflerin kontrolü ile devam ediyor:</p>
<pre>  wwwBILGIsayarkavramlaricom</pre>
<pre>        b....</pre>
<pre>  wwwBILGIsayarkavramlaricom</pre>
<pre>         b....</pre>
<pre>  wwwBILGIsayarkavramlaricom</pre>
<pre>          b....</pre>
<pre>  wwwBILGIsayarkavramlaricom</pre>
<pre>           b....</pre>
<pre>  wwwBILGIsayarkavramlaricom</pre>
<pre>            b....</pre>
<pre>  wwwBILGIsayarkavramlaricom</pre>
<pre>             b....</pre>
<pre>  wwwBILGIsayarkavramlaricom</pre>
<pre>              b....</pre>
<pre>  wwwBILGIsayarkavramlaricom</pre>
<pre>               b....</pre>
<pre>  wwwBILGIsayarkavramlaricom</pre>
<pre>                b....</pre>
<pre>  wwwBILGIsayarkavramlaricom</pre>
<pre>                 b....</pre>
<pre>  wwwBILGIsayarkavramlaricom</pre>
<pre>                  b....</pre>
<pre>  wwwBILGIsayarkavramlaricom</pre>
<pre>                   b....</pre>
<pre>  wwwBILGIsayarkavramlaricom</pre>
<pre>                    b....</pre>
<pre>  wwwBILGIsayarkavramlaricom</pre>
<pre>                     b....</pre>
<pre>  wwwBILGIsayarkavramlaricom</pre>
<pre>                      b....</pre>
<pre>  wwwBILGIsayarkavramlaricom</pre>
<pre>                       b....</pre>
<p>Yukarıdaki arama işlemi sonucunda büyük harfle gösterilen kısımda aranan kelime bulunmuştur. Toplam 26 harflik bir metin içerisinde 5 harflik &#8220;bilgi&#8221; kelimesi aranmıştır ve 22 adımda bulunmuştur.</p>
<p>Artın aranan kelimenin sığmayacağı son harflere bakılmamıştır. Örneğin aranan metnin son 4 harfi olan &#8220;icom&#8221; <a href="http://www.bilgisayarkavramlari.com/2008/08/02/alt-dizgi-substring/">alt metni (sub string)</a> üzerinde arama işlemi anlamsızdır çükü buraya &#8220;bilgi&#8221; kelimesi sığamaz.</p>
<p><strong><a name="3"></a>3 Algoritmanın kodlanması<br />
</strong></p>
<p>Algoritmanın C, C++, JAVA veya C# gibi diller için kodlaması aşağıdaki iki <a href="http://www.bilgisayarkavramlari.com/2009/11/02/ic-ice-donguler-nested-loops/">iç içe döngü (nested loop)</a> şeklinde yapılabilir:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/112409_0233_KabaKuvvetM1.png" alt="" /></p>
<p>Yukarıdaki kodda, n boyutundaki y hedef <a href="http://www.bilgisayarkavramlari.com/2008/08/02/dizgi-string/">dizgisi (string)</a> içerisinde m boyutunda x dizgisinin arandığı kabul edilmiştir. Döngü basitçe n-m kere dönmektedir (yukarıdaki örnekte 22 kere dönemsi gibi) ve şayet aranan kelimenin ilk harfi bulunursa, 8. Satırdaki iç döngü dönmeye başlar. Harfler tutuştukça dönme işlemi devam ettirilir. Nihayetinde 11. Satırdaki koşul gerçekleşince, yani tutuşan harflerin sayısı, aranan kelimenin boyutunu geçince, yani aradığımız kelimedeki harf kadar harf, birbirini tutunca sonuç gösterilir. Bu işlem metnin sonuna kadar tekrarlanır.</p>

<p class="sayac_bilgi">627 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2009/11/24/kaba-kuvvet-metin-arama-algoritmasi-bruteforce-text-search-algorithm/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

