AĞAÇ-TREE VERİ YAPISI

Benzer belgeler
Ağaç (Tree) Veri Modeli

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

Veri Yapıları. Ağaçlar

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

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

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

YZM 2116 Veri Yapıları

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

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 > =

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

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

YZM 2116 Veri Yapıları

Ağaç Yapıları (Tree Structures) Kütük Organizasyonu 1

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

BIP116-H14-1 BTP104-H014-1

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çlar(Trees) AĞAÇ VERİ MODELİ

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

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

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

Final Sınavı Soruları Bahar 2018

ELN1002 BİLGİSAYAR PROGRAMLAMA 2

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

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ü

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

HACETTEPE ÜNİVERSİTESİ BAHAR DÖNEMİ

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

Binary Tree nedir?uygulamas nasl yaplr?

YZM 2116 Veri Yapıları

HACETTEPE ÜNİVERSİTESİ BAHAR DÖNEMİ

Manisa Celal Bayar Üniversitesi Yazılım Mühendisliği Bölümü YZM Veri Yapıları Dersi. Proje#2

Algoritma Geliştirme ve Veri Yapıları 10 Graf Veri Modeli. Mustafa Kemal Üniversitesi

Yrd. Doç. Dr. Caner ÖZCAN

Graf Veri Modeli. Düğümler kümesi. Kenarlar kümesi

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

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

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

Algoritmalar. İkili Arama Ağaçları. Bahar 2016 Doç. Dr. Suat Özdemir 1

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İ

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

#$% &'#(# Konular. Binary Tree Structures. Binary Search Trees AVL Trees Internal Path Reduction Trees Deerlendirme

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

Yrd. Doç. Dr. Caner ÖZCAN

Çanakkale Onsekiz Mart Üniversitesi. Bilgisayar Mühendisliği Bölümü

Çizgeler (Graphs) Doç. Dr. Aybars UĞUR

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

Arasınav Örnek Soruları Bahar 2018

YZM 2116 Veri Yapıları

VERİ YAPILARI VE PROGRAMLAMA

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

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

Veri Yapıları Laboratuvarı

b) Algoritmanızın en kötü durumda işlem zamanını asimptotik olarak bulunuz

DOSYA ORGANİZASYONU. Çarpışma çözümleme yöntemleri ÖZLEM AYDIN TRAKYA ÜNİVERSİTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ

Algoritmalar. Kırmızı Siyah Ağaçları Red Black Trees. Bahar 2017 Doç. Dr. Suat Özdemir 1

VERİ YAPILARI DERS NOTLARI BÖLÜM 1 GİRİŞ. Yard. Doç. Dr. Deniz KILINÇ

BAĞLAÇLI LİSTELER LINKED LISTS

YZM VERİ YAPILARI DERS#9: HASH FONKSİYONLARI

Algoritmalar. Arama Problemi ve Analizi. Bahar 2016 Doç. Dr. Suat Özdemir 1

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

KARAKTER DİZGİLERİ, BAĞINTILAR, FONKSİYONLAR KESİKLİ MATEMATİKSEL YAPILAR

Dosyalarda Farklı Yaklaşımlar. Kütük Organizasyonu 1

Alıştırma 1: Yineleme

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

Veri Yapıları. Yrd. Doç. Dr. Şadi Evren ŞEKER

Algoritmalar ve Karmaşıklık

VERİ YAPILARI. GRAPH LAR Düzce Üniversitesi Teknoloji Fakültesi ÖĞR.GÖR.GÜNAY TEMÜR 1

BAĞLAÇLI LİSTELER LINKED LISTS

Tanım Bir X kümesi üzerinde bir karakter dizgisi (string) X kümesindeki. boş karakter dizgisi (null string) denir ve l ile gösterilir.

ALGORİTMA VE PROGRAMLAMA II

10.Hafta Minimum kapsayan ağaçlar Minimum spanning trees (MST)

DOSYA ORGANİZASYONU. Sıralı erişimli dosya organizasyonu yöntemleri ÖZLEM AYDIN TRAKYA ÜNİVERSİTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ

Yrd. Doç. Dr. Ümit ATİLA

YZM 2116 Veri Yapıları

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

ALGORİTMA VE PROGRAMLAMA I

Final Sınavı Örnek Soruları Bahar 2018

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

BİLGİSAYAR PROGRAMLAMA. Algoritma ve Akış Şemaları

Fiziksel Tasarım Konuları. Dosya Organizasyon Teknikleri Kayıt Erişim Yöntemleri Veri Yapıları

Arasınav Soruları Bahar 2018

Bilgilerin Uzun Vadeli Saklanması

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

ALGORİTMA VE PROGRAMLAMA I

#$% &'#(# Konular. B-Tree and Derivatives. B-Trees B#-Trees B+-Trees Deerlendirme

BLM-112 PROGRAMLAMA DİLLERİ II. Ders-7 Sıralama Algoritmaları

Algoritmalara Giriş Ekim 17, 2005 Massachusetts Institute of Technology Profesörler Erik D. Demaine ve Charles E. Leiserson Dağıtım 15.

