veri yapıları

Horspool Algoritması

Yazan : Şadi Evren ŞEKER Algoritmanın gayesi, bir metin içerisinde verilen bir dizginin (string) aranmasıdır. Literatürde arama yapılan metin için T (ingilizcedeki Text (metin) kelimesinden gelmektedir) ve aranan kelime için P (ingilizcedeki Pattern (örüntü) kelimesinden gelmektedir) kullanılmaktadır. Klasik bir arama, yukarıdaki temsili resimde gösterilmiştir. Algoritmanın diğer metin arama algoritmalarından en büyük farkı, aranan dizgi (pattern) [...]

Yinelemeli Derinlik Araması (Iterative Deepining Search)

Yazan :Şadi Evren ŞEKER Bilgisayar bilimlerinin çeşitli alanlarında (örneğin yapay zeka, veri yapıları veya şekil kuramı (graph theory) gibi) kullanılan arama algoritmalarından birsidir.   Algoritma, derin öncelikli drama (depth first search) üzerine kurulu olduğu için, literatürde “iterative deepening depth first search (yinelemeli derinleşen, derin öncelikli arama)” olarak da geçmektedir.   Algoritma basitçe derinlik değerini bir [...]

Labirentte yol bulma kodu

Yazan : Şadi Evren ŞEKER Bu yazının amacı, geri izleme algoritmasının (backtracking algorithm) bir uygulaması olarak, basit bir labirentte yol bulma kodunu JAVA dilinde kodlamaktır. Bu uygulamada herhangi bir yapay zeka yönetmi uygulanmayacaktır. Basitçe kör arama (blind search) yapan ve ihtimalleri sırayla deneyen bir robot uygulaması geliştirilecektir. Örneğin labirent bilgisinin bir dosyada bulunduğunu ve bizim [...]

Şadi Evren ŞEKER tarafından, 04/11/2011 tarihinde yazıldı. | JAVA, veri yapıları, yapay zeka (artificial intelligence) | 10 yorum var

Etraflı Arama (Tam Arama, Exhaustive Search)

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 [...]

Dosyayı Tersten Basan Kod

Yazan : Şadi Evren ŞEKER Gelen bir soru üzerine, C dilinde bir dosyanın içeriğini tersten ekrana basan kodu yazıp sitede yayınlıyorum. Öncelikle algoritmamızı inşa edelim. Ters almak gibi işlemler yapı olarak özyineli (recursive) fonksiyonlara çok uygundur. Genelde stack (yığın) yapısının kullanıldığı özyineli fonksiyonlar bilgiyi tutma ve ters çevirme (son giren ilk çıkar (LIFO) algoritması) için [...]

Şadi Evren ŞEKER tarafından, 26/04/2011 tarihinde yazıldı. | C/C++, Kod Örnekleri, veri yapıları | 5 yorum var

Java dilinde vektörler

Yazan : Şadi Evren ŞEKER Bu yazının amacı, Java dilindeki vektör sınıfının kullanılmasını ve yapısını anlatmaktır. Java dilindeki vektörlerin yapısından bahsederek başlayalım. Klasik veri yapısı olarak dizilerin (array) ve bağlı listelerin (linked list) özelliklerini birleştirmiştir. Bir vektör boyutu belli olmadan tanımlanıp içerisine veri konuldukça hafızada kapladığı yeri arttırmaktadır. Bu anlamda bağlı listelere benzer özellik göstermektedir. [...]

Şadi Evren ŞEKER tarafından, 31/03/2011 tarihinde yazıldı. | JAVA, Nesne Yönelimli Programlama, veri yapıları | 1 yorum var

2-3-4 Ağaçları (2 3 4 trees)

Yazan : Şadi Evren ŞEKER 2-3-4 ağacı, B-ağaçlarının (B-Trees) özel bir halidir. Bu ağacın özelliği, düğüm boyutunun (node size) 3 ile sınırlı olmasıdır. Ağaç ayrıca sürekli olarak dengeli bir ağaç garantisi verir (balanced tree). 2-3-4 ağaçları, kırmızı siyah ağaçlarının (red-black trees) , eş şekillisi (isomorphic) olarak da düşünülebilir. 2-3-4 ağacının ismi, ağaçtaki düğümlerin değişik durumlarda [...]

