<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Tol++</title>
	
	<link>http://tolpp.com</link>
	<description>Yazilim ve Programlama günlüğü</description>
	<lastBuildDate>Sat, 31 Mar 2012 01:14:35 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/tolpp/crdq" /><feedburner:info uri="tolpp/crdq" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>System Calls (Sistem Çağrıları)</title>
		<link>http://feedproxy.google.com/~r/tolpp/crdq/~3/c5o9-SnKPEY/</link>
		<comments>http://tolpp.com/system-calls-sistem-cagrilari/#comments</comments>
		<pubDate>Sat, 31 Mar 2012 00:51:57 +0000</pubDate>
		<dc:creator>Tolpp</dc:creator>
				<category><![CDATA[İşletim Sistemleri]]></category>

		<guid isPermaLink="false">http://tolpp.com/?p=302</guid>
		<description><![CDATA[Sistem çağrıları  OS tarafından servisler için sağlanan arayüzdür.  Doğrudan donanıma erişenler gibi düşük seviye görevler (tasks) assembly dilinde instructionlar içerdiği halde genellikle C, C++ dilleriyle yazılmışlardır. System call&#8217;lar sayesinde yazılımcı doğrudan donanıma müdahale etmez. Donanım üzerinde gerçekleştireceği işlemi system call kullanarak gerçekleştirir. Bu sayede olası sistem haatalarından kaçınılmış olur. System call&#8217;ların da, sistemden sisteme değişiyor [...]]]></description>
			<content:encoded><![CDATA[<p>Sistem çağrıları  OS tarafından servisler için sağlanan arayüzdür.  Doğrudan donanıma erişenler gibi düşük seviye görevler (tasks) assembly dilinde instructionlar içerdiği halde genellikle C, C++ dilleriyle yazılmışlardır. System call&#8217;lar sayesinde yazılımcı doğrudan donanıma müdahale etmez. Donanım üzerinde gerçekleştireceği işlemi system call kullanarak gerçekleştirir. Bu sayede olası sistem haatalarından kaçınılmış olur.</p>
<p>System call&#8217;ların da, sistemden sisteme değişiyor olması yazılımcının işini zorlaştırır. Bu değişiklik, bir OS için yazılan programın başka bir OS üzerinde çalışamamasına sebep olur. Bu yüzden programcılar, doğrudan sistem call&#8217;lar yerine application program interface(API) kullanmayı tercih ederler.</p>
<p><strong>Neden API kullanılır?</strong></p>
<ul>
<li>API&#8217;ler programın her sistem üzerinde çalışabilmesini sağlar.</li>
<li>API kullanımı, her sistemin system call&#8217;larını ezbere bilmeyi gerektirmez.</li>
<li>Birden fazla sistem işlemini kısa fonksiyonlarla yapabilmeyi sağlar. Programcı API fonksiyonunun içeriğiyle ilgilenmez. Fonksiyonun parametrelerini ve dönüş değerini bilmesi yeterlidir.</li>
</ul>
<p>API&#8217;lerin programlamayı oldukça kolaylaştırdığı doğrudur. Ancak daha spesifik işlemler için system call&#8217;ları kullanmak gerekebilir.</p>
<h3>System Call Tipleri</h3>
<ul>
<li>Process Control (Süreç Kontrolü)</li>
<ul>
<li>bitirme, iptal etme</li>
<li>yükleme, çalıştırma</li>
<li>create process(süreç yaratma), terminate process(süreç sonlandırma)</li>
<li>process attributelerini getirme, process&#8217;e attribute atama</li>
<li>belli bir süre bekleme</li>
<li>bekleme event&#8217;ı, sinyal event&#8217;ı</li>
<li>memory bölgesini allocate, free işlemleri</li>
</ul>
<li>File Management (Dosya Yönetimi)</li>
<ul>
<li>dosya yaratma, dosya silme</li>
<li>açma, kapama</li>
<li>okuma, yazma, konumunu değiştirme(reposition)</li>
<li>dosya attributelerini getirme, atama</li>
</ul>
<li>Device Management (Aygıt Yönetimi)</li>
<ul>
<li>request device, release device</li>
<li>okuma, yazma, reposition</li>
<li>device attributelerini getirme, atama</li>
<li>mantıksal olarak aygıtları ilişkilendirmek, ayırmak</li>
</ul>
<li>Information Maintenance (Bilgilendirme Hizmeti)</li>
<ul>
<li>zamanı veya tarihi getirme, atama</li>
<li>sistem verisini getirme, atama</li>
<li>process, dosya veya device attributelerinin getirilmesi, atanması</li>
</ul>
<li>Communications (İletişim)</li>
<ul>
<li>iletişim bağlantısının yaratılması, silinmesi</li>
<li>mesaj alma, gönderme</li>
<li>durum bilgisinin transferi</li>
</ul>
<li>Protection (Koruma)</li>
<ul>
<li>dosyaların yazma, okuma, çalıştırma izinleri</li>
<li>kullanıcıların system call&#8217;lar üzerindeki yetkileri</li>
</ul>
</ul>
<p><em>Kaynak : Operating System Concepts ~ Eight Edition (s55-s60)</em></p>
<img src="http://feeds.feedburner.com/~r/tolpp/crdq/~4/c5o9-SnKPEY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://tolpp.com/system-calls-sistem-cagrilari/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://tolpp.com/system-calls-sistem-cagrilari/</feedburner:origLink></item>
		<item>
		<title>OS Services (İşletim Sistemi Servisleri)</title>
		<link>http://feedproxy.google.com/~r/tolpp/crdq/~3/m-IrOHCt-Zo/</link>
		<comments>http://tolpp.com/os-services-isletim-sistemi-servisleri/#comments</comments>
		<pubDate>Wed, 25 Jan 2012 17:38:48 +0000</pubDate>
		<dc:creator>Tolpp</dc:creator>
				<category><![CDATA[İşletim Sistemleri]]></category>
		<category><![CDATA[Operating System Services]]></category>
		<category><![CDATA[Operating Systems]]></category>
		<category><![CDATA[System Structures]]></category>

		<guid isPermaLink="false">http://tolpp.com/?p=269</guid>
		<description><![CDATA[Bir OS, programların çalışması için uygun bir çevre sağlar. Bunun için de OS çeşitli servislere ihtiyaç duyar. Bazı özelleşmiş servisler işletim sisteminden işletim sistemine farklılık gösterebilir. Ancak genel hatlarıyla bir işletim sisteminin sağladığı servisler şöyledir : User Interface : Kullanıcıların işletim sistemine ne yapmak istedikleri arayüzdür. Neredeyse tüm işletim sistemleri user interface(UI) içerir. Bazı UI [...]]]></description>
			<content:encoded><![CDATA[<p>Bir OS, programların çalışması için uygun bir çevre sağlar. Bunun için de OS çeşitli servislere ihtiyaç duyar. Bazı özelleşmiş servisler işletim sisteminden işletim sistemine farklılık gösterebilir. Ancak genel hatlarıyla bir işletim sisteminin sağladığı servisler şöyledir :<a href="http://tolpp.com/upLoads/2012/01/os-scheme.png" rel="lightbox[269]" title="os-scheme"><img class="alignright size-medium wp-image-286" title="os-scheme" src="http://tolpp.com/upLoads/2012/01/os-scheme-300x247.png" alt="OS scheme with services" width="300" height="247" /></a></p>
<p><strong>User Interface :</strong> Kullanıcıların işletim sistemine ne yapmak istedikleri arayüzdür. Neredeyse tüm işletim sistemleri user interface(UI) içerir. Bazı UI türleri :</p>
<ul>
<li><em>Command-line interface (CLI) :</em> Komutların yazı olarak girildiği UI türüdür. Günümüzde neredeyse tüm işletim sistemleri tarafından kullanılır. Örneğin windows için run -&gt; cmd diyerek ulaşılabilir. Linux&#8217;ta terminal veya console olarak görülebilir.</li>
<li><em>Batch interface :</em> Yapılacak işlemlerin daha önceden dosyalara kaydedildiği UI türü. İşletim sistemine dışarıdan içi komut dolu dosya verilir ve işletim sistemi bu komutları işler.</li>
<li><em>Graphical User Interface (GUI) :</em> En çok kullanılan arayüz şeklidir. Arayüz kullanıcıya pencereler şeklinde gösterilir. Menüleri seçmek, pencerelerde dolaşmak, komutlar vermek için fare gibi nokta belirleyen aygıtlar kullanılır. Klavye ise text girişi vb için kullanılır. Windows, Mac OS X, bazı Linux sürümleri (KDE, Gnome &#8230; kullanan) GUI kullanır.</li>
</ul>
<p><strong>Program Execution :</strong> Sistem programları belleğe yükleyebilmeli ve yüklediği bu programları çalıştırabilmelidir. Ayrıca bu programlar normal veya normal olmayan yollardan (ör : Hata vererek) sonlanabilmelidir.</p>
<p><strong>I/O Operations :</strong> Çalışan bir program bir aygıttan veya bir dosyadan girdi/çıktı yapmak isteyebilir. I/O işleminin etkin ve güvenli bir şekilde yapılabilmesi için işlem doğrudan kullanıcı tarafından yapılmamalıdır. Bu da işletim sistemlerin I/O desteği vermesini gerekli kılar.</p>
<p><strong>File-System Manupilation :</strong> Bir program dosyaları okumak, yazmak; klasörler içerisinde dolaşmak veya dosyaları, klasörlerı oluşturmak, silmek, adlandırmak, isimlerine göre arama yapmak, bilgileri görüntülemek isteyebilir. Bazı programlar dosyayı sahiplenerek dosya, klasör yönetimi hakkına sahip olabilir. Çoğu OS çeşitli file system sunar. Bu seçim kişinin kişisel seçimine veya bazı özelliklere ve performansa bağlı olarak yapılabilir.</p>
<p><strong>Communications :</strong> Sistemdeki bir process bir başka process ile iletişime geçmek isteyebilir. Bu iki process aynı bilgisayarda veya ağ üzerindeki farklı bilgisayarlarda olabilir. Processler arasındaki iletişim <em>shared memory</em> veya <em>message passing</em> yöntemlerinden biri ile gerçekleştirilir.</p>
<p><strong>Error detection :</strong> OS, oluşabilecek hataların sürekli farkında olmalıdır. Her tür hata için OS doğruluğu ve tutarlılığı sağlamak için uygun işlemi yapmalıdır. Oluşabilecek bazı örnek hatalar :</p>
<ul>
<li>CPU ve Bellek hataları : Belleğe erişememe, gücün kesilmesi&#8230;</li>
<li>I/O Aygıtı hataları : bellek aygıtı üzerindeki parity hataları, ağ üzerindeki bağlantının kesilmesi, yazıcıya kağıt sıkışması&#8230;</li>
<li>User Program Hataları : Aritmetik taşmalar, kendine ait olmayan bir bellek bölgesine erişmeye çalışmak, çok fazla CPU kullanımı &#8230;</li>
</ul>
<p><strong>Resource Allocation :</strong> Birçok kullanıcı veya birçok görevin (task/job) aynı anda çalıştığı sistemlerde, her biri için kaynaklar ayrılmalıdır.</p>
<p><strong>Accounting :</strong> Hangi kullanıcının ne kadar kaynak kullandığı, hangi kaynakları kullandığı gibi bilgilerin tutulması işlemidir. Bilgisayarın yeniden konfigüre edilmesi; donanımının, yazılımının güncellenmesi için gerekli olabilir.</p>
<p><strong>Protection and Security :</strong> Çok sayıda process eş zamanlı işletilirken, bir process&#8217;in diğer process işleyişine veya bir process&#8217;in işletim sisteminin işleyişine karışamıyor olması gereklidir. Bu yüzden bir process, başka bir process&#8217;in bellek bölgesine erişemez.</p>
<address>Kaynak : Operating System Concepts ~ Eigthth Edition (s50,s51)</address>
<img src="http://feeds.feedburner.com/~r/tolpp/crdq/~4/m-IrOHCt-Zo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://tolpp.com/os-services-isletim-sistemi-servisleri/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://tolpp.com/os-services-isletim-sistemi-servisleri/</feedburner:origLink></item>
		<item>
		<title>İşletim Sistemi Ne Yapar?</title>
		<link>http://feedproxy.google.com/~r/tolpp/crdq/~3/x-zALVS_1CA/</link>
		<comments>http://tolpp.com/isletim-sistemi-ne-yapar/#comments</comments>
		<pubDate>Wed, 25 Jan 2012 12:31:51 +0000</pubDate>
		<dc:creator>Tolpp</dc:creator>
				<category><![CDATA[İşletim Sistemleri]]></category>
		<category><![CDATA[Application Programs]]></category>
		<category><![CDATA[Control Program]]></category>
		<category><![CDATA[Resource Allocator]]></category>
		<category><![CDATA[System Programs]]></category>
		<category><![CDATA[System View]]></category>
		<category><![CDATA[User View]]></category>

		<guid isPermaLink="false">http://tolpp.com/?p=253</guid>
		<description><![CDATA[Bir bilgisayar sistemi donanım (hardware), işletim sistemi (operating system), uygulama programları (application programs) ve kullanıcılar (users) olmak üzere 4 bölümde incelenebilir. Hardware sistem için temel kaynakları sağlar.  İşlemci (CPU), bellek, Girdi/Çıktı cihazları (I/O devices) gibi. Application programs kullanıcıların problemlerini çözmek için donanım kaynaklarını kullanan yazılımlardır. Spreadsheet, Web tarayıcıları, derleyiciler gibi. Operating system ise hardware, application programs [...]]]></description>
			<content:encoded><![CDATA[<p>Bir bilgisayar sistemi donanım (hardware), işletim sistemi (operating system), uygulama programları (application programs) ve kullanıcılar (users) olmak üzere 4 bölümde incelenebilir.</p>
<p>Hardware sistem için temel kaynakları sağlar.  İşlemci (CPU), bellek, Girdi/Çıktı cihazları (I/O devices) gibi.</p>
<p>Application programs kullanıcıların problemlerini çözmek için donanım kaynaklarını kullanan yazılımlardır. Spreadsheet, Web tarayıcıları, derleyiciler gibi.</p>
<p>Operating system ise hardware, application programs ve users arasında köprü görevi görür. Hardware&#8217;ı kontrol eder ve birçok user&#8217;ın birçok application programda çalışmasına izin verir.</p>
<h3>User View</h3>
<p>Bir bilgisayarı kullanan kişinin (kullanıcı/user) görüşü kullanılan arayüz&#8217;e göre değişir.</p>
<p>Birçok kullanıcı monitör, klavye, fare ve sistem parçalarından oluşan bilgisayarları kullanır. Bu tür bilgisayarlara kişisel bilgisayar(PC/Personal Computer) diyoruz. Bu tür sistemler bir kullanıcının tüm kaynakları tekeline alması için tasarlanmıştır. Burada amaç kullanıcının yapacağı işin performansını en üst seviyeye çıkarmaktır. Bu tür bilgisayarlarda kullanılan işletim sistemi kolay kullanım sağlar. İşletim sisteminin asıl amacı performanstır ve kaynak kullanımını (resource utilization) çok kullanıcıya dağıtma amacı gütmez.</p>
<p>Diğer tür bilgisayarlar kullanıcıların terminalleri kullandıklarıdır. Burada, merkezde çalışan bir mainframe veya minicomputer vardır. Tüm kullanıcılar terminaller vasıtasıyla bu ana bilgisayara bağlanır. Bu tür bilgisayarlarda kullanılan işletim sisteminin asıl amacı kaynak kullanımını (resource utilization) en üst seviyeye çekmektir.</p>
<p>Üçüncü tür bilgisayarlar, kişilerin workstation kullandıklarıdır. Bir workstation diğer workstationlara ve serverlara bağlıdır. Kullanıcıların kendilerine ait kaynakları (resources) vardır fakat aynı zamanda network üzerinde paylaşılan kaynakları da kullanırlar. (dosya saklama, hesaplama yapma, çıktı alma gibi). Bu tür bilgisayarlarda kullanılan işletim sistemi kullanılabilirlik (usability) ve kaynak kullanımını (resource utilization) orantılı şekilde yüksek tutmalıdır.</p>
<p>Dördüncü tür bilgisayarları el bilgisayarları, tabletler, akıllı telefonlar olarak düşünebiliriz. Bu tür cihazların azı artık bağımsız olarak çalışmaktadır. Çoğu kablosuz olarak bir ağa dahildir. Bu tür cihazlar fazla güç harcamamaları için çok hızlı değildir. Bu yüzden de arayüzleri limitlidir. Bu tür bilgisayarlarda bulunan işletim sistemi, bireysel kullanımı kolaylaştırmayı hedefler. Ancak pil ömrü diye bir problem olduğundan olabildiğince az güç tüketmeye çabalar.</p>
<p>Bazı bilgisayarlar ise user view çok az olabilir veya hiç olmayabilir. Evdeki bazı embedded cihazlar, otomobillerdeki bazı embedded bilgisayarlar. Bu tür bilgisayarlar için tasarlanan işletim sistemleri daha çok kullanıcı müdahalesi olmadan çalışabilmesi için tasarlanır.</p>
<h3>System View</h3>
<p><em>Resource Allocator :</em> İşletim sistemi bir kaynak ayırıcısıdır. Bir bilgisayar sisteminde birçok kaynak vardır ve bunlar CPU Time, memory space, file-storage space problemlerinin çözümünü gerektirir. OS, bu kaynakların hangi programlar tarafından nasıl kullanacağını belirler. Resource allocation, özellikle çok kullanıcılı bilgisayarlarda hayati önem taşır.</p>
<p><em>Control program :</em> İşletim sistemi bir kontrol programıdır. Control program user programlarının çalışmasını yönetir. Hatalardan korur ve yanlış kullanımı önler. Ayrıca I/O cihazlarıyla da control program ilgilenir.</p>
<h3>İşletim Sisteminin Tanımı</h3>
<p>İşletim sistemi için tam bir tanım yapmak mümkün değildir. İşletim sistemleri vardır çünkü kullanılabilir bilgisayar sistemleri kullanılarak problem çözümünde makul çözüm yolları sunarlar.</p>
<p>Bilgisayar sisteminin temel görevi kullanıcı programlarını çalıştırmak ve kullanıcı problemini kolaylıkla çözmektir. Bu amaçla ilk olarak bilgisayar donanımı geliştirildi. Donanımın kendi başına kullanımının zor olduğu anlaşıldığındaysa application programlar geliştirildi. Bu application programların birleştirilip tek bir noktadan çalıştırılan halin işletim sistemi (operating system) diyebiliriz.</p>
<p>İşletim sistemini hangi parçaların oluşturduğu da kesin değildir. Ancak bir işletim sistemini kernel, system programs ve application programs olarak incelemek mümkündür.</p>
<p><em>Kernel :</em> İşletim sistemi çalıştığı süre boyunca çalışan program. İşletim sisteminin çekirdeği. Bilgisayar açılır açılmaz memorye yüklenen program.</p>
<p><em>System Programs :</em> Kernel parçası olmayan, ancak bilgisayarın çalışmasını etkileyen, düzenleyen programlar. Sürücüler (drivers) bu gruba alınabilir</p>
<p><em>Application Programs :</em> İşletim sistemiyle doğrudan ilişkili olmayan programlardır. Daha çok kullanıcıların işlerini halletmeye yöneliktir.</p>
<p>&nbsp;</p>
<address>Kaynak : Operating System Concepts ~ Eight Edition (s3,s4,s5,s6)</address>
<img src="http://feeds.feedburner.com/~r/tolpp/crdq/~4/x-zALVS_1CA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://tolpp.com/isletim-sistemi-ne-yapar/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://tolpp.com/isletim-sistemi-ne-yapar/</feedburner:origLink></item>
		<item>
		<title>CSharp delegasyonlar (delegeler [delegates]) – 1</title>
		<link>http://feedproxy.google.com/~r/tolpp/crdq/~3/ciz7UMwUc7Y/</link>
		<comments>http://tolpp.com/csharp-delegasyonlar-delegeler-delegates-1/#comments</comments>
		<pubDate>Mon, 25 Jul 2011 17:40:38 +0000</pubDate>
		<dc:creator>Tolpp</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[CSharp]]></category>

		<guid isPermaLink="false">http://tolpp.com/?p=198</guid>
		<description><![CDATA[Delegeler, birçok programlama dilindeki function pointer&#8217;ların C# karşılığı olarak düşünülebilir. Bu pointerlar vasıtasıyla, istediğimiz bir değişkene fonksiyonun geri döndürdüğü değeri değil, fonksiyonun kendisi (aslında fonksiyonun belekteki yeri) atanmış olur. Event mekanizmaları tasarlanırken sıkça kullanılan function pointer, typesafe olmadığından birçok problemlere yol açabilir. C# içindeki delegeler ise typesafetir. Madem temelde sıradan metodlar gibi,  peki neden delegate [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Delegeler</strong>, birçok programlama dilindeki function pointer&#8217;ların C# karşılığı olarak düşünülebilir. Bu pointerlar vasıtasıyla, istediğimiz bir değişkene fonksiyonun geri döndürdüğü değeri değil, fonksiyonun kendisi (aslında fonksiyonun belekteki yeri) atanmış olur. Event mekanizmaları tasarlanırken sıkça kullanılan function pointer, typesafe olmadığından birçok problemlere yol açabilir. C# içindeki delegeler ise typesafetir.</p>
<p>Madem temelde sıradan metodlar gibi,  peki neden delegate kullanılır?</p>
<ul>
<li>Delegeler ile birden fazla metodu aynı anda kullanabiliriz.</li>
<li>Anonim metodlar ile  daha kısa kodlar yazarız.</li>
<li>Async Delegate kullaranarak, metodların asenkron olarak çalışmasını sağlayabiliriz.</li>
<li>Delegeleri dizi şeklinde tutarak, metodların döngülerle çağırılmasını sağlayabiliriz.</li>
</ul>
<p>&nbsp;</p>
<p>Örnek bir delege kullanımı :</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF; font-weight: bold;">namespace</span> DelegateKullanimi
<span style="color: #008000;">&#123;</span>
    <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">delegate</span> <span style="color: #6666cc; font-weight: bold;">void</span> myDel<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">int</span> c,<span style="color: #6666cc; font-weight: bold;">string</span> d<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span> <span style="color: #008080; font-style: italic;">// myDel isimli delegemi class seviyesinde tanımlıyorum</span>
&nbsp;
    <span style="color: #6666cc; font-weight: bold;">class</span> Program
    <span style="color: #008000;">&#123;</span>
        <span style="color: #0600FF; font-weight: bold;">static</span> <span style="color: #6666cc; font-weight: bold;">void</span> Main<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">string</span><span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span> args<span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
            myDel yazdir <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> myDel<span style="color: #008000;">&#40;</span>adFiyatYaz<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span> <span style="color: #008080; font-style: italic;">//Delegemin instance'ını adFiyatYaz fonksiyonunu kullanarak oluşturuyorum</span>
            yazdir <span style="color: #008000;">+=</span> <span style="color: #008000;">new</span> myDel<span style="color: #008000;">&#40;</span>kdvYaz<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span> <span style="color: #008080; font-style: italic;">// yazdir delegate'ime yeni bir myDel intance'ı ekliyorum</span>
&nbsp;
            <span style="color: #008080; font-style: italic;">/* Yukarıda adFiyatYaz ve kdvYaz metodlarımı yazdır isimli myDel tipindeki delegemin içine attım. 
             * myDel delegesini bir integer bir de string alacak şekilde tanımladığımdan, dışarıdan bu iki tip 
dışında veri alan metodları delegem içine eklemeye çalışırsam, derleme sırasında hata alırım.
             */</span>
&nbsp;
            yazdir<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">100</span>,<span style="color: #666666;">&quot;Hoşaf suyu&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span> <span style="color: #008080; font-style: italic;">// yazdır delegesinin kullanımıyla iki metod birden çağırılmış oldu.</span>
        <span style="color: #008000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF; font-weight: bold;">static</span> <span style="color: #6666cc; font-weight: bold;">void</span> adFiyatYaz<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">int</span> a,<span style="color: #6666cc; font-weight: bold;">string</span> b<span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
            <span style="color: #6666cc; font-weight: bold;">float</span> fiyat <span style="color: #008000;">=</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">float</span><span style="color: #008000;">&#41;</span>a<span style="color: #008000;">&#41;</span> <span style="color: #008000;">*</span> <span style="color: #FF0000;">118</span> <span style="color: #008000;">/</span> <span style="color: #FF0000;">100</span><span style="color: #008000;">;</span>
            Console<span style="color: #008000;">.</span><span style="color: #0000FF;">WriteLine</span><span style="color: #008000;">&#40;</span>b <span style="color: #008000;">+</span> <span style="color: #666666;">&quot; ürününün fiyatı: &quot;</span> <span style="color: #008000;">+</span> fiyat<span style="color: #008000;">.</span><span style="color: #0000FF;">ToString</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #008000;">&#125;</span>
        <span style="color: #0600FF; font-weight: bold;">static</span> <span style="color: #6666cc; font-weight: bold;">void</span> kdvYaz<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">int</span> a, <span style="color: #6666cc; font-weight: bold;">string</span> b<span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
            <span style="color: #6666cc; font-weight: bold;">float</span> kdv <span style="color: #008000;">=</span> a <span style="color: #008000;">*</span> <span style="color: #FF0000;">18</span> <span style="color: #008000;">/</span><span style="color: #FF0000;">100</span><span style="color: #008000;">;</span>
            Console<span style="color: #008000;">.</span><span style="color: #0000FF;">WriteLine</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Fiyata dahil KDV : &quot;</span> <span style="color: #008000;">+</span> kdv<span style="color: #008000;">.</span><span style="color: #0000FF;">ToString</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #008000;">&#125;</span>
    <span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<img src="http://feeds.feedburner.com/~r/tolpp/crdq/~4/ciz7UMwUc7Y" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://tolpp.com/csharp-delegasyonlar-delegeler-delegates-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://tolpp.com/csharp-delegasyonlar-delegeler-delegates-1/</feedburner:origLink></item>
		<item>
		<title>CSharp property kullanımı</title>
		<link>http://feedproxy.google.com/~r/tolpp/crdq/~3/HFVg6x6IkIc/</link>
		<comments>http://tolpp.com/csharp-property-kullanimi/#comments</comments>
		<pubDate>Tue, 19 Jul 2011 18:11:45 +0000</pubDate>
		<dc:creator>Tolpp</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[CSharp]]></category>

		<guid isPermaLink="false">http://tolpp.com/?p=189</guid>
		<description><![CDATA[Property, C#&#8217;ta get ve set metodları kullanmadan private değişkenlere erişimi sağlayan, encapsulation olayını güzelleştirerek OOP&#8217;i zevkli hale getiren bir hededir. bir değişken içindeki veriye ulaşabilmek için 40 takla atmanıza, propertyler sayesinde gerek kalmaz. Örnek : 1 2 3 4 5 6 7 8 9 10 class MyC &#123; private string _isim; public string Isim &#123; [...]]]></description>
			<content:encoded><![CDATA[<p>Property, C#&#8217;ta get ve set metodları kullanmadan private değişkenlere erişimi sağlayan, encapsulation olayını güzelleştirerek OOP&#8217;i zevkli hale getiren bir hededir.</p>
<p>bir değişken içindeki veriye ulaşabilmek için 40 takla atmanıza, propertyler sayesinde gerek kalmaz.</p>
<p>Örnek :</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #6666cc; font-weight: bold;">class</span> MyC
<span style="color: #008000;">&#123;</span>
    <span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #6666cc; font-weight: bold;">string</span> _isim<span style="color: #008000;">;</span>
    <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">string</span> Isim
    <span style="color: #008000;">&#123;</span>
        get <span style="color: #008000;">&#123;</span> <span style="color: #0600FF; font-weight: bold;">return</span> _isim<span style="color: #008000;">;</span> <span style="color: #008000;">&#125;</span> <span style="color: #008080; font-style: italic;">// getIsim() fonksiyonundan kurtaran get propertysi </span>
        set <span style="color: #008000;">&#123;</span> _isim <span style="color: #008000;">=</span> value<span style="color: #008000;">;</span> <span style="color: #008000;">&#125;</span> <span style="color: #008080; font-style: italic;">// setIsim(string isim) fonksiyonundan kurtaran set propertysi</span>
    <span style="color: #008000;">&#125;</span>
    <span style="color: #0600FF; font-weight: bold;">public</span> MyC<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">string</span> s<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><span style="color: #0600FF; font-weight: bold;">this</span><span style="color: #008000;">.</span>_isim<span style="color: #008000;">=</span>s<span style="color: #008000;">;</span><span style="color: #008000;">&#125;</span>  <span style="color: #008080; font-style: italic;">//MyC sınıfımın yapıcı (constructor) metodu</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>Bu da bize getIsim() setIsim(string isim) gibi fonksiyonlarla uğraşmak yerine, veriye aşağıdaki gibi kolaylıkla ulaşmamızı sağlar:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;">MyC Tol <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> MyC<span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Ali&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
Tol<span style="color: #008000;">.</span><span style="color: #0000FF;">Isim</span> <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;Tolga&quot;</span><span style="color: #008000;">;</span> <span style="color: #008080; font-style: italic;">// Property üzerinden MyC tipindeki Tol'un _isim değişkenine değer atıyorum</span>
Console<span style="color: #008000;">.</span><span style="color: #0000FF;">WriteLine</span><span style="color: #008000;">&#40;</span>Tol<span style="color: #008000;">.</span><span style="color: #0000FF;">Isim</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span> <span style="color: #008080; font-style: italic;">// Tol.Isim diyerek Tol'un get propertysinden dönen değeri kullanıyorum</span></pre></td></tr></table></div>

<p>Ayrıca, get ve set alanlarının içi istenildiği şekilde değiştirilerek kontroller yapılabilir, istenen değer atanabilir. Veya, get veya set &#8216;lerden istediğimizi yazmayarak, propertinin salt okunur veya salt yazılır olmasını sağlayabiliriz.</p>
<p>Propertylerin diğer bir güzelliği de, metodlara göre daha hızlı çalışmaları. Yazılmış program JIT compiler ile derlenirken, property&#8217;ler inline yapılarak intermediate language haline getiriliyormuş*.</p>
<p>* Kaynak : Professional C# 2005 with .NET 3.0 : Nagel, Evjen, Glynn,Watson,Skinner</p>
<img src="http://feeds.feedburner.com/~r/tolpp/crdq/~4/HFVg6x6IkIc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://tolpp.com/csharp-property-kullanimi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://tolpp.com/csharp-property-kullanimi/</feedburner:origLink></item>
		<item>
		<title>CSharp out parametresi ile fonksiyon çağırımı</title>
		<link>http://feedproxy.google.com/~r/tolpp/crdq/~3/bq8T2RT59qA/</link>
		<comments>http://tolpp.com/csharp-out-parametresi-ile-fonksiyon-cagirimi/#comments</comments>
		<pubDate>Tue, 19 Jul 2011 15:12:30 +0000</pubDate>
		<dc:creator>Tolpp</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[CSharp]]></category>

		<guid isPermaLink="false">http://tolpp.com/?p=179</guid>
		<description><![CDATA[Bir metodu void olarak kullanmamıza rağmen metod içindeki bir veya birden fazla değer almak istiyorsak, out veya ref parametresini kullanabiliriz. ref parametresi dediğim, call-by-referance anlamına geliyor. out parametresi de bu parametreye oldukça benziyor. Ancak ref ve out parametresi arasında farklar var. Şöyle ki : out parametresi ile gönderilen bir değişkenin değeri metodun içinde kullanılamaz metod [...]]]></description>
			<content:encoded><![CDATA[<p>Bir metodu void olarak kullanmamıza rağmen metod içindeki bir veya birden fazla değer almak istiyorsak, out veya ref parametresini kullanabiliriz. ref parametresi dediğim, call-by-referance anlamına geliyor. out parametresi de bu parametreye oldukça benziyor. </p>
<p>Ancak ref ve out parametresi arasında farklar var. Şöyle ki :</p>
<ol>
<li>out parametresi ile gönderilen bir değişkenin değeri metodun içinde kullanılamaz</li>
<li>metod içinde yeni bir değişken yaratılır, fonksiyon sonlanırken referansi metoda gönderilen değişkeninkine atanır</li>
<li>metoda out parametresiyle gönderilen bir değişkene ilk değer atanması zorunlu değildir</li>
</ol>
<p><strong>Hız? Bellek?</strong><span id="more-179"></span><br />
Tıpkı referans ile veri göndermede olduğu gibi, out parametresiyle gönderilen veri de bellek kullanımını azaltıyor. Ayrıca verinin kopyalanması sırasında harcanan süreden de kurtulmuş oluyoruz. Yani, hem hızlı hem de az bellek kullanımını sağlıyor diyebiliriz. </p>
<p>Örnek :</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF; font-weight: bold;">static</span> <span style="color: #6666cc; font-weight: bold;">void</span> Main<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">string</span><span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span> args<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
    <span style="color: #6666cc; font-weight: bold;">int</span> a<span style="color: #008000;">;</span> <span style="color: #008080; font-style: italic;">//değişkene bir ilk değer atamak zorunda değilim, çünkü out parametreli bir fonksiyona gönderdim</span>
&nbsp;
    <span style="color: #008080; font-style: italic;">//Console.WriteLine(a); --&gt; bu satır derleyici tarafından hatalı kabul edilir. Çünkü değişkene değer atayan f fonksiyonu çağırılmamıştır</span>
&nbsp;
    f<span style="color: #008000;">&#40;</span><span style="color: #0600FF; font-weight: bold;">out</span> a<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
    Console<span style="color: #008000;">.</span><span style="color: #0000FF;">WriteLine</span><span style="color: #008000;">&#40;</span>a<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
    Console<span style="color: #008000;">.</span><span style="color: #0000FF;">ReadLine</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #0600FF; font-weight: bold;">static</span> <span style="color: #6666cc; font-weight: bold;">void</span> f<span style="color: #008000;">&#40;</span><span style="color: #0600FF; font-weight: bold;">out</span> <span style="color: #6666cc; font-weight: bold;">int</span> sayi<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
    sayi <span style="color: #008000;">=</span> <span style="color: #FF0000;">20</span><span style="color: #008000;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<img src="http://feeds.feedburner.com/~r/tolpp/crdq/~4/bq8T2RT59qA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://tolpp.com/csharp-out-parametresi-ile-fonksiyon-cagirimi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://tolpp.com/csharp-out-parametresi-ile-fonksiyon-cagirimi/</feedburner:origLink></item>
		<item>
		<title>Java ile Dinamik Programlama Kullanarak Longest Common Subsequence(LCS) çözümü</title>
		<link>http://feedproxy.google.com/~r/tolpp/crdq/~3/lLWuAvmzHpY/</link>
		<comments>http://tolpp.com/java-ile-dinamik-programlama-kullanarak-longest-common-subsequencelcs-cozumu/#comments</comments>
		<pubDate>Tue, 07 Jun 2011 15:04:14 +0000</pubDate>
		<dc:creator>Tolpp</dc:creator>
				<category><![CDATA[Algoritmalar]]></category>
		<category><![CDATA[Dinamik Programlama]]></category>
		<category><![CDATA[Dynamic Programming]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Longest Common Subsequence]]></category>

		<guid isPermaLink="false">http://tolpp.com/?p=139</guid>
		<description><![CDATA[En uzun ortak alt dizi problemi olarak da karşılaşılan longest common subsequence problemini dynamic programming ile nasıl çözüleceğini içeren kodu bu sayfada bulabilirsiniz. LCS Problemi ne diyenler için : http://en.wikipedia.org/wiki/Longest_common_subsequence_problem Dinamik Programlama ne diyenler için : http://tolpp.com/dinamik-programlama-dynamic-programming-nedir/ Aşağıdaki Java kodunu indirmek için : http://tolpp.com/algorithms/LCS.java &#160; 1 2 3 4 5 6 7 8 9 10 [...]]]></description>
			<content:encoded><![CDATA[<p>En uzun ortak alt dizi problemi olarak da karşılaşılan longest common subsequence problemini dynamic programming ile nasıl çözüleceğini içeren kodu bu sayfada bulabilirsiniz.</p>
<p>LCS Problemi ne diyenler için : <a href="http://en.wikipedia.org/wiki/Longest_common_subsequence_problem">http://en.wikipedia.org/wiki/Longest_common_subsequence_problem</a></p>
<p>Dinamik Programlama ne diyenler için : <a href="http://tolpp.com/dinamik-programlama-dynamic-programming-nedir/">http://tolpp.com/dinamik-programlama-dynamic-programming-nedir/</a></p>
<p>Aşağıdaki Java kodunu indirmek için : <a href="http://tolpp.com/algorithms/LCS.java">http://tolpp.com/algorithms/LCS.java</a></p>
<p><span id="more-139"></span><br />
&nbsp;</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> LCS <span style="color: #009900;">&#123;</span>
	<span style="color: #666666; font-style: italic;">/*
	*@author : tolpp
	*/</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> main<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> args<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #003399;">String</span> x <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;ZTR123AAAAB&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #003399;">String</span> y <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;KLMN12BAB&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066; font-weight: bold;">int</span> M <span style="color: #339933;">=</span> x.<span style="color: #006633;">length</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000066; font-weight: bold;">int</span> N <span style="color: #339933;">=</span> y.<span style="color: #006633;">length</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #000066; font-weight: bold;">int</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> cozum <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #000066; font-weight: bold;">int</span><span style="color: #009900;">&#91;</span>M<span style="color: #339933;">+</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span>N<span style="color: #339933;">+</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><span style="color: #666666; font-style: italic;">// Altkümelerin harfler için ne kadar kere ortak olduğunu tuttuğum matrisim</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">// LCS uzunluğunun ve tüm alt problemlerin dinamik programlamayla hesaplandığı kısım</span>
        <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> i <span style="color: #339933;">=</span> M<span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&gt;=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> i<span style="color: #339933;">--</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><span style="color: #666666; font-style: italic;">//Dizi elemanlarını tersten gelerek kontrol ediyorum</span>
            <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> j <span style="color: #339933;">=</span> N<span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span> j <span style="color: #339933;">&gt;=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> j<span style="color: #339933;">--</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>x.<span style="color: #006633;">charAt</span><span style="color: #009900;">&#40;</span>i<span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> y.<span style="color: #006633;">charAt</span><span style="color: #009900;">&#40;</span>j<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
                    cozum<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> cozum<span style="color: #009900;">&#91;</span>i<span style="color: #339933;">+</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span>j<span style="color: #339933;">+</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">+</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span><span style="color: #666666; font-style: italic;">// eşleşme varsa bu harfin olduğu fazladan bir alt küme daha olduğunu belirtmek için matris üzerinde bu harflein bulunduğu konumdaki değeri 1 artırıyorum</span>
                <span style="color: #000000; font-weight: bold;">else</span>
                    cozum<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #003399;">Math</span>.<span style="color: #006633;">max</span><span style="color: #009900;">&#40;</span>cozum<span style="color: #009900;">&#91;</span>i<span style="color: #339933;">+</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span>, cozum<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span>j<span style="color: #339933;">+</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #666666; font-style: italic;">// Eşleşme yoksa, o ana kadarki en uzun altküme uzunluğunu en uzun altküme olarak alıyorum</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">// cozum[][] matrisini kullanarak LCS nin bulunması</span>
        <span style="color: #000066; font-weight: bold;">int</span> i <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span>, j <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
        <span style="color: #003399;">String</span> out<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">while</span><span style="color: #009900;">&#40;</span>i <span style="color: #339933;">&lt;</span> M <span style="color: #339933;">&amp;&amp;</span> j <span style="color: #339933;">&lt;</span> N<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>x.<span style="color: #006633;">charAt</span><span style="color: #009900;">&#40;</span>i<span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> y.<span style="color: #006633;">charAt</span><span style="color: #009900;">&#40;</span>j<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> 
            <span style="color: #009900;">&#123;</span><span style="color: #666666; font-style: italic;">// i ve j değerlerine göre x, y stringleri üzerinde dolaşarak eşleşme olup olmadığını kontrol ediyorum</span>
                out <span style="color: #339933;">+=</span> y.<span style="color: #006633;">charAt</span><span style="color: #009900;">&#40;</span>j<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                i<span style="color: #339933;">++;</span>
                j<span style="color: #339933;">++;</span>
            <span style="color: #009900;">&#125;</span>
            <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>cozum<span style="color: #009900;">&#91;</span>i<span style="color: #339933;">+</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span> <span style="color: #339933;">&gt;=</span> cozum<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span>j<span style="color: #339933;">+</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> i<span style="color: #339933;">++;</span><span style="color: #666666; font-style: italic;">//her zaman en uzun alt kümeye gidebilmek için bu kontrolleri yapıyorum</span>
            <span style="color: #000000; font-weight: bold;">else</span> j<span style="color: #339933;">++;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;LCS Length : &quot;</span><span style="color: #339933;">+</span>out.<span style="color: #006633;">length</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;LCS        : &quot;</span><span style="color: #339933;">+</span>out<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<img src="http://feeds.feedburner.com/~r/tolpp/crdq/~4/lLWuAvmzHpY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://tolpp.com/java-ile-dinamik-programlama-kullanarak-longest-common-subsequencelcs-cozumu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://tolpp.com/java-ile-dinamik-programlama-kullanarak-longest-common-subsequencelcs-cozumu/</feedburner:origLink></item>
		<item>
		<title>Dinamik Programlama (Dynamic Programming) nedir?</title>
		<link>http://feedproxy.google.com/~r/tolpp/crdq/~3/8vaTWzGqFxg/</link>
		<comments>http://tolpp.com/dinamik-programlama-dynamic-programming-nedir/#comments</comments>
		<pubDate>Tue, 07 Jun 2011 14:44:19 +0000</pubDate>
		<dc:creator>Tolpp</dc:creator>
				<category><![CDATA[Algoritmalar]]></category>
		<category><![CDATA[Dinamik Programlama]]></category>
		<category><![CDATA[Dynamic Programming]]></category>
		<category><![CDATA[Rod Cut Problem]]></category>

		<guid isPermaLink="false">http://tolpp.com/?p=91</guid>
		<description><![CDATA[Merhaba. Bu yazıda dinamik programlamayı olabildiğince açıklayıcı şekilde anlatmaya çalışacağım. Dinamik Programlama Nedir? Dinamik programlama karışık problemlerin daha basit düzeylere indirilerek çözülmesini esas alan bir optimizasyon yöntemidir. Optimizasyondaki amaç, problemdeki kısıtlayıcı koşullar altında bu problemle ilgili en iyi karara varmaktır. Bir problem üzerinde dinamik programlama uygulayabilmek için o problemin alt problemlere parçalanabilir veya bir önceki [...]]]></description>
			<content:encoded><![CDATA[<p>Merhaba. Bu yazıda dinamik programlamayı olabildiğince açıklayıcı şekilde anlatmaya çalışacağım.</p>
<h3>Dinamik Programlama Nedir?</h3>
<p>Dinamik programlama karışık problemlerin daha basit düzeylere indirilerek çözülmesini esas alan bir optimizasyon yöntemidir. Optimizasyondaki amaç, problemdeki kısıtlayıcı koşullar altında bu problemle ilgili en iyi karara varmaktır. Bir problem üzerinde dinamik programlama uygulayabilmek için o problemin alt problemlere parçalanabilir veya bir önceki problemin karakteristiğini koruyacak şekilde çözümü daha kolay başka probleme dönüştürülebilir olması yeterlidir</p>
<p>Yönteme göre optimum çözüm <em>başlangıç durumundan bağımsız olarak diğer çözümler ile çözüm sonuçlarına göre optimum çözümler ardışıklığı</em>dır. Yani, başlangıçta alt problemlerin çözümü bulunup buradan elde edilen verilerle daha büyük alt problemler çözüldüğünde problemin kendisi de çözülmüş olmaktadır.<span id="more-91"></span></p>
<h3>Nerelerde Kullanılır?</h3>
<p>Dinamik programlama, aynı çözümlü küçük problemlere parçalanabilen tüm problemler için uygulanabilir. Fakat brute-force ile exponential zamanda çözülebilen problemlerde gerçek değerini gösterir. En basitinden fibonacci dizisinin hesabı için brute-force O(n!) zaman karmaşıklığına sahipken, dinamik programlama ile problem O(n) zamanda çözülebilmektedir.</p>
<p>DP ile çözülebilecek birkaç problem:</p>
<ul>
<li>Rod-cutting problem</li>
<li>Knapsack problem</li>
<li>Matrix-chain multiplication</li>
<li>Assembly Line Scheduling</li>
<li>Birçok string problemi(LCS, longest increasing subsequence, Levenshtein distance) …</li>
</ul>
<h3>Yapısı ve Kullanımı</h3>
<p>Başlamadan önce, birazdan sıkça göreceğiniz <a href="http://tolpp.com/memoization_nedir/">memoization</a> kavramına bakmanızı öneriyorum.</p>
<h4>Dinamik Programlama Algoritmasının Kurulması</h4>
<p>Bir problem için dinamik programlama algoritması yapmak için aşağıdaki dört adım uygulanır.</p>
<ol>
<li>Characterize the structure of an optimal solution (En iyi çözümün karakteristiğinin belirlenmesi)</li>
<li>Recursively define the value of an optimal solution(En iyi çözümün özyinelemeli tanımı)</li>
<li>Compute the value of an optimal solution,typically in bottom-up fashion(En iyi çözümün değerini top-down with memoization veya bottom-up yaklaşımdan birini kullanarak hesaplanması(genel olarak bottom-up))</li>
<li>Construct an optimal solution from computed information(Hesaplanmış verileri kullanarak en iyi çözümü bul)</li>
</ol>
<p>Yazılan dört adımın ilk üç adımı dinamik programlamanın temel üç adımıdır. Eğer optimal çözümün yalnızca değerine ihtiyacımız varsa(Ör: LCS probleminde eşleşen harf sayısı) yalnızca ilk üç adımı kullanmak yeterli olacaktır.</p>
<p>Farklı problemler için farklı algoritmalar kurulacağından, Rod-Cutting problemi üzerinden DP’yi anlatmaya çalışacağız.</p>
<h4>Rod-Cutting problem (Çubuk kesme problemi)</h4>
<p><strong>Problem :</strong> n uzunluğunda bir çubuğumuz olsun, bu çubuğun her cm lik parçasınınsa gibi bir fiyatı olsun. Fiyat tablosu aşağıdaki gibi olduğuna göre, farklı n uzunluğundaki çubukları kaç parçaya bölersek en fazla kar edeceğimizi bulalım.</p>
<p><a href="http://tolpp.com/dinamik-programlama-dynamic-programming-nedir/rod-cut-problem-table/" rel="attachment wp-att-92"><img class="size-full wp-image-92 alignnone" title="rod-cut-problem-table" src="http://tolpp.com/upLoads/2011/06/rod-cut-problem-table.jpg" alt="" width="430" height="40" /></a></p>
<p>4 birimlik çubuk için soruyu çözecek olursak;</p>
<p>4 : 9<br />
1+3 : 9<br />
2+2 :10<br />
1+1+1+1 : 4<br />
1+1+2 :7 olur. Ve bu durumda en pahalı satışın çubuğu iki parçaya bölerek, 2+2 durumunda yapıldığını görebiliriz.</p>
<h5><span style="color: #800000;">1- Characterizing a rod-cutting</span></h5>
<p>Çubuğumuzu parçalayacağımız birimler i = 1,2,,n-1,n gibi tam sayılar olduğundan ayrışmanın karakteristiğini belirleyebiliriz. Örneğin 7 = 2+2+3 dersek, 7 birim uzunluğundaki çubuğu 2 adet 2cm ve bir adet 3cm olmak üzere 3 parçaya bölmüş oluruz. i değerim en küçük 1 en büyük n olabileceğinden, parça sayısı k yı 1&lt;k&lt;n şeklinde gösterebiliriz.</p>
<p>Tüm parçaların uzunluklarını toplarsak, <a href="http://tolpp.com/dinamik-programlama-dynamic-programming-nedir/image033/" rel="attachment wp-att-93"><img class="alignnone size-full wp-image-93" title="image033" src="http://tolpp.com/upLoads/2011/06/image033.png" alt="" width="126" height="20" /></a> elde ederiz.</p>
<p>Çubuğumun fiyatı parçaların fiyatları toplamı olacağından <a href="http://tolpp.com/dinamik-programlama-dynamic-programming-nedir/image034/" rel="attachment wp-att-94"><img class="alignnone size-full wp-image-94" title="image034" src="http://tolpp.com/upLoads/2011/06/image034.png" alt="" width="152" height="22" /></a> şeklinde gösterebiliriz.</p>
<p>Bir çubuğun en yüksek fiyatını ise <a href="http://tolpp.com/dinamik-programlama-dynamic-programming-nedir/image035/" rel="attachment wp-att-95"><img class="alignnone size-full wp-image-95" title="image035" src="http://tolpp.com/upLoads/2011/06/image035.png" alt="" width="293" height="20" /></a> şeklinde gösterebiliriz.</p>
<p>Burada, <a href="http://tolpp.com/dinamik-programlama-dynamic-programming-nedir/image036/" rel="attachment wp-att-96"><img class="alignnone size-full wp-image-96" title="image036" src="http://tolpp.com/upLoads/2011/06/image036.png" alt="" width="12" height="20" /></a> &#8216;i oluşturan her bir parça da kendini en pahalı yapacak parçalardan oluşmaktadır.</p>
<p>Genelleme yaparsak, maksimum çubuk fiyatı için şöyle diyebiliriz:</p>
<p><a href="http://tolpp.com/dinamik-programlama-dynamic-programming-nedir/image037/" rel="attachment wp-att-97"><img class="alignnone size-full wp-image-97" title="image037" src="http://tolpp.com/upLoads/2011/06/image037.png" alt="" width="129" height="26" /></a></p>
<h5><span style="color: #800000;">2- A Recursive solution</span></h5>
<p><a href="http://tolpp.com/dinamik-programlama-dynamic-programming-nedir/cut-rod-recursive-solution-2/" rel="attachment wp-att-99"><img class="alignnone size-full wp-image-99" title="cut-rod-recursive-solution" src="http://tolpp.com/upLoads/2011/06/cut-rod-recursive-solution1.png" alt="" width="378" height="160" /></a></p>
<p>Yukarıdaki top-down recursive fonksiyon, genelleme yaparak bulduğumuz maksimum çubuk fiyatını geri döndürecektir.Dışarıdan p[1..n] şeklinde ücretleri tutan bir tamsayı dizisi ve çubuk uzunluğunu tutan bir n tamsayısı alır.<br />
n == 0, fonksiyonun özyinelemesinin durmasını sağlayan kontroldür. Eşitlik sağlanmışsa 0 döndürülür.<br />
Döndürülecek q değerinin doğru olması içinse q için bir en küçük ilk değeri atanır.5.satırda da bir for döngüsü ile her parça çağırılarak en büyük değer q içine atılır.<br />
Problem çözümü için bu fonksiyonu kullanacak olursak, O(2^n) zaman karmaşıklığı olduğundan en büyük <a href="http://tolpp.com/dinamik-programlama-dynamic-programming-nedir/image036/" rel="attachment wp-att-96"><img title="image036" src="../upLoads/2011/06/image036.png" alt="" width="12" height="20" /></a> değerleri için çok uzun beklememiz gerekecektir.</p>
<h5><span style="color: #800000;">3- Compute the maximum value of a price</span></h5>
<h6><span style="color: #008000;">A. Memoization kullanılarak Top-Down yaklaşım ile</span></h6>
<p><a href="http://tolpp.com/dinamik-programlama-dynamic-programming-nedir/cut-rod-algorithm-with-top-down-approximation/" rel="attachment wp-att-100"><img class="alignnone size-full wp-image-100" title="cut-rod-algorithm-with-top-down-approximation" src="http://tolpp.com/upLoads/2011/06/cut-rod-algorithm-with-top-down-approximation.png" alt="" width="596" height="393" /></a></p>
<p>Memoized-Cut-Rod(p,n) fonksiyonu, asıl işlemlerin yapan Memoized-Cut-Rod-Aux(p,n,r) fonksiyonunu çağırır. Bu fonksiyon içinde tanımlanan yardımcı array, bizi her defasında alt problem hesaplamaktan kurtarır.</p>
<p>Memoized-Cut-Rod-Aux(p,n,r) fonksiyonu recursive tanımladığımız Top-Down çalışan Rod-Cut(p,n) fonksiyonuna çok benzer. Farklı olarak ilk adımında dizi üzerinden kontrol yapar. Eğer bir alt problem daha önceden çözülmüşse, tekrar çözmeye gerek kalmadan değer doğrudan dizi üzerinden okunur. Çözülmemiş alt problem ise çözülerek dizi üzerine yazılır.</p>
<h6><span style="color: #008000;">B. Bottom-Up yaklaşımı ile</span></h6>
<p><a href="http://tolpp.com/dinamik-programlama-dynamic-programming-nedir/cut-rod-solution-algorithm-with-bottom-up-approximation/" rel="attachment wp-att-101"><img class="alignnone size-full wp-image-101" title="cut-rod-solution-algorithm-with-bottom-up-approximation" src="http://tolpp.com/upLoads/2011/06/cut-rod-solution-algorithm-with-bottom-up-approximation.png" alt="" width="594" height="214" /></a><br />
Bottom-Up-Cut-Rod(p,n) fonksiyonunda i problem boyutu j alt problem boyutundan küçük olduğu sürece (i</p>
<p>Birinci satırda alt problemlerin çözümünü tutabilmek için r[0..n] dizisi yaratılır. Hemen altındaki satırda ise, hiç parça olmaması durumunun bir fiyatı olmayacağından r[0] elemanına 0 değeri atanır.</p>
<p>3. ve 6. Satırlar arasında j büyüklüğüne sahip tüm at problemler çözülür. j 1 değeriyle başlar ve n olana kadar büyür. Bu sayede en küçük alt problemlerden büyüklere doğru bir çözüm elde etmiş oluruz.</p>
<p>6.satırda r[j-i] de bulunan ücretle o an kontrol edilen ücretin toplamı (r[j-i]+p[i]) ile q, q değerini maksimim yapacak şekilde karşılaştırılır, ve en büyük toplam q ya atanır. 7. Satırda alt problem çözümleri güncellenir. 8. Satırda istenen değer geri döndürülür.<br />
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *</p>
<p>Dinamik programlama için kullandığımız Top-Down ve Bottom-Up yaklaşımların ikisi de asimptotik çalışma zamanına sahiptir. Bottom-Up-Cut-Rod fonksiyonunda iç içe iki for döngüsü olduğundan <a href="http://tolpp.com/dinamik-programlama-dynamic-programming-nedir/image061/" rel="attachment wp-att-102"><img class="alignnone size-full wp-image-102" title="image061" src="http://tolpp.com/upLoads/2011/06/image061.png" alt="" width="38" height="20" /></a> çalışma zamanına sahip denebilir. Aynı şekilde, Memoized-Cut-Rod-Aux fonksiyonunun 6 ve 7. Satırlarına bakacak olursak, for içinde fonksiyonun kendini n kere çağırdığını görebiliriz. Özyineleme gerçekleşirken her alt problem yalnızca bir kere hesaplanacağından (memoization sayesinde) 7. Satırda çağıracağımız fonksiyon da bize n gibi bir karmaşıklık getirir. Dolayısıyla Memoized-Cut-Rod için de <a href="http://tolpp.com/dinamik-programlama-dynamic-programming-nedir/image061/" rel="attachment wp-att-102"><img title="image061" src="../upLoads/2011/06/image061.png" alt="" width="38" height="20" /></a> çalışma zamanına sahip diyebiliriz.</p>
<h5><span style="color: #800000;">4- Constructing a solution</span></h5>
<p>Yukarıda yaptığımız hesaplamalar bize çözümü değil, yalnızca en iyi çözümün değerini getiriyordu. Eğer ihtiyacımız olan sadece bu değerse, fonksiyonu çağırmamızın ardından bize dönen değeri doğrudan kullanabiliriz. Eğer ki ihtiyacımız olan çözümün kendisiyse kullandığımız hesaplama(computing) algoritmalarından birini genişleterek çözümü de bir yerde tutacak hale getirmemiz gerekir. Bottom-Up-Cut-Rod fonksiyonun genişleterek çözüme gidelim.</p>
<p><a href="http://tolpp.com/dinamik-programlama-dynamic-programming-nedir/extended-bottom-up-cut-rod/" rel="attachment wp-att-109"><img class="alignnone size-full wp-image-109" title="Extended-Bottom-Up-Cut-Rod" src="http://tolpp.com/upLoads/2011/06/Extended-Bottom-Up-Cut-Rod.png" alt="" width="599" height="266" /></a></p>
<p>Şeklinde bir genişletme ile çözüme ulaşabiliriz. Burada kullandığımız dizisi, tüm en iyi çözümleri içinde tutmaktadır.</p>
<p>Çözümün yazdırılmasını da aşağıdaki fonksiyonla yapalım:</p>
<p><a href="http://tolpp.com/dinamik-programlama-dynamic-programming-nedir/print-cut-rod/" rel="attachment wp-att-110"><img class="alignnone size-full wp-image-110" title="Print-cut-rod" src="http://tolpp.com/upLoads/2011/06/Print-cut-rod.png" alt="" width="594" height="131" /></a></p>
<p>Eğer fonksiyonumuzu Print-Cut-Rod-Solution( ) şeklinde verirsek aşağıdaki gibi bir çözümümüz olacaktır:</p>
<p><a href="http://tolpp.com/dinamik-programlama-dynamic-programming-nedir/cut-rod-solution-table/" rel="attachment wp-att-111"><img class="alignnone size-full wp-image-111" title="cut-rod-solution-table" src="http://tolpp.com/upLoads/2011/06/cut-rod-solution-table.png" alt="" width="468" height="74" /></a></p>
<h4>Longest Common Subsequance (En uzun ortak alt dizi)(LCS) problem</h4>
<p>Problemin dinamik programlama ile çözümüne <a href="../java-ile-dinamik-programlama-kullanarak-longest-common-subsequencelcs-cozumu/?phpMyAdmin=39cd5dcf9309c374ae0bbe9f97171bc2">buradan</a> ulaşabilirsiniz.</p>
<h4>Algoritmanın iyileştirilmesi</h4>
<p>Dinamik programlama sırasında birçok işlemi yeniden yapmak yerine alt problem çözümünü depoladığımızdan çözüme çok daha hızlı ulaşabiliriz. Fakat çok büyük problemler için bu bize büyük maliyette bir belleğe mal olabilir fibonacci sayısılarının bulunması, rod-cutting gibi problemler tek dizi üzerinde tutulduğundan O(n) bellek kullanırken <a href="http://tolpp.com/java-ile-dinamik-programlama-kullanarak-longest-common-subsequencelcs-cozumu/">LCS</a>, Matrix Chain Manipulation gibi problemler O(n^2) bellek kullanırlar. Peki bu sorunun bir çözümü var mıdır?</p>
<p>Eğer bizden çözümün tamamı isteniyorsa maalesef yoktur. Fakat sadece çözümün değeri isteniyorsa çok küçük bellek kullanımlarıyla bu değer elde edilebilir. Örneğin, 35 sayısına kadar olan tüm fibonacci sayılarını listeleyebilmek için dizinin tamamı elimizde olmalıdır. Fakat bizden fib(35) değeri istenirse bunun için fib(34) ve fib(33) değerlerini bilmemiz yeterli olacaktır. Bu da fib(35) değerine O(1) bellek kullanarak ulaşabileceğimiz anlamına gelir. Aynı şekilde <a href="../java-ile-dinamik-programlama-kullanarak-longest-common-subsequencelcs-cozumu/?phpMyAdmin=39cd5dcf9309c374ae0bbe9f97171bc2">LCS</a> probleminde bizden altdizinin ne olduğu yerine altdizinin uzunluğu istenirse, O(n^2) yerine O(n) bellek kullanarak değeri bulabiliriz.</p>
<h3>Kaynaklar</h3>
<p>“Introduction to Algorithms”, <a href="http://www.amazon.com/exec/obidos/search-handle-url/103-7530331-0906216?%5Fencoding=UTF8&amp;search-type=ss&amp;index=books&amp;field-author=Thomas%20H.%20Cormen">Thomas H. Cormen</a>, <a href="http://www.amazon.com/exec/obidos/search-handle-url/103-7530331-0906216?%5Fencoding=UTF8&amp;search-type=ss&amp;index=books&amp;field-author=Charles%20E.%20Leiserson">Charles E. Leiserson</a>, <a href="http://www.amazon.com/exec/obidos/search-handle-url/103-7530331-0906216?%5Fencoding=UTF8&amp;search-type=ss&amp;index=books&amp;field-author=Ronald%20L.%20Rivest">Ronald L. Rivest</a>, <a href="http://www.amazon.com/exec/obidos/search-handle-url/103-7530331-0906216?%5Fencoding=UTF8&amp;search-type=ss&amp;index=books&amp;field-author=Clifford%20Stein">Clifford Stein</a>, The MIT Press; 3rd edition, 2009</p>
<p>“Algoritmalar : teoriden uygulamalara” Vasif V. Nabiyev, Seçkin Yayınları,ikinci baskı 2009</p>
<p><a href="http://www.columbia.edu/%7Ecs2035/courses/csor4231.F09/dynamic.pdf">www.columbia.edu/~cs2035/courses/csor4231.F09/dynamic.pdf</a><cite></cite></p>
<p><a href="http://en.wikipedia.org/wiki/Dynamic_programming">http://en.wikipedia.org/wiki/Dynamic_programming</a></p>
<p><a href="http://www.cs.cmu.edu/%7Eavrim/451f09/lectures/lect1001.pdf">www.cs.cmu.edu/~avrim/451f09/lectures/lect1001.pdf</a><cite></cite></p>
<p><a href="http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-046j-introduction-to-algorithms-sma-5503-fall-2005/video-lectures/">http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-046j-introduction-to-algorithms-sma-5503-fall-2005/video-lectures/</a></p>
<img src="http://feeds.feedburner.com/~r/tolpp/crdq/~4/8vaTWzGqFxg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://tolpp.com/dinamik-programlama-dynamic-programming-nedir/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://tolpp.com/dinamik-programlama-dynamic-programming-nedir/</feedburner:origLink></item>
		<item>
		<title>Dynamic Dispatch nedir?</title>
		<link>http://feedproxy.google.com/~r/tolpp/crdq/~3/vLo9dZRVwPE/</link>
		<comments>http://tolpp.com/dynamic-dispatch-nedir/#comments</comments>
		<pubDate>Thu, 05 May 2011 11:59:40 +0000</pubDate>
		<dc:creator>Tolpp</dc:creator>
				<category><![CDATA[Terimler]]></category>
		<category><![CDATA[Dynamic Dispatch]]></category>
		<category><![CDATA[Programming Languages]]></category>

		<guid isPermaLink="false">http://tolpp.com/?p=73</guid>
		<description><![CDATA[Subclass içinde override edilmiş(overload değil!) bir metod çağırıldığında, subclass içindekinin mi yoksa superclass içindekinin mi çağırılacağının run-time sırasında dinamik olarak belirlenmesine Dynamic Dispatch denir. Hemen bir örnekle : 1 2 3 4 5 6 7 8 9 public class Hayvan&#123; public Hayvan&#40;&#41;&#123;&#125; public void sesCikar&#40;&#41;&#123;System.out.println&#40;&#34;AbidikGubidik&#34;&#41;;&#125; &#125; public class Kopek extends Hayvan&#123; public Kopek&#40;&#41;&#123;&#125; @Override public [...]]]></description>
			<content:encoded><![CDATA[<p>Subclass içinde override edilmiş(overload değil!) bir metod çağırıldığında, subclass içindekinin mi yoksa superclass içindekinin mi çağırılacağının run-time sırasında dinamik olarak belirlenmesine Dynamic Dispatch denir.</p>
<p>Hemen bir örnekle :<br />
<span id="more-73"></span></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Hayvan<span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">public</span> Hayvan<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> sesCikar<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;AbidikGubidik&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Kopek <span style="color: #000000; font-weight: bold;">extends</span> Hayvan<span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">public</span> Kopek<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span>
        @Override
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> sesCikar<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;BarkHavBarkHav&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>şeklinde iki class&#8217;ım olsun. Kopek sınıfımı, Hayvan sınıfımdan türetmiş olayım. Aşağıdaki işlem sırasında;</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">Hayvan minnos <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Hayvan<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
Hayvan fino <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Kopek<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
minnos.<span style="color: #006633;">sesCikar</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
fino.<span style="color: #006633;">sesCikar</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>minnos&#8217;un çıkaracağı ses bellidir -&gt; &#8220;AbidikGubidik&#8221;<br />
fino.sesCikar() fonksiyonu çağırıldığındaysa Dynamic Dispatch yapılır. fino&#8217;nun referansı hayvan olsa bile, Kopek sınıfıyla initialize edildiğinden fino &#8220;BarkHavBarkHav&#8221; sesi çıkaracaktır.</p>
<p><strong>Not :</strong> Java&#8217;da override ettiğiniz bir metodun önüne @Override notunu(annotation) yazmasanız da olur. Yazarsanız, compile time errorların azalmasına, compilerın daha kolay işini görmesine yardımcı olursunuz.</p>
<img src="http://feeds.feedburner.com/~r/tolpp/crdq/~4/vLo9dZRVwPE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://tolpp.com/dynamic-dispatch-nedir/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://tolpp.com/dynamic-dispatch-nedir/</feedburner:origLink></item>
		<item>
		<title>Selection Sort (Seçmeli Sıralama)</title>
		<link>http://feedproxy.google.com/~r/tolpp/crdq/~3/n2UlTp3jvFc/</link>
		<comments>http://tolpp.com/selection-sort-secmeli-siralama/#comments</comments>
		<pubDate>Tue, 01 Feb 2011 15:58:09 +0000</pubDate>
		<dc:creator>Tolpp</dc:creator>
				<category><![CDATA[Sıralama Algoritmaları]]></category>
		<category><![CDATA[Seçmeli Sıralama]]></category>
		<category><![CDATA[Selection Sort]]></category>

		<guid isPermaLink="false">http://tolpp.com/?p=41</guid>
		<description><![CDATA[Seçmeli arama (selection sort) her bir adım sonunda en küçük değerin en başa getirildiği sıralama algoritmasıdır. Dizi içinde dolaşılarak en küçük değer en başa getirilir. Dizideki eleman sayısı N kadar dolaşma işlemi tekrarlandığında dizi üzerinde sırama ede edilmiş olur. Performans Dizimiz üzerinde N tane eleman olsun. Bu durumda N kadar kontrol döngüsü çalıştırılır. Bu döngülerden [...]]]></description>
			<content:encoded><![CDATA[<div class="wp-caption alignright" style="width: 212px"><img class="" title="Selection Sort Animate" src="http://upload.wikimedia.org/wikipedia/commons/b/b0/Selection_sort_animation.gif" alt="Seçmeli arama animasyonu" width="202" height="202" /><p class="wp-caption-text">Seçmeli sıralamanın gerçekleşimini gösteren animasyon</p></div>
<p>Seçmeli arama (selection sort) her bir adım sonunda en küçük değerin en başa getirildiği sıralama algoritmasıdır. Dizi içinde dolaşılarak en küçük değer en başa getirilir. Dizideki eleman sayısı N kadar dolaşma işlemi tekrarlandığında dizi üzerinde sırama ede edilmiş olur.</p>
<h4>Performans</h4>
<p>Dizimiz üzerinde N tane eleman olsun. Bu durumda N kadar kontrol döngüsü çalıştırılır. Bu döngülerden 1. için N, 2.iin N-1 &#8230; N-1. için 2, N.için 1 adet kontrol yapılır. Yani bu sayıları dizi toplamı alırsak N x(N+1)/2 = (N<strong><sup>2</sup></strong>+N)/2 kontrol yapılmış olur. Bu da worst-case <strong>O (n<sup>2</sup>)</strong> karmaşıklık anlamına gelir.</p>
<p>Buradan seçmeli sıralamanın çok performanslı bir sıralama olmadığını görebiliriz. Bu yüzden büyük diziler yerine, minik dizilerde kulanılması daha mantıklı olacaktır. Tercih sebebi ise yazımı çok kolay bil algoritmaya sahip olmasıdır.</p>
<h4>Adım-Adım Uygulama</h4>
<p>Elimizde  5 1 4 2 8 değerlerine sahip 5 elemanlı bir dizi olsun. Bunu selection sort kullanarak adım adım sıralayalım:<br />
<span id="more-41"></span><br />
<strong>İlk döngü:</strong><br />
( <span style="text-decoration: underline;"><span style="color: #ff0000;">5</span></span> 1 4 2 8 )<br />
( 5 <span style="text-decoration: underline;"><span style="color: #ff0000;">1</span></span> 4 2 8 )<br />
( 5 <span style="color: #ff0000;">1</span> <span style="text-decoration: underline;">4</span> 2 8 )<br />
( 5 <span style="color: #ff0000;">1</span> 4 <span style="text-decoration: underline;">2</span> 8 )<br />
( 5 <span style="color: #ff0000;">1</span> 4 2 <span style="text-decoration: underline;">8</span> ) &#8211;&gt;( <strong>1</strong> 5 4 2 8 )</p>
<p><strong>İkinci döngü:</strong><br />
(<strong> 1</strong> <span style="color: #ff0000;"><span style="text-decoration: underline;">5</span></span> 4 2 8 )<br />
(<strong> 1</strong> 5 <span style="color: #ff0000;"><span style="text-decoration: underline;">4</span></span> 2 8 )<br />
(<strong> 1</strong> 5 4 <span style="color: #ff0000;"><span style="text-decoration: underline;">2</span></span> 8 )<br />
(<strong> 1</strong> 5 4 <span style="color: #ff0000;">2</span> <span style="text-decoration: underline;">8</span> ) &#8211;&gt; ( <strong>1 2 </strong>4 5 8 )</p>
<p><strong>Üçüncü Döngü:</strong><br />
(<strong> 1 2 </strong><span style="text-decoration: underline;"><span style="color: #ff0000;">4</span></span> 5 8 )<br />
(<strong> 1 2 </strong><span style="color: #ff0000;">4</span> <span style="text-decoration: underline;">5</span> 8 )<br />
(<strong> 1 2 </strong><span style="color: #ff0000;">4</span> 5 <span style="text-decoration: underline;">8</span> ) &#8211;&gt; (<strong> 1 2 4</strong> 5 8 )</p>
<p><strong>Dördüncü Döngü:</strong><br />
( <strong>1 2 4</strong> <span style="text-decoration: underline;"><span style="color: #ff0000;">5</span></span> 8 )<br />
(<strong> 1 2 4</strong> <span style="color: #ff0000;">5</span> <span style="text-decoration: underline;">8</span> ) &#8211;&gt; (<strong> 1 2 4 5</strong> 8 )</p>
<p>Sıralı dizim : ( 1 2 4 5 8 )</p>
<p>Algoritma gösterilirken, altı çizili değerler o an en küçük kontrolünün yapıldığı değerlerdir. kırmızılarsa o ana kadar karşılaşılan en küçük değer indexini tutar.</p>
<p>Ayrıca dikat edilirse, 2.döngüde sıralı dizi elde edilmesine rağmen iki döngü daha yapılmıştır.Bu yüzden en iyi durumda bile (best-case) algoritma <strong>O (n<strong><sup>2</sup></strong>)</strong> zaman karmaşıklığında çalışmaktadır</p>
<h4>Pseudocode</h4>
<pre>[Sıralı arama algoritmasına ait pseudocode]
    for i ← 0 to n-2 do
    min ← i
    for j ← (i + 1) to n-1 do
        if A[j] &lt; A[min]
            min ← j
    swap A[i] and A[min]
</pre>
<h4>Kaynaklar</h4>
<p><a href="http://en.wikipedia.org/wiki/Selection_sort">http://en.wikipedia.org/wiki/Selection_sort</a></p>
<img src="http://feeds.feedburner.com/~r/tolpp/crdq/~4/n2UlTp3jvFc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://tolpp.com/selection-sort-secmeli-siralama/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://tolpp.com/selection-sort-secmeli-siralama/</feedburner:origLink></item>
	</channel>
</rss>