HACETTEPE ÜNİVERSİTESİ BAHAR DÖNEMİ

Algoritma Analizi. Özelliklerinin analizi Algoritmanın çalışma zamanı Hafızada kapladığı alan

BLG 312 Bilgisayar İşletim Sistemleri 2006 BLG 312. Bilgilerin Uzun Vadeli Saklanması. Dosya Sistemi Görevleri. Dosya Sistemi Özellikleri

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

Algoritmaların Karşılaştırılması. Doç. Dr. Aybars UĞUR

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

Algoritma Analizi ve Büyük O Notasyonu. Şadi Evren ŞEKER YouTube: Bilgisayar Kavramları

BİL-341 ALGORİTMALAR BÜYÜK O NOTASYONU AHMET ATAKAN atakanahmet@hotmail.com KIRGIZİSTAN-TÜRKİYE MANAS ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ

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

Indeksli Sıralı Erişimli Dosya Yapıları (Indexed Sequential File Organization) ve. Bit Seviyesinde İşlemler (Bit Level and Related Structures)

Temel Bilgisayar Programlama Final Sınavı Çalışma Notları

6.Hafta Kıyım Fonksiyonu (Hashing), BST. Doğrudan erişim tabloları Çarpışmaları ilmekleme ile çözmek Kıyım fonksiyonu seçimi Açık adresleme

Transkript:

AĞAÇ-TREE VERİ YAPISI

AĞAÇ-TREE Ağaç; verileri birbirine hiyerarşik(sıradüzensel) bir biçimde sanal olarak bağlayan, doğrusal olmayan bir veri yapısıdır. Doğada bulunan biyolojik ağaçlardaki ve aile soyağacındaki hiyerarşik yapıya benzetilerek adlandırılmıştır.

AĞAÇ-TREE Ağaç; bir kök işaretçisi, sonlu sayıda düğümleri ve onları birbirine bağlayan dalları olan bir yapıya sahiptir. Üniversite Fakülte Yüksekokul Enstitü Bölüm Program Ana Bilim Dalı Bilim Dalı

Ağaç Uygulama Alanları Ağaç veri yapısı, bilgisayar biliminde birçok problemin çözümüne temel oluşturur: İşletim sistemlerindeki dosya organizasyonu bir çeşit ağaç yapısıdır. Genel bir işletim sistemi dosya organizasyonu Windows işletim sistemi dosya organizasyonu

Ağaç Uygulama Alanları Veri Tabanı Yönetim Sistemlerinde, Sıkıştırma Algoritmalarında, Oyun programlarında hamle seçeneklerinin belirlenmesi gibi birçok uygulamada ağaç veri yapısı algoritmik çözüm sunar. Ağaç veri yapısı mantıksal düşünceye sığdığı sürece çok değişik şekillerde kurulabilir. Veri Tabanı ağacı hiyerarşik alan adı(dns) ağacı Tic Tac Toe(XOX) oyunu hamle ağacı

AĞAÇ:Temel Kavramlar (Terminoloji) Hiyerarşik yapı gereği aile soyağacında geçen birçok kavram(çocuk, kardeş düğüm, aile, ata) ağaç veri yapısında da tanımlıdır. Genel olarak veri, ağacın düğümlerinde tutulur, dallar ise düğümlerin birbiri ile bağlantısını gösterir.

AĞAÇ:Temel Kavramlar (Terminoloji) Düğüm (Node) : Ağacın her bir elemanına düğüm adı verilir. Kök Düğüm (Root) :Ağacın başlangıç düğümüdür. Çocuk (Child) :Bir düğüme doğrudan bağlı olan düğümlere o çocukları denilir. Kardeş Düğüm (Sibling) :Aynı düğüme bağlı düğümlere kardeş düğüm veya kısaca kardeş denir. Aile (Parent) :Düğümlerin doğrudan bağlı oldukları düğüm aile olarak adlandırılır; diğer bir deyişle aile, kardeşlerin bağlı olduğu düğümdür. Ata (Ancestor) ve Torun (Descendant) : Aile düğümünün daha üstünde kalan düğümlere ata, bir düğümün çocuğuna bağlı olan düğümlere torun denir.

AĞAÇ:Temel Kavramlar (Terminoloji) Derece (Degree) :Bir düğümden alt hiyerarşiye yapılan bağlantıların sayısıdır; yani çocuk veya alt ağaç sayısıdır. Düzey (Level) :İki düğüm arasındaki yolun üzerinde bulunan düğümlerin sayısıdır. Kök düğümün düzeyi 1, doğrudan köke bağlı düğümlerin düzeyi 2'dir. Derinlik (Depth): Bir düğümün köke olan uzaklığı derinliktir. Kök düğümün derinliği 1 dir. Yaprak (Leaf) : Ağacın en altında bulunan ve çocukları olmayan düğümlerdir. Yükseklik (Height) :Bir düğümün kendi silsilesinden en uzak yaprak düğüme olan uzaklığıdır. Yol(Path) :Bir düğümün aşağıya doğru (çocukları üzerinden) bir başka düğüme gidebilmek için üzerinden geçilmesi gereken düğümlerin listesidir.

