Ders İçeriği Ağaç Veri Modeli Tanım ve Gerçekleştirim İkili Ağaç

Slides:



Advertisements
Benzer bir sunumlar
Yığınlama Sıralaması (Heap Sort)
Advertisements

Karmaşıklık Giriş.
C# - Metotlar.
Değişkenler ve bellek Değişkenler
Yığın ve Kuyruk.
Veri ve Veri Yapıları Genel olarak bilgisayarlar.
Ders İçeriği Bağlantılı Liste İki Yönlü Bağlantılı Liste
BPR152 ALGORİTMA VE PROGRAMLAMA - II
Programlama-II (Java ile Bilgisayar Programlama)
Nesneye Dayalı Programlama
AVL-Ağaçları (Trees).
Atama ve Girdi/Çıktı Komutları
İkili Ağaçlar İkili Arama Ağaçları
Bölüm 4 – Kontrol İfadeleri:1.kısım
4 Kare Problemi 4 Kare Problemi Hazır mısın? B A Bu şekle iyi bak
EDUTIME Java Day 4 Serdar TÜRKEL.
İçerik Ön Tanımlar En Kısa Yol Problemi Yol, Cevrim(çember)
MIT503 Veri Yapıları ve algoritmalar En önemli graf problemleri
BPR152 ALGORİTMA VE PROGRAMLAMA - II
BPR151 ALGORİTMA VE PROGRAMLAMA - I
Bölüm 10 Yapılar ve Birleşimler
Özyinelemeli(Recursive) Algoritma Tasarımı
Karar ifadeleri ve Döngüler
İkili Arama Ağaçları (Binary Search Trees) BST
BPR152 ALGORİTMA VE PROGRAMLAMA - II
Nesneye Yönelik Programlama
Nesneye Yönelik Programlama Dr. Pelin GÖRGEL
BPR152 ALGORİTMA VE PROGRAMLAMA - II
BİRİNCİ DERECEDEN BİR BİLİNMEYENLİ DENKLEMLER
NESNEYE YÖNELİK PROGRAMLAMA
Binary Ağaçlar (Ekleme/Silme Örnekleri)
DİZİLER.
Algoritmalar DERS 4 Çabuk sıralama Böl ve fethet Bölüntüler
Çizge Teorisi, Dağıtık Algoritmalar ve Telsiz Duyarga Ağları
BPR152 ALGORİTMA VE PROGRAMLAMA - II
İçerik: Graflar Tanım Gösterim Dolaşma Algoritmaları
Erişim Denetimi, Fonksiyon
ÇİZGELERİN GÖSTERİMİ Yılmaz KILIÇASLAN. Sunu Planı Bu derste, çizgelerin bilgisayarda gösterimine ilişkin iki standart yaklaşımı inceleyeceğiz.
C# Metot Overloading (Aşırı yükleme)
MIT503 Veri Yapıları ve algoritmalar Veri ağaçları
JAVADA PROGRAM DENET İ M İ VE OPERATÖRLER. int a ; a=4 ; // do ğ ru bir atama 4=a ; // yanlış bir atama!
TEST – 1.
Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi
ÇOK BİÇİMLİLİK POLYMORPHISM
ÇİZGELERİN GÖSTERİMİ Yılmaz KILIÇASLAN.
YMT219: Veri Yapıları Ders Saatleri: Pazartesi 9:15-12, 17:30-20:15
Diziler Adres Kavramı Nesnelerin Adresleri sizeof Operatörü
Bilgisayar Programlama
BİYOİNFORMATİK NEDİR? BİYOİNFORMATİKTE KULLANILAN SINIFLAMA YÖNTEMLERİ
Numaralandırmalar(Enumaration)
BPR152 ALGORİTMA VE PROGRAMLAMA - II Öğr. Gör. Bayram AKGÜL
Toplama Yapalım Hikmet Sırma 1-A sınıfı.
Trees, Vectors, Iterators. ADT Abstract Data Type (ADT) vs implementation -Soyut Veri Türleri - Uygulamaları.
Ders İçeriği Liste Soyut veri yapısı (ADT)
Bölüm 5 Nesneler ve Metotlar
Bil 102 Bölüm 6 Diziler.
Bil 102 Bölüm 3 Java’da Program Akış Denetimi Bil 1021.
Bilgisayar programlarının en büyük avantajı, kullanıcının işini kolaylaştırmalarıdır. Her bilgisayar programı bunu değişik metotlar kullanarak sağlar.
JAVA PROGRAMLAMA ORNEKLER
Veri yapıları Hafta3 Dizi Yapıları.
AVL(Adel’son-Vel’skiĭ and Landis) Ağacı AVL ağacı, iki alt ağacının yükseklikleri farkının en fazla 1 olabildiği dengeli ikili arama ağacıdır. AVL ağacında.
Hafta2 Rekürsif Algoritmalar
GrafTeorisine İlişkin Bazı Tanımlar
Tanım: ( Temel Çevreler Kümesi)
Fonksiyonlar ve Diziler
G grafının aşağıdaki özellikleri sağlayan Ga alt grafına çevre denir:
Veri Tipleri 12/4/2018.
NİŞANTAŞI ÜNİVERSİTESİ
NİŞANTAŞI ÜNİVERSİTESİ
NİŞANTAŞI ÜNİVERSİTESİ
Sunum transkripti:

