<?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; Bilgisayar Kavramları</title>
	<atom:link href="http://www.bilgisayarkavramlari.com/category/bilgisayar-kavramlari/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.bilgisayarkavramlari.com</link>
	<description>www.bilgisayarkavramlari.com</description>
	<lastBuildDate>Sun, 29 Jan 2012 21:38:15 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Normalleştirme (Normalisation, Normalizasyon)</title>
		<link>http://www.bilgisayarkavramlari.com/2012/01/17/normallestirme-normalisation-normalizasyon/</link>
		<comments>http://www.bilgisayarkavramlari.com/2012/01/17/normallestirme-normalisation-normalizasyon/#comments</comments>
		<pubDate>Tue, 17 Jan 2012 17:15:30 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Bilgisayar Kavramları]]></category>
		<category><![CDATA[Veri Tabanı (Database)]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/?p=6142</guid>
		<description><![CDATA[Yazan: Şadi Evren ŞEKER Bu yazının amacı, site üzerinde daha önceden anlatılmış olan birinci normal form (1NF), ikinci normal form (2NF) ve üçüncü normal form (3NF) konularını kapsayan bir örnek çözmektir. Genel olarak çok sayıda sınav sorusunda normalleştirme için hayali bazı tablolar sunulur ve bu tabloların normalleştirilmesi (normalizasyonu) istenir. Örnek olarak aşağıdaki tabloyu ele alalım. [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan: Şadi Evren ŞEKER</p>
<p>Bu yazının amacı, site üzerinde daha önceden anlatılmış olan <a href="http://www.bilgisayarkavramlari.com/2009/01/16/ilk-normal-sekil-first-normal-form-1nf/">birinci normal form (1NF),</a><br />
<a href="http://www.bilgisayarkavramlari.com/2009/01/16/ikinci-normal-sekil-second-normal-form-2nf/">ikinci normal form (2NF)</a> ve <a href="http://www.bilgisayarkavramlari.com/2009/03/05/ucuncu-normal-sekil-third-normal-form-3nf/">üçüncü normal form (3NF)</a> konularını kapsayan bir örnek çözmektir.</p>
<p>Genel olarak çok sayıda sınav sorusunda normalleştirme için hayali bazı tablolar sunulur ve bu tabloların normalleştirilmesi (normalizasyonu) istenir.</p>
<p>Örnek olarak aşağıdaki tabloyu ele alalım.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/011712_1716_Normalletir1.png" alt="" /></p>
<p>Yukarıdaki tabloda görüldüğü üzere 4 adet kolon ve her kolonda çeşitli sayılar ile gösterilmiş değerler bulunmaktadır. Bu tablonun üzerinde normalleştirme yapmaya başlamadan önce bazı konuları açıklayalım.</p>
<p>Örneğin yukarıdaki tabloda bir <a href="http://www.bilgisayarkavramlari.com/2009/01/16/aday-anahtar-candidate-key/">aday anahtar (candidate key)</a> bulmamız istense ne yaparız?</p>
<p>Bir aday anahtar bulma işlemi için en kolay yol, tablonun birincil anahtarını (primary key) bulmaktan geçer. O halde sorumuzu öncelikle tablonun birincil anahtarını (primary key) bulmak üzere değiştirelim:</p>
<p>Yukarıdaki tabloda, satır bazlı olarak tekrar etmeyen bir kolon var mıdır?</p>
<p>Cevap : D kolonudur. Dikkat edilirse D kolonu, her satırda farklı bir değer almıştır. Demek ki tek bir kolonun birincil anahtar (primary key) olmasını istersek, D kolonunu seçmemiz yerinde olur.</p>
<p>Peki birden fazla kolon alınması durumunda hangi kolonları seçebiliriz?</p>
<p>Cevap: D kolonunun zaten her satırda tekrarsız olduğunu (unique) biliyoruz. Dolayısıyla D kolonu ile birlikte hangi kolon alınırsa alınsın bu kolonlar da tekrarsız (unique) olacaktır.</p>
<p>Ancak acaba D kolonunu almadan bir asil anahtar ( primary key) bulunabilir mi?</p>
<p>Cevap: Evet vardır. Örneğin (A,B) ikilisi de tablodaki her satırda tek başına tekrarsız (unique) olma özelliğindedir. Bir önceki cevabımızdan çıkardığımız üzere, (A,B) ikilisi ile birlikte alınacak diğer bir kolon da (örneğin C ) bu durumda birincil anahtar (primary key) olma özelliğini taşıyacaktır.</p>
<p>Yukarıdaki cevapların doğru olmasına karşılık, birincil anahtar (primary key) seçimi yapılırken en az sayıda kolonu içeren alternatifin seçilmesi yerinde olur. Bu anlamda, yukarıdaki anahtar ihtimallerinin hepsi birer <a href="http://www.bilgisayarkavramlari.com/2009/01/16/aday-anahtar-candidate-key/">aday anahtar (candidate key</a>) olarak değerlendirilebilir ancak birincil anahtar olarak D kolonun tek başına seçilmesi yerinde olur.</p>
<p>Gelelim bir diğer soruya:</p>
<p>Yukarıdaki tabloya, aşağıdaki şekilde ilave bir kolon eklediğimizi düşünelim:</p>
<div>
<table style="border-collapse: collapse;" border="0">
<colgroup>
<col style="width: 56px;" />
<col style="width: 57px;" />
<col style="width: 57px;" />
<col style="width: 57px;" />
<col style="width: 47px;" /></colgroup>
<tbody valign="top">
<tr style="background: #8064a2;">
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;"><span style="color: white;"><strong>A</strong></span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;"><span style="color: white;"><strong>B</strong></span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;"><span style="color: white;"><strong>C</strong></span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;"><span style="color: white;"><strong>D</strong></span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;"><span style="color: white;"><strong>E</strong></span></td>
</tr>
<tr style="background: #dfd8e8;">
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">X</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">3</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">Y</td>
</tr>
<tr style="background: #dfd8e8;">
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">4</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">Y</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">5</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">X</td>
</tr>
</tbody>
</table>
</div>
<p>&nbsp;</p>
<p>Yeni tablomuzda bulunan fonksiyonel bağlılıkları (functional dependency) çıkarmaya çalışalım:</p>
<p>Öncelikle, biliyoruz ki D kolonu birincil anahtardır (primary key) dolayısıyla zaten D kolonu bütün kolonların fonksiyonel olarak bağımlı olduğu bir kolondur ve aşağıdaki satırların tamamı doğrudur:</p>
<p>D <span style="font-family: Wingdings;">à</span> A , D <span style="font-family: Wingdings;">à</span>B , D<span style="font-family: Wingdings;">à</span> C , D<span style="font-family: Wingdings;">à</span> E</p>
<p>Ayrıca bir dipnot olarak, her kolonun kendisine fonksiyonel bağlı olduğunu söyleyebiliriz (self functional dependency), dolayısıyla D<span style="font-family: Wingdings;">à</span>D ifadesi de doğrudur ancak bu ifade, genelde veritabanı normalleştirmesinde bir anlam ifade etmediğinden göz ardı edilir.</p>
<p>Gelelim diğer fonksiyonel bağımlılıklara. Tabloda ikili üçlü ve dörtlü fonksiyonel bağlılıklar bulunabilir. Örneğin yukarıdaki sorularda (A,B) çiftinin de bir aday anahtar olduğundan bahsetmiştik. Bu durumda (A,B) <span style="font-family: Wingdings;">à</span> C, (A,B) <span style="font-family: Wingdings;">à</span> D , (A,B) <span style="font-family: Wingdings;">à</span> E ifadeleri de doğru olacaktır. Hatta D ile birlikte herhangi bir kolonun alınması da doğrudur. Örneğin (C,D) <span style="font-family: Wingdings;">à</span> A, (C,D) <span style="font-family: Wingdings;">à</span> B , (C,D) <span style="font-family: Wingdings;">à</span> E ifadeleri de doğrudur. Benzer şekilde D bir aday anahtar, birden fazla kolon birleşimini de fonksiyonel olarak ifade eder. Örneğin D <span style="font-family: Wingdings;">à</span> (A,B,C) veya D<span style="font-family: Wingdings;">à</span> (B,C,E) veya (A,B) <span style="font-family: Wingdings;">à</span> (C,D,E) ifadelerinin tamamı da doğru kabul edilebilir.</p>
<p>Ancak acaba tek kolon seviyesinde başka fonksiyonel bağımlılık bulunabilir mi? Bu sorunun cevabı aslında bir kolon değişirken diğer bir kolonun değerlerinin bu değişimi yansıtıp yansıtmadığıdır.</p>
<p>Örneğin yukarıdaki tabloda, B ve E kolonları birlikte değişmektedir. Diğer bir deyişle B(1) <span style="font-family: Wingdings;">à</span> E(X) ve B(2)<span style="font-family: Wingdings;">à</span> E(Y) bağlantısı bulunmaktadır. Yani B tablosundaki 1 ile E tablosundaki X ve B tablosundaki 2 ile E tablosundaki Y arasında bir birliktelik söz konusudur.</p>
<p>Bu anlamda, B<span style="font-family: Wingdings;">à</span>E ve E<span style="font-family: Wingdings;">à</span>B ifadeleri doğrudur. Ancak konunun daha iyi anlaşılması için tabloda ufak bir oynama yapalım:</p>
<div>
<table style="border-collapse: collapse;" border="0">
<colgroup>
<col style="width: 56px;" />
<col style="width: 57px;" />
<col style="width: 57px;" />
<col style="width: 57px;" />
<col style="width: 47px;" /></colgroup>
<tbody valign="top">
<tr style="background: #8064a2;">
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;"><span style="color: white;"><strong>A</strong></span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;"><span style="color: white;"><strong>B</strong></span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;"><span style="color: white;"><strong>C</strong></span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;"><span style="color: white;"><strong>D</strong></span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;"><span style="color: white;"><strong>E</strong></span></td>
</tr>
<tr style="background: #dfd8e8;">
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">X</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">3</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">Y</td>
</tr>
<tr style="background: #dfd8e8;">
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">4</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">Y</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">3</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">5</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">X</td>
</tr>
</tbody>
</table>
</div>
<p>&nbsp;</p>
<p>Yukarıdaki yeni tabloda, B kolonunun son satırı 3 olarak değiştirilmiştir. Bu durumda acaba B<span style="font-family: Wingdings;">à</span>E ve E<span style="font-family: Wingdings;">à</span>B ifadelerinden bahsedilebilir mi?</p>
<p>Tablonun yeni halinde E&#8217;deki her değişim, B&#8217;de bir değişimle karşılandığı için B<span style="font-family: Wingdings;">à</span>E ibaresi doğrudur ancak ne yazık ki E<span style="font-family: Wingdings;">à</span>B ibaresi kullanılamaz çünkü E, B&#8217;deki değişimleri göstermek için yetersizdir.</p>
<p>Ayrıca yukarıdaki tabloda, C kolonu, bütün diğer kolonlara fonksiyonel olarak bağımlıdır. Bunun sebebi C kolonunun sabit olması ve dolayısıyla bütün kolonlar tarafından doğası gereği fonksiyonel bağımlılığının ifade edilmesinin mümkün olmasıdır.</p>
<p>Gelelim tablomuzu normalleştirmeye. Tablomuzda bulunan fonksiyonel bağımlılıkları normalleştirme aşamasında kullanacağız. Normalleştirme işleminin amacını kısaca tabloda tekrar eden veri bırakmamak (veya en aza indirmek) olduğunu söyleyebiliriz.</p>
<p>Yukarıdaki son halini almış tablomuzda, B<span style="font-family: Wingdings;">à</span>E bağımlılığının bulunması bize aşağıdaki durumu oluşturma imkanı sağlar:</p>
<div>
<table style="border-collapse: collapse;" border="0">
<colgroup>
<col style="width: 318px;" />
<col style="width: 318px;" /></colgroup>
<tbody valign="top">
<tr style="height: 136px;">
<td style="padding-left: 7px; padding-right: 7px;">&nbsp;</p>
<div>
<table style="border-collapse: collapse;" border="0">
<colgroup>
<col style="width: 56px;" />
<col style="width: 57px;" />
<col style="width: 57px;" />
<col style="width: 57px;" /></colgroup>
<tbody valign="top">
<tr style="background: #8064a2;">
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;"><span style="color: white;"><strong>A</strong></span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;"><span style="color: white;"><strong>B</strong></span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;"><span style="color: white;"><strong>C</strong></span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;"><span style="color: white;"><strong>D</strong></span></td>
</tr>
<tr style="background: #dfd8e8;">
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">2</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">3</td>
</tr>
<tr style="background: #dfd8e8;">
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">4</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">3</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">5</td>
</tr>
</tbody>
</table>
</div>
<p>&nbsp;</p>
<p>Tablo K</td>
<td style="padding-left: 7px; padding-right: 7px;">
<div>
<table style="border-collapse: collapse;" border="0">
<colgroup>
<col style="width: 57px;" />
<col style="width: 47px;" /></colgroup>
<tbody valign="top">
<tr style="background: #8064a2;">
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;"><span style="color: white;"><strong>B</strong></span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;"><span style="color: white;"><strong>E</strong></span></td>
</tr>
<tr style="background: #dfd8e8;">
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">X</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">Y</td>
</tr>
<tr style="background: #dfd8e8;">
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">3</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">X</td>
</tr>
</tbody>
</table>
</div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Tablo M</td>
</tr>
</tbody>
</table>
</div>
<p>&nbsp;</p>
<p>Görüldüğü üzere, B kolonu ve E kolonu ayrı bir tabloda tutularak, E kolonunun B kolonuna fonksiyonel bağımlılığından yararlanılmıştır. Bu durumda E kolonunun orjinal tabloda yer almasına gerek yoktur. A,B,C veya D kolonları ile birlikte karşılığı olan E kolonunu bir kişinin sorgulamak istemesi halinde, iki tablo arasında bir <a href="http://www.bilgisayarkavramlari.com/2009/01/14/birlestirme-join/">birleştirme (join)</a> işlemi uygulanacak ve istenen veriye kolaylıkla ulaşılabilecektir. Bu durumda K tablosundaki B kolonu bir yabancı anahtar (foreign key) olmuş ve M tablosundaki B kolonu ise birincil anahtar (primary key) olmuştur denilebilir.</p>
<p>Gelelim C kolonuna. Bu kolon da herhangi bir kolona fonksiyonel bağımlı kabul edilebilir demiştik. O halde aşağıdaki şekilde bölünebilir:</p>
<div>
<table style="border-collapse: collapse;" border="0">
<colgroup>
<col style="width: 318px;" />
<col style="width: 318px;" /></colgroup>
<tbody valign="top">
<tr style="height: 136px;">
<td style="padding-left: 7px; padding-right: 7px;">&nbsp;</p>
<div>
<table style="border-collapse: collapse;" border="0">
<colgroup>
<col style="width: 56px;" />
<col style="width: 57px;" />
<col style="width: 57px;" /></colgroup>
<tbody valign="top">
<tr style="background: #8064a2;">
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;"><span style="color: white;"><strong>A</strong></span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;"><span style="color: white;"><strong>B</strong></span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;"><span style="color: white;"><strong>D</strong></span></td>
</tr>
<tr style="background: #dfd8e8;">
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">2</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">3</td>
</tr>
<tr style="background: #dfd8e8;">
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">4</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">3</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">5</td>
</tr>
</tbody>
</table>
</div>
<p>&nbsp;</p>
<p>Tablo K</td>
<td style="padding-left: 7px; padding-right: 7px;">
<div>
<table style="border-collapse: collapse;" border="0">
<colgroup>
<col style="width: 57px;" />
<col style="width: 47px;" />
<col style="width: 47px;" /></colgroup>
<tbody valign="top">
<tr style="background: #8064a2;">
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;"><span style="color: white;"><strong>B</strong></span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;"><span style="color: white;"><strong>C</strong></span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;"><span style="color: white;"><strong>E</strong></span></td>
</tr>
<tr style="background: #dfd8e8;">
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">X</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">Y</td>
</tr>
<tr style="background: #dfd8e8;">
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">3</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">X</td>
</tr>
</tbody>
</table>
</div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Tablo M</td>
</tr>
</tbody>
</table>
</div>
<p>&nbsp;</p>
<p>Yukarıdaki gösterim doğru olmasına karşılık, aşağıdaki gösterim de doğrudur:</p>
<div>
<table style="border-collapse: collapse;" border="0">
<colgroup>
<col style="width: 198px;" />
<col style="width: 198px;" />
<col style="width: 198px;" /></colgroup>
<tbody valign="top">
<tr style="height: 136px;">
<td style="padding-left: 7px; padding-right: 7px;">&nbsp;</p>
<div>
<table style="border-collapse: collapse;" border="0">
<colgroup>
<col style="width: 56px;" />
<col style="width: 57px;" />
<col style="width: 57px;" /></colgroup>
<tbody valign="top">
<tr style="background: #8064a2;">
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;"><span style="color: white;"><strong>A</strong></span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;"><span style="color: white;"><strong>B</strong></span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;"><span style="color: white;"><strong>D</strong></span></td>
</tr>
<tr style="background: #dfd8e8;">
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">2</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">3</td>
</tr>
<tr style="background: #dfd8e8;">
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">4</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">3</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">5</td>
</tr>
</tbody>
</table>
</div>
<p>&nbsp;</p>
<p>Tablo K</td>
<td style="padding-left: 7px; padding-right: 7px;">
<div>
<table style="border-collapse: collapse;" border="0">
<colgroup>
<col style="width: 57px;" />
<col style="width: 47px;" /></colgroup>
<tbody valign="top">
<tr style="background: #8064a2;">
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;"><span style="color: white;"><strong>B</strong></span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;"><span style="color: white;"><strong>E</strong></span></td>
</tr>
<tr style="background: #dfd8e8;">
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">X</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">Y</td>
</tr>
<tr style="background: #dfd8e8;">
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">3</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">X</td>
</tr>
</tbody>
</table>
</div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Tablo M</td>
<td style="padding-left: 7px; padding-right: 7px;">
<div>
<table style="border-collapse: collapse;" border="0">
<colgroup>
<col style="width: 56px;" />
<col style="width: 56px;" /></colgroup>
<tbody valign="top">
<tr style="background: #8064a2;">
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;"><span style="color: white;"><strong>A</strong></span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;"><span style="color: white;"><strong>C</strong></span></td>
</tr>
<tr style="background: #dfd8e8;">
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">1</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">1</td>
</tr>
</tbody>
</table>
</div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>Tablo N</strong></td>
</tr>
</tbody>
</table>
</div>
<p>&nbsp;</p>
<p>Veya diğer bir çözüm olarak aşağıdaki çözüm de doğrudur:</p>
<div>
<table style="border-collapse: collapse;" border="0">
<colgroup>
<col style="width: 198px;" />
<col style="width: 198px;" />
<col style="width: 198px;" /></colgroup>
<tbody valign="top">
<tr style="height: 136px;">
<td style="padding-left: 7px; padding-right: 7px;">&nbsp;</p>
<div>
<table style="border-collapse: collapse;" border="0">
<colgroup>
<col style="width: 56px;" />
<col style="width: 57px;" />
<col style="width: 57px;" /></colgroup>
<tbody valign="top">
<tr style="background: #8064a2;">
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;"><span style="color: white;"><strong>A</strong></span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;"><span style="color: white;"><strong>B</strong></span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;"><span style="color: white;"><strong>D</strong></span></td>
</tr>
<tr style="background: #dfd8e8;">
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">2</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">3</td>
</tr>
<tr style="background: #dfd8e8;">
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">4</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">3</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">5</td>
</tr>
</tbody>
</table>
</div>
<p>&nbsp;</p>
<p>Tablo K</td>
<td style="padding-left: 7px; padding-right: 7px;">
<div>
<table style="border-collapse: collapse;" border="0">
<colgroup>
<col style="width: 57px;" />
<col style="width: 47px;" /></colgroup>
<tbody valign="top">
<tr style="background: #8064a2;">
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;"><span style="color: white;"><strong>B</strong></span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;"><span style="color: white;"><strong>E</strong></span></td>
</tr>
<tr style="background: #dfd8e8;">
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">X</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">Y</td>
</tr>
<tr style="background: #dfd8e8;">
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">3</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">X</td>
</tr>
</tbody>
</table>
</div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Tablo M</td>
<td style="padding-left: 7px; padding-right: 7px;">
<div>
<table style="border-collapse: collapse;" border="0">
<colgroup>
<col style="width: 56px;" />
<col style="width: 56px;" /></colgroup>
<tbody valign="top">
<tr style="background: #8064a2;">
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;"><span style="color: white;"><strong>E</strong></span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;"><span style="color: white;"><strong>C</strong></span></td>
</tr>
<tr style="background: #dfd8e8;">
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">X</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">1</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">Y</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">1</td>
</tr>
</tbody>
</table>
</div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>Tablo P</strong></td>
</tr>
</tbody>
</table>
</div>
<p>&nbsp;</p>
<p>Yukarıdaki bütün çözümler doğrudur. Görüldüğü üzere, normalleştirme işleminde, tekrar eden satırlar elenmiş ve mümkün olduğunca tekrarsız satırların bırakılması amaçlanmıştır.</p>
<p>Burada bir soru, D<span style="font-family: Wingdings;">à</span>A özelliğini neden kullanmadık şeklinde sorulabilir. Yani D kolonu zaten A kolonunu veya B kolonunu belirlemektedir, o halde bu özelliği de kullanarak bir bölme işlemine daha gidilebilir mi?</p>
<p>Cevabı hem evet hem de hayırdır. Teorik olarak bahsedildiği gibi bir bölme olabilir. Ancak bu bölmenin hiçbir faydası olmaz. Aşağıda göstermeye çalışalım:</p>
<div>
<table style="border-collapse: collapse;" border="0">
<colgroup>
<col style="width: 198px;" />
<col style="width: 198px;" /></colgroup>
<tbody valign="top">
<tr style="height: 136px;">
<td style="padding-left: 7px; padding-right: 7px;">&nbsp;</p>
<div>
<table style="border-collapse: collapse;" border="0">
<colgroup>
<col style="width: 56px;" />
<col style="width: 57px;" /></colgroup>
<tbody valign="top">
<tr style="background: #8064a2;">
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;"><span style="color: white;"><strong>A</strong></span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;"><span style="color: white;"><strong>D</strong></span></td>
</tr>
<tr style="background: #dfd8e8;">
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">2</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">3</td>
</tr>
<tr style="background: #dfd8e8;">
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">4</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">5</td>
</tr>
</tbody>
</table>
</div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Tablo K</td>
<td style="padding-left: 7px; padding-right: 7px;">
<div>
<table style="border-collapse: collapse;" border="0">
<colgroup>
<col style="width: 57px;" />
<col style="width: 57px;" /></colgroup>
<tbody valign="top">
<tr style="background: #8064a2;">
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;"><span style="color: white;"><strong>B</strong></span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;"><span style="color: white;"><strong>D</strong></span></td>
</tr>
<tr style="background: #dfd8e8;">
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">2</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">3</td>
</tr>
<tr style="background: #dfd8e8;">
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">4</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">3</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">5</td>
</tr>
</tbody>
</table>
</div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Tablo Q</td>
</tr>
</tbody>
</table>
</div>
<p>&nbsp;</p>
<p>Bir önceki şekilde bulunan tablo K&#8217;yı tablo K ve tablo Q olarak bölmeye çalıştım. Görüldüğü üzere herhangi bir satır sayısında azalma olmamıştır. Bu tip birincil anahtar kullanarak bölme işlemleri mümkün olmakla birlikte genelde normalleştirme anlamında bir fayda sağlamaz. Bu şekilde böldükten sonra, iki tablo arasında (örneğimizdeki tablo K ve Q ) <a href="http://www.bilgisayarkavramlari.com/2008/11/25/sayisallik-cardinality/">sayısallık açısından (cardinality)</a> birebir (one-to-one) ilişki kurulmaktadır ki teorik olarak iki tablo arasında birebir ilişki varsa aslında bu iki tablo, bir tablonun ikiye bölünmüş halidir denilebilir. Genelde birebir ilişki, veritabanında hız amacıyla kullanlan (bazı kolonlara istatistiksel olarak çok nadir erişim yapıldığı biliniyorsa) veya veritabanı kısıtlarından dolayı kullanılan (örneğin veri tabanımızın tablo başına sadece 10 kolon tutmaya izin verdiği durumda 15 kolonlu bir tablo oluşturmak için) bir özelliktir.</p>
<p>&nbsp;</p>

<p class="sayac_bilgi">99 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2012/01/17/normallestirme-normalisation-normalizasyon/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CDMA (code division multiple access)</title>
		<link>http://www.bilgisayarkavramlari.com/2011/11/09/cdma-code-division-multiple-access/</link>
		<comments>http://www.bilgisayarkavramlari.com/2011/11/09/cdma-code-division-multiple-access/#comments</comments>
		<pubDate>Wed, 09 Nov 2011 03:42:47 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Bilgisayar Kavramları]]></category>
		<category><![CDATA[Mantık Devreleri (Logic Circuits)]]></category>
		<category><![CDATA[Network(Ağ)]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/?p=6012</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Bilgisayar bilimlerinde, özellikle ağ (network) konusunda geçen ve bir ortamı, birden fazla veri kanalının iletişimi için kullanılan yöntemlerden birisidir. Literatürde sıkça geçen diğer çok kanallı veri iletişim yöntemleri, TDMA (time division multiple access , zaman paylaşımlı çoklu erişim) ve FDMA (frequency division multiple access, frekans paylaşımlı çoklu erişim) yöntemleridir. CDMA [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Bilgisayar bilimlerinde, özellikle ağ (network) konusunda geçen ve bir ortamı, birden fazla veri kanalının iletişimi için kullanılan yöntemlerden birisidir. Literatürde sıkça geçen diğer çok kanallı veri iletişim yöntemleri, <a href="http://www.bilgisayarkavramlari.com/2007/12/16/zaman-bolmeli-coklama-time-division-multiplexing-tdm/">TDMA (time division multiple access , zaman paylaşımlı çoklu erişim)</a> ve <a href="http://www.bilgisayarkavramlari.com/2007/12/16/frekans-bolmeli-coklama-siklik-bolmeli-coklayici-frequency-division-multiplexing-fdm/">FDMA (frequency division multiple access, frekans paylaşımlı çoklu erişim)</a> yöntemleridir.</p>
<p>CDMA yöntemini bu diğer meşhur iki yöntem ile karşılaştırmak için genelde şu şekilde bir örnek verilir. Örneğin bir odada birden çok kişinin konuşarak haberleştiğini düşünelim. TDM yaklaşımında, kişiler sırayla ve teker teker konuşmakta, ilgili alıcı konuşan kişinin mesajını almaktadır. FDM yaklaşımında, kişiler farklı ses tonları ile konuşmakta ve dolayısıyla alıcı olan kişi, ilgili ses tonuna dikkatini vererek iletilen mesajı almaktadır. CDMA yaklaşımında ise, kişiler farklı lisanlarda konuşmakta, dolayısıyla o lisanı bilen kişiler tarafından algılanmakta, diğer kişiler tarafından iletilen veri gürültü olarak algılanıp dikkate alınmamaktadır.</p>
<p><strong>Örnek</strong></p>
<p>Konuyu bir örnek üzerinden açıklamaya çalışalım. Örneğin 4 farklı veri kanalı üzerinden veri akmakta olsun ve bunları CDMA yöntemi ile tek bir kanaldan taşımak isteyelim.</p>
<ul>
<li>V1: 1101</li>
<li>V2: 0010</li>
<li>V3: 1010</li>
<li>V4: 0011</li>
</ul>
<p>&nbsp;</p>
<p>Yukarıdaki şekilde verilen 4 farklı verinin CDMA ile nasıl taşındığını anlatalım. Verileri ilk adımda farklı frekans değerine sahip işaretler ile kodluyoruz (code). Örneğimizde kullanacağımız 4 farklı kodumuz aşağıdaki şekilde olsun:</p>
<ul>
<li>K1: 1111</li>
<li>K2: 1010</li>
<li>K3: 1100</li>
<li>K4: 1001</li>
</ul>
<p>Verilerin, kodlar tarafından işlenebilmesi için ve 4 farklı verimiz olduğu için, verilerin genliğini 4 misli şeklinde düünebiliriz. Buna göre örnek olarak son veri için kodlamayı anlatalım:</p>
<p>V4 : 0000 0000 1111 1111 (Gösterim için 0011 verisinin her elemanını 4 kere tekrarladım.)</p>
<p>K(V4,K4) : 0110 0110 1001 1001 (V4&#8242;ün, K4 ile kodlanması sonucunda, V4 üzerindeki 1 değerleri için K4&#8242;ün kendisi, V4 üzerindeki 0 değerleri için ise K4&#8242;ün tersi gelmektedir. Daha basit anlamda her V4 dörtlüsü (uzun şekilde yazılmış halini düşünün) ile K4 değerlerinin <a href="http://www.bilgisayarkavramlari.com/2008/03/13/ozel-veya-exclusive-or-farklilik-operatoru/">özel veyasının (XOR) </a>tersi alınır !(( 0000 0000 1111 1111 ) XOR ( 1001 1001 1001 1001)) şeklinde)</p>
<p>Sonuçta 4 farklı veri ve 4 farklı kodlama için aşağıdaki sonuçlara ulaşılır:</p>
<ul>
<li>K(V1,K1) : 1111 1111 0000 1111</li>
<li>K(V2,K2) : 0101 0101 1010 0101</li>
<li>K(V3,K3) : 1100 0011 1100 0011</li>
<li>K(V4,K4) : 0110 0110 1001 1001</li>
</ul>
<p>CDMA algoritmamızda, son adım olarak yukarıdaki değerleri topluyoruz. Toplamın ve yukarıdaki işlemlerin görsel olarak ifadesi aşağıdaki şekildedir:</p>
<p><img title="cdmailk.png" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/cdmailk.png" alt="Cdmailk" width="600" height="218" border="0" /></p>
<p>Yukarıdaki toplama işlemi sonucunda elde edilen verilerin, her birisinin farklı alıcılar tarafından alınmak istediğini düşünelim. Bu durumda her alıcı, almak istediği göndericinin kodlama değerini kendisinde ayarlayacak ve yukarıda elde edilen sonuç verisini kendisinde işleyecektir. Bu durum aşağıdaki şekilde gösterilmektedir:</p>
<p><img title="cdmaiki.png" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/cdmaiki.png" alt="Cdmaiki" width="600" height="315" border="0" /></p>
<p>Yukarıda görüldüğü üzere her kodlama değeri sonucunda açılan veri, orjinal olarak kodlanan ilgili veridir. Örneğin K1 kodlamasndan açılan veri V1 olarak bulunmuştur. Bu işlem diğer kodlamaları engellememektedir.</p>
<p>&nbsp;</p>
<p>CDMA yöntemi, günümüzde de kullanılan UMTS teknolojisinin temelini oluşturur. UMTS (universal mobile telecommunication system, evrensel hareketli telekomunikasyon sistemi) teknolojisi, CDMA2000 teknolojisinden sonra (IMT Multi Carrier, inter mobile telecommunications, hareketli telekomunicakasyonlar arası çoklu taşıyıcı olarak da bilinir) geliştirilen ve CDMA 2000 teknolojisi ile rekabeti amaçlayan bir teknolojidir. CDMA2000 de, UMTS&#8217;in temeli olan W-CDMA de birer 3G teknolojisidir ve cep telefonlarının aynı anda iletişimi için kullanılmaktadır.</p>

<p class="sayac_bilgi">222 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2011/11/09/cdma-code-division-multiple-access/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Jitter (Dalga Bozulumu)</title>
		<link>http://www.bilgisayarkavramlari.com/2011/11/09/jitter-dalga-bozulumu/</link>
		<comments>http://www.bilgisayarkavramlari.com/2011/11/09/jitter-dalga-bozulumu/#comments</comments>
		<pubDate>Wed, 09 Nov 2011 01:36:29 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Bilgisayar Kavramları]]></category>
		<category><![CDATA[Kuantum Hesaplama]]></category>
		<category><![CDATA[Network(Ağ)]]></category>
		<category><![CDATA[Resim İşleme (Image Processing)]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/?p=5992</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Genelde sinyal işleme konularında geçen bir terim olan jitter (dalga bozulumu), bilgisayar bilimlerinde, ağ (networking), çoklu ortam uygulamaları (multi media) veya resim işleme (image processing) gibi konularda geçmektedir. Jitter kavramı, kısaca bir sinyalin olması gereken değere göre hatalı dalga değeri vermesidir. Örneğin yukarıdaki şekilde bir dijital sinyal görülmektedir (resmin üstünde). [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Genelde sinyal işleme konularında geçen bir terim olan jitter (dalga bozulumu), bilgisayar bilimlerinde, ağ (networking), çoklu ortam uygulamaları (multi media) veya resim işleme (image processing) gibi konularda geçmektedir.<br />
Jitter kavramı, kısaca bir sinyalin olması gereken değere göre hatalı dalga değeri vermesidir. </p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/dalgabozulum.png" alt="Dalgabozulum" title="dalgabozulum.png" border="0" width="600" height="284" /></p>
<p>Örneğin yukarıdaki şekilde bir dijital sinyal görülmektedir (resmin üstünde). Bu sinyalin bozulmuş hali resmin ortasında ve bozulmadan kaynaklanan jitter değeri resmin ortasında gösterilmiştir. </p>
<p>Dalgada yaşanan sürekli bir bozulma olmasından dolayı, jitter terimi, faz bozulması veya faz gürültüsü (phase noise) olarak da tanımlanabilir. Dalganın anlık bir noktasında yaşanan gürültüden, bu anlamda farklıdır. </p>
<p>Sinyalde yaşanan ve sürekli olan bu bozulmanın da bir periyodundan (veya frekansından) bahsedilebilir. Dalga bozulumu frekansı (jitter frequency), bu tanıma göre, dalgada yaşanan bozulmaların en büyük değerleri arasındaki mesafedir. Diğer bir deyişle, yukarıdaki şekilde görülen ve bozulum yaşanan dalgaların frekansıdır. Dalga frekansı hesaplanırken, en büyük değerler arasındaki fark alınabileceği gibi en küçük değerler arasındaki fark da alınabilir. </p>
<p>Dalga bozulumunun yaşandığı yere göre farklı isimlendirmelerin kullanılması mümkündür. </p>
<p><b>Sarnıçlama Dalga Bozulumu (Sampling Jitter)</b>: Bu kavram, genelde işaret (sinyal) üzerinde uygulanan çevirimler sırasında ortaya çıkar. DAC (digital to analog converter, dijital verinin analog veriye çevirimi) veya tersi olan ADC (analog to digital converter, analog verinin dijital veriye çevirimi) işlemleri belirli bir zaman almaktadır. O halde sinyal işlenirken, beklenen zamana göre gecikmeli olarak sonuç elde edilecek ve nihayetinde bir dalga bozulumu yaşanacaktır. </p>
<p>Örneğin sarnıçlama yapılan (belirli aralıklarla örnekler alınan, sampling) bir sistemin, ses, ışık veya hız gibi sürekli (conitinous) bir işaret (signal) olduğunu kabul edelim. Bu işaretin belirli zamanlarda değerinin okunarak dijital ortama çevirimi, burada bahsedilen gecikmeler ve kaymalara neticede de sarnıçlama dalga bozulumuna sebep olacaktır. </p>
<p><b>Paket Dalga Bozulumu</b>: Bilgisayar ağlarında, bazı durumlarda, paketlerin belirli sıklıkta (frequency) iletilmesi beklenir. Bu sıklığın bozulması da bir dalga bozulumu (jitter) olarak kabul edilebilir. Bilgisayar ağlarındaki dalga bozulumu (jitter) aslında başlı başına bir hizmet kalitesi (quality of service) konusudur ve daha çok kabul gören PDV (packet delay variation) terimi altında kullanılmaktadır. </p>
<p>Yukarıda verilen örnekler daha da arttırılabilir. Örneğin bir CD-ROM&#8217;dan okuma sırasında, CD üzerindeki verinin aranması sırasında geçen süre, herhangi bir veri transfer yazılımı veya devresinin, veriyi göndermeye başlamasında geçen süre, <a href="http://www.bilgisayarkavramlari.com/2010/10/14/kuantum-kapilari-quantum-gates/">kuantum kapılarının (qunatum gates)</a>, elektron dönüşünden kaynaklanan (spin based) çalışma gecikmesi veya aktarılmak istenen verinin kanal kapasitesinin çok üzerinde olasından dolayı, verinin bir kısmının <a href="http://www.bilgisayarkavramlari.com/2007/12/22/tikaniklik-congestion/">tıkanıklık (congestion)</a> ile karşılaşması ve bu yüzden beklenen zamandan daha geç transfer edilmesi gibi durumlar birer dalga bozulumu (jitter) örneğidir. </p>

<p class="sayac_bilgi">129 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2011/11/09/jitter-dalga-bozulumu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hesaplamalı Geometri (Computational Geometry)</title>
		<link>http://www.bilgisayarkavramlari.com/2011/10/28/hesaplamali-geometri-computational-geometry/</link>
		<comments>http://www.bilgisayarkavramlari.com/2011/10/28/hesaplamali-geometri-computational-geometry/#comments</comments>
		<pubDate>Fri, 28 Oct 2011 19:12:14 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Bilgisayar Grafiği (Computer Graphics)]]></category>
		<category><![CDATA[Bilgisayar Kavramları]]></category>
		<category><![CDATA[Bilgisayar Matematiği]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2011/10/28/hesaplamali-geometri-computational-geometry/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Bu yazının amacı, geometri konusunun bir alt kolu olan hesaplamalı geometriyi izah etmektir. Esas itibariyle mühendis kelimesinin kökü olan, hendese kelimesini büyük ölçüde karşılayan geometri kelimesinin başına hesaplamalı gibi bir kelime getirmek anlamlı değildir. Çünkü zaten geometri hesaplamalı bir çalışma alanıdır. Buradaki hesaplamalı kelimesi daha çok bilgisayar ile işlenen anlamını [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER
</p>
<p>Bu yazının amacı, geometri konusunun bir alt kolu olan hesaplamalı geometriyi izah etmektir. Esas itibariyle mühendis kelimesinin kökü olan, hendese kelimesini büyük ölçüde karşılayan geometri kelimesinin başına hesaplamalı gibi bir kelime getirmek anlamlı değildir. Çünkü zaten geometri hesaplamalı bir çalışma alanıdır. Buradaki hesaplamalı kelimesi daha çok bilgisayar ile işlenen anlamını taşımaktadır. Yani hesaplamalı geometri ile kasıt (computational geometry) bilgisayar ile işlenen geometri çalışmalarıdır. İngilizcede kullanılan computational kelimesi bu anlamda, bilgisayarı (computer) çağırması açısından daha doğru bir tercihtir.
</p>
<p>Geometri ve bilgisayar çalışmalarının kesişim noktası olan hesaplamalı geometri konusuna bilgisayar bilimleri açısından bakıldığında, geometrik problemleri çözen algoritmaların geliştirilmesi ve iyileştirilmesi (optimisation) olarak düşünülebilir.
</p>
<p>Hesaplamalı geometri çalışmalarının ilk çıkışı, <a href="http://www.bilgisayarkavramlari.com/category/bilgisayar-grafigi-computer-graphics/">bilgisayar grafikleri</a> konusunda yapılan çalışmalardır. Örneğin bir bilgisayar animasyonu veya bilgisayar destekli çizim tasarım ve üretim yazılımları (CAD / CAM) hesaplamlı geometrinin doğuşuna ve gelişmesine öncülük etmiştir.
</p>
<p>Günümüzde, ayrıca robot çalışmaları, coğrafi bilgi sistemleri (geographic information systems, GIS) veya entegre devre tasarımı (integrated circuit , IC) gibi konularda da hesaplamalı geometriden yoğun olarak istifade edilmektedir.
</p>
<p>Yapı olarak çoğu bilgisayar bilimleri çalışmasında görüldüğü üzere iki farklı usül görülebilir.
</p>
<p>Terkîbî hesaplamalı hendese (combinatorial computational geometry): Bilgisayar bilimlerinde bulunan terkibi çalışmaların (combinatorial) bir alt grubudur. Genel olarak birden fazla ihtimali içersen sonlu sayıdaki elemalı kümelerin (finite element sets) üzerinde çalışan ve bu kümeler üzerinde ihtimal veya ittihat (birleştirme) (combination) işlemleri yapan çalışmalara, birleştirme anlamında terkip (combinatorial) ismi verilmektedir. Bu alan, bilgisayar bilimleri açısından da önemli bir yere sahiptir.
</p>
<p>Sayısal hesaplamalı hendese (numerical computational geometry): Bilgisayar bilimlerinde, karşılaşılan problemlerin çözülmesi için geliştirilen diğer bir yöntem de sayısal analiz yöntemlerini kullanmaktır. Buna göre sistemden sonlu sayıda noktanın analizi yapılmaktadır. Örneğin sarnıçlama yöntemi ile seçilen noktalar üzerinde hesaplama yapıp sisteme genellemek gibi yöntemler kullanılır.
</p>
<p>Yukarıdaki iki farklı hesaplamalı geometri usulünün farkını anlatmak için bir misal verelim.
</p>
<p>Örneğin aşağıda (üstteki mavi çizimle gösterilen) fonksiyon, basit bir sin(x) fonksiyonudur.
</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/102811_1912_HesaplamalG1.png" alt=""/>
	</p>
<p>Bu fonksiyonun analitik değerinin sin(x) olduğunu bilmeden, fonksiyona çeşitli değerler vererek şekli çizilirse, alttaki resimde görüldüğü üzere doğrusal bir fonksiyon bulunur. Bu fonksiyon, orjinal fonksiyona yakın ancak tam değildir. Örneğin integral almak gibi basit geometrik işlemler, yukarıdaki ilk fonskiyon üzerinden analitik olarak yapılabileceği gibi, ikinci fonksiyondaki örnek noktalar üzerinden de yapılabilir (bkz. Aradeğer ile integral hesabı (integral by interpolation))</p>

<p class="sayac_bilgi">321 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2011/10/28/hesaplamali-geometri-computational-geometry/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apriori (Malum), APosteriori, AFortiori</title>
		<link>http://www.bilgisayarkavramlari.com/2011/08/13/apriori-malum-aposteriori-afortiori/</link>
		<comments>http://www.bilgisayarkavramlari.com/2011/08/13/apriori-malum-aposteriori-afortiori/#comments</comments>
		<pubDate>Fri, 12 Aug 2011 22:23:08 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[bilgisayar felsefesi]]></category>
		<category><![CDATA[Bilgisayar Kavramları]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/?p=5895</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Bir bilginin malum olması, daha önceki bilgilere ihtiyacı olmadan, ispata gerek duymadan doğruluğunun kabul edilmesi. Örneğin &#8220;bir bütünün parçalarının, bütünden küçük olması&#8221; gibi. Bu bilginin ispata ihtiyacı yoktur ve doğru olarak kabul edilebilir, bu bilgi üzerine ispat kurulabilir. Türkçede ayrıca &#8220;önsel&#8221; kelimesi de kullanılmaktadır ve literatürde &#8220;a priori&#8221; şeklinde ayrı [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER<br />
Bir bilginin malum olması, daha önceki bilgilere ihtiyacı olmadan, ispata gerek duymadan doğruluğunun kabul edilmesi.<br />
Örneğin &#8220;bir bütünün parçalarının, bütünden küçük olması&#8221; gibi.<br />
Bu bilginin ispata ihtiyacı yoktur ve doğru olarak kabul edilebilir, bu bilgi üzerine ispat kurulabilir.<br />
Türkçede ayrıca &#8220;önsel&#8221; kelimesi de kullanılmaktadır ve literatürde &#8220;a priori&#8221; şeklinde ayrı yazılması söz konusudur.</p>
<p>Ayrıca tersini ifade sadedinden &#8220;a posteriori&#8221; terimi de kullanılmaktadır. Bu terim de Türkçede &#8220;sonsal&#8221; olarak geçebilir. Buradaki ifade edilmek istenen ise bir olaydan / eylemden sonra elde edilen bilgidir. Örneğin bir deney sonucunda elde edilen ve deneysel temele dayanan bilgilerin tamamı aposteriori olarak kabul edilebilir.</p>
<p>A Fortiori olarak geçen terim ise, kesin sonuca varan yargı anlamındadır. Liteartürde bir sonuca ulaşırken kullanılan ve sonucu etkileyen etkenlere verilen isimdir ve genelde &#8220;a fortiori argument&#8221; olarak geçer. Örneğin &#8220;bir insan ölmüşse, bu insanın nefes almadığı&#8221; kabul edilebilir ve bu kabulün ispatına ihtiyaç duyulmadan üzerine bir yargı inşa edilebilir.</p>
<p>Ayrıca veri madeciliğinde (datamining) kullanılan ve veriler arasındaki ilişki modelini belirleyen bir algoritmaya da apriori ismi verilmiştir. Bu isim karmaşasından dolayı şayet algoritmanın açıklamasını arıyorsanız, devam etmek için aşağıdaki yazıyı tıklayabilirsiniz.</p>
<p><a href="http://www.bilgisayarkavramlari.com/2011/09/07/apriori-algoritmasi/">Apriori Algoritması </a></p>

<p class="sayac_bilgi">147 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2011/08/13/apriori-malum-aposteriori-afortiori/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Document Management Systems (Doküman Yönetim Sistemleri)</title>
		<link>http://www.bilgisayarkavramlari.com/2011/06/29/document-management-systems-dokuman-yonetim-sistemleri/</link>
		<comments>http://www.bilgisayarkavramlari.com/2011/06/29/document-management-systems-dokuman-yonetim-sistemleri/#comments</comments>
		<pubDate>Wed, 29 Jun 2011 11:01:40 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Bilgisayar Kavramları]]></category>
		<category><![CDATA[Son Kullanıcı]]></category>
		<category><![CDATA[Yazılım Mühendisliği (Software Engineering)]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2011/06/29/document-management-systems-dokuman-yonetim-sistemleri/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Bu yazının amacı, bilgisayar dünyasında kullanılan döküman yönetim sistemlerinin genel bir tanımını yapmak ve bir doküman yönetim sisteminin yapısını açıklamaktır. Genel olarak bir doküman yönetim sistemi (document management system), herhangi bir organizasyondaki dokümanların (yazışmalar, evraklar, formlar veya resimler gibi) takibini yapmayı, tasnif ederek erişimini kolay hale getirmeyi, sorgulamalara ve aramalara [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER
</p>
<p>Bu yazının amacı, bilgisayar dünyasında kullanılan döküman yönetim sistemlerinin genel bir tanımını yapmak ve bir doküman yönetim sisteminin yapısını açıklamaktır.
</p>
<p>Genel olarak bir doküman yönetim sistemi (document management system), herhangi bir organizasyondaki dokümanların (yazışmalar, evraklar, formlar veya resimler gibi) takibini yapmayı, tasnif ederek erişimini kolay hale getirmeyi, sorgulamalara ve aramalara cevap vermeyi hedefler.
</p>
<p>Daha büyük ölçekte, içerik yönetim sisteminin bir parçası olarak görülebilir.
</p>
<p>Bir doküman yönetim sisteminde, şart olmamakla birlikte genelde aşağıdaki öğeler bulunur:
</p>
<p><strong>Üst bilgi (Metadata): </strong>Bir dokümanın, doğrudan içeriğine ait olmayan ancak dokümanın algılanması ve kullanılması sırasında işe yarayan bilgilerdir. Örneğin bir resmin çekildiği tarih, veya sisteme kaydedildiği tarih, dokümanın üst bilgisidir ancak bu bilgi resmin içnde yer almak zorunda değildir.
</p>
<p><strong>Havuz (repository):</strong> Doküman yönetim sistemlerinde (document management systems) kullanılan ve dokümanların saklandığı alandır. Basitçe havuza nasıl erişileceği, kimlerin ne kadarına erişeceği veya dokümanların havuzda nasıl tutulacağı, doküman yönetim sistemi tarafından belirlenir. Örneğin dokümanların doğru <a href="http://www.bilgisayarkavramlari.com/2008/11/24/veri-tabani-yonetim-sistemleri-database-management-systems-dbms-s/">bir veri tabanı yönetim sistemi tarafından (database management system , DBMS)</a> nasıl kullanılacağı bir havuz problemidir.
</p>
<p><strong>Bütünleşme (Integration):</strong> Dokümanlar ile uygulamalar arasındaki ilişkidir. Örneğin bir kullanıcı bilgisayarında tuttuğu hesaplama tablolarını bir uygulama üzerinden kullanmaktayken (örneğin <a href="http://www.bilgisayarkavramlari.com/2010/12/01/ms-excel-kullanimi-i/">MS Excel</a> veya Open Office Calc gibi) bu veriler doküman yönetim sisteminin havuzunda durmaktadır. Kullanıcı şeffaf bir doküman yönetim sisteminde (transparent) sadece uygulama ile muhatap olurken, doküman yönetim sistemi, arka planda kullanıcının verileri ile uygulamayı bütünleştirmektedir.
</p>
<p><strong>Fihristleyici (Indexer):</strong> Dokümanların kolay erişilmesi için belirli bir fihrist yapısına oturtulmasını sağlayan programdır. Örneğin dokümanların <a href="http://www.bilgisayarkavramlari.com/2008/05/07/agaclar-tree/">ağaç yapısında (tree)</a> veya özetleme tablolarında (hash table) tutulması, arama sırasında, daha hızlı erişilmesini sağlar. İşte fihristleyici bu görevi üstlenerek uygun veri yapısı üzerinde (data structure) dokümanlara erişim sağlamaktadır.
</p>
<p><strong>Getirme (Retrieval):</strong> Dokümanın havuzdan getirilmesi işlemidir. Çeşitli sistemlerde oldukça karmaşık yapılara ulaşabilir. Örneğin internet üzerinde arama yapan bir motorun (örneğin google) desteklediği arama cümlelerini kabul eden bir doküman yönetim sisteminin, fihristleyici üzerinde doğru erişimleri yapması ve getirmesi, normalden daha karmaşık algoritmalar gerektirmektedir. Hatta günümüzde <a href="http://www.bilgisayarkavramlari.com/category/dogal-dil-isleme-nlp/">doğal dil işleme (natural language processing</a>) kullanılarak, kullanıcıların konuşur gibi, sistemden doküman aramaları ve doküman yönetim sisteminin (DMS) bu dokümanı bulup getirmesi mümkün hale gelmiştir. Ayrıca getirilen sonuçların kullanıcıya gösterilmesi sırasındaki sıralama da ayrıca önem taşımaktadır. Örneğin 100 adet doküman döndüren bir aramanın sonucunda hangi dokümanın ilk sırada gösterileceği, skorlama algoritmaları ile çözülmektedir ve bütün bu işlemler &#8220;getirme&#8221; (retrieval) olarak geçmektedir.
</p>
<p><strong>Dağıtım (Distribution):</strong>Bu terim aslında literatürde bilgisayar bilimi temelli kişiler için bir karmaşıklık oluşturmaktadır. Literatürde iki farklı anlamda kullanıldığı görülebilir. Birincisi çok yoğun ve yüksek miktarda verilerin saklandığı ortamlarda, kaynakların verimli kullanılması için dokümanların dağıtılmasıdır. Bu klasik bilgisayar bilimleri tanımı olup tamamen yük kaygısı ile performans arttırma amaçlı yapılan bir işlemdir. Örneğin bir bankanın her şubesinin kendi dokümanını, kendi şubesinde tutması ve verilere erişimde hız kazanması gibi. Öte yandan doküman yönetim sistemlerinde bir dokümanın, taraflar arasında dağıtılması da bir problemdir. Örneğin hukuki bir metni, bütün muhataplarının okumuş olduğunun garanti edilmesi, hatta dijital olarak imzalaması (tebliğ / tebellüğ edilmesi) bir sözleşmenin bütün ilgili ve sadece ilgili kişiler tarafından okunması gibi problemler de dağıtım başlığı altında geçmekte olup bazı doküman yönetim sistemlerinde desteklenen özelliklerdendir.
</p>
<p><strong>Güvenlik (Security):</strong> Doküman yönetim sistemindeki <a href="http://www.bilgisayarkavramlari.com/2009/08/16/yetkilendirme-authentication/">kullanıcıların kendi yetkileri (authentication)</a> çerçevesinde erişime sahip olması ve dokümanların tam olarak korunuyor olmasıdır.
</p>
<p><strong>İş akışı (workflow</strong>): Bir dokümanın izlemesi gereken yolları belirtir. Örneğin bir satış işlemi sırasında, önce satış sözleşmesinin taraflarca onaylanması, satıcı tarafın deposuna sevk emrinin geçirilmesi, depodan çıkan ürünlerin taşıyıcı firma tarafından onayı, aradaki sigorta evraklarının tanzimi, alıcı firma tarafından malların alındığını onaylayan dokümanlar ve nihayetinde para transferini onaylayan banka dokümanlarının tamamı doküman yönetim sistemi tarafından takip edilip doğru sıra ile, doğru taraflar tarafından, evrak atlanmadan yapılmış mı diye sorgulanabilir.  Elektronik doküman yönetim sistemleri (electronic document management system), bu kontrol işlemlerinin tamamının  otomatik olarak yapılmasını ve ilgili kullanıcılara raporlanmasını hedefler.
</p>
<p><strong>Sürümleme (Versioning) :</strong> Bir doküman üzerinde değişik zamanlarda yapılan çalışmaların takip edilmesini hedefler. Örneğin dokümanda yapılan her işlem yeni bir sürüm numarası ile saklanır ve kullanıcılar gerekli gördükleri durumlarda, eski sürümlere dönerek işlem yapabilir.
</p>
<p><strong>Yayınlama (Publishing):</strong> Dokümanın tam olarak doğru algılanmasını sağlamak amacıyla, doküman üzerinde, yanlış anlamalara mahal verebilecek bütün eksiklik ve hataların düzeltilmes, tahsis edilmesi ve redaksiyonu işlemidir. Yayına hazırlanan bir dokümanın standartlarının belirlenmesinde ayrıca dokümanlar kullanılmaktadır. </p>

<p class="sayac_bilgi">312 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2011/06/29/document-management-systems-dokuman-yonetim-sistemleri/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Banker Algoritması (Banker&#8217;s Algorithm)</title>
		<link>http://www.bilgisayarkavramlari.com/2011/06/26/banker-algoritmasi-bankers-algorithm/</link>
		<comments>http://www.bilgisayarkavramlari.com/2011/06/26/banker-algoritmasi-bankers-algorithm/#comments</comments>
		<pubDate>Sat, 25 Jun 2011 21:09:29 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Bilgisayar Kavramları]]></category>
		<category><![CDATA[Donanım ( Hardware )]]></category>
		<category><![CDATA[işletim sistemleri]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2011/06/26/banker-algoritmasi-bankers-algorithm/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Bilgisayar bilimlerinde işletim sistemi tasarımı konusunda geçen ve kaynaklar üzerindeki kilitlenmeyi (deadlock)engelleme amaçlı algoritmadır. Algoritma Dijkstra tarafından geliştirilmiştir. Algoritmanın temel 3 durumu ve 2 şartı bulunur: Bilmesi gerekenler: Her işlem (process) ne kadar kaynağa ihtiyaç duyar? Her işlem (process) şu anda ne kadar kaynağı elinde tutmaktadır? Şu anda ne kadar [...]]]></description>
			<content:encoded><![CDATA[<div>
<p style="margin-bottom: 0cm;">Yazan : Şadi Evren ŞEKER</p>
<p style="margin-bottom: 0cm;">Bilgisayar bilimlerinde işletim sistemi tasarımı konusunda geçen ve kaynaklar üzerindeki <a href="http://www.bilgisayarkavramlari.com/2008/11/20/kilitlenme-deadlock/">kilitlenmeyi (deadlock)</a>engelleme amaçlı algoritmadır. Algoritma Dijkstra tarafından geliştirilmiştir.</p>
<p style="margin-bottom: 0cm;">Algoritmanın temel 3 durumu ve 2 şartı bulunur:</p>
<p style="margin-bottom: 0cm;">Bilmesi gerekenler:</p>
<ol>
<li>
<p style="margin-bottom: 0cm;">Her işlem (process) ne kadar kaynağa ihtiyaç duyar?</p>
</li>
<li>
<p style="margin-bottom: 0cm;">Her işlem (process) şu anda ne kadar kaynağı elinde tutmaktadır?</p>
</li>
<li>
<p style="margin-bottom: 0cm;">Şu anda ne kadar kaynak ulaşılabilir durumdadır?</p>
</li>
</ol>
<p style="margin-bottom: 0cm;">Yukarıdaki bu bilgileri bildikten sonra kaynak ayrılması sırasında aşağıdaki şartları uygular:</p>
<ol>
<li>
<p style="margin-bottom: 0cm;">Şayet talep edilen kaynak, azami kaynaktan (maximum) fazla ise izin verme</p>
</li>
<li>
<p style="margin-bottom: 0cm;">Şayet talep edilen kaynak eldeki kaynaktan fazla ise, kaynak boşalana kadar  <a href="http://www.bilgisayarkavramlari.com/2007/11/18/islem-process/">işlemi (process)</a> beklet.</p>
</li>
</ol>
<p style="margin-bottom: 0cm;">Yukarıdaki algoritma detayında, kaynak olarak geçen değer, işletim sistemi için herhangi bir şey olabilir (hafıza (RAM), giriş çıkış işlemleri (I/O), gerçek sistemler için çalışma zamanı gibi)</p>
<p style="margin-bottom: 0cm;">Banker algoritması ayrıca çalışması sırasında yukarıdaki takipleri yapabilmek için bazı veri yapılarına ihtiyaç duyar. Aşağıdaki veri yapıları için n, sistemdeki  <a href="http://www.bilgisayarkavramlari.com/2007/11/18/islem-process/">işlem (process)</a> sayısı ve m birbirinden farklı kaynak sayısı (resource) olmak üzere:</p>
<p style="margin-bottom: 0cm;">Müsait : m adet elemanı olan bir dizidir. Dizinin her elemanı o kaynak tipinden ne kadar müsait olduğunu tutar. Örneğin M[i] = 5 değerinin anlamı, i kaynak tipinden beşinin müsait olduğudur.</p>
<p style="margin-bottom: 0cm;">Azami : iki boyutlu dizi ile tutulur ve n x m boyutlarındadır. Her işlem için ilgili kaynaktan ne kadar ayrım yapıldığı dizide işaretlenir. Örneğin Az[2][3]=5 gösteriminin anlamı, 2. işlemin 3. kaynak üzerinde 5 birimlik ayrım hakkı olduğudur. Diğer bir deyişle 2. işlem, 3. kaynaktan 5 birimden fazla kullanmaz, kullanmak istemez, kullanamaz.</p>
<p style="margin-bottom: 0cm;">Ayrım : yine iki boyutlu bir dizidir ve yine boyutu n x m olarak tutulur. Her işlemin her kaynağın ne kadarını kullandığını gösterir. Örneğin Ay[2][3] = 4 gösteriminin anlamı, o anda, 2. işlemin 3. kaynaktan 4 birim kullanıyor olduğudur (ayırmış olduğudur).</p>
<p style="margin-bottom: 0cm;">İhtiyaç: Benzer şekilde nxm boyutlarında bir dizi olarak tutulur ve her işlemin her kaynaktan ne kadar ihtiyaç duyduğunu tutar. Örneğin İ[2][3] = 1 gösteriminin anlamı, 2. işlemin, 3. kaynaktan 1 birim ihtiyacı olduğudur.</p>
<p style="margin-bottom: 0cm;">&nbsp;</p>
<p style="margin-bottom: 0cm;">Algoritmanın çıktısı güvenli veya değildir (safe state, unsafe state). Buna göre algoritma, işlemlerin çalışıp bitme ihtimali varsa güvenli sonucunu döndürürken, işlemler, birbirini kilitliyorsa bu durumda güvensiz sonucunu döndürür.</p>
<p style="margin-bottom: 0cm;">&nbsp;</p>
<p style="margin-bottom: 0cm;">Hesaplama:</p>
<p style="margin-bottom: 0cm;">Algoritma, güveni veya güvensiz sonucuna ulaşmak için adıma bağlı olarak, aşağıdaki hesaplamaları yapar:</p>
<p style="margin-bottom: 0cm;">Müsait = Müsait – İhtiyaç</p>
<p style="margin-bottom: 0cm;">Ayrım = Ayrım + İhtiyaç</p>
<p style="margin-bottom: 0cm;">İhtiyaç = Azami – Ayrım</p>
<p style="margin-bottom: 0cm;">&nbsp;</p>
<p style="margin-bottom: 0cm;">&nbsp;</p>
<p style="margin-bottom: 0cm;">Bu durumu bir örnek üzerinden açıklayalım. Örneğin A,B,C isimli üç kaynağımız olsun ve bu kaynakların müsaitlik durumları aşağıdaki şekilde olsun:</p>
<pre class="western">Kaynaklar
 A B C
10 5 7</pre>
<p>Ayrıca 5 adet işlemimiz olsun ve bu işlemlerin anlık olarak azami ihtiyaçları, ayrılmış olan kaynaklar ve ihtiyaçları aşağıda verildiği gibi olsun:</p>
<pre class="western">     Azami       Ayrım
     A B C       A B C
P0   7 5 3       0 1 0
P1   3 2 2       2 0 0
P2   9 0 2       3 0 2
P3   2 2 2       2 1 1
P4   4 3 3       0 0 2
</pre>
<p>Soru bu durumun güvenli bir durum olup olmadığıdır. Diğer bir deyişle acaba bir kilitlenme riski bulunur mu? Yukarıda verilen değerlerin üzerinden ihtiyaç tablomuzu hesaplayalım:</p>
<pre>
     Azami   -   Ayrım    =  İhtiyaç
     A B C       A B C       A B C
P0   7 5 3       0 1 0       7 4 3
P1   3 2 2       2 0 0       1 2 2
P2   9 0 2       3 0 2       6 0 0
P3   2 2 2       2 1 1       0 1 1
P4   4 3 3       0 0 2       4 3 1</pre>
<p style="margin-bottom: 0cm;">Yukarıdaki işlemden anlaşılacağı üzere Azami tablosundan, Ayrım tablosu çıkarılmış ve ihtiyaçlar bulunmuştur.</p>
<p style="margin-bottom: 0cm;">Bu durumda, sistem güvenli denilebilir çünkü ihtiyaç tablosundaki hiçbir değer, müsait dizimizdeki değeri geçmemektedir. Demek ki sistem bütün ihtiyaçlara cevap verebilecek kapasitededir.</p>
<p style="margin-bottom: 0cm;">Bu durumun daha iyi anlaşılması için P1, P2, P3, P4, P0 sırası ile çalışmayı görelim:</p>
<pre class="western">     Azami   -   Ayrım  =    İhtiyaç Müsait
     A B C       A B C       A B C            A B C
P1   3 2 2       2 0 0       1 2 2    3 3 2   3 3 2
P3   2 2 2       2 1 1       0 1 1    5 3 2
P4   4 3 3       0 0 2       4 3 1    7 4 3
P2   9 0 2       3 0 2       6 0 0    7 4 5
P0   7 5 3       0 1 0       7 4 3   10 4 7
                                     10 5 7&lt;&lt;&lt; Kaynaklar
</pre>
<p>Görüldüğü üzere işlemlerin sonucunda ilk kaynak değerlerine geri dönülmüştür (aslında bütün işlemler bitince müsait olan kaynak değeri, başlangıçtaki değerdir).<br />
Yukarıdaki çalışma sırası (yani  P1, P2, P3, P4, P0 sırası) güvenli çalışma olarak kabul edilir. Örneğimizi biraz daha ilerletelim :<br />
Acaba P1 işlemi (1,0,2) ihtiyacında olsaydı yine de güvenli durumda olur muyduk?<br />
İhtiyaç kontrolümüz (1,0,2)<code class="western">&lt;=</code> (1,2,2)  olacaktı<br />
ve müsait durumumuz : (1,0,2)<code class="western">&lt;=</code> (3 3 2)  olacaktı<br />
Bu durumda tablomuz aşağıdaki şekilde olabilirdi:</p>
<pre>
      Azami      Ayrım      İhtiyaç  Müsait
      A B C       A B C     A B C    A B C
P0   7 5 3       0 1 0       7 4 3     2 3 0&lt;&lt;&lt;
P1   3 2 2       3 0 2&lt;&lt;&lt;    0 2 0&lt;&lt;&lt;
P2   9 0 2       3 0 2       6 0 0
P3   2 2 2       2 1 1       0 1 1
P4   4 3 3       0 0 2       4 3 1
</pre>
<p>Bu durum güvenli midir?<br />
Evet !<br />
Çalışma sırası olarak P1, P3, P4, P0 ve P2 sırasında olması durumunda işlemler kilitlenme olmaksızın başarı ile çalışacaktır. Örneğin P4 için ihtiyacı (3,3,0) olarak yeniden ayarlasaydık güvenli bir durum elde edemeyecektik çünkü bu adımdaki (3,3,0) değeri o anda müsait olan (2,3,0) değerinden büyük olacaktı ve <a href="http://www.bilgisayarkavramlari.com/2007/11/18/islem-process/">işlem (process)</a> çalışamayacaktı.</pre>
<p>&nbsp;</p>
</div>

<p class="sayac_bilgi">658 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2011/06/26/banker-algoritmasi-bankers-algorithm/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bin Packing (Kutulama Problemi)</title>
		<link>http://www.bilgisayarkavramlari.com/2011/06/06/bin-packing-kutulama-problemi/</link>
		<comments>http://www.bilgisayarkavramlari.com/2011/06/06/bin-packing-kutulama-problemi/#comments</comments>
		<pubDate>Mon, 06 Jun 2011 07:50:05 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[algoritma analizi (teory of algorithms)]]></category>
		<category><![CDATA[Bilgisayar Kavramları]]></category>
		<category><![CDATA[C/C++]]></category>
		<category><![CDATA[graf teorisi (graph theory, çizge kuramı)]]></category>
		<category><![CDATA[Programlama Dilleri]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2011/06/06/bin-packing-kutulama-problemi/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER İyileştirme problemleri açısından klasik bir örnektir (optimisation problems). Problem basitçe bir kutunun içerisine en az boş alan bırakarak, eşyaların en iyi şekilde nasıl yerleştireceği olarak düşünülebilir. Aslında problemi boyutlara göre incelersek aşağıdaki şekilde bir liste yapılabilir: Tek boyutlu kutulama (1D bin packing) :Bu problemde amaç bir çizgi veya hat gibi [...]]]></description>
			<content:encoded><![CDATA[<div>
<p style="margin-bottom: 0cm;">Yazan : Şadi Evren ŞEKER</p>
<p style="margin-bottom: 0cm;">İyileştirme problemleri açısından klasik bir örnektir (optimisation problems). Problem basitçe bir kutunun içerisine en az boş alan bırakarak, eşyaların en iyi şekilde nasıl yerleştireceği olarak düşünülebilir.</p>
<p style="margin-bottom: 0cm;">Aslında problemi boyutlara göre incelersek aşağıdaki şekilde bir liste yapılabilir:</p>
<p style="margin-bottom: 0cm;"><strong>Tek boyutlu kutulama (1D bin packing)</strong> :Bu problemde amaç bir çizgi veya hat gibi görülebilecek yapının içerisine farklı boyutlardaki çizgileri yerleştirmek olarak düşünülebilir.</p>
<p style="margin-bottom: 0cm;">Örneğin zaman çizelgelemesinde, bir kişinin yapacağı işleri, zaman çizgisinin üzerine yerleştirmesi (ve her işin farklı miktarda zaman gerektirdiğini ve kişinin çalışma saatlerinin sınırlı olduğunu düşünürsek en fazla işi en az zamanda (örneğin 8 saatlik mesailer içinde) yapması ) bir problemdir. Buradaki hem kişinin yapacağı işler hem de bu işlerin yerleştirileceği zaman çizgisi tek boyutludur.</p>
<p style="margin-bottom: 0cm;">Daha basit olması açısından örneğin 100m uzunluğundaki bir ipi 7 ve 9m uzunluğundaki parçalara en az fire ile bölmek istiyoruz, en verimli bölme işleminde kaç adet 7 ve kaç adet 9 uzunluğunda ipimiz olur gibi soruları düşünebiliriz. Bu tip sorular tek boyutlu kutulama problemleridir.</p>
<p style="margin-bottom: 0cm;"><strong>İki boyutlu kutulama problemleri (2D bin packing optimization):</strong> Bu grupta bir tablodan ve iki boyuttan bahsedilebilir. Örneğin kot pantolon üreten bir tekstil firmasında farklı boyutlardaki Pantolon kalıplarının en az fire ile 5x5m büyüklüğündeki bir kare kumaştan kesilmesi isteniyor olsun. Bu problem iki boyutlu (x ve y boyutları) bir kutulama problemidir. Benzer bir problem, bir gazetedeki seri ilanların, en az fire ile sayfaya yerleştirilmesi olarak da düşünülebilir.</p>
<p style="margin-bottom: 0cm;"><strong>3 boyutlu kutulama (3D bin packing)</strong> problemin en zor şekli olarak tanımlanır ve 3 boyutlu bir kutunun içerisine konulan her şeklin farklı x,y ve z boyutlarında şekiller olması olarak düşünülebilir. Problemin genel tanımını yaptığımız için belirteyim, örneğin ev taşıma sırasında çıkan eşyaların kutulanması olarak düşünebilirsiniz. Bu durumu daha da karmaşık yapmaktadır çünkü kutular farklı boyut ve şekillerdedir (örneğin silindir bir varil veya küp veya dikdörtgenler prizması gibi kutuların içerisine yerleştirme yapılmakta) ve kutulanan şekillerde farklıdır ve hatta girintilidir (concave , non-convex) (örneğin avize, koltuk, sandalye gibi birbirinin içine girebilen nesneleri düşününüz). 2 ve 3 boyutlu paketleme, paketlenen nesnelerin girintili olup olmamasına göre ikiye ayrılmaktadır. Dış bükey nesnelerin paketlenmesi nispeten daha basit bir problemdir. Ancak nesnelerin iç bükey olması halinde problem biraz daha karmaşıklaşır.</p>
<p style="margin-bottom: 0cm;">Hatta literatürdeki kısıtlı aramalarım sonucunda ulaşabildiğim kadarıyla tam olarak iç bükey nesnelerin paketlenebildiği bir sonuç ne yazık ki bulamadım. Örneğin iki vidanın en verimlim paketlenmesi sırasında vidaların girinti çıkıntılarının üstüste gelmesi gerektiğini tecrübi olarak biliyoruz. N adet vida için bu durum birbirini tekrar eden bir hal alır. Gerçekten farklı boylarda ve adım sıklığında ve çaplarda vidalar verilse bu durumda en verimli paketlemeyi yapabilen bir algoritma henüz görmedim.</p>
<p style="margin-bottom: 0cm;"><strong>Paketlenen nesnelere göre problemin sınıflandırılması:</strong></p>
<p style="margin-bottom: 0cm;">Paketlenen nesne çeşitlerinin sabit olması ve ön tanımlı olması halinde problem homojen olarak tanımlanır. Örneğin tek boyutlu kutulama probleminin tanımı sırasında verilen ve “100m uzunluğundaki bir ipi 7 ve 9m uzunluğundaki parçalara en az fire ile bölmek” şeklinde geçen örnek bu tip homojen (homogenous) bir yapıdadır. Buna karşılık heterojen bir problemde, paketlenecek nesnelerin tipleri ya tamamen birbirlerinden farklıdır ya da aynı tipte çok az tekrar vardır. Yine tek boyutlu problem örneğinde verilen zaman çizgisi üzerinde farklı uzunluklardaki randevuların yerleştirilmesi bu tiptendir.</p>
<p style="margin-bottom: 0cm;">Bu anlamda aşağıdaki problemler, kutulama probleminin birer özel hali olarak düşünülebilir:</p>
<ul>
<li>
<p style="margin-bottom: 0cm;">kamyon yükleme problemi (truck loading),</p>
</li>
<li>
<p style="margin-bottom: 0cm;">konteyner yükleme problemi (Container loading problem, CLP)</p>
</li>
<li>
<p style="margin-bottom: 0cm;">şerit paketleme problemi (Strip Packing problem, SPP)</p>
</li>
</ul>
<p style="margin-bottom: 0cm;">Yukarıda, problemin tanımını yaptıktan sonra çözümlere bir göz atalım:</p>
<p style="margin-bottom: 0cm;"><strong>Homojen tek boyutlu problem çözümü</strong></p>
<p style="margin-bottom: 0cm;">Şayet problem tek boyutlu ise ve homojen nesnelerin paketlenmesi olarak problemin çözülmesi isteniyorsa problem oldukça basit demektir ve basit matematiksel hesaplamalar ile problemi çözebiliriz.</p>
<p style="margin-bottom: 0cm;">Örneğin tek nesne ve tek paket varsa işlem basitçe paketin nesneye bölümü olarak bulunur (zaten burada zor Bir şey de yok):</p>
<p style="margin-bottom: 0cm;">Örneğin 100m uzunluğundaki bir ipten kaç tane 5m uzunluğunda ip kesilebilir:</p>
<p style="margin-bottom: 0cm;">100 / 5 = 20</p>
<p style="margin-bottom: 0cm;">biraz daha zorlaştırıp ip sayısını 2 çeşide veya 3 çeşide çıkarırsak problem  <a href="http://www.bilgisayarkavramlari.com/2008/03/24/belirsiz-cokterimli-tam-np-complete-nondeterministic-polynomial-complete/">np-tam (np-complete)</a> bir hal alır. Örneğin aşağıdaki kodu inceleyelim:</p>
<p style="margin-bottom: 0cm;"><img style="text-align: left;" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/sbres_1307346697_0__.jpg" border="0" alt="" width="599" height="470" /></p>
<p style="margin-bottom: 0cm;">Kodda görüldüğü üzere bütün ihtimaller denenmektedir. Basitçe herhangi bir k değeri için, k-a ve k-b değerlerini denemekte ve denenen duruma göre a veya b değerini bir arttırmaktadır. Aslında kodumuz basit bir  <a href="http://www.bilgisayarkavramlari.com/2008/05/07/ikili-agac-binary-tree/">ikili ağaç (binary tree)</a> oluşturmaktadır:</p>
<p>Önce 9 veya 7 ile başlanması ihtimalleri:</p>
<p style="margin-bottom: 0cm;"><img style="text-align: left;" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/sbres_1307346697_1__.gif" alt="" width="275" height="149" /></p>
<p>Sonra bu ihtimallerin de 7 veya 9 azalma ihtimalleri:</p>
<p style="margin-bottom: 0cm;"><img style="text-align: left;" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/sbres_1307346697_2__.gif" alt="" width="416" height="225" /></p>
<p>Yukarıda gösterildiği gibi her düğümden yine ikişer ihtimal indirerek bir alt seviyeye geçilebilir. Neticede 0 olana kadar yapılan bir aramadır ve 0 sonucuna birden farklı yoldan ulaşılabilir.</p>
<p style="margin-bottom: 0cm;">Kodumuz çalıştırıldığında çözüm olarak aşağıdaki sonuçları üretmektedir:</p>
<p style="margin-bottom: 0cm;">cozum : 7*4 + 9*8</p>
<p style="margin-bottom: 0cm;">cozum : 7*13 + 9*1</p>
<p style="margin-bottom: 0cm;">Gerçekten de problemin iki farklı çözümü bulunmaktadır.</p>
<p style="margin-bottom: 0cm;">Yukarıdaki kod basit bir hesaplama ile, 2&#8242;nin üstlerinin toplamı kadar adım hesaplamaktadır.</p>
<p style="margin-bottom: 0cm;">Bu değer yukarıdaki ağaçtan çıkarılabilir:</p>
<p style="margin-bottom: 0cm;">ilk düğüm için tek ihtimal 2 <sup>0</sup></p>
<p style="margin-bottom: 0cm;">ikinci seviye için iki ihtimal: 2 <sup>1</sup></p>
<p style="margin-bottom: 0cm;">üçüncü seviye için dört ihtimal 2 <sup>2</sup></p>
<p style="margin-bottom: 0cm;">şeklinde gitmektedir ve örneğin problemimiz üçüncü seviyede çözülseydi (sonuç 0 olsaydı) o zaman karmaşıklığımız bu değerlerin toplamı olacaktı ve 2 <sup>0</sup> + 2 <sup>1</sup> + 2 <sup>2</sup> şeklinde hesaplanacaktı.</p>
<p style="margin-bottom: 0cm;">Bu değer, ikili ağaçlardan bilindiği üzere 2 <sup>n</sup>-1 şeklinde hesaplanabilir.</p>
<p style="margin-bottom: 0cm;">Görüldüğü üzere yukarıdaki algoritma O(2 <sup>n</sup>) değerinde bir karmaşıklığa sahiptir ve bu değer bir çok terimli (polynom) değildir yani algoritmanın karmaşıklık sınıfı <a href="http://www.bilgisayarkavramlari.com/2008/03/24/belirsiz-cokterimli-tam-np-complete-nondeterministic-polynomial-complete/">np-tam (NP-Complete)</a> olarak belirtilebilir. Ayrıca yukarıdaki k değeri için bir çözüm bulunmuştur ancak çözüm bulunamasaydı bu değer k terim için denenecekti. Yani 100 için çözüm yoksa bir yaklaşığı olan 99 için ardından iki yaklaşığı 98 için &#8230; Bu işlem hiç çözüm bulunamaması halinde k terim için denenecekti.</p>
<p>Yukarıdaki problem,  <a href="http://www.bilgisayarkavramlari.com/2007/12/03/dinamik-programlama-dynamic-programming/">dinamik programlama (dynamic programming)</a> kullanılarak iyileştirilebilir. Bunun sebebi arama işlemi sırasında bazı sonuçların tekrar etmesidir. Örneğin yukarıdaki ikili ağacı aşağıdaki şekilde çizebiliriz:</p>
<p style="margin-bottom: 0cm;"><img style="text-align: left;" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/sbres_1307346697_3__.gif" alt="" width="416" height="225" /></p>
<p>Farka dikkat ederseniz, 93 – 9 = 84 ve aynı zamanda 91-7 = 84 olduğu görülür. Bu durumda aslında 84 değeri bir önceki kodda iki farklı durum için aranmaktayken şimdi tek bir durum için aransın istiyoruz. Elbette 84 sadece bir örnektir ve buna bağlı olarak çok sayıda tekrar eden değer bulunmaktadır.</p>
<p style="margin-bottom: 0cm;">Hesaplanan bu değerleri bir  <a href="http://www.bilgisayarkavramlari.com/2007/05/04/array-dizi/">dizi (array)</a> içerisinde tutup tekrar hesaplanmasını engellemek istiyoruz:</p>
<p style="margin-bottom: 0cm;"><img style="text-align: left;" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/sbres_1307346697_4__.jpg" border="0" alt="" width="643" height="525" />Yukarıdaki yeni kodda, bir dizi içerisinde tek döngü ile sonucu hesaplattık. Buna göre algoritmamız iki elemanlı bir diziyi kullanmakta, dizinin 0. elemanları 7lerin sayısını ve 1. elemanları ile 9ların sayısını saymaktadır.</p>
<p style="margin-bottom: 0cm;">Kodumuz ilk başta 0 için 0 tane 7 ve 0 tane 9 gerektiği gerçeği ile çalışmaya başlıyor. 14-23. satırlar arasındaki döngü basitçe i. terim için i-a ve i-b değerlerine bakıyor. Şayet i. terim için i-a veya i-b değerinde bir çözüm varsa (nereden geldiğini önemsemeksizin) bu çözüme bulduğu koşulu ilave ederek mevcut i değeri için çözümü kaydediyor. Şayet bu iki terim de bulunmuyorsa o zaman bir sonraki i değerine geçiyor.</p>
<p style="margin-bottom: 0cm;">Ekran çıktısı aşağıdaki şekildedir:</p>
<p style="margin-bottom: 0cm;"><img style="text-align: left;" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/sbres_1307346697_5__.jpg" border="0" alt="" width="280" height="315" /></p>
<p>Son 20 satır görülmekle birlikte daha önceki satılar alıntılanmamıştır. Ayrıca son 20 satırda görüldüğü üzere, tamamına ait bir çözüm bulunmaktadır. Örneğin 88 sayısı için 7*10 + 9*2 = 88 sonucuna ulaşılmıştır. En son satırda ise 100 için 7*13 + 9*1 sonucu görülmektedir.</p>
<p style="margin-bottom: 0cm;">Görüldüğü üzere birden fazla sonuç olsa bile tek bir sonucu görmekteyiz bunun sebebi veri yapısının bir sonuç üretmek üzere tasarlanmış olmasıdır. Elbette daha farklı veri yapıları kullanılarak diğer çözümleri de gösteren sonuçlar elde edilebilir.</p>
<p style="margin-bottom: 0cm;">Yukarıdaki algoritmanın karmaşıklığı ise bir öncekine göre oldukça iyi sayılabilecek O(n) olarak bulunur. Bunun sebebi dizideki her elemanın üzerinden tek bir kere geçiyor olması ve dolayısıyla tek bir döngünün (koddaki 14-21 satırlar arası) çalışıyor olmasıdır.</p>
</div>

<p class="sayac_bilgi">569 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2011/06/06/bin-packing-kutulama-problemi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Etraflı Arama (Tam Arama, Exhaustive Search)</title>
		<link>http://www.bilgisayarkavramlari.com/2011/05/17/etrafli-arama-tam-arama-exhaustive-search/</link>
		<comments>http://www.bilgisayarkavramlari.com/2011/05/17/etrafli-arama-tam-arama-exhaustive-search/#comments</comments>
		<pubDate>Tue, 17 May 2011 12:34:25 +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 yapıları]]></category>
		<category><![CDATA[yapay zeka (artificial intelligence)]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2011/05/17/etrafli-arama-tam-arama-exhaustive-search/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Literatürde tam arama veya etraflı arama olarak geçmektedir. İngilizcede “exhaustive search” terimi kullanılır. Genel olarak, arama algoritmalarının performansını arttırmak için kullanılan bir yöntemdir. Bir arama algoritmasının tam arama (exhaustive search) olabilmesi için aşağıdaki şartları sağlaması gerekir: Bir değerin bulunmadığını söylemeden önce bütün değerlere bakmış veya bütün ihtimalleri değerlendirmiş olmalıdır. Arama [...]]]></description>
			<content:encoded><![CDATA[<div>
<p style="margin-bottom: 0cm;">Yazan : Şadi Evren ŞEKER</p>
<p style="margin-bottom: 0cm;">Literatürde tam arama veya etraflı arama olarak geçmektedir. İngilizcede “exhaustive search” terimi kullanılır. Genel olarak, arama algoritmalarının performansını arttırmak için kullanılan bir yöntemdir.</p>
<p style="margin-bottom: 0cm;">Bir arama algoritmasının tam arama (exhaustive search) olabilmesi için aşağıdaki şartları sağlaması gerekir:</p>
<ul>
<li>
<p style="margin-bottom: 0cm;">Bir değerin bulunmadığını söylemeden önce bütün değerlere bakmış veya bütün ihtimalleri değerlendirmiş olmalıdır.</p>
</li>
<li>
<p style="margin-bottom: 0cm;"><a href="http://www.bilgisayarkavramlari.com/2009/11/23/arama-algoritmalari-search-algorithms/">Arama uzayında hareket edilirken (Arama işlemi sırasında)</a> sistematik bir yöntem kullanılmalıdır. Diğer bir deyişle arana değerlere tekrar tekrar bakılmamalı, ve her adımdan sonra hangi değere bakılacağı belirlenmelidir.</p>
</li>
</ul>
<p style="margin-bottom: 0cm;">Yukarıdaki şartları sağlayan arama algoritmalarına etraflı arama veya tam arama ismi verilir. Ancak yukarıdaki ikinci maddenin bir istisnası bulunur. Bazı durumlarda arama algoritmasını hızlandırmak için rast gele bir değer ataması (randomness) kullanılabilir. Bu durum bir çelişki olarak görülmemelidir. Algoritmanın içerisinde bir rastgelelik bulunsa bile, aranan değerleri tekrar aramaması ve üretilecek olan rastgeleliğin tam kontrol altında tutulması halinde, arama algoritması etraflı arama olarak sınıflandırılabilir.</p>
<p style="margin-bottom: 0cm;">Etraflı arama algoritmalarını aynı zamanda birer  <a href="http://www.bilgisayarkavramlari.com/2009/11/01/geri-izleme-algoritmasi-backtracking-algorithm/">geri izleme algoritması (back tracking algorithm)</a> olarak isimlendirmek mümkündür. Aslında bütün etraflı arama algoritmaları (Exhaustive search algorithms) birer  <a href="http://www.bilgisayarkavramlari.com/2009/11/01/geri-izleme-algoritmasi-backtracking-algorithm/">geri izleme algoritmasıdır (back tracking algorithm)</a>. Ancak bu cümlenin tersi doğru değildir. Yani bütün geri izleme algoritmalarının etraflı arama algoritması olduğunu söyleyemeyiz. Buradaki fark, etraflı arama algoritmalarının, arama işlemi sırasında aranacak olan değerlerin bir kısmını budamasından kaynaklanır (prunning). Yani bazı değerlerin bakılmasına gerek kalmayacak şekilde arama işlemini hızlandırırlar.</p>
<p style="margin-bottom: 0cm;">Bu anlamda  <a href="http://www.bilgisayarkavramlari.com/2008/11/09/dogrusal-arama-linear-search/">doğrusal arama (linear search)</a>,  <a href="http://www.bilgisayarkavramlari.com/2009/11/24/kaba-kuvvet-metin-arama-algoritmasi-bruteforce-text-search-algorithm/">kaba kuvvet araması (brute force algorithm)</a> gibi temel arama algoritmaları birer etraflı arama kabul edilebilir.</p>
<p>&nbsp;</p>
</div>

<p class="sayac_bilgi">294 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2011/05/17/etrafli-arama-tam-arama-exhaustive-search/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Algoritma (Algorithm)</title>
		<link>http://www.bilgisayarkavramlari.com/2011/04/25/algoritma-algorithm/</link>
		<comments>http://www.bilgisayarkavramlari.com/2011/04/25/algoritma-algorithm/#comments</comments>
		<pubDate>Mon, 25 Apr 2011 18:23:52 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[algoritma analizi (teory of algorithms)]]></category>
		<category><![CDATA[bilgisayar felsefesi]]></category>
		<category><![CDATA[Bilgisayar Kavramları]]></category>
		<category><![CDATA[Programlama Dilleri]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2011/04/25/algoritma-algorithm/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Bazan biz insanlar için çok kullanılan kelimeler, tanımlanması en güç kelimeler haline dönüşebiliyor. Algoritma da sanırım bilgisayar bilimleri için benzer özellikte olan bir kelime. Sanırım bu kelimeyi tanımlarken &#8220;bir dizi matematiksel adım&#8221; ifadesini kullanmak yerinde olur. Bütün algoritmalar, matematiksel olarak ispatlanabilen ve dizilimi kesinlikle önem taşıyan ve bir metot anlatmasıdır. [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER
</p>
<p>Bazan biz insanlar için çok kullanılan kelimeler, tanımlanması en güç kelimeler haline dönüşebiliyor. Algoritma da sanırım bilgisayar bilimleri için benzer özellikte olan bir kelime.
</p>
<p>Sanırım bu kelimeyi tanımlarken &#8220;bir dizi matematiksel adım&#8221; ifadesini kullanmak yerinde olur.
</p>
<p>Bütün algoritmalar, matematiksel olarak ispatlanabilen ve dizilimi kesinlikle önem taşıyan ve bir metot anlatmasıdır.
</p>
<p>Aslında bir kelimeyi başka bir kelime ile ifade etmek bir hatadır. Şayet iki kelime aynı şeyi anlatıyorsa, o zaman bir tanesi fazla demektir ama genelde algoritma için bu &#8220;metot&#8221; veya &#8220;sistem&#8221; kelimeleri sıkça kullanılıyor. Oysaki algoritma bunlardan farklı olarak bir, matematiksel bir dizilimdir. Evet, bir problemi çözmek için gerek metodu anlatır bu çözümde kullanılan sistemi gösterir ama atlanmaması gereken ispat edilebilirlik, karmaşıklığının ölçülebilirliği aslında bilgisayar bilimlerinin de temelini oluşturur.
</p>
<p>Bu durumu bir örnek üzerinden açıklamaya çalışalım.
</p>
<p>Örneğin sık kullanılan <a href="http://www.bilgisayarkavramlari.com/2008/08/09/siralama-algoritmalari-sorting-algorithms/">sıralama problemini (sorting problem)</a> ele alalım. Elimizde bir dizi karıştırılmış sayı var ve biz bunları küçükten büyüğe doğru sıralamak istiyoruz. Bu durumda birisinin çıkıp ben bunları sıraladım demesi bir algoritma olmaz. Çünkü algoritmanın sistematik olarak probleme yaklaşması gerekir.
</p>
<p>Ben bunları sıralayan bir sistem yaptım demesi de algoritma olmaz. Çünkü sistemin bütün adımlarını belirli olması ve analiz edilebilir olması gerekir.
</p>
<p>Ben bunları sıralayan ve şu adımlardan oluşan bir sistem yaptım demesi de yeterli olmaz çünkü bu algoritmanın her durumda çalışacağının matematiksel olarak ispatlanabilmesi gerekir.
</p>
<p>Ancak bu aşamadan sonra bir algoritmadan bahsediyoruz demektir ve tam da bu aşamadan sonra artık algoritmanın performansından bahsetmeye başlar ve algoritmamızın hafıza ve zaman ihtiyaçlarını ölçebilmeyi isteriz.
</p>
<p>Yukarıdaki bütün bu tanımların yanında, bir algoritma elde ettikten sonra ayrıca bu algoritmanın uygulanabilir oluşu da tartışmaya açıktır. Örneğin geliştirilen algoritma, günümüz bilgisayarları için uygulanabilir olmayabilir. Bu durum algoritmamızı , algoritma olmakta çıkarmaz ancak uygulanamaz bir hale sokar (örneğin şu anda yeni yeni gelişen kuantum hesaplama algoritmaları buna birer örnek olabilir).
</p>
<p>Ayrıca algoritmaların yaklaşımlarına göre sınıflandırılması da mümkündür. Hatta bu sınıflandırmaya uygun olarak algoritma geliştirilme metodolojileri de bulunmaktadır. Örneğin <a href="http://www.bilgisayarkavramlari.com/2007/04/14/nesne-yonelimli-programlama-object-oriented-programming/">nesne yönelimli programlama (object oriented programming)</a> , <a href="http://www.bilgisayarkavramlari.com/2007/12/18/yapisal-programlama-structured-programming/">yapısal programlama (structured programming)</a> veya <a href="http://www.bilgisayarkavramlari.com/2007/12/18/fonksiyonel-programlama-procedural-programming-functional-programming/">fonksiyonel programlama (functional programming)</a> , <a href="http://www.bilgisayarkavramlari.com/2009/11/16/emirli-programlama-imperative-programming/">Emirli programlama (Imperative Programing)</a>, <a href="http://www.bilgisayarkavramlari.com/2007/12/18/otomat-yonelimli-programlama-automata-based-programming/">özdevinirli programlama (automat based programming)</a> gibi.</p>

<p class="sayac_bilgi">566 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2011/04/25/algoritma-algorithm/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