AĞAÇ:Temel Kavramlar ÖRNEK Tanım Değer Düğüm sayısı: 9 Yükseklik: 4 Kök düğüm: A Yapraklar: C, D, F, H, I Düzey sayısı: 5 H'nin ataları: E, B, A B'nin torunları: G, H, I E'nin kardeşleri: D, F Sağ alt ağaç: Yok Sol alt ağaç: B

Ağaç Türleri İkili Ağaçlar (Binary Tree): İkili ağaçlarda bir düğüm en fazla iki tane çocuğa sahip olabilir. Kodlama Ağacı (Coding Tree): Bir kümedeki karakterlere kod ataması için kurulan ağaç şeklidir. Sözlük Ağacı(Dictonary Tree): Bir sözlükte bulunan sözcüklerin tutulması için kurulan bir ağaç şeklidir. Amaç arama işlemini en performanslı bir şekilde yapılması ve belleğin optimum kullanılmasıdır. Kümeleme Ağacı (Heap Tree): Bir çeşit sıralama ağacıdır. Çocuk düğümler her zaman aile düğümlerinden daha küçük değerlere sahip olur. Dolayısıyla kök düğüm en büyük değere sahip olurken, yapraklar kendi ailesi içerisinde en küçük değerlere sahip olurlar.

İkili Ağaçlar(Binary Trees) ve Çeşitleri Bir ağaçta her düğümün en fazla iki çocuğu varsa bu ağaca İkili Ağaç(Binary Tree) denir. Bir ağaçtaki her düğümün derecesi en fazla iki ise o ağaca İkili Ağaç denir. A İkili Ağaç DEĞİL A İkili Ağaç B D E B F C F C E F D G G I H

İkili Ağaçların Özellikleri İkili Ağaçlar sonlu düğümler kümesidir. Bu küme boş bir küme olabilir (empty tree). Boş değilse şu kurallara uyar: Kök olarak adlandırılan özel bir düğüm vardır. Her düğüm en fazla iki düğüme bağlıdır. Left child : Bir düğümün sol işaretçisine bağlıdır. Right child : Bir düğümün sağ işaretçisine bağlıdır. Kök hariç her düğüm bir daldan gelmektedir. Tüm düğümlerden yukarı doğru çıkıldıkça sonuçta köke ulaşılır. İkili bir ağaçta i. düzeydeki düğümlerin maksimum sayısı :2 (i 1) dir. k derinliğinde (depth) olan ikili bir ağaçta düğümlerin maksimum sayısı 2k 1 dir. (k 1)

İkili Ağaçlarda Gezinti/Geçiş(Traverse) İşlemleri Gezinti/ Geçiş (traverse); çeşitli kriterlere göre düğümleri yalnızca bir kez ziyaret ederek tüm ağacı dolaşmaktır. Ağaçlar üzerindeki gezinti işlemleri; arama, ağaçtaki tüm bilgilerin listelenmesi vb. başka amaçlarla yapılır. Ağaçların düğümleri doğrusal olmadığından(hiyerarşik) farklı algoritmalar uygulanır.

İkili Ağaçlarda Gezinti/Geçiş(Traverse) İşlemleri Bir ağacı dolaşırken bir düğüme ilişkin olarak veri, sol alt ağaç, sağ alt ağaç söz konusu olduğundan dolayı dolaşma sırası 6 farklı biçimde olabilir: 1) Veri Sol Sağ (preorder = kök başta) veya 2) Veri Sağ Sol (preorder = kök başta) 3) Sol Veri Sağ (inorder = kök ortada) veya 4) Sağ Veri Sol (inorder = kök ortada) 5) Sol Sağ Veri (postorder = kök sonda) veya 6) Sağ Sol Veri (postorder = kök sonda)

Preorder (Kök Başta) Gezinti Bir düğüm, onun alt nesillerinden önce ziyaret edilir. Yani düğümler arasında Kök-Sol Alt Ağaç-Sağ Alt Ağaç sırasıyla gezilir. Algoritma: Köke uğra Sol alt ağacı preorder olarak dolaş. Sağ alt ağacı preorder olarak dolaş. C Kodları: /* Ağacın preorder dolaşılması */ /* Dikkat preorder fonksiyonu özyinelemeli*/ void preorder(agacdugumptr agacptr) { if (agacptr!= NULL) { cout<<agacptr->data; preorder(agacptr->soldal); preorder(agacptr->sagdal); } }

Inorder (Kök Ortada) Gezinti Bir düğüm, sol alt ağaçtan sonra ve sağ alt ağaçtan önce ziyaret edilir. Yani; düğümler arasında Sol Alt Ağaç -Kök-Sağ Alt Ağaç sırasıyla gezilir. Algoritma: Sol alt ağacı inorder'a göre dolaş Köke uğra Sağ alt ağacı inorder'a göre dolaş. C Kodları: /* Agacın inorder dolaşılması */ /* Dikkat inorder fonksiyonu özyinelemeli*/ void inorder(agacdugumptr agacptr) { if (agacptr!= NULL) { inorder(agacptr->soldal); cout<<agacptr->data; inorder(agacptr->sagdal); } }

