16-Djkstra Algoritması

Dijkstra Algoritması

Dijkstra algoritması – Graf teorisindeki tek-kaynaklı en küçük yol probleminin çözümüdür.

Yönlü ve yönsüz grafların her ikisi için kullanılır. Fakat, kenarların hepsinin negatif olmayan ağırlıkları olmalıdır.

Ör – 1: 

ornek1_1                                      ornek1_2

ornek1_3                                       ornek1_4ornek1_5

Ör -2 : 

ornek2_1                                                       ornek2_2  ornek2_3                                                      ornek2_4 ornek2_5                                                      ornek2_6 ornek2_7

15-Graflar

Graf, bir olay veya ifadenin düğüm ve çizgiler kullanılarak
gösterilmesi şeklidir
Graf, matematiksel anlamda düğümler ve düğümler arasındaki ilişkiyi gösteren kenarlardan oluşan bir kümedir. Mantıksal ilişki düğüm ile düğüm veya düğüm ile kenar arasında kurulur.
Köse (vertex) adı verilen düğümlerden ve kenar (edge) adı verilip köseleri birbirine bağlayan bağlantılardan oluşan veri yapısıdır.
Aynen ağaçlar gibi çizgeler de doğrusal olmayan veri yapıları grubuna girerler.
Bağlantılı listeler ve ağaçlar grafların özel örneklerindendir. Her kenar iki düğümü birleştirir.

Okumaya devam edin 15-Graflar

14 -Huffman Şıkıştırma Algoritması

Huffman Kodu, Bilgisayar biliminde, veri sıkıştırması için kullanılan, bir entropi kodlama algoritmasıdır. David A. Huffman tarafından 1952 yılında geliştirilmiştir.

Huffman’ın algoritması, her sembol (veya karakter) için özel bir kod üretir. Bu kodlar (ikilik sistemdeki 1 ve 0’lardan oluşan) bit haritası şeklindedir. Veri içerisinde en az kullanılan karakter için en uzun, en çok kullanılan karakter için ise en kısa kodu üretir.

Huffman’ın algoritması, veri içerisindeki karakterlerin kullanım sıklığına (frekans) göre bir ağaç oluşturur. Ağacın en tepesinden aşağıya doğru ilerlerken sola ayrılan dal için 0, sağa ayrılan dal için 1 kodu verilir.

Ör: “AAAABBBCC” kelimesinin huffman algoritması ile sıkıştırma oranını bulunuz.
1- Öncelikle karakterlerin metinde bulunma sıklığı(frekans) larını buluyoruz.
A karakteri metinde 4 kere geçmiş yani frekansı 4
A: 4 , B: 3 , C: 2
2- Bundan sonra yapılacak işlem en düşük frekansa sahip iki elemanı seçerek onlardan ağaç oluşturma işlemi

huffman1

huffman2

3- Şimdide bu karakterlerin yeni hallerinin ne olacağına. Ağaçta kökten itibaren eğer karakterimiz sol alt ağaçta bulunuyorsa koda 0 ekliyoruz , eğer karakter sağ alt ağaçta ise 1 ekliyoruz. Buna göre:

A: 0 oluyor
B: 11
C: 10

Sonuç: Normalde “AAAABBBCC” metinini 8*9 bit ile saklıyorduk. Şimdi ise bu metni şu şekilde saklıyoruz.

AAAA = 0000
BBB = 111111
CC = 1010

“AAAABBBCC” = 00001111111010 yani 14 bit.

Sıkıştırma oranı ((72- 14) / 72) * 100 = %80 oranında sıkıştırdık.

Ör 2:

Ör 3 :

13-Ağaçlar(Tree)

Ağaçlar,doğrusal olmayan belirli niteliklere sahip iki boyutlu veri yapılarıdır.
İkili ağaçlar,düğümlerinde en fazla iki bağ içeren ağaçlardır.
Ağacın en üsteki düğümüne kök (root) denir.
Ağaçlar kökü yukarıda yaprakları aşağıda olacak şekilde çizilirler.

Ağaç veri modelinde ;

  • Bir kök işaretçisi
  • Sonlu sayıda bir düğümü ve onları bağlayan dalları vardır.
  • Veri,ağacın düğümlerinde tutulur. Dallar ise geçiş koşulları vardır.
  • Her ağacın bir kök işaretçisi vardır.

Okumaya devam edin 13-Ağaçlar(Tree)