Mealy ve Moore Makineleri (Mealy and Moore Machines)

Yazan : Şadi Evren ŞEKER Bilgisayar bilimlerinde sıkça kullanılan sonlu durum makinelerinin (finite state machine, FSM veya Finite State Automaton , FSA) gösteriminde kullanılan iki farklı yöntemdir. Genelde literatürde bir FSM’in gösteriminde en çok moore makinesi kullanılır. Bu iki yöntem (mealy ve moore makinaları) sonuçta bir gösterim farkı olduğu için bütün mealy gösterimlerinin moore ve [...]

2-3 Ağacı (2-3 Tree)

Yazan : Şadi Evren ŞEKER Bilgisayar bilimlerinde kullanılan bir veri yapısıdır (data structures). Özel bir ağaç yapısıdır ve amaç ağacı sürekli olarak dengeli (balanced) tutmaktır. Ağaçtaki düğümlere (nodes) isim olarak 2 veya 3 ismi verilebilir. Her düğüm aldığı isme göre farklı işleme tabi tutulur. Düğümlerin isimlendirilmesi aşağıdaki şekilde yapılır: 2 düğümleri (2 nodes) : 2 [...]

Şadi Evren ŞEKER tarafından, 25/01/2011 tarihinde yazıldı. | veri yapıları | A yorum var

Dairesel Bağlı liste ile Önceliğe sahip hasta sırası takibi

Yazan : Şadi Evren ŞEKER Siteye gelen bir soru üzerine bu yazıyı ekliyorum. Öncelik sırası (priority queue), kullanarak gelen hastaları verilen önceliğe göre dairesel bir bağlı listeye (linked list) yerleştiren ve ardından sırayla gelen hastaları listeden alan bir kodu C++ dilinde yazalım. İlk olarak bir hastanın tanımını yapan sınıfı aşağıdaki şekilde kodluyoruz: Bu tanıma göre [...]

Şadi Evren ŞEKER tarafından, 30/12/2010 tarihinde yazıldı. | C/C++, veri yapıları | 1 yorum var

Levenshtein Mesafe Algoritması (Levenshtein Distance)

Yazan: Yrd. Doç. Dr. Şadi Evren ŞEKER İki dizilim arasındaki benzerliği derecelendirmek için kullanılır. Pratikte arama sonuçlarında kelimeler arasındaki benzerliği derecelendirmek için kullanılmaktadır. Basitçe, iki dizi, iki kelime, iki cümle gibi varlıklar arasındaki değiştirme ve ekleme işlemlerini tutar. Örneğin Oyun- Ayan kelimeleri arasındaki mesafe 2 ‘dir çünkü ilk ve ikinci o harfleri a harfi ile [...]

Order Theory (Sıra Teorisi, Nazariyatül Tertib)

Yazan : Yrd. Doç. Dr. Şadi Evren ŞEKER Bu yazının amacı, eğitimimiz sırasında sürekli olarak okuduğumuz bir teori olan tertip teorisi (sıralama teorisi , order theory) konusunda bulunan kavramları (preorder, postorder gibi) açıklamaktır. Osmanlıda bu konuya nazariyatül tertip ismi verilmektedir. Nazariyatül tertip, bilgisayar bilimleri de dahil olmak üzere pek çok matematiksel problemin çözümünde kullanılmaktadır. Örneğin [...]

Bellman Ford Algoritması