Postorder (Kök Sonda) Gezinti Bir düğüm, onun alt nesillerinden sonra ziyaret edilir. Yani; düğümler arasında Sol Alt Ağaç - Sağ Alt Ağaç-Kök sırasıyla gezilir. Algoritma: Sol alt ağacı postorder'a göre dolaş Sağ alt ağacı postorder'a göre dolaş. Köke uğra C Kodları: /* Ağacın postorder dolaşılması */ /* Dikkat postorder fonksiyonu özyinelemeli*/ void postorder(agacdugumptr agacptr) { if (agacptr!= NULL) { postorder(agacptr->soldal); postorder(agacptr->sagdal); printf("%d",agacptr->data); } }

ÖRNEK A B B C D D E F G H I Kök Önde-PreOrder : ABDGCEHIF Kök Ortada-InOrder : DGBAHEICF Kök Sonda-PostOrder : GDBHIEFCA

ÖRNEK: Aritmetik ifadelerin infix, prefix ve postfix biçimleriyle kök ortada(inorder),kök-başta(preorder) ve kök sonda(postorder) dolaşma arasında bir bağlantı vardır. Aşağıda ağaç yapısı verilen aritmetik ifadenin ön-işleç(prefix) biçimi ağaç kök önde(preorder) dolaşarak elde edilebilir. + / * * D C E Kök-ortada(infix): ((((A/B)*C)*D)+E) Kök-başta (prefix): +**/ABCDE Kök-sonda:??? A B

İkili Ağaç Çeşitleri İkili Arama Ağacı(Binary Search Tree-BST) Bir İkili Ağacın, İkili Arama Ağacı olması için; Her düğümdeki değerinin, sol alt ağacında bulunan tüm düğümlerin değerlerinden büyük, sağ alt ağacında bulunan tüm düğümlerin değerlerinden de küçük olmasıdır. 6 6 3 7 3 9 2 5 8 4 5 1 İkili arama ağacı ikili arama ağacı DEĞİL

İkili Arama Ağacı (Binary Search Tree-BST) Bağlı Liste veri yapısında tüm elemanların işlenmesi(örneğin arama işlemi gibi) n, listedeki eleman sayısı olmak üzere O(n) zaman almaktadır. İşlem zamanını kısaltmak veri yapılarının en önemli amaçlarından biridir. İkili ağaç yapısı arama, ekleme, silme gibi işlemleri h ağacın derinliğini göstermek üzere O(h) zamanda yapılmasını sağlar.

İkili Arama Ağacı (Binary Search Tree-BST) SORU: 3, 5, 7, 9, 11 kümesiyle derinliği 3, 4 ve 5 olan ikili arama ağaçları çiziniz. Bu kümeyle 2 derinliğinde bir ağaç çizilebilir mi? Neden?

İKİLİ ARAMA AĞACININ HAFIZADA TEMSİLİ Ağaç yapısını meydana getiren düğüm yapısı grafiksel gösterim: *soldal data *sagdal Ağaç yapısını meydana getiren düğüm yapısı(tamsayılar için) C Kodu: /* Ağaca ait düğüm yapısı tanımlanıyor */ struct dugum{ int icerik; struct dugum *sol; struct dugum *sag; }; typedef struct dugum Dugum; typedef Dugum * Dugumptr;

İKİLİ ARAMA AĞACININ HAFIZADA TEMSİLİ Ağaç yapısı grafiksel gösterim: Kök düğüm *soldal data *sagdal *soldal data *sagdal *soldal data *sagdal *soldal data *sagdal *soldal data *sagdal *soldal data *sagdal *soldal data *sagdal *soldal data *sagdal

İKİLİ ARAMA AĞACININ HAFIZADA TEMSİLİ Tamsayılar içeren ikili arama ağacı C Kodu: /*Tamsayılar içeren ikili arama ağacı tanımı*/ struct agac{ Dugumptr kok; }; typedef struct agac Agac; typedef Agac *Agacptr;

Yeni düğüm oluşturma fonksiyonu Dugumptr yeni_dugum(int icerik){ Dugumptr dugum; dugum= (Dugum *) malloc (sizeof (Dugum)); dugum->icerik=icerik; dugum->sol=null; dugum->sag=null; return dugum; }

Yeni ağaç oluşturma fonksiyonu Agacptr yeni_agac(){ Agacptr agac; agac= (Agac *) malloc (sizeof (Agac)); agac->kok=null; return agac; }

Ağaç işlemleri EKLEME-------O(h) ARAMA-------O(h) SİLME-------O(h) AĞAÇTA DOLAŞMA-------O(h)

İkili Arama Ağaçlarında EKLEME(düğüm) İşlemi Ekleme işlemi, İkili Arama Ağacı kurmayı ve kurala uygun olarak yeni elemanlar eklemeyi sağlar. İkili arama ağacını kurmada verilerin geliş biçimi (ağaca ekleniş sırası) önemlidir.

İkili Arama Ağaçlarında EKLEME(düğüm) İşlemi Verilerin geliş sırası 47, 55, 49, 26, 34, 17, 52, 84, 93 şeklinde olursa aşağıdaki şekilde bir ikili ağaç oluşur(derinlik: 4). 47 26 55 17 34 49 52 84 93