12-Arama Algoritmaları (Searching Algoritm)

Sıralı veya sırasız listedeki bir elemanın yerinin bulunması işlemine arama denir.Bir liste veya dizi içerisindeki veriler(sayısal veya string olabilir)belirli bir anahtar(key) ifadeye göre aranır.Bu anahtar ifade kelime ,sözcük veya her ikisi de olabilir.

  • Doğrusal arama (Linear search)
  • İkili arama (Binary search)

Genelde küçük boyutlu ve sırasız verilerin aranmasında doğrusal arama ,büyük boyutlu ve sıralı verilerin aranmasında ikili arama algoritmaları seçilir.

Okumaya devam edin 12-Arama Algoritmaları (Searching Algoritm)

11-Sıralama Algoritmaları (Sorting Algorithm)

Sıralama Algoritmaları
(Sorting Algorithm)

sıralama,bir grup veriyi artan ya da azalan bir
şekilde art arda yerleştirme işlemidir.

  • Kabarcık Sıralama(Buble Sort)
  • Araya Yerleştirerek Sıralama(İnsertion Sort)
  • Seçmeli Sıralama(Selection Sort)
  • Hızlı Sıralama(Quick Sort)
  • Birleştirmekli Sıralama(Merge Sort)
  • Kümelemeli Sıralama(Heap Sort)
  • Kabuk Sıralama(Shell Sort)

!Sıralamalar genellikle küçükten büyüğe doğru.

Okumaya devam edin 11-Sıralama Algoritmaları (Sorting Algorithm)

10-Algoritma Analizi, Algoritmalarda Karmaşıklık ve Zaman Karmaşıklığı

Algoritmaların Özellikleri

–   Giriş : Belirlenen veri kümesinden algoritma giriş değerleri alır.

–   Çıkış : Algoritma her bir giriş kümesinde çıkış değerleri üretir. Bu

değerler problemin çözümüdür.

–   Açıklık : Algoritmanın adımları açık olarak tanımlanmalıdır.

–   Doğruluk : Algoritma her bir giriş kümesi için doğru çıkış üretmelidir.

–   Sonluluk : Algoritma, her bir giriş kümesi için amaçlanan çıkışı, sonlu

işlem adımı(büyük olabilir) sonunda üretmelidir

–   Verimlilik : Algoritmanın her bir adımı tam ve sonlu bir zaman diliminde                                          gerçeklenmelidir.

–   Genellik : Yordam formdaki her probleme uygulanabilecek şekilde

genel olmalıdır.

Okumaya devam edin 10-Algoritma Analizi, Algoritmalarda Karmaşıklık ve Zaman Karmaşıklığı

9-Bağlı Listeler(Linked List)

9-Bağlı Listeler(Linked List)

Liste : Aralarında doğrusal ilişki olan veriler topluluğudur.

Yığın(stack) ve kuyrukların(Queue) genişletilmesi (üzerindeki sınırlandırılmanın kaldırılması) ile liste yapısına ulaşır.

Bağlı Liste : Verilerin birbirlerine bir işaretçi ile  bağlandıkları doğrusal veri yapılarıdır.

Bağlı listeler adres bölgelerinde tutuluyorsa, bu bellek bölgesinin adresinin değerini öğrenebilecek işaretçi üyesine sahip olması gerekir.

!   Dinamik bellek yöntemi: Derleyici tarafından işletim sistemi tarafından istenir kullanır ve daha sonra                    istenirse bu bölge boşaltılır.

       Diziler

Diziler doğrusal liste yapısındadır.

  • Doğrusal listelerde süreklilik vardır.Dizi veri yapısını ele alırsakbu  veri yapısındaki elemanlar aynı türden olup bellekte art arda saklanırlar.
  • Dizi elemanı arasına eleman eklemek gerektiğinde dizi elemanların yer değiştirmesi gerekir.(Zaman Kaybı. )
  • Dizi programın başında tanımlanır ve bellek alanı belirtilir(sabit boyutlu).Program çalışırken eleman sayısı arttrılamaz/eksiltilemez.
  • Dizinin boyutu başta büyük tanımlandığında kullanılmayan alanlar oluşabilir.
  • Dinamik yaklaşım yoktur(İstenildiğinde bellek alanı alınamaz/iade edilemez).

                          Bağlı Listeler


bglst

Dinamik veri yapıları olup düğüm(node) ismi verilen bellek büyüklükleri kullanılır.

