Veri Modelleri. Ağaç Veri Modeli. Ağaç Veri Modeli

Benzer belgeler
Bölüm 5. Ağaç. Olcay Taner Yıldız. O. T. Yıldız, C && Java ile Veri Yapılarına Giriş, Boğaziçi Üniversitesi Yayınevi, / 73

AĞAÇ-TREE VERİ YAPISI

Algoritma Geliştirme ve Veri Yapıları 9 Ağaç Veri Modeli ve Uygulaması. Mustafa Kemal Üniversitesi

Ağaç (Tree) Veri Modeli

Bölüm 8. Ayrık Küme. Olcay Taner Yıldız. O. T. Yıldız, C && Java ile Veri Yapılarına Giriş, Boğaziçi Üniversitesi Yayınevi, / 16

AVL Agacı {\} /\ Suhap SAHIN Onur GÖK

Ağaçlar(Trees) AĞAÇ VERİ MODELİ

Algoritma Geliştirme ve Veri Yapıları 2 Veri Modelleri. Mustafa Kemal Üniversitesi

Bölüm 6. Karma. Olcay Taner Yıldız. O. T. Yıldız, C && Java ile Veri Yapılarına Giriş, Boğaziçi Üniversitesi Yayınevi, / 31

DOSYA ORGANİZASYONU. Ağaç Yapıları ÖZLEM AYDIN TRAKYA ÜNİVERSİTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ

Veri Yapıları. Ağaçlar

Max - Min Heap Tree (Max ve Min Yığıt Ağaçları) Veri Yapıları ve Algoritmalar 2 - Mustafa EGE Ders Notları

BIL222 Veri Yapıları ve Algoritmalar

Algoritma Geliştirme ve Veri Yapıları 7 Liste ve Bağlantılı Liste. Mustafa Kemal Üniversitesi

ELN1002 BİLGİSAYAR PROGRAMLAMA 2

YZM 2116 Veri Yapıları

AHMET YESEVİ ÜNİVERSİTESİ BİLİŞİM SİSTEMLERİ VE MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ LİSANS DÖNEM ÖDEVİ

Ağaçlar (Trees) Ağaçlar (Trees)

VERİ YAPILARI LİSTELER. Yrd. Doç. Dr. Murat GÖK Bilgisayar Mühendisliği Bölümü YALOVA ÜNİVERSİTESİ

Arasınav Örnek Soruları Bahar 2018

Week 9: Trees 1. TREE KAVRAMI 3. İKİLİ AĞAÇ DİZİLİMİ 4. İKİLİ ARAMA AĞACI 2. İKİLİ AĞAÇ VE SUNUMU > =

Yigin & Kuyruk {\} /\ Suhap SAHIN Onur GÖK

BMB204. Veri Yapıları Ders 9. B+ Ağacı, Hash, Heap. Erdinç Uzun NKÜ Çorlu Mühendislik Fakültesi Bilgisayar Mühendisliği Bölümü

Yrd. Doç. Dr. Caner ÖZCAN

AĞAÇLAR. Doç. Dr. Aybars UĞUR

YAPILAR BİRLİKLER SAYMA SABİTLERİ/KÜMELERİ. 3. Hafta

YZM 2116 Veri Yapıları

AĞAÇLAR TREES. Doç. Dr. Aybars UĞUR

7.Hafta Dengeli Arama Ağaçları (Red - Black Tree)

Yrd. Doç. Dr. Caner ÖZCAN

Week 6: Bağlı Liste (Linked List) BAĞLI LİSTE KAVRAMI TEKİL (SINGLE) BAĞLI LİSTE ÇİFT (DOUBLE) BAĞLI LİSTE DAİRESEL (CIRCULAR) BAĞLI LİSTE

Algoritma Geliştirme ve Veri Yapıları 8 Kuyruk ve Yığın Yapısı. Mustafa Kemal Üniversitesi

Veri Yapıları. Amaçlar: Temel Veri Yapılarını Tanımlamalı Veri Yapılarını Veri Modeli ve Türlerini Öğreneceksiniz. İçindekiler:

BAĞLAÇLI LİSTELER LINKED LISTS

YMT219 VERİ YAPILARI ÖDEV-1