İkili Arama Ağaçlarında EKLEME(düğüm) İşlemi Verilerin geliş sırası 26,17, 47, 93, 84, 52, 34, 55, 49 şeklinde olursa aşağıdaki şekilde bir ikili ağaç oluşur(derinlik: 6). 17 26 34 47 84 93 SORU: Verilerin geliş sırası k.ten-b.ğe sıralı veya b.ten-k.ğe sıralı olsa ağacın durumu nasıl olur? İki ayrı şekil ile gösteriniz. Her iki durum için derinlik ne olur? 52 49 55

İkili Arama Ağaçlarında EKLEME(düğüm) İşlemi Ekleme Nasıl Yapılır? Gelen veri, kökten itibaren ağaçta aranır. Daha büyük değerli bir düğüme rastlanırsa sol çocuğuna, daha küçük değerli bir düğüme rastlanırsa sağ çocuğuna ilerlenir. Eğer aynı değer bulunursa ikili arama ağacının tanımına aykırı olacağından ağaca ekleme yapılamaz. Arama göstergesinin son kaldığı konuma(değeri ararken ilk rastladığı NULL göstergenin yerine) öğe eklenir.

İkili Arama Ağaçlarında EKLEME(düğüm) İşlemi-O(h) / * Arama agacina yeni bir eleman(dugum) ekleyen fonksiyon C kodları*/ void agaca_ekle(agacptr a, Dugumptr yeni){ Dugumptr y=null; Dugumptr x=a->kok; while(x!=null){ y=x; if(yeni->icerik<x->icerik) else x=x->sag;} if(y==null) a->kok=yeni; else if(yeni->icerik <y->icerik) else y->sag=yeni; } x=x->sol; y->sol=yeni;

İkili Arama Ağacında ARAMA İşlemi-O(h) İkili arama ağaçlarındaki en önemli işlemlerden birisi aramadır. 11 7 17 25 47 65 43 31 44 77 68 93 Örnek olarak yandaki ağaçta, 44 sayısını aramak için şu işlem sırası izlenir: Karşılaştırma 1 : 44, 47 ile karşılaştırılır. 44<47 olduğundan sol daldan ilerlenir. Karşılaştırma 2 : 44, 25 ile karşılaştırılır. 44>25 olduğundan sağ daldan ilerlenir. Karşılaştırma 3: 44, 43 ile karşılaştırılır. 44>43 olduğundan sağ daldan ilerlenir. Karşılaştırma 4: 44 == 44 Aranan anahtar değeri ağaçta bulundu! Örnek olarak aşağıdaki ağaçta, 9 sayısını aramak için şu işlem sırası izlenir: Karşılaştırma 1: 9, 47 ile karşılaştırılır. 9>47 olduğundan sağ daldan ilerlenir. Karşılaştırma 2 : 9, 77 ile karşılaştırılır. 9>77 olduğundan sağ daldan ilerlenir. Karşılaştırma 3 : 9, 93 ile karşılaştırılır. 9<93 olduğundan sol daldan ilerlenir. : NULL. Aranan anahtar değeri ağaçta bulunamadı.

İkili Arama Ağacında ARAMA İşlemi-O(h) /*Verilen bir degeri ikili arama agacinda arayan özyinelemeli fonksiyon C kodları*/ Dugumptr agac_ara(dugumptr d, int eleman){ if(!d) return NULL; if(d->icerik==eleman) return d; else if(d->icerik>eleman) return agac_ara(d->sol,eleman); else return agac_ara(d->sag,eleman); }

İkili Arama Ağacında ARAMA İşlemi-O(h) /*Verilen bir degeri ikili arama agacında arayan iteratif(özyinelemesiz) fonksiyon C kodları*/ Dugumptr agac_ara2(agacptr a, int eleman){ Dugumptr d; d=a->kok; while (d!=null){ if(d->icerik==eleman)return d; else if(d->icerik>eleman) d=d->sol; else d=d->sag; } return NULL;}

İkili Arama Ağacında SİLME(düğüm) İşlemi İkili arama ağacında herhangi bir düğüm silindiğinde bu düğüme bağlı olan çocukların dikkate alınması gerekmektedir. 3 farklı durum söz konusudur: i).silinecek olan düğüm yaprak ise silme işlemi hemen gerçekleştirilir.

İkili Arama Ağacında SİLME(düğüm) İşlemi ii). Silinecek olan düğüm eğer bir çocuğa sahip ise, o düğümün atasının pointer bilgisini alt düğüme (çocuğa) aktarmak gerekir.

İkili Arama Ağacında SİLME(düğüm) İşlemi iii). Silinecek olan düğüm eğer iki çocuğa sahip ise, silinen düğümün yerine o düğümün sağ alt ağacındaki en küçük anahtar değeri getirilir. Daha sonra ise sağ alt ağaçtan taşınan anahtar değeri silinir.