Ders İçeriği Ağaç Veri Modeli Tanım ve Gerçekleştirim İkili Ağaç Bağıntı Ağaçları

Ağaç Veri Modeli Verilerin birbirine sanki bir ağaç yapısı oluşturuyormuş gibi sanal olarak bağlanmasıyla elde edilen hiyerarşik yapıya sahip veri modelidir. Yazılım dünyasında birçok yerde programcının karşısına çıkar. Örneğin: İşletim sistemlerinin dosya sistemi. Oyunların olası hamleleri. Şirketlerdeki organizasyon şeması.

Örnek Dosya Sistemi /ymt kitaplar kodlar dersler ymt219 ymt112 ... a.java b.java eski 2010-2011 1.pdf 2.pdf 1.pdf ymt219 ymt217 ymt215 ... 1.ppt 1.doc 1.Pdf

Ağaç Üzerinde Bazı Tanımlar Kök Çocuk: Bir düğüme doğrudan bağlı olan düğümlere o düğümün çocukları denir. Derece: Bir düğümden alt hiyerarşiye yapılan bağlantıların sayısıdır. Derinlik 1 2 3 4 A Ara Düğüm B C Yaprak Düğüm D E F Yaprak Düğüm G 7 düğümlü ağaç

Ağaç Üzerinde Bazı Tanımlar Kardeş Düğüm: Aynı düğüme bağlı düğümlere denir. Aile: Düğümlerin doğrudan bağlı olduğu düğüme denir. Ata: Aile düğümünün üstündeki düğüme ata denir. Orman: Ağaçlar kümesi Yol: Bir düğümden başka bir düğüme gidebilmek için üzerinden geçilmesi gereken düğümlerin listesi. Düzey: Kök ile düğüm arasındaki yolun üzerinde bulunan düğümlerin sayısıdır. Derinlik: Bir düğümün köke olan uzaklığı Yükseklik: Bir düğümün kendi silsilesindeki en uzak mesafedeki yaprak düğüme olan düzey sayısı. Altağaç: Ağacın herhangi bir dalı

Ağaç Üzerinde Bazı Tanımlar Kök A Tanım kök B D Çocuk/Derece 2 Kardeş 1 3 Düzey Aile yok C Ata Kök Yol A A, B A,C,D Derinlik Yükseklik 4 B C D F E G

Ağaçlar Ağaç tanımı özyinelemelidir: Bir ağaç iki şekilde olabilir: a. Boş düğüm kümesi, veya b. Kök ismi verilen bir düğüm ve 0 veya daha fazla alt-ağacı olan yapı. N tane düğümden oluşan bir ağacın kenar sayısı N-1 tanedir. Ağaçtaki iki düğüm arasında en fazla 1 yol olabilir.

Ağaç Gerçekleştirimi Ağaç veri yapısını gerçekleştirmek için 2 yol vardır. Bağlantılı liste kullanmak Dizi kullanmak

Ağaç Gerçekleştirimi Her bir bağlantı için birer bağlantı bilgisi tutulur. A B C D E F Problem: Bir sonraki elemanın çocuk sayısını bilmiyoruz.

Ağaç Gerçekleştirimi Daha iyisi: 1. Çocuk/Kardeş Gösterimi Her düğümde iki bağlantı bilgisi tutularak hem çocuk hem de yandaki kardeş tutulabilir. İstenildiği kadar çocuk/kardeş olabilir. JAVA Declaration class AgacDugumu { int eleman; AgacDugumu ilkCocuk; AgacDugumu kardes; } A B C D E F

İkili Ağaç İkili ağac bir düğümün en fazla 2 tane çocuğa sahip olabildiği ağaçtır Her düğüm en fazla 2 çocuğa sahip olabilir. Bilgisayar bilimlerinde en yaygın ağaçtır. A C D Z I K Kök P M Sağ alt ağaç Sol alt ağaç A B İki farklı ikili ağaç