UAYRI!: Bu yazıda hatalar bulunmaktadır (Uğur Bey’e teşekkürler). Bu yazıda anlatılan algoritma verilen örnekteki özel olarak sıralanmış kenarlar için doğru çalışmakta ancak farklı durumlarda hata yapabilmektedir. Bellman-Ford algoritmasının tam ve doğru anlatımı için http://www.bilgisayarkavramlari.com/2010/08/05/bellman-ford-algoritmasi-2/ adresindeki yazıyı okuyabilirsiniz. Yazan : Şadi Evren ŞEKER Bu algoritmanın amacı, bir şekil (graph) üzerindeki, bir kaynaktan (source) bir hedefe(target veya [...]

Edmonds Karp Algoritması

Yazan : Şadi Evren ŞEKER Bu algoritmanın amacı, literatürde azami akış ( maximum flow ) olarak geçen ve düğümler (nodes) arasında akış kapasiteleri belirli bir şekildeki (graph) bir başlangıçtan bir hedefe en fazla akışın sağlandığı problemleri çözmektir. Azami akış (maximum flow) problemini örneğin şehirler arasında bağlı boru hattına veya tedarik zincirine benzetebiliriz. Örneğin aşağıdaki şekli [...]

Ford Fulkerson Algoritması

Yazan : Şadi Evren ŞEKER Bu algoritmanın amacı, literatürde azami akış ( maximum flow ) olarak geçen ve düğümler (nodes) arasında akış kapasiteleri belirli bir şekildeki (graph) bir başlangıçtan bir hedefe en fazla akışın sağlandığı problemleri çözmektir. Azami akış (maximum flow) problemini örneğin şehirler arasında bağlı boru hattına veya tedarik zincirine benzetebiliriz. Örneğin aşağıdaki şekli [...]

Şekillerde Sığ Öncelikli Arama

Yazan : Şadi Evren ŞEKER Bu yazının amacı genel amaçlı şekillerde (graphs) sığ öncelikli aramayı (breadth first search , BFS) açıklamaktır. Bu yazı, ağaçlardaki sığ öncelikli arama ile karıştırılmamalıdır. Ağaçlar (trees) bilindiği üzere yönlü dairesel olmayan şekillerdir (directed acyclic graph) dolayısıyla ağaçlar üzerinde bu yazıda anlatılan sıra (queue) yapısına ihtiyaç duyulmaz. Sığ öncelikli arama bir [...]

Python ile Listeler ve Sözlükler (Dictionary)

Yazan : Şadi Evren ŞEKER Bu yazının amacı python programlama dilindeki temel veri işlemleri için kullanılan listeler (lists) ve sözlükleri (dictionaries) açıklamaktır. Python programlama ortamının kurulumu ve bu dilde yapılabilecek temel bazı işlemler için python ile programlama başlıklı yazıya bakabilirsiniz. Öncelikle listelerden başlayıp ardından sözlüklerden bahasedeceğiz: Bir liste değişkeni (variable) aşağıdaki şekilde köşeli parantezler ile [...]

Şadi Evren ŞEKER tarafından, 16/05/2010 tarihinde yazıldı. | Programlama Dilleri, veri yapıları | A yorum var
Tags: , , , ,

Dijkstra Algoritması

Yazan : Şadi Evren ŞEKER Bilgisayar bilimlerinde kullanılan ve algoritmayı literatüre kazandıran kişinin ismini taşıyan dijkstra algoritması, verilen bir şekilde (graph) en kısa yolu (shortest path) bulmak için kullanılır. Bu algoritmanın çalışmasını örnek bir şekil( graph ) üzerinden göstermeye çalışalım. Bu gösterimin ardından Dijkstra algoritmasının başarısını ve zafiyetlerini tartışabiliriz. Get the Flash Player to see [...]

Doğrusal Bölüm (Linear Quotient)

Yazan : Şadi Evren ŞEKER Bilgisayar bilimlerinde, özellikle dosya yönetimi konusunun (file organization) kullandığı bir özetleme (hashing) çakışması (collision) çözüm algoritmasıdır. Basitçe bir çakışma durumu olduğunda, eklenecek olan anahtarı kaç sıra sonraya yerleştireceğimizi bulan ikinci bir özetleme fonksiyonu kullanılır. Kullanılan ikinci özetleme fonksiyonu ise sayının bölümüdür: H1 : K mod n H2 : K / [...]