İkili Arama Ağacında SİLME(düğüm) İşlemi /*Arama agacindan bir düğüm/ eleman silen fonksiyon C kodları*/ void agac_sil(agacptr a, int icerik){ Dugumptr y,x=a->kok; while (x->icerik!= icerik){ if( x->icerik>icerik) x=x->sol; else 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; }}

İkili Arama Ağacında En küçük elemanı bulma İşlemi /*Arama agacındaki en kücük elemanı bulan fonksiyon*/ Dugumptr asgari_ara(dugumptr d){ if (d ==NULL) return NULL; Dugumptr sonuc=d; while (sonuc->sol) sonuc=sonuc->sol; return sonuc; }

İkili Arama Ağacında En küçük elemanı bulma İşlemi /* Arama ağacındaki en küçük elemanı bulan özyinelemeli fonksiyon*/ Dugumptr asgari_ara2(dugumptr d){ if (d->sol== NULL) return d; else return asgari_ara2(d->sol); }

İkili Arama Ağacında En büyük elemanı bulma İşlemi /* Arama ağacındaki en büyük elemanı bulan fonksiyon*/ Dugumptr azami_ara(dugumptr d){ if (d ==NULL) return NULL; Dugumptr sonuc=d; while (sonuc->sag) sonuc=sonuc->sag; return sonuc; }

İkili Arama Ağacında En büyük elemanı bulma İşlemi /* Arama ağacındaki en büyük elemanı bulan özyinelemeli fonksiyon*/ Dugumptr azami_ara2(dugumptr d){ if (d->sag== NULL) return d; else return azami_ara2(d->sag); }

İkili Ağaç Çeşitleri Hatırlanacağı üzere; İkili ağaç yapısı arama, ekleme, silme gibi temel işlemleri h ağacın derinliğini/yüksekliğini göstermek üzere O(h) zamanda yapılmasını sağlar. İkili ağaçların özel bir çeşidi olan İkili arama ağaçlarında da bu temel işlemler ağacın yüksekliği/derinliği ile yakından ilişkilidir. Yani, ikili arama ağacı üzerinde yapılacak ekleme/silme işlemi aynı zamanda ağacın dengesini etkiler ve bazı durumlarda dengenin değişmesine neden olur.

İkili Ağaç Çeşitleri N elemanlı(düğümlü) bir İkili arama ağacı dengeli olduğu sürece ağaçta arama, ekleme, silme gibi temel işlemler O(log 2 N) [N: düğüm(eleman) sayısıdır] zamanda gerçekleşmektedir.

İkili Ağaç Çeşitleri Örneğin; Ekleme sırası {1, 2, 3, 4, 5} şeklinde olan sayıların boş bir ikili ağaca eklenmesi sonucunda ağacın grafiksel görünümü aşağıdaki gibi olur; 1 2 3 4 5

İkili Ağaç Çeşitleri Bu şekilde dengeli olmayan bir ikili arama ağacında; ağacın yüksekliği düğüm/eleman sayısına eşittir. N elemanlı dengeli olmayan bir ikili arama ağacında arama işlemi O(N) zaman alacaktır. Böyle bir ikili arama ağacının bir bağlı liste veri yapısına dönüştüğü söylenebilir. Zaman açısından O(n)> O(log 2 N) olduğundan ikili arama ağaçlarında ağacın dengede olmaması yani dengeli bir ağaç olmaması önemli bir problemdir.

İkili Ağaç Çeşitleri İkili arama ağaçları dengeli olabilirse bir anahtar değerini aramak oldukça hızlıdır. Ağacın dengeli olması durumunda N elemanlı(düğümlü) bir ağaç; en fazla log 2 N düzeyden oluşur. Bu durumda bir anahtar değerin bulunması veya ağaçta olmadığının belirlenmesi için en fazla log 2 N karşılaştırma yapılır. Örneğin 1 elemanlı bir ikili arama ağacında bir elemanın bulunabilmesi için en fazla log 2 1=9.9657 1 karşılaştırma yapmak gerekecektir. Bağlı Listelerde (linked List) ise aranan elemanın değerine göre (eleman sonda olabilir) 1 karşılaştırma yapmak gerekebilir.

DENGELİ İKİLİ AĞAÇ (BALANCED BINARY TREE) Dengeli ağaç (balanced tree); Gelişmesini tüm dallarına homojen olarak yansıtacak biçimde yüksekliği dengelenen ağaç çeşididir. Bu özellikteki ağaca literatürde yükseklik dengeli ağaç da denilmektedir.

DENGELİ İKİLİ AĞAÇ (BALANCED BINARY TREE) Tanım: Herhangi bir düğümüne bağlı sol ve sağ alt ağaçların yükseklikleri arasındaki fark en fazla 1 (bir) olmalıdır(şekil a ve b).

DENGELİ İKİLİ AĞAÇ (BALANCED BINARY TREE) Bir dalın fazla büyümesi ağacın dengesini bozar ve ağaç üzerinde yapılan işlemlerin yürütme zamanı doğrusal bağıntılara dönüşür. Dolayısıyla ağaç veri yapısının en önemli getirisi kaybolmaya başlar. Yapılan istatistiksel çalışmalarda, ağacın oluşturulması için gelen verilerin rastgele olması durumda ağacın dengeli olduğu veya çok az sapma gösterdiği gözlenmiştir.