İkili Ağaç (devam) N tane düğüm veriliyor, İkili ağacın minimum derinliği nedir. Derinlik 1: N = 1 = 20 düğüm Derinlik 2: N = 2 ve 3 düğüm = 21 ve 21+1 -1 düğüm Herhangi bir d derinliğinde, N = ?

İkili Ağaç (devam) Derinlik 0: N = 1 = 20 düğüm Derinlik 1: N = 2 ve 3 düğüm = 21 ve 21+1 -1 düğüm D derinliğinde , N = 2d ve 2d+1-1 düğüm (tam bir ikili ağaç) En küçük derinlik: log N ≤ d ≤ log(N+1)-1 or Θ(log N)

İkili Ağaç (devam) N düğümlü ikili ağacın minimum derinliği: Θ(log N) İkili ağacın maksimum derinliği ne kadardır? Dengesiz ağaç: Ağaç bir bağlantılı liste olursa! Maksimum derinlik = N Amaç: Arama gibi operasyonlarda bağlantılı listeden daha iyi performans sağlamak için derinliğin log N de tutulması gerekmektedir. Bağlantılı liste Derinlik = N

İkili Ağaç Gerçekleştirimi d sol veri sag kök 4 public class İkiliAgacDugumu { public İkiliAgacDugumu sol; public int veri; public İkiliAgacDugumu sag; } 6 12 45 7

İkili Ağaç Gerçekleştirimi /* İkili ağaç düğümü oluşturur. */ İkiliAgacDugumu DugumOlustur(int veri){ İkiliAgacDugumu dugum = new İkiliAgacDugumu(); dugum.veri = veri; dugum.sol = null; dugum.sag = null; return dugum; } dugum veri null null Bu yordam ikili ağaç düğümü oluşturur ve bunu geri döndürür.

İkili Ağaç Gerçekleştirimi İkiliAgacDugumu dugum = null; public static void main main(){ kok = DugumOlustur(4); kok.sol = DugumOlustur(6); kok.sag = DugumOlustur(12); kok.sol.sol = DugumOlustur(45); kok.sag.sol = DugumOlustur(7); kok.sag.sag = DugumOlustur(1); } /* main */ kök 4 6 12 45 7 1 Kök verilmiş olsun tüm ağaç üzerinde dolaşıp elemanları ekrana nasıl yazdırırız.? Ağaç dolaşma algoritmaları

İkili Ağaç Üzerinde Dolaşma İkili ağaç üzerinde dolaşma birçok şekilde yapılabilir. Ancak belirli bir yönteme uyulması algoritmik ifadeyi kolaylaştırır. İkili ağaç üzerinde dolaşmak için 3 temel yol vardır. Bunlar: Önce-kök (Preorder): Kök, Sol, Sağ Önce ağacın kökü, sonra sol alt ağaç ve ardından sağ alt ağaç Ortada-kök (Inorder): Sol, Kök, Sağ Önce sol alt ağaç, kök ve sağ alt ağaç Sonra-kök (Postorder): Sol, Sağ, Kök Önce sol alt ağaç, sağ alt ağaç ve kök.

Örnek Önce-kök A C P D Z M I K A C D Ortada-kök P C A M Z D I K Z I P Sonra-kök P C M Z K I D A M K

Algoritma OnceKok(IkiliAgacDugumu kok){ if (kok == null) return; System.out.print(kok.veri+" "); OnceKok(kok.sol); OnceKok(kok.sag); } OrtadaKok(IkiliAgacDugumu kok){ if (kok == null) return; OrtadaKok(kok.sol); System.out.print(kok.veri+" "); OrtadaKok(kok.sag); } SonraKok(IkiliAgacDugumu kok){ if (kok == null) return; SonraKok(kok.sol); SonraKok(kok.sag); System.out.print(kok.veri+" "); }

Bağıntı Ağaçları Bağıntı ağaçları bir matematiksel bağıntının ağaç şeklinde tutulması için tanımlanmıştır. Örnek aritmetik işlem A + (B * (C / D) ) Ağacın genel yapısı: Yaprak düğüm = değişken/sabit değer Kök veya ara düğümler = operatörler Birçok derleyicide kullanılır. Parantez gereksinimi yoktur. Kök + A * B / C D

Bağıntı Ağaçları Verilen denklemden bağıntı ağacı kurulması veya verilen ağaçtan denklemin çıkartılması için üç değişik yöntem vardır: İç-takı: matematikte alışılagelen şekilde, operatörlerin ortada, değişken veya sabit değerlerin operatörün kenarında bulunan yöntemdir. Ön-takı: operatörler kendilerine karşı düşen parametrelerin(değişken/sabit) önündedir. Son-takı: Polonyalı notasyonu olarak da adlandırılır ve operatörler kendi parametrelerinin arkasından gelir.