Adsız1

! Bağlı listelerde bir ilk düğüm olması gerekir.Bu düğümün adresi bir değişkende tutularak listedeki diğer                düğümlere bu adresten ilerleyerek ulaşılabilir(Listedeki düğümler birbirlerinin adresini tutar).                                Son düğümün bağ alanına ‘0’ yazarak  listenin bitişi belirtilir.

   Doğrusal Bağlı Liste

  • Listedeki her düğümde bir sonraki düğümün adresinin tutulduğu veri yapısına denir.
  • Listenin her bir elemanına düğüm(node) adı verilir.
  • Düğümler veri ve bağ(adres) sahalarından oluşmaktadır.
  • Bağ sahalarında pointerlar kullanılmaktadır.
  • Listenin ilk elemanına dışarıdan bir işaretçi(list) ile erişilmektedir.
  • Diğer düğümlereda bağlar(adres) yardımıyla erişilmektedir.
  • Son düğümün sonraki adresi NULL değeri içermektedir.
  • NULL bağı liste sonunu belitir.
  • Elemanı olmayan liste empty list(boş liste) olarak adlandırılır.
  • Yığın(stack) ve kuyrukların(queue) dinamik olarak genişletilmesi/daraltılması bağlı listeler  üzerinden yapılmaktadır.

   Temel Liste Fonksiyonları

  • EmptyList(list) : Listenin boş olup olmadığını belirleyen fonksiyon
  • FullList(list) : Listenin dolu olup olmadığını belirleyen fonksiyon
  • LengthList(list) : Listedeki eleman sayısını döndüren fonksiyon
  • InsertElement(list,newElement) : Listeye yeni bir eleman ekleyen fonksiyon
  • DeleteElement(list,Element) : Listeden bir elemanı arayarak çıkartan fonksiyon
  • DestroyList(list) : Listedeki tüm elemanları silerek boş liste bırakan fonksiyon
  • GetNextItem(list,Element) : Etkin elemandan bir sonrakini döndüren fonksiyon
  • RetrieveElement(list,Element,found) : Elemanın listede olup olmadığını bulan  ve döndüren fonksiyon

    Dinamik Dizi Fonksiyonları

  • void *malloc(size_t eleman_sayısı) : t tipinde eleman sayısı kadar yer ayırır.Bu yer verilmezse geriye NULL gönderir.
  • void *calloc(size_t eleman_sayısı , size_t n bayt) : Bellekte herbiri n bayt kadar yer işgal edecek eleman_sayısı kadar boş yer ayırır ve bütün bitleri sıfırlar.Bu yer ayılmazsa geriye NULL gönderir.
  • void *realloc(void *ptr , size_t n bayt) : ptr pointerının yerini n bayt büyülterek veya küçülterek değiştirir.
  • void free(void *ptr) : Daha önce ayrılan adresi ptr’de saklanan bellek alanını boşalır.

Daha fazla bilgi için  : http://www1.gantep.edu.tr/~bingul/c/index.php?ders=13

http://www.cemdemir.net/c-programlama-dili/dinamik-bellek-yonetimi-321.html

Kendi tipinde bir yapıyı gösteren bir işaretçi üyesine sahip yapılara self referential structures(kendine referans yapılar)denir.

struct node{
     char info;
     struct node*next;

};

yukarıda struct’da char tipi info adlı elemanın yanında struct node yapısında bellek bölgesine işaret eden next pointerına sahiptir.

Bağlı listelerde elemanların sıralı olacak şekilde uygulanmasına sıralı bağlı listeler denir.

Sıralı olmayan bağlı listeler ile arasındaki fark ;eleman ekleme işleminde listeyi sıralı tutacak şekilde dolaşarak araya eklenmesidir.

Sıralı bağlı listelerdeki çıkarma işlemi Sıralı olmayan bağlı listeler ile aynıdır(silinmek istenen eleman bulunana kadar liste üzerinde dolaşıp elemanın listeden çıkarır).

   Bağlı Liste Veri Yapısı ve Avantajları

  • Başka veri yapılarının gerçekleştiriminde kullanılabildikleri gibi kendileride veri yapısındadır.
  • Elemanların eklenmesinde veya çıkartılmasında bir sınırlama yoktur.Başa,sona ve araya eleman eklenebilir.
  • Dolaşarak herhangi bir elemana erişebilir.