BAĞLAÇLI LİSTELER LINKED LISTS

Veri Yapıları. Ağaçlar. Ağaçlar genel bilgi

YZM 2116 Veri Yapıları

BIP116-H14-1 BTP104-H014-1

Çok Yollu Ağaçlar (Multi-Way Trees)

Örnek 4: Örnek Özyinelemeli fonksiyon örneği Bölüm 9. C++ programlama dilinde Nesne ve sınıf

İNÖNÜ ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ 2. SINIF 1. DÖNEM VERİ YAPILARI DERSİ LABORATUAR ÖDEVİ

BĠLGĠSAYAR PROGRAMLAMA II C++ Programlamaya GiriĢ Published by Juan Soulié

Merge (Bireşim) Algoritmayı önce bir örnek üzerinde açıklayalım.

Algoritma Geliştirme ve Veri Yapıları 3 Veri Yapıları. Mustafa Kemal Üniversitesi

1 PROGRAMLAMAYA GİRİŞ

Veri Yapıları ve Algoritmalar

Final Sınavı Soruları Bahar 2018

Çoktan Seçmeli Değerlendirme Soruları Akış Şemaları İle Algoritma Geliştirme Örnekleri Giriş 39 1.Gündelik Hayattan Algoritma Örnekleri 39 2.Say

mod ile açılacak olan dosyanın ne amaçla açılacağı belirlenir. Bunlar:

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 2

Çok Yollu Ağaçlar: B*-Trees B*-Trees

/* Çember alanını hesaplar */

YZM 2116 Veri Yapıları

ALGORİTMA VE PROGRAMLAMA II

Görsel Programlama 1

C++ Giriş Ders 1 MSGSU Fizik Bölümü Ferhat ÖZOK Kullanılacak kaynak: Published by Juan Soulié

KOCAELİ ÜNİVERSİTESİ BİLGİSAYAR MÜHENDİSLİĞİ. BİLGİSAYAR LABORATUVARI II FİNAL SINAVI SORU ve CEVAPLARI(I. ogr)

Yrd. Doç. Dr. A. Burak İNNER Bilgisayar Mühendisliği

YIĞINLAR YIĞINLAR. Yığın İşlemleri Postfix, Prefix, Infix. G. Ü. Bilgisayar Mühendisliği Bölümü

Algoritmalar. Heap Sort. Bahar 2017 Doç. Dr. Suat Özdemir 1

8. İŞARETCİLER (POINTERS)

AHMET YESEVİ ÜNİVERSİTESİ BİLİŞİM SİSTEMLERİ VE MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ LİSANS DÖNEM ÖDEVİ

=~ Metodu 92 Karakter Sınıfları 94 sub ve gsub metotları 101 Hızlı Tekrar 102 Kontrol Noktası 103 Düello 106 Sonraki Bölümde 109

BLM-112 PROGRAMLAMA DİLLERİ II. Ders-3 İşaretçiler (Pointer) (Kısım-2)

BİL1001 Bilgisayar Bilimlerine Giriş 1

Alıştırma 1: Yineleme

Diziler. Yrd.Doç.Dr.Bülent ÇOBANOĞLU

BLM 111 ALGORİTMA VE PROGRAMLAMA I

10. DOSYA GİRİŞ ÇIKIŞ FONKSİYONLARI

Bölüm 10. Altprogramların gerçeklenmesi ISBN

VERİ YAPILARI. Yrd. Doç. Dr. Murat GÖK Bilgisayar Mühendisliği Bölümü YALOVA ÜNİVERSİTESİ HASH TABLOLARI.

BİLG Dr. Mustafa T. Babagil 1

Yukarıdaki kod aksi belirtilmediği sürece sürekli çalışır. Yani ekrana sürekli Bilgisayar çıldırdı! yazısı gelir. Ancak;

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

HSancak Nesne Tabanlı Programlama I Ders Notları

ALGORİTMA VE PROGRAMLAMA II

Java da Soyutlama ( Abstraction ) ve Çok-biçimlilik ( Polymorphism )

BMÜ-111 Algoritma ve Programlama. Bölüm 5. Tek Boyutlu Diziler