DENGELİ İKİLİ AĞAÇ (BALANCED BINARY TREE) İkili Arama Ağacı(BST) işlemlerini daha kısa sürede gerçekleştirmek için birçok BST dengeleme algoritması geliştirilmiştir. Bunlardan bazıları; Adelson-Velskii ve Landis (AVL) ağaçları (1962) Splay ağaçları (1978) B-ağacı ve diğer çok yönlü arama ağaçları (1972) Red-Black ağaçları (1972) Simetrik İkili B-Ağaçları(Symmetric Binary B-Trees) dir

AVL AĞACI AVL( G.M. Adelson-Velskii and E.M. Landis) yöntemine göre kurulan bir ağaç, ikili AVL arama ağacı olarak adlandırılır. AVL ağacının özelliği; sağ alt ağaç ile sol alt ağaç arasındaki yükseklik farkının en fazla bir düğüm olmasıdır. Bu kural ağacın tüm düğümleri için geçerlidir. Normal ikili arama ağaçları için ekleme ve silme algoritmaları, ikili AVL ağaçları üzerinde ağacın yanlış şekil almasına, yani ağacın dengesinin bozulmasına neden olur.

AVL Ağaçları Tanım: 1.Boş bir ağaç AVL ağacıdır. 2.Eğer T boş olmayan TL ve TR şeklinde sol ve sağ alt ağaçları olan ikili arama ağacı ise, T aşağıdaki şartları sağlarsa AVL ağacı şeklinde isimlendirilir. TL ve TR AVL ağaçları ise hl ve hr, TL ve TR nin yükseklikleri olmak üzere hl hr <= 1 olmak zorundadır.

AVL AĞACI hl=hr±1 hr=hl±1 TL TR

AVL Ağaçları- Denge Faktörü[Balance Factor] AVL ağaçları dengeli ikili arama ağaçlarıdır. Her bir düğümün sol ve sağ alt ağaçlarının yükseklikleri arasındaki fark en fazla 1 olabilir. Bir düğümdeki denge faktörü(bf)= hl - hr AVL ağaçlarında denge faktörü (balance factor-bf) sadece -1,, 1 olabilir. hl=hr ise BF= hl>hr ise BF= 1 hl<hr ise BF= -1

ÖRNEK1 İçeriği 7 olan düğüm için BF hesaplanması; hl=2, hr=2 olduğundan BF=hL-hR= olur. 7 1-1 6 8 5 Kırmızı numaralar balans faktörüdür. 9 İçeriği 8 olan düğüm için BF hesaplanması; hl=, hr=1 olduğundan BF= -1 olur.

ÖRNEK2 AVL AĞACI DEĞİL İçeriği 7 olan düğüm için BF hesaplaması: 6 7 8 hl=3, hr=1 olduğundan BF=2>1(denge bozulur) dir. 1 4 Soru: Diğer düğümler için BF leri siz hesaplayınız. 3 5

ÖRNEK 3 6 6-1 6 1 5 7-1 1 4 1 2 4 9 1 4 9 1 8 1 5 8 AVL Ağacı 7 9 AVL Ağacı Değildir AVL Ağacı 6-1 6 1 6 1 4 9 2 4 9 2 4 7-2 1 7-1 8 1 5 1 1 3 8-1 9 AVL Ağacı Değildir AVL Ağacı AVL Ağacı Değildir Kırmızı numaralar balans faktörüdür.

AVL AĞACININ HAFIZADA TEMSİLİ AVL Ağaç yapısını meydana getiren düğüm yapısı grafiksel gösterim: *soldal data yukseklik *sagdal AVL Ağaç yapısını meydana getiren düğüm yapısı(tamsayılar için) C Kodu: /* Ağaca ait düğüm yapısı */ struct avldugum { struct avldugum *sol,*sag; int data;/*ağaçta tutulacak verinin tipine göre bu tanım değişebilir*/ int yukseklik;};

AVL AĞACININ HAFIZADA TEMSİLİ Aşağıda, bu yapıya uygun olarak örnek değişken tanımları ve AVL ağacı için düğüm oluşturma işlemi yer almaktadır: typedef struct avldugum Avldugum; typedef Avldugum * Avldugumptr; Avldugumptr yeni_avldugum(int y_veri){ Avldugumptr dugum; dugum=(avldugum *)malloc(sizeof(avldugum)); dugum->veri=y_veri; dugum->sol=null; dugum->sag=null; dugum->yukseklik=1; return dugum;}

AVL dugum tanımını kullanan boş bir struct avlagac{ Avldugumptr kok;}; AVL Ağacı oluşturma typedef struct avlagac Avlagac; typedef Avlagac *Avlagacptr; Avlagacptr yeni_avlagac(){ Avlagacptr agac; agac=(avlagac *)malloc(sizeof(avlagac)); agac->kok=null; return agac; }

AVL ağacı yüksekliğini-boyunu bulma int boy(avldugumptr d){ if(d==null) return ; else return d->yukseklik; }