EISCH (Early Insertion Standart Coalesced Hashing)

Yazan : Şadi Evren ŞEKER Türkçeye, erken ekleme standart birleştirme özetlemesi olarak çevrilebilir. Bilgisayar bilimlerinde, özellikle dosya yönetimi konusunun (file organization) kullandığı bir özetleme (hashing) çakışması (collision) çözüm algoritmasıdır. Basitçe bir özetleme fonksiyonu (hashing function) sonucunda, çalışma olması durumunda (collision), dizinin sonundan başa doğru boş bulunan ilk yere yerleştirmeyi söyler. Bu durumu bir örnek üzerinden [...]

Visual Basic ile Gösterici (Pointer) Kullanımı

Yazan : Şadi Evren ŞEKER Sitede gelen bir soru üzerine bu yazıyı yazmaya karar verdim. Bilgisayar dilleri (makine işlemeli diller, machine processing languages) tasnif edilirken, visual basic gibi görsel tasarıma dayalı diller üst seviye dil (high level langauge) olarak kabul edilirler. Hatta hiç kod yazmadan program üretilmesine izin verdiği için visual basic’i bir dilden çok [...]

Şadi Evren ŞEKER tarafından, 23/02/2010 tarihinde yazıldı. | Kod Örnekleri, veri yapıları | 4 yorum var
Tags: ,

Hasse Çizgeleri (Hasse Diagrams)

Yazan : Şadi Evren ŞEKER Bilgisayar bilimleri de dahil olmak üzere çok sayıdaki bilim ve mühendislik alanında kullanılan bir modelleme biçimidir. Şekilde (graph) kullanılan düğümler (nodes) birer kümeyi ifade etmektedir. Çizimdeki geçişler (transitions) bir kümeden diğer kümeye bir eleman ile geçilebilme durumunu ifade eder. Buna göre bir kümeye eleman eklenmesi veya eleman çıkarılması bir adımlık [...]

Çok Seviyeli Sıralar (Multi Level Queues)

Yazan : Şadi Evren ŞEKER Bilgisayar bilimlerinde kullanılan bir veri yapısı (data structure) çeşididir. Çalışma yapısı olarak sıraya (queue) benzetilebilir. Çok seviyeli sıralarda, sıralara (queue) benzer şekilde ilk giren ilk çıkar (first in first out , FIFO) mantığı geçerlidir. Ancak sıranın birden çok girişi vardır ve bu anlamda, değişik hızlarda ilerleyen birden çok sıranın birleşimi [...]

Şadi Evren ŞEKER tarafından, 18/01/2010 tarihinde yazıldı. | işletim sistemleri, veri yapıları | A yorum var

Çift Özetleme (Double Hashing)

Yazan : Şadi Evren ŞEKER Bilgisayar bilimlerinde kullanılan özetleme fonksiyonları, genellikle büyük bir verinin daha küçük bir hale getirilmesine yarar. Bu anlamda özetleme fonksiyonları veri doğrulama (data verification) , veri bütünlüğü (data integrity), veri güvenliği (security) ve şifreleme (encryption) gibi pek çok alanda kullanılırlar. Özetleme fonksiyonlarının bir problemi, büyük bir veriyi özetledikten sonra, çakışma olması [...]

İkinci Dereceden Sondalama (Quadratic Probing)

Yazan : Şadi Evren ŞEKER Özellikle özetleme fonksiyonlarının (hashing functions) bilgileri sınıflandırması sırasında kullanılan formülün ikinci dereceden olması durumudur. Özetleme fonksiyonlarında, sık kullanılan doğrusal sondalama (linear probing) yönteminin tersine, bir bilgiyi tasnif ederken, ardışık olarak veriler üzerinde hareket etmez, bunun yerine her defasında baktığı uzaklığı ikinci dereceden bir denklem ile arttırır. Konuyu anlamaya öncelikle doğrusal [...]