<?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>Wed, 18 Aug 2010 21:13:27 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Ç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>
]]></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>
]]></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>
]]></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[Automata (otomatlar, özdevinirler)]]></category>
		<category><![CDATA[C/C++]]></category>
		<category><![CDATA[Programlama Dilleri]]></category>
		<category><![CDATA[Veri Sıkıştırma (Data Compression)]]></category>
		<category><![CDATA[algoritma analizi (teory of algorithms)]]></category>
		<category><![CDATA[veri yapıları]]></category>

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

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2009/11/24/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>
]]></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>1</slash:comments>
		</item>
		<item>
		<title>Base64</title>
		<link>http://www.bilgisayarkavramlari.com/2009/10/22/base64/</link>
		<comments>http://www.bilgisayarkavramlari.com/2009/10/22/base64/#comments</comments>
		<pubDate>Thu, 22 Oct 2009 16:16:53 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Bilgisayar Kavramları]]></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/2009/10/22/base64/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Veri güveliği konusunda kullanılan kodlama (encoding) algoritmalarından birisidir. Basitçe bir bilginin farklı semboller ile gösterilmesi işlemidir. Bu semboller alfabedeki harflerin büyük/küçük sıralanması ve sayılardan oluşur. Bir base64 sisteminin kullandığı semboller aşağıda verilmiştir: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/ Yukarıda toplam 64 sembol bulunmaktadır. Dolayısıyla her sayıya bir karşılık gelir. Örneğin 0 sayısal değeri için A [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Veri güveliği konusunda kullanılan kodlama (encoding) algoritmalarından birisidir. Basitçe bir bilginin farklı semboller ile gösterilmesi işlemidir. Bu semboller alfabedeki harflerin büyük/küçük sıralanması ve sayılardan oluşur. Bir base64 sisteminin kullandığı semboller aşağıda verilmiştir:</p>
<p>ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/</p>
<p>Yukarıda toplam 64 sembol bulunmaktadır. Dolayısıyla her sayıya bir karşılık gelir. Örneğin 0 sayısal değeri için A , 63 sayısal değeri için / sembolü gibi.</p>
<p>Bir metnin base64&#8242;e çevrilmesi işlemi ise <a href="http://www.bilgisayarkavramlari.com/2008/10/17/sayi-tabanlari-number-bases/">ikilik tabanda</a><br />
<a href="http://www.bilgisayarkavramlari.com/2009/09/04/ascii-tablosu/">ascii kodları</a> ile metni kodlayıp ardından metni base64 için tamamlamak ve yukarıdaki sembollerle ifade etmektir. Bu işlemin nasıl yapıldığını adım adım inceleyelim.</p>
<p>Base64 ile kodlamak istediğimiz mesajımız &#8220;www.bilgisayarkavramlari.com&#8221; olsun. Bu mesajdaki her harfin karşılığı olan ASCII kodunu bulalım:</p>
<p>119 119 119 46 98 105 108 103 105 115 97 121 97 114 107 97 118 114 97 109 108 97 114 105 46 99 111 109</p>
<p>Yukarıdaki dizilimde her sembol için karşılığı olan ASCII kodu yazılmıştır. Buna göre örneğin mesajımızın ilk harfi olan w için 119 veya mesajın son harfi olan m için 109 sayısı tablodan bulunmuştur.</p>
<p>Yukarıdaki çevrilmiş ve <a href="http://www.bilgisayarkavramlari.com/2008/10/17/sayi-tabanlari-number-bases/">onluk tabandaki sayıları ikilik tabana çevirirsek</a>:</p>
<p>0111 0111 0111 0111 0111 0111 0010 1110 0110 0010 0110 1001 0110 1100 0110 0111 0110 1001 0111 0011 0110 0001 0111 1001 0110 0001 0111 0010 0110 1011 0110 0001 0111 0110 0111 0010 0110 0001 0110 1101 0110 1100 0110 0001 0111 0010 0110 1001 0010 1110 0110 0011 0110 1111 0110 1101</p>
<p>Mesajını buluruz. Yukarıdaki mesajda her 8 bit (ikil) <a href="http://www.bilgisayarkavramlari.com/2009/09/04/ascii-tablosu/">ASCII tablosunda</a> bir sayıya karşılık gelir. Örneğin mesajın ilk 8 biti (ikili) 0111 0111, oluk tabana çevrilirse 119 yapar ve bu değer tablodaki w sembolüne karşılık gelir. Yukarıda toplam 224 <a href="http://www.bilgisayarkavramlari.com/2007/11/24/bit-ikil/">bit (ikil) bulunmaktadır</a>. Çünkü mesaj uzunluğu 28 karakterdir ve her karakter için 8 bit kullanılmıştır.</p>
<p>Yukarıdaki mesajın base64 ile kodlanması sırasında mesajın eksik bulunan bitlerinin tamamlanması gerekir. Buradaki hesap basitçe mesajın boyutunun 24&#8242;ün katı olana kadar 8&#8242;er bitlik 0 (sıfırların) eklenmesidir.</p>
<p>Bu yazı şadi evren şeker tarafından yazılmış ve bilgisayarkavramlari.com sitesinde yayınlanmıştır. Bu içeriğin kopyalanması veya farklı bir sitede yayınlanması hırsızlıktır ve telif hakları yasası gereği suçtur.</p>
<p>Mesajda toplam 224 bit bulunuyor ve 224, 24&#8242;e tam olarak bölünemiyor. Bu durumda sayımız 24&#8242;e tam bölünebilmesi için 240&#8242;a tamamlanması gerekir. Sonuçta mesajımız aşağıdaki şekilde olacaktır:</p>
<p>0111 0111 0111 0111 0111 0111 0010 1110 0110 0010 0110 1001 0110 1100 0110 0111 0110 1001 0111 0011 0110 0001 0111 1001 0110 0001 0111 0010 0110 1011 0110 0001 0111 0110 0111 0010 0110 0001 0110 1101 0110 1100 0110 0001 0111 0010 0110 1001 0010 1110 0110 0011 0110 1111 0110 1101 0000 0000 0000 0000</p>
<p>Görüldüğü üzere sonuna 16 adet 0 eklenmiştir. Şimdi artık mesajımız base64 kodlamasında işlenmeye hazırdır. Mesajı bu sefer 6 bitlik parçalara bölüp onluk sisteme çevirebiliriz. Buradaki amaç bizim kodlamamızdaki 64 sembolden hangisine karşılık geldiğini bulmaktır.</p>
<p>Örneğin mesajın ilk 6 biti 011101 &#8216;dir ve onluk sistemde 29 yapar. Bu bizim kodlamamızda yukarıda verilen sembollerden 29. Sembol ile gösterileceğini ifade eder. Bu sembol A harfi 0 olarak kabul edilip sayılırsa d harfi olarak bulunur. Benzer şekilde bir sonraki 6lık grup alınırsa 110111 sayısını onluk tabanda 55 sayısı bulunur ve bizim kodlamamızda 55 sayısı ile 3 sembolü gösterilmektedir.</p>
<p>Yukarıdaki bu işlemi bütün mesaj için uygularsak sonuçta www.bilgisyarkavramlari.com mesajı için aşağıdaki sonuç bulunur:</p>
<p>d3d3LmJpbGdpc2F5YXJrYXZyYW1sYXJpLmNvbQ==</p>
<p>Yukarıdaki mesaj tam bir base64 çevrimidir. Burada mesajın sonunda bulunan == sembollerinin bizim kodlamamızda yer almadığına dikkat ediniz. Bu semboller mesajın ayrılmasını sağlayan son eklerdir.</p>
<p>Base64 örneğin MIME protokolünün içerisinde gönderilen mesajlara uygulanan bir kodlamadır.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2009/10/22/base64/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mesaj Özetleri (Message Digests)</title>
		<link>http://www.bilgisayarkavramlari.com/2009/08/16/mesaj-ozetleri-message-digests/</link>
		<comments>http://www.bilgisayarkavramlari.com/2009/08/16/mesaj-ozetleri-message-digests/#comments</comments>
		<pubDate>Sun, 16 Aug 2009 11:31:10 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Veri Güvenliği(Cryptography)]]></category>
		<category><![CDATA[Veri Sıkıştırma (Data Compression)]]></category>
		<category><![CDATA[Veri Tabanı (Database)]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2009/08/16/mesaj-ozetleri-message-digests/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Özellikle veri güvenliği ve veri bütünlüğü (data integrity) konularında kullanılan mesaj özetleri aslında birer özetleme fonksiyonudurlar (hashing functions). Buna göre büyük bir veriden nispeten daha küçük bir özet üretilir ve bu özetten orijinal veriye geri dönülemeyeceği varsayılır. Mesaj özetlerinden en meşhurları MD5 ve SHA-1 algoritmalarıdır. MD5 : Message digest (mesaj [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Özellikle veri güvenliği <a href="http://www.bilgisayarkavramlari.com/2009/07/15/veri-butunlugu-data-integrity/">ve veri bütünlüğü (data integrity)</a> konularında kullanılan mesaj özetleri aslında birer <a href="http://www.bilgisayarkavramlari.com/2008/05/26/ozetleme-fonksiyonlari-hash-function/">özetleme fonksiyonudurlar (hashing functions).</a> Buna göre büyük bir veriden nispeten daha küçük bir özet üretilir ve bu özetten orijinal veriye geri dönülemeyeceği varsayılır.</p>
<p>Mesaj özetlerinden en meşhurları <a href="http://www.bilgisayarkavramlari.com/2008/04/30/md5-message-digest-mesaj-ozet/">MD5</a> ve SHA-1 algoritmalarıdır.</p>
<p>MD5 : Message digest (mesaj özeti) kelimelerinin kısaltmasıdır ve 5. Versiyonunu ifade etmektedir.</p>
<p>SHA-1 : Secure Hashing Algorithm (güvenli özetleme algoritması) ise 1. Versiyonudur ve daha önceki 0. Versiyonuna göre daha güvenlidir. Çoğu kaynakta sadece SHA olarak da geçmektedir.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2009/08/16/mesaj-ozetleri-message-digests/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dinamik Markof Kodlaması ile Sıkıştırma (Data Compression Using Dynamic Markov Coding)</title>
		<link>http://www.bilgisayarkavramlari.com/2009/06/17/dinamik-markof-kodlamasi-ile-sikistirma-comression-by-dynamic-markov-coding/</link>
		<comments>http://www.bilgisayarkavramlari.com/2009/06/17/dinamik-markof-kodlamasi-ile-sikistirma-comression-by-dynamic-markov-coding/#comments</comments>
		<pubDate>Wed, 17 Jun 2009 11:53: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/?p=2550</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Not: Bu yazı Dr. Banu Diri&#8217;nin veri sıkıştırma dersi sırasında hazırladığım rapordan alıntıdır. Kendisine buradan teşekkürü bir borç bilirim. Bu yazının amacı, Dinamik Markov Coding kullanılarak sıkıştırma yöntemini incelemektir. Bu yazı, &#8220;Data Compression Using Dynamic Markov Modelling&#8221; ve G. V. CORMACK AND R. N. S. HORSPOOL tarafından yazılmış olan makalenin [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER<br />
Not: Bu yazı Dr. Banu Diri&#8217;nin veri sıkıştırma dersi sırasında hazırladığım rapordan alıntıdır. Kendisine buradan teşekkürü bir borç bilirim.</p>
<p>Bu yazının amacı, Dinamik Markov Coding kullanılarak sıkıştırma yöntemini incelemektir. Bu yazı, &#8220;Data Compression Using Dynamic Markov Modelling&#8221; ve G. V. CORMACK AND R. N. S. HORSPOOL tarafından yazılmış olan makalenin incelenmesini içermektedir.</p>
<p class="shutter">İçerik<br />
<a href="#1">1. Giriş</a><br />
<a href="#2">2. Markof zincirinin dinamik zamanda oluşturulması</a><br />
<a href="#3">3. Sıkıştırma Örneği</a><br />
<a href="#4">4. Sonuç</a><br />
<a href="#5">5. Referanslar</a></p>
<p>Dynamic Markov Coding yeni bir sıkıştırma algoritması olmayıp, mevcut sıkıştırma algoritmalarının üzerine getirilen yeni bir yaklaşımdır. Yaklaşım binary kodlama üzerine kurulu olup, u yaklaşımda başarı veri sıkıştırması sırasında gelen .bitlerin tahminine ve değerlendirmesine dayanmaktadır. <a href="http://www.bilgisayarkavramlari.com/2009/06/17/markof-modeli-markov-model/">Markov chain modelinin</a> oluşturulması ve bu modelin kendisini her gelen yeni bite göre güncellemesi bu çalışmanın temelini oluşturmaktadır. Ayrıca Dinamik Markov Coding için arithmetic coding yöntemlerinden birisi olan gauzzo yöntemi de bu çalışmada incelenmiştir.</p>
<p><strong><a name="1"></a>1. Giriş</strong></p>
<p>Bilindiği üzere günümüzde oldukça fazla sayıda sıkıştırma algoritması bulunmaktadır. Bu algoritmaların daha verimli çalışması için yapılan çeşitli çalışmalardan birisi de istatistiksel bir modele dayanan Makrov Kodlamasıdır. İlk olarak rus matematikçi Andrey Markov tarafından geliştirilen bu yöntem stochastic process üzerine kurulmuştur. Bu yazıda stochastic process ve markov chain konularına giriş yaptıktan sonra markov coding ile verinin ifadesine ve bu ifade biçiminin nasıl dinamik olabileceği incelenecektir. Son olarak bu ifade biçiminin gauzzo yöntemi ile sıkıştırılması anlatılacaktır. .</p>
<p><strong><a name="2"></a>2. Markov Chainin Dinamik zamanda oluşutrulması</strong></p>
<p>Veri sıkıştırmasında, adaptive veya adaptive olmayan yöntemler kullanılabilmektedir. Dynamic Markov Coding, adaptive bir yöntem önermektedir. Buna göre verinin gelmesi durumuna göre markov modelimizi güncellememiz gerekmektedir.</p>
<p>Buna göre grafik boş iken başlanır ve aşağıdaki şekillerde veriler güncellenir:</p>
<p>§  Prob {sayı = 0 | bulunulan node = A} = <em>n0 / (n0 </em>+ <em>n</em>1)</p>
<p>§  Prob {sayı = 1 | bulunulan node = A} = <em>n</em>1 <em>/ (n0 </em>+ <em>n</em>1)</p>
<p>§  Prob {sayı = 0 | bulunulan node = A}</p>
<p>= <em>(n0 </em>+ <em>c) / (n0 </em>+ <em>n</em>1 <em>+ 2c)</em></p>
<p>§  Prob {sayı = 1 | bulunulan node = A}</p>
<p>= (<em>n</em>1 <em>+ c) / (n0 + n</em>1 <em>+ 2c)</em></p>
<p>buradaki n1: 1lerin sayısı, n2: 2lerin sayısı ve c, 0 dan büyük herhangi bir sabit sayıyı ifade etmektedir. Gelen 0 ve 1 lerin sayısı büyüdükçe, c değeri anlamını yitirmektedir.</p>
<p>Örnekte yukarıda verilen formülün kullanılması durumunda markov modeli için istatistiksel değerleri içeren kolların inşa edilmesi mümkün olmaktadır.</p>
<p>Grafik inşası sırasında karşılaşılan bir diğer sorun, grafiğin önceki değeri unutması ve bulunan bir duruma nereden geldiğinin anlaşılmasını engelleyen karmaşa ihtimalleridir. Bu durum aşağıdaki şekilde gösterilmiştir:</p>
<p><img class="alignnone size-full wp-image-2551" title="makale_html_md6c8d74" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/06/makale_html_md6c8d74.gif" alt="makale_html_md6c8d74" width="276" height="150" /></p>
<p>Yukarıdaki grafik, inşa edilmiş olan markov chain model içerisinde bir yada daha çok yerde görülebilen bir durumdur. Buna göre C durumundan D ve E durumlarına belirli (deterministic) bir şekilde gidilebilmektedir, yani C durumundayken 0 ve 1 gelme olasılıkları belirlenmiştir. Ayrıca C durumuna 0 veya 1 ile gelebileceğimizi bilmekteyiz. Ancak C durumuna 0 ile mi 1 ile mi gelindiği tam olarak bilinmemektedir.</p>
<p>Stochastic processler hatırlanacak olursa, bir sonraki durum önceki durumlara bağlı olmaktadır <a href="http://www.bilgisayarkavramlari.com/2009/06/17/markof-modeli-markov-model/">(hava durumunu hatırlayınız)</a> dolayısıyla C durumuna hangi sayı ile gelindiği bilinmelidir. Bu durumda önerilen çözüm clonlama yöntemidir.</p>
<p><img class="alignnone size-full wp-image-2552" title="makale_html_m3678c333" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/06/makale_html_m3678c333.png" alt="makale_html_m3678c333" width="392" height="177" /></p>
<p>Yukarıdaki grafik, belirsiz C durumunun klonlanmış halini göstermektedir. Buna göre A durumundan C durumuna 0 ile gelinebilmekteyken artık B durumundan C durumuna gidiş bulunmamakta bunun yerine yeni klonlanmış olan C&#8217; durumuna gidilebilmektedir. Dolayısıyla artık C durumuna geliniyorsa bunun 0 ile, C&#8217; durumuna geliniyorsa bunun 1 ile olduğu bilinebilmektedir. Ve D durumuna gelinme ihtimali ancak 00 veya 10 olurken E durumu 01 veya 11 ihtimallerine cevap vermektedir.</p>
<p>Klonlama özelliği ilk başlarda oldukça faydalı görülmesine karşılık, zaman içerisinde hafıza sorunları ve kompleksliğin artması gibi sebeplerle durdurulmalıdır. Bu işlemin ne zaman durdurulacağı ise iki ihtimale bağlanmıştır bunlar:</p>
<p>Bir <a href="http://www.bilgisayarkavramlari.com/2008/08/01/dugum-node/">node (düğüm)</a> kendisine mevcut noddan gitmek için kullanılan Transation sayısı eşik değeri aştığında ve</p>
<p>Mevcut noddan kendisine gitmek için kullanılan bütün Transitionların sayısı eşik değerini aştığında clonelanır</p>
<p>(bkz. Kirchoff Kanunu)</p>
<p>Bu modelde bir diğer problem ise başlangıçta kullanılacak olan markov chain modeldir. Bunun için önerilen boş bir grafik ile başlamak veya mevcut verinin en küçük yapıtaşını tutan bir grafik ile başlamaktır. Örneğin</p>
<p><img class="alignnone size-full wp-image-2553" title="makale_html_m4adf0209" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/06/makale_html_m4adf0209.png" alt="makale_html_m4adf0209" width="336" height="48" /></p>
<p>Yukarıdaki grafik 1 veya 0 ile dolaşılabilen tek bir düğüm içermektedir. Şayet veri modeli, 0 ve 1lerden oluşuyorsa kullanılabilecek en basit model yukarıdaki şekildedir.</p>
<p>Benzer şekilde ASCII kodlarından oluşan ve 256 sembolü gösteren bir veri modeli oluşturulacaksa bunun için 8 seviyeli bir düğüm yapısı kullanılabilir</p>
<p><img class="alignnone size-full wp-image-2554" title="makale_html_m50fb99ca" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/06/makale_html_m50fb99ca.gif" alt="makale_html_m50fb99ca" width="264" height="193" /></p>
<p>Yukarıdaki grafik, fiziksel sebeplerden dolayı 3 seviyeli bir ağacı göstermektedir. 8 seviyeli olan ağaç da benzer şekilde çizilebilir.</p>
<p><strong><a name="3"></a>3. Sıkıştırma örneği</strong></p>
<p>Yukarıdaki bölümlerde anlatılan modeller bir sıkıştırma metodolojisi olan dinamik markov modelin inşasını ve adaptasyonunu içermektedir. Bu model basit bir şekilde herhangi bir aritmetik sıkıştırma yöntemine uygulanabilir örnek model olarak gauzzo sıkıştırması ele alınacak olursa, sıkıştırma yönteminin karakteristiği aşağıdaki şekilde olacaktır:</p>
<p>Guazzo katsayılarının hesaplanmasında sayı düzeni bozulmadan ondalıklı sayıya çevrilir örneğin 01101 sayısı è 0.01101 olur ve oranı (13/16) olur.</p>
<p>Dolayısıyla sayı domaini 0 ile 0.11111&#8230; sayıları arası sayılardan oluşmaktadır. Ve bu sayılar arasında binary dallanma mümkündür örneğin ilk değerin 0 olmasına göre 0.011.. olurken 1 olmasına göre 0.111&#8230; olmaktadır</p>
<p>Bu yöntemde oranlara göre markov chain içinde hareket mümkün olup herhangi bir arithmetik kodlamada kullanılan alçak ve yüksek değerlere eşitlenebilmektedir.</p>
<p><strong><a name="4"></a>4. Sonuç</strong></p>
<p>Bu yazıda mevcut sıkıştırma yöntemlerine getirilen bir yenilik olarak dinamik markov chain kodlaması incelenmiştir başarı oranı aşağıdaki grafikte verilmiştir:</p>
<p><img class="alignnone size-full wp-image-2555" title="makale_html_m7516237a" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/06/makale_html_m7516237a.gif" alt="makale_html_m7516237a" width="282" height="231" /></p>
<p>bu yöntem yeni bir sıkıştırma algoritması olmayıp mevcut algoritmalara (tercihen aritmetik kodlama) getirilmiş yeni bir yaklaşımdır. Ve verinin binary olarak tutulmasını ve veri akışına göre istatistiksel olarak modellenerek markov chain ile gösterilmesini önermektedir.</p>
<p><strong><a name="5"></a>5. Referanslar</strong></p>
<p>Vector Compaction Using Dynamic Markov Models</p>
<p>Radu Marculescu, Diana Marculescu, Massoud Pedram</p>
<p>Data Compression Using Dynamic Markov Modelling</p>
<p><em>G. V. CORMACK* AND R. N. S. HORSPOOL*</em></p>
<p><em>Using Markov Chains for Link Prediction in Adaptive Web Sites</em></p>
<p><em>Jianhan Zhu, Jun Hong, and John G. Hughes</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2009/06/17/dinamik-markof-kodlamasi-ile-sikistirma-comression-by-dynamic-markov-coding/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Atomluluk (Atomicity)</title>
		<link>http://www.bilgisayarkavramlari.com/2009/03/30/atomluluk-atomicity/</link>
		<comments>http://www.bilgisayarkavramlari.com/2009/03/30/atomluluk-atomicity/#comments</comments>
		<pubDate>Mon, 30 Mar 2009 13:03:53 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Automata (otomatlar, özdevinirler)]]></category>
		<category><![CDATA[Bilgisayar Kavramları]]></category>
		<category><![CDATA[Derleyiciler]]></category>
		<category><![CDATA[Donanım ( Hardware )]]></category>
		<category><![CDATA[Dosya Organizasyonu (File Organisation)]]></category>
		<category><![CDATA[JAVA]]></category>
		<category><![CDATA[Mantık Devreleri (Logic Circuits)]]></category>
		<category><![CDATA[Nesne Yönelimli Programlama]]></category>
		<category><![CDATA[Network(Ağ)]]></category>
		<category><![CDATA[Programlama Dilleri]]></category>
		<category><![CDATA[Sistem Programlama (System Programming)]]></category>
		<category><![CDATA[Temel Bilimler]]></category>
		<category><![CDATA[Veri Güvenliği(Cryptography)]]></category>
		<category><![CDATA[Veri Sıkıştırma (Data Compression)]]></category>
		<category><![CDATA[Veri Tabanı (Database)]]></category>
		<category><![CDATA[Yazılım Mühendisliği (Software Engineering)]]></category>
		<category><![CDATA[algoritma analizi (teory of algorithms)]]></category>
		<category><![CDATA[bilgisayar felsefesi]]></category>
		<category><![CDATA[işletim sistemleri]]></category>
		<category><![CDATA[veri yapıları]]></category>
		<category><![CDATA[yapay zeka (artificial intelligence)]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2009/03/30/atomluluk-atomicity/</guid>
		<description><![CDATA[Yazan: Şadi Evren ŞEKER Latince bölünemez anlamına gelen atom kökünden üretilen bu kelime, bilgisayar bilimlerinde çeşitli alanlarda bir bilginin veya bir varlığın bölünemediğini ifade eder. Örneğin programlama dillerinde bir dilin atomic (bölünemez) en küçük üyesi bu anlama gelmektedir. Mesela C dilinde her satır (statement) atomic (bölünemez) bir varlıktır. Benzer şekilde bir verinin bölünemezliğini ifade etmek [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan: Şadi Evren ŞEKER</p>
<p><!--[if gte mso 9]><xml> <w:WordDocument> <w:View>Normal</w:View> <w:Zoom>0</w:Zoom> <w:TrackMoves /> <w:TrackFormatting /> <w:HyphenationZone>21</w:HyphenationZone> <w:PunctuationKerning /> <w:ValidateAgainstSchemas /> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:DoNotPromoteQF /> <w:LidThemeOther>TR</w:LidThemeOther> <w:LidThemeAsian>X-NONE</w:LidThemeAsian> <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript> <w:Compatibility> <w:BreakWrappedTables /> <w:SnapToGridInCell /> <w:WrapTextWithPunct /> <w:UseAsianBreakRules /> <w:DontGrowAutofit /> <w:SplitPgBreakAndParaMark /> <w:DontVertAlignCellWithSp /> <w:DontBreakConstrainedForcedTables /> <w:DontVertAlignInTxbx /> <w:Word11KerningPairs /> <w:CachedColBalance /> </w:Compatibility> <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> <m:mathPr> <m:mathFont m:val="Cambria Math" /> <m:brkBin m:val="before" /> <m:brkBinSub m:val="&#45;-" /> <m:smallFrac m:val="off" /> <m:dispDef /> <m:lMargin m:val="0" /> <m:rMargin m:val="0" /> <m:defJc m:val="centerGroup" /> <m:wrapIndent m:val="1440" /> <m:intLim m:val="subSup" /> <m:naryLim m:val="undOvr" /> </m:mathPr></w:WordDocument> </xml><![endif]--><!--[if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"   DefSemiHidden="true" DefQFormat="false" DefPriority="99"   LatentStyleCount="267"> <w:LsdException Locked="false" Priority="0" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Normal" /> <w:LsdException Locked="false" Priority="9" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="heading 1" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9" /> <w:LsdException Locked="false" Priority="39" Name="toc 1" /> <w:LsdException Locked="false" Priority="39" Name="toc 2" /> <w:LsdException Locked="false" Priority="39" Name="toc 3" /> <w:LsdException Locked="false" Priority="39" Name="toc 4" /> <w:LsdException Locked="false" Priority="39" Name="toc 5" /> <w:LsdException Locked="false" Priority="39" Name="toc 6" /> <w:LsdException Locked="false" Priority="39" Name="toc 7" /> <w:LsdException Locked="false" Priority="39" Name="toc 8" /> <w:LsdException Locked="false" Priority="39" Name="toc 9" /> <w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption" /> <w:LsdException Locked="false" Priority="10" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Title" /> <w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font" /> <w:LsdException Locked="false" Priority="11" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtitle" /> <w:LsdException Locked="false" Priority="22" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Strong" /> <w:LsdException Locked="false" Priority="20" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Emphasis" /> <w:LsdException Locked="false" Priority="59" SemiHidden="false"    UnhideWhenUsed="false" Name="Table Grid" /> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text" /> <w:LsdException Locked="false" Priority="1" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="No Spacing" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 1" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 1" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 1" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 1" /> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision" /> <w:LsdException Locked="false" Priority="34" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="List Paragraph" /> <w:LsdException Locked="false" Priority="29" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Quote" /> <w:LsdException Locked="false" Priority="30" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Quote" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 1" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 1" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 1" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 1" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 1" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 2" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 2" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 2" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 2" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 2" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 2" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 2" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 2" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 2" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 3" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 3" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 3" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 3" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 3" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 3" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 3" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 3" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 3" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 4" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 4" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 4" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 4" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 4" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 4" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 4" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 4" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 4" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 5" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 5" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 5" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 5" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 5" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 5" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 5" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 5" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 5" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 6" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 6" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 6" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 6" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 6" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 6" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 6" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 6" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 6" /> <w:LsdException Locked="false" Priority="19" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis" /> <w:LsdException Locked="false" Priority="21" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis" /> <w:LsdException Locked="false" Priority="31" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference" /> <w:LsdException Locked="false" Priority="32" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Reference" /> <w:LsdException Locked="false" Priority="33" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Book Title" /> <w:LsdException Locked="false" Priority="37" Name="Bibliography" /> <w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading" /> </w:LatentStyles> </xml><![endif]--> <!--[if gte mso 10]><br />
<mce:style><!   /* Style Definitions */  table.MsoNormalTable 	{mso-style-name:"Table Normal"; 	mso-tstyle-rowband-size:0; 	mso-tstyle-colband-size:0; 	mso-style-noshow:yes; 	mso-style-priority:99; 	mso-style-qformat:yes; 	mso-style-parent:""; 	mso-padding-alt:0cm 5.4pt 0cm 5.4pt; 	mso-para-margin-top:0cm; 	mso-para-margin-right:0cm; 	mso-para-margin-bottom:10.0pt; 	mso-para-margin-left:0cm; 	line-height:115%; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Calibri","sans-serif"; 	mso-ascii-font-family:Calibri; 	mso-ascii-theme-font:minor-latin; 	mso-fareast-font-family:"Times New Roman"; 	mso-fareast-theme-font:minor-fareast; 	mso-hansi-font-family:Calibri; 	mso-hansi-theme-font:minor-latin;} --></p>
<p><!--[endif]--></p>
<p class="MsoNormal">Latince bölünemez anlamına gelen atom kökünden üretilen bu kelime, bilgisayar bilimlerinde çeşitli alanlarda bir bilginin veya bir varlığın bölünemediğini ifade eder.</p>
<p class="MsoNormal">Örneğin programlama dillerinde bir dilin atomic (bölünemez) en küçük üyesi bu anlama gelmektedir. Mesela C dilinde her satır (statement) atomic (bölünemez) bir varlıktır.</p>
<p class="MsoNormal">Benzer şekilde bir verinin bölünemezliğini ifade etmek için de veri tabanı, veri güvenliği veya veri iletimi konularında kullanılabilir.</p>
<p class="MsoNormal">Örneğin veri tabanında bir işlemin (transaction) tamamlanmasının bölünemez olması gerekir. Yani basit bir örnekle bir para transferi bir hesabın değerinin artması ve diğer hesabın değerinin azalmasıdır (havale yapılan kaynak hesaptan havale yapılan hedef hesaba doğru paranın yer değiştirmesi) bu sıradaki işlemlerin bölünmeden tamamlanması (atomic olması) gerekir ve bir hesaptan para eksildikten sonra, diğer hesapa para eklenmeden araya başka işlem giremez.</p>
<p class="MsoNormal">Benzer şekilde işletim sistemi tasarımı, paralel programlama gibi konularda da bir işlemin atomic olması araya başka işlemlerin girmemesi anlamına gelir.</p>
<p class="MsoNormal">Örneğin sistem tasarımında kullanılan check and set fonksiyonu önce bir değişkeni kontrol edip sonra değerini değiştirmektedir. Bir değişkenin değeri kontrol edildikten sonra içerisine değer atanmadan farklı işlemler araya girerse bu sırada problem yaşanması mümkündür. Pekçok işlemci tasarımında buna benzer fonksiyonlar sunulmaktadır.</p>
<p class="MsoNormal">Genel olarak bölünemezlik (atomicity) geliştirilen ortamda daha düşük seviyeli kontroller ile sağlanır. Örneğin işletim sistemlerinde kullanılan<a href="http://www.bilgisayarkavramlari.com/2009/03/30/semafor-semaphore-flama-isaret/"> semafor’lar (semaphores)</a>, kilitler (locks), koşullu değişkenler (conditional variables) ve monitörler (monitors) bunlar örnektir ve işletim sisteminde bir işlemin yapılması öncesinde bölünmezlik sağlayabilirler.</p>
<p class="MsoNormal">Kullanılan ortama göre farklı yöntemlerle benzer bölünmezlikler geliştirilebilir. Örneğin veritabanı programlama sırasında koşul (condition) veya kilit (lock) kullanımı bölünmezliği sağlayabilir.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2009/03/30/atomluluk-atomicity/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Huffman Kodlaması (Huffman Encoding)</title>
		<link>http://www.bilgisayarkavramlari.com/2009/02/25/huffman-kodlamasi-huffman-encoding/</link>
		<comments>http://www.bilgisayarkavramlari.com/2009/02/25/huffman-kodlamasi-huffman-encoding/#comments</comments>
		<pubDate>Wed, 25 Feb 2009 17:47:26 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Veri Sıkıştırma (Data Compression)]]></category>
		<category><![CDATA[veri yapıları]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/?p=1697</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Bilgisayar bilimlerinde veri sıkıştırmak için kullanılan bir kodlama yöntemidir. Kayıpsız (lossless) olarak veriyir sıkıştırıp tekrar açmak için kullanılır. Huffman kodlamasının en büyük avantajlarından birisi kullanılan karakterlerin frekanslarına göre bir kodlama yapması ve bu sayede sık kullanılan karakterlerin daha az, nadir kullanılan karakterlerin ise daha fazla yer kaplamasını sağlamasıdır. Şayet bütün [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Bilgisayar bilimlerinde veri sıkıştırmak için kullanılan bir kodlama yöntemidir. Kayıpsız (lossless) olarak veriyir sıkıştırıp tekrar açmak için kullanılır. Huffman kodlamasının en büyük avantajlarından birisi kullanılan karakterlerin frekanslarına göre bir kodlama yapması ve bu sayede sık kullanılan karakterlerin daha az, nadir kullanılan karakterlerin ise daha fazla yer kaplamasını sağlamasıdır.</p>
<p>Şayet bütün karakterlerin dağılımı eşitse yani aynı oranda tekrarlanıyorsa, bu durumda Huffman kodlaması aslında blok sıkıştırma algoritması (örneğin ASCII kodlama) ile aynı başarıya sahiptir. Ancak bu teorik durumun gerçekleşmesi imkansız olduğu için her zaman daha başarılı sonuçlar verir.</p>
<p>Örneğin sadece 8 sembolden oluşan bir dilimiz olsun (Örneğin a,b,c,d,ef,g,h harflerinden oluşan bir dil düşünelim) Bu dili kodlamak için 3 bit yeterlidir (2<sup>3</sup>=8 olduğuna göre 8 farklı dili ikilik tabanda kodlayabiliriz)</p>
<p>Bu durumda örneğin harflerin değerlerini aşağıdaki şekilde oluşturabiliriz:</p>
<p>a 000</p>
<p>b 001</p>
<p>c 010</p>
<p>d 011</p>
<p>e 100</p>
<p>f 101</p>
<p>g 110</p>
<p>h 111</p>
<p>Her harf için farklı bir kodlama yapılan dilde örneğin &#8220;baba caddede gec&#8221; mesajını kodlayacak olursak:</p>
<p>001000001000 010000011011100011100 110100010</p>
<p>şeklinde bir sonuç elde ederiz. Görüldüğü üzere kodlama sonucunda harf sayısının üç misli kadar bit kullanılmak zorundadır (14 harf için 14&#215;3=52 bit gerekmektedir).</p>
<p>Huffman kodlaması ile bu mesajı sıkıştıracak olsaydık. Öncelikle harflerin mesajdaki sıklıklarını gösteren biraşağıdaki istatistiğin çıkarılması gerekirdi:<br />
a3<br />
b2<br />
c2<br />
d3<br />
e3<br />
f0<br />
g1<br />
h0</p>
<p>Yukarıda her harfin kullanılma sıklıkları sıralanmıştır. Bu istatistiksel veriye dayanarak bir ağaç oluşturulması gerekir.</p>
<p><a href="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/02/huffman.jpg"><img class="alignnone size-full wp-image-1698" title="huffman" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/02/huffman.jpg" alt="" width="165" height="121" /></a></p>
<p>Yukarıdaki ağaçta dikkat edilirse dilimizdeki harfler ve her harf düğümlerinin birleşim noktalarında ise o harflerin mesajdaki tekrar sayıları bulunmaktadır. Ayrıca istatistiksel olarak birbirine denk olan sıklıktaki düğümler aynı seviyede bulunmaktadır. Örneğin g+b = 3 sıklığa sahip ve d&#8217;de 3 sıklığa sahiptir. Bu durumda d ile g ve b&#8217;nin birleştiği düğüm aynı seviyede olmaktadır.</p>
<p>Yukarıdaki bu ağaca göre her harfi veren kodlama karşılığı çıkarılır. Bu çıkarma işlemi sırasında ağaçtaki her sağ kola hareket 1, her sol kola hareket 0 olarak okunur. Örneğin g harfinin değeri 010&#8242;dır çünkü kökteki 14 değerinin solunda (yani 0) 6 değerinin sağında (yani 1) ve 3 değerinin solundadır yani toplamda 010 değerine sahiptir.</p>
<p>Bu şekilde her harfin kodlama değeri aşağıda verilmiştir:</p>
<p>a 111</p>
<p>b 011</p>
<p>c 110</p>
<p>d 00</p>
<p>e 10</p>
<p>g 010</p>
<p>Yukarıdaki bu kodlamaya göre ilk mesajımızın yeni değeri :</p>
<p>011111011111 1101110000100010 01010110</p>
<p>Şeklinde bulunmuş olur. Dikkat edilirse bu mesajın boyutu 36 bittir ve ilk baştaki 52 bit uzunluğundan daha kısadır.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2009/02/25/huffman-kodlamasi-huffman-encoding/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