AVL Ağacında Dengenin Sağlanması: Problem: Ekleme işlemi bazı durumlarda ekleme noktasına göre kök olan bölgelerde denge faktörünün 2 veya -2 olmasına neden olabilir. Çözüm Yolu: Yeni düğümü ekledikten sonra; Denge faktörü düzelterek köke doğru çık. Eğer düğümün denge faktörü 2 veya -2 ise ağaç bu düğüm üzerinde döndürülerek düzeltilir.

AVL Ağacında Dengenin Sağlanması: AVL ağacı 6 1 6 2 5 7-1 1 5 7-1 1 4 9 4 9 3 3 Eklendikten sonra-------> AVL AĞACI DEĞİL

Denge Sağlama-Rotasyon/Döndürme: Örnek AVL Ağacı 1 4 6 5 7-1 9 3 1 2 4 5 6 1 7 9 3 Eklendikten sonra-------> AVL AĞACI DEĞİL DÖNDÜRME/Rotasyon UYGULANARAK DENGE SAĞLANDI 4 6 7-1 3 5 9

AVL Ağacı - Ekleme (1) P düğümünün dengeyi bozan düğüm olduğu düşünülürse bu düğüm; P pivot düğüm şeklinde isimlendirilir. Eklemeden sonra köke doğru çıkarken BF nin 2 veya -2 olduğu ilk düğümdür. P P Pivot: bf 2 veya -2 L R A B C D

4 farklı durum vardır: Dış Durum (tek döndürme gerektiren) : P nin sol alt ağacının soluna eklendiğinde (LL Dengesizliği). P nin sağ alt ağacının sağına eklendiğinde (RR Dengesizliği) İç Durum (2 kez döndürme işlemi gerektiren) : P nin sol alt ağacının sağına eklendiğinde (RL Dengesizliği) P nin sağ alt ağacının soluna eklendiğinde(lr Dengesizliği)

I). LL Dengesizliği & Düzeltme LL Dengesizliği: P nin sol alt ağacının soluna eklediğimizde (A alt ağacınına) P nin BF si 2 L nin BF si veya 1 Düzeltme: P etrafında sağa doğru döndürme.

ÖRNEK: LL Dengesizliği & Düzeltme LL Dengesizliği: P(4) ün bfsi 2 L(3) ün bfsi veya 1 1 1 Ekle(2) 1 1 1 1 Döndür 1 1 1 4 2 1 4 2 2 4 2 3 2 3 3 1 3 2 4 Başlangıçtaki AVL Ağacı 2 2 eklendikten sonra ağacın durumu 2 Pivotun belirlenmesi LL Düzeltmesi yapıldıktan sonra AVL ağacı

II). RR Dengesizliği & Düzeltme: RR Dengesizliği: P nin sağ alt ağacının sağına eklendiğinde (D alt ağacına eklendiğinde) P bf = -2 R bf = veya -1 Düzeltme: P etrafında sola doğru döndürme

ÖRNEK: RR Dengesizliği & Düzeltme: 1-1 Ekle(4) 1-2 Döndür 2 4 2 4 2-1 1 3-1 15 3 15 3-1 4 15 4 4 4 eklendikten sonra ağacın durumu RR Düzeltmesi yapıldıktan sonra AVL ağacı Balans faktörü düzelterek köke doğru ilerle ve 1 u pivot olarak belirle Dengesizliğin türünün belirlenmesi RR Dengesizliği: P(1) bf = -2 R(2) bf = veya -1

III). LR Dengesizliği & Düzeltme: LR Dengesizliği: P nin sol alt ağacının sağına eklendiğinde (LR ağacına) P bf = 2 L bf = -1 Düzeltme: L & P etrafında 2 kez döndürme

ÖRNEK: LR Dengesizliği & Düzeltme 1 1 Ekle(5) 2 1 Döndür 7 4 2-1 2 4 2 4 1-1 3 7 3 1 7 1 3 5 2 Başlangıçtaki AVL Ağacı 5 LR Düzeltmesinden sonra ağacın durumu Balans faktörü düzelterek köke doğru ilerle ve 1 u pivot olarak belirle 5 eklendikten sonra ağacın durumu Dengesizliğin türünün belirlenmesi LR Dengesizliği: P(1) bf = 2 L(4) bf = -1

IV). RL Dengesizliği & Düzeltme: RL Dengesizliği: P nin sağ alt ağacının soluna eklendiğinde (RL alt ağacına) P bf = -2 R bf = 1 Düzeltme: R & P etrafında 2 kez döndürme.

ÖRNEK: RL Dengesizliği & Düzeltme - 1 1 4 2 15 3 Başlangıçtaki AVL Ağacı Ekle(17) Balans faktörü düzelterek köke doğru ilerle ve 1 u pivot olarak belirle - 2 1 2 4 2 1-1 15 1 17 17 eklendikten sonra ağacın durumu 3 Döndür RL Dengesizliği: P(1) bf = -2 R(2) bf = 1 Dengesizliğin türünün belirlenmesi 4 1 1 15 17 RL Düzeltmesi yapıldıktan sonra AVL ağacı 2 1 3