Dizilerde bir eleman silerken arada boşluk kalmaması için sağındaki(ilerisindeki) tüm elemanları bir sola(geriye) kaydırmak gerekir.

                Kuyrukların Bağlı Liste Gösterimi

Adsız

                Dairesel Bağlı Listeler

Her düğüm kendinden sonraki düğümü son düğüm ise ilk elemanı gösterir(dairesel yapı).

Adsız

               Çift Bağlı Listeler

Her düğümü iki bağ içerir.Bağlardan biri kendinden önceki diğeri kendinden sonraki düğümü gösterir.Çift bağlı listelerde,tek bağlı listelerdeki  geriye doğru listeleme ve dolaşmadaki sorunlar kalkar.

Adsız1

           Dairesel Çift Bağlı Listeler

Hem dairesellik hem çift bağlılık özelliklerine sahip listelerdir.

İlk düğümden önceki düğüm son,son düğümden sonraki düğüm ilk düğümdür.

Adsız3

 

 

8-Kuyruk(Queue)

 

8-Kuyruk(Queue)

Kuyruk yapısı => FILO(First In Last Out)

300px-Data_Queue.svg

   Kuyruk(Queue) Temel Fonksiyonlar

createQueue :  Boş bir kuyruk oluşturur.

enqueue(q,x) : q kuyruğa x ekler.

dequeue(q) : q kuyruğunun başındaki elemanı siler.

queueEmpty : Kuyruğun boş olup olmadığını bilgisini verir.

queueFull : Kuyruğun dolu olup olmadığını bilgisini verir.

! =  Dizinin başında kullanılmayan gözlerolduğu zaman gelen elemanlar kuyruğun sonuna eklendiği için                     gereksizyer işgal edeceğinden, kuruktan eleman çıkacağı zaman dizinin bütün elemanları öne doğru birer                kaydırılmalıdır,(bu sistemin daha yavaş çalışmasına neden olur) yada dairesel kuyruk yapısı                               kullanılmalıdır(önerilen).

             Dairesel kuyruk

Kuyruk başını ve kuyruk sonunu gösteren adreslerin dairesel olarak ilerlediği kuyruk yapısıdır.

Adsız

  • n. adrestren sonra 0. adres gelir
  • Dairesel kuyruğa bir eleman eklendiğinde kuyruğun sonunun gösteren adres 1 artar.
  • Dairesel kuyruktan  bir eleman çıkartıldığında  kuyruğun başını  gösteren adres 1 artar.

Animasyon =>  http://sdrv.ms/IfaciZ

1.Örnek:

// VeriYapıları8.1.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "iostream"
using namespace std;
#define MAXSIZE 200

int Q[MAXSIZE];//Queue tanımladık
int front = 0,rear = 0;//front : kuyruk başı ,rear: kuyruk arkası(sonu)

void Add(int a)
{
	if(rear > MAXSIZE)
	{
		cout<<"Queue empty..";
	}
	else
	{
		Q[rear] = a;
		rear++;
		cout<<"rear: "<<rear<<"front :"<<front;
	}

}

int  Del(int a)
{

	if(Full())

	{
		cout<<"Queue empty..";
		//return 0;
	}

	else
	{
		a = Q[front];
		front++;
		return a;
	}

}

bool Full()
{
	if(front == rear)
		return true;//true as for  Queue empty
	else
		false;//false as for Queue full
}
int _tmain(int argc, _TCHAR* argv[])
{
    int istek = 1;

    while(istek == 1)
	{
	   int value;
	   cout<<"1.Queue add \n\2.Queue delete";
	   switch(istek)
		{
		  case 1:
			cout<<"Value enter:"<<value;
			Add(value);
			break;

		 case 2:
		        int i = Del(value);
			cout<<"Del func"<<i<<endl;
			break;

		default: 
			cout<<"Invalid selection..."<<endl;
			break;
		}

	cout<<"If you want to continue to select 1";
        cin>>istek;
	}

	system("pause");
	return 0;
}

 

7-Yığın(Stack)

Yığın yapısı ->LIFO(Last In First Out) 

download

    Stack Temel Fonksiyonlar

createStack : Belli miktarda eleman alabilecek boş bir stack oluşturur.

push : stack’e veri  ekler. “push(s,i)”//s yığınına i değişkeni ekler.

pop : stack’ten veri çıkarır. “i = pop(s)”//s yığının en üsteki elemanın çıkarır i değişkenine atar.

Okumaya devam edin 7-Yığın(Stack)