Algoritmalar. DERS 7 Dengeli Arama Ağaçları Kırmızı-siyah ağaçlar Kırmızı-siyah ağacın yüksekliği Rotation / Dönme Insertion / araya yerleştirme

BLM 112- Programlama Dilleri II. Hafta 4 İşaretçiler (Pointers)

Final Sınavı Örnek Soruları Bahar 2018

BLM 111 Algoritma ve Programlama I Güz 2018

SOMEBODY ELSE'S. ( DATA STRUCTURES and ALGORITHMS ) Veri Yapıları ve Algoritmaları

Yrd. Doç. Dr. Caner ÖZCAN

int main(void) { int num = 0; int input = 1; int retval = 0; struct NODE *nodepointer; nodepointer = (struct NODE *)malloc(sizeof(struct NODE));

Programlama Dilleri. C Dili. Programlama Dilleri-ders08/ 1

Programlama Dilleri 1. Ders 4: Diziler

Algoritma Geliştirme ve Veri Yapıları 1 Temel Algoritma Kavramları. Mustafa Kemal Üniversitesi

BLM 112- Programlama Dilleri II. Hafta 2 C Programlarının Bellek Düzeni ve Rekürsif (Özyinelemeli) Fonksiyonlar

Veri Yapıları Laboratuvarı

Graflar bilgi parçaları arasındaki ilişkileri gösterirler.

ALGORİTMA VE PROGRAMLAMA II

NESNEYE YÖNELİK PROGRAMLAMA

ALGORİTMA VE PROGRAMLAMA II

GENETİK ALGORİTMA GEZGİN SATICI ÖDEVİ

YZM ALGORİTMA ANALİZİ VE TASARIM DERS#6: AZALT VE FETHET YÖNTEMİ

Programın Akışının Denetimi. Bir arada yürütülmesi istenen deyimleri içeren bir yapıdır. Söz dizimi şöyledir:

Dengeli Arama Ağaçları (Balanced Search Tree)

Transkript:

Veri Modelleri Ağaç Veri Modeli Ağaç Veri Modeli Verilerin birbirine sanki bir ağaç yapısı oluşturuyormuş gibi sanal olarak bağlanmasıyla elde edilen bir veri modelidir. Ağaç veri modeli daha fazla bellek alanına gereksinim duyar. Ağaç veri modelinde, bir kök işaretçisi, sonlu sayıda düğümleri ve onları birbirine bağlayan dalları vardır. 2 1

Ağaç Veri Modeli Veri ağacın düğümlerinde tutulur. Dallarda ise geçiş koşulları vardır. Her ağacın bir kök işaretçisi vardır. Ağaca henüz bir düğüm eklenmemiş ise ağaç boştur ve kök işaretçisi NULL değerini gösterir. Ağaç bu kök etrafında dallanır ve genişler. Veri Çocuk Kardeş 3 Ağaç Veri Modeli Düğümler Tanım kök A B C Derece/çocuk 2 1 0 2 Kardeş düğüm 1 2 1 2 Aile yok d2 d26 d3 Ata yok Kök(d1) d13,d7,d3,kök Kök(d1) Yol (kök düğümünden) d1 d1,d2,d4 d1,d3,d7,d13,d26,d52 d1,d3,d7 Derinlik/seviye 1 3 6 3 Yükseklik 6 2 1 4 4 2

Ağaç türleri İkili arama ağaç: Bir düğüm en fazla iki tane çocuğa sahip olabilir ve alt çocuk bağlantıları belirli bir sırada yapılır. Kodlama ağacı: Bir alfabedeki veya daha genel olarak bir kümedeki karakterlere kod atanması için kurulan ağaç şeklidir. 5 Ağaç türleri Sözlük ağacı: Bir sözlükte bulunan sözcüklerin tutulması için kurulan ağaç şeklidir. Arama işleminin performanslı bir şekilde yapılmasını ve belleğin optimum şekilde kullanılmasını sağlar. Sözlük ağaçları bir araya getirilerek sözlük ormanı oluşturur. Bu ormanda sözlükteki harf sayısı kadar ağaç vardır. Kümeleme ağacı: Kümeleme bir çeşit sıralama ağacıdır. 6 3

Ağaç üzerinde yapılan işlemler Ağacı ilk oluşturma Ağacı dolaşma Düğüm ekleme Düğüm arama Düğüm silme Düğümleri listeleme Düğümleri saklama/yükleme 7 Ağaç kurulması ve veri yapısı struct isaretcili{ int veri; struct isaretcili*cocuk; struct isaretcili*kardes; ; 8 4

Ağaç kurulması ve veri yapısı 9 İkili Ağaç 10 5

İkili ağaç veri yapısı 11 İkili ağaç veri yapısı Kökten büyük değerler kökün sağına küçük değerler soluna yerleştirilir. 12 6

İkili ağaç oluşturma C dili struct agac{ Dugumptr kok; typedef struct agac Agac; typedef Agac* Agacptr; Agacptr yeni_agac(){ Agacptr agac; agac=malloc(sizeof(agac)); agac>kok = NULL; return agac; Java dili public class Agac{ Dugum kok; public Agac(){ kok = NULL; 13 İkili ağaçta düğüm oluşturma C dili struct dugum { int icerik; struct dugum* sol; struct dugum* sag; typedef struct dugum Dugum; typedef Dugum* Dugumptr; Dugumptr yeni_dugum(int icerik){ Dugumptr dugum; dugum=malloc(sizeof(dugum)); dugum->icerik = icerik; dugum->sol = NULL; dugum->sag = NULL; return dugum; Java dili public class Dugum { int icerik; dugum sol; dugum sag; public Dugum(int icerik){ this.icerik = icerik; sol = NULL; sag = NULL; 14 7

İkili ağaçta arama C dili (özyinelemeli); Dugumptr agac_ara(dugumptr d, int eleman) { if (!d) return NULL; if (d->icerik==eleman) return d; Maliyet O(logn) if (d->icerik>eleman) return agaç_ara(d->sol, eleman); return agac_ara(d->sag, eleman); 15 İkili ağaçta arama Java dili (özyinelemeli); Dugum agacara(int eleman) { if (icerik==eleman) return this; if (icerik>eleman) if (sol!= null); Maliyet O(logn) return sol.agacara(eleman); if (sag!=null) return sag.agacara(eleman); return null; 16 8

İkili ağaçta arama C dili (özyinelemesiz); Dugumptr agac_ara(agacptr a, int eleman) { Dugumptr d; d=a->kok; while (d!=null){ if (d->icerik==eleman) return d; if (d->icerik>eleman) d = d->sol; d = d->sag; return NULL; Maliyet O(logn) 17 İkili ağaçta arama Java dili (özyinelemesiz); Dugum agacara(int eleman) { Dugum d; d = kok; while (d! = null) { if (icerik==eleman) return d; if (d.icerik>eleman) d = d.sol; d= d.sag; return null; Maliyet O(logn) 18 9

En küçük elemanı bulma C dili (özyinelemesiz); Dugumptr asgari_ara(dugumptr d) { Dugumptr sonuc = d; while (sonuc->sol) sonuc = sonuc->sol; return sonuc; Java dili (özyinelemesiz); Dugum asgariara() { Dugum sonuc = this; while (sonuc.sol! = null) sonuc = sonuc.sol; return sonuc; Maliyet O(logn) 19 En küçük elemanı bulma C dili (özyinelemeli); Dugumptr asgari_ara(dugumptr d) { if (d->sol==null) return d; return asgari_ara(d->sol); Java dili (özyinelemeli); Dugum asgariara() { if (d->sol==null) return this; return sol.asgariara(); Maliyet O(logn) 20 10

En büyük elemanı bulma C dili (özyinelemesiz); Dugumptr azami_ara(dugumptr d) { Dugumptr sonuc = d; while (sonuc->sag) sonuc = sonuc->sag; return sonuc; Java dili (özyinelemesiz); Dugum azamiara() { Dugum sonuc = this; while (sonuc.sag! = null) sonuc = sonuc.sag; return sonuc; Maliyet O(logn) 21 En büyük elemanı bulma C dili (özyinelemeli); Dugumptr azami_ara(dugumptr d) { if (d->sag==null) return d; return azami_ara(d->sag); Java dili (özyinelemeli); Dugum azamiara() { if (d->sag==null) return this; return sag.azamiara(); Maliyet O(logn) 22 11

İkili ağaca düğüm ekleme if(kök boş ağacı gösteriyorsa) düğümü köke ekle; { if(eklenen kökten küçükse) sol alt ağaca dallan; basa dön; sağ altağacadallan; basa dön; 23 Ağaca düğüm ekleme (C dili) void agaca_ekle(agacptr a, Dugumptr yeni){ Dugumptr y = NULL; Dugumptr a = a ->kok; while (x! = NULL){ y = x; if (yeni->icerik<x->icerik) x = x->sol; x = x->sag; if (y == NULL) a->kok=yeni; if (yeni->icerik<y->icerik) y = y->sol=yeni; x = x->sag=yeni; 24 12

Ağaca düğüm ekleme (Java dili) void agacaekle(dugum yeni){ Dugum y = NULL; Dugum x = kok; while (x! = NULL){ y = x; if (yeni.icerik<x.icerik) x = x.sol; x = x.sag; if (y == NULL) kok==yeni; if (yeni.icerik<y.icerik) y.sol=yeni; x.sag=yeni; 25 Ağaçtan düğüm silme 26 13

Ağaçtan düğüm silme (C dili) void agac_sil(agacptr a, int icerik){ Dugumptr y, x=a->kok; while (x->icerik!=icerik){ if (x->icerik!=icerik) x=x->sol; x=x->sag; while (1){ y=azami_ara(x->sol); if (y==null) y=asgari_ara(x->sag); if (y==null) break; x->icerik=y->icerik; x=y; 27 Ağaçtan düğüm silme (Java dili) void agacsil(int icerik){ Dugum y=null, x=kok; while (x.icerik!=icerik){ if (x.icerik!=icerik) x=x.sol; x=x.sag; while (true){ if (x.sol!=null) y=x.sol.azamiara(); if (y==null&&x.sag!=null) y=x.sag.asgariara(); if (y==null) break; x.icerik=y.içerik; x=y; 28 14

İkili ağaç üzerinde dolaşma 29 İkili ağaç üzerinde dolaşma Önce-kök: C dili: void once_gezinti(dugumptr d){ printf (ꞌꞌ%dꞌꞌ, d->icerik); if (d->sol) once_gezinti(d->sol); if (d->sag) once_gezinti(d->sag); Java dili: void oncegezinti(){ System.out.print(icerik); if (sol!=null) sol.oncegezinti(); if (sag!=null) sag.oncegezinti(); 30 15

İkili ağaç üzerinde dolaşma Ortada kök: C dili: void ara_gezinti(dugumptr d){ if (d->sol) ara_gezinti(d->sol); printf (ꞌꞌ%dꞌꞌ, d->icerik); if (d->sag) ara_gezinti(d->sag); Java dili: void aragezinti(){ if (sol!=null) sol.aragezinti(); System.out.print(icerik); if (sag!=null) sag.aragezinti(); 31 İkili ağaç üzerinde dolaşma Sonra kök: C dili: void sonra_gezinti(dugumptr d){ if (d->sol) sonra_gezinti(d->sol); if (d->sag) sonra_gezinti(d->sag); printf (ꞌꞌ%dꞌꞌ, d->icerik); Java dili: void sonragezinti(){ if (sol!=null) sol.sonragezinti(); if (sag!=null) sag.sonragezinti(); System.out.print(icerik); 32 16

Bağıntı ağaç yapısı 33 Adelson Velskii ve Landis (AVL) ağacı 4 2 6 1 3 5 7 Maliyet O(3) 1 4 3 5 2 6 Maliyet O(4) 7 1 7 6 5 4 3 2 Maliyet O(7) 34 17

AVL ağacı Ağaçtaki her düğüm için sağ ve sol düğüm boyları farkı en fazla bir (1) olmalıdır. (sağ-sol=<1) 2 1 4 3 5 6 7 2 1 4 3 5 6 Sol 3, sağ 1 7 35 AVL düğüm tanımı C dili struct avldugum{ int icerik; int boy; struct avldugum* sol; struct avldugum* sag; typedef struct avldugum Avldugum; typedef Avldugum* Avldugumptr; Avldugumptr yeni_avldugum(int icerik){ Avldugumptr dugum; dugum = malloc(sizeof(avldugum)); dugum-> icerik = icerik; dugum-> sol = NULL; dugum-> sag = NULL; dugum-> boy = 1; return dugum; Java dili public class Avldugum{ int icerik; int boy; Avldugum sol; Avldugum sag; public Avldugum (int icerik){ this.icerik = icerik; sol = NULL; sag = NULL; boy = 1; 36 18

AVL ağaç tanımı C dili struct avlagac{ Avldugumptr kok; ; typedef struct avlagac Avlagac; typedef Avlagac* Avlagacptr; Avlagacptr yeni_avlagac(){ Avlagacptr agac; agac= malloc(sizeof(avlagac)); agac-> kok= NULL; return agac; int boy(avldugumptr d){ if (d = NULL) return 0; return d->boy; Java dili Public class AvlAgac{ Avldugum kok; public AvlAgac(){ kok = null; int boy(avldugum d); if (d = null) return 0; return d.boy; 37 B+ ağacı Dengeli ağaç oluşturmanın bir diğer yolu da düğüm içinde iki adet veri yerleştirilmesidir. Bu tip veri tabanı na d-li ağaç yapısı denir. d-li ağaç yapılarına örnek olarak da B veya B+ verilebilir. 38 19

B+ ağacı Dinamik bir arama ağacıdır. İndeks kısmı ve verilerin saklandığı kısımdan oluşmaktadır. İndeks kısmı d-li ağaç yapısında olup her düğüm d m 2d değer içermektedir. d değeri B+ ağacının parametresi olup, B+ ağacının kapasitesini göstermektedir ve ağacın derecesi olarak adlandırılır. Kök bu durumda istisnadır ve 1 m 2d dir. 39 B+ ağacı Her düğüm kendisine ait m+1 çocuk düğümü gösteren m+1 tane işaretçiye sahiptir. 11 18 25 32 2 4 6 7 14 15 19 20 25 28 29 34 36 38 42 15 veri içeren d=2 dereceli B+ ağacı Düğüm sayısı d m 2d den en az 2 en fazla 4 dür. Kök için 1 m 2d için en fazla 4 değer ve 5 işaretçi vardır. Alt kısımda ise K<11 için 4 veri; 11 K<18 için 2 veri; 18 K < 25 için 2 veri; 25 K < 32 için 3 veri Son olarak K 32 için 4 veri olabilir. 40 20

B+ ağacı 18 32 6 11 20 28 36 2 4 6 7 14 19 25 27 29 30 33 37 39 13 veri içeren d=1 dereceli B+ ağacı Düğüm sayısı d m 2d den en az 1 en fazla 2 dür. Kök için 1 m 2d için en fazla 2 değer ve 3 işaretçi vardır. 41 B+ ağacında düğüm tanımı C dili #define SBD sizeof(bdugum) struct bdugum{ int *K; int m; int d; int yaprak; struct bdugum* nesil; typedef struct bdugum Bdugum; typedef Bdugum* Bdugumptr; Bdugumptr yeni_bdugum(int d){ Bdugumptr dugum; dugum = malloc(sbd); dugum->yaprak=1; dugum->d=d; dugum->m=0; dugum->k=malloc((2*d+1)*sizeof(int)); dugum->nesil=malloc((2*d+1)*sbd); Java dili public class Bdugum{ int [] K; int m; int d; boolen yaprak; Bdugum[] nesil; public Bdugum(int d){ m = 0; this.d=d; yaprak = true; K = new int [2*d+1]; nesil = new Bdugum[2*d+1]; Return dugum; 42 21

B+ ağacı tanımlama C dili struct bagac{ Bdugumptr kok; typedef struct bagac Bagac; typedef Bagac* Bagacptr; Bagacptr agac; agac = malloc (sizeof(bagac)); agac ->kok = NULL; return agac; Java dili structpublic class BAgac{ BDugum kok; public Bagac(){ kok = NULL; 43 Ödev AVL ve B+ ağaçlarında dolaşma, ekleme ve sıralama gibi işlemleri gerçekleşecek algoritmalar tasarlayınız. 44 22