620 likes | 1.01k Views
MIT503 Veri Yapıları ve algoritmalar V eri ağaçları. Y. Doç. Yuriy Mishchenko. İleri veri yapıları ve veri ağaçları. Ders planı Veri ağaçlarının nedeni – neden veri ağaçları ? İkili ağaçları ve arama veri ağaçları Veri agaçlarının temel operasyonları : arama, min ve max bulma
E N D
MIT503 Veri Yapıları ve algoritmalarVeri ağaçları Y. Doç. Yuriy Mishchenko
İleri veri yapıları ve veri ağaçları Ders planı • Veri ağaçlarının nedeni – neden veri ağaçları? • İkili ağaçları ve arama veri ağaçları • Veri agaçlarının temel operasyonları: arama, min ve maxbulma • Dengesiz ve dengeli veri ağaçları
Neden veri ağaçları • Veri ağaçlarını tartışmadan önce, son dersten bir örneği hatırlatayım: sıralanmış dizide arama • Sıralanmış dizi[1-3-7-8-10-15-16-17-21-22-23-25-...] • İkiye bölme algoritması: ortadaki nesneyi incelemeleyince o nesneye göre ya da sol ya da sağ tarafta aramamızı devam ederiz (sol veya sağ tarafın ortasındaki nesneyi inceliyoruz) v.b.
Neden veri ağaçları • Sıralanmamış dizide, tüm nesnelerine bakmak gerekiyor – (n dizinin boyutu ise) O(n) zaman lazım • İkiye bölme algoritması, O(log2n) kadar adım gerekiyor --- n=106,106 karşı log2 106=20 vakit tüketimi var • Büyük veri dizileri için, birinci algoritma kullanılamaz artık!
Neden veri ağaçları • Büyük veri için depolama stratejisi böyle olabilir • Depolanacak nesneler ile bir sıralanmış diziyi doğru oluşturmak istiyoruz • Nasıl olabilir? • Naif strateji kullanarak, veri dizisine yeni nesneler eklemek için tek operasyon gerekiyor – her hangi bir dizideki yere eklenebilirler • Bu strateji göre sıralanmış diziye yeni nesne eklemek için ve dizinin sıralanmış olmasını tutmak için yeni nesnenin doğru yer ilk önce bulmak lazım – biraz daha çok zor, ama yapılabilir mi ?
Neden veri ağaçları • Nesneler sıralanmış diziye ekle ve sıralanmış diziden ayıkla • Yeni nesne için, ilk önce uygun bir yer dizide bulmak gerekiyor • O yere nesneyi ekleyebiliriz, dizinin sıralanmış olmasını tutarken • Ayıklama için, ikiye bölme algorıtmasını kullanabiliriz • Örneğin: • Sıralanmış dizi = “1,3,4,7,8,9,11,22,23,25,27,33” • “10” nesneyi eklemek için, ilk önce dizide uygun bir pozisyon bulmak zorundayız – burada, “9” nesneden tam sonrası uygundur • Bu operasyon, arama operasyonuna eşittir, çünkü nesneyi (“10”) arama ile aynı şekilde yapıyoruz – ikiye bölme araması nesneye eşit yada en yakın nesneyi bulur İkiye bölme araması... 2 5 7 11 12 13 17 22 23 30 hedef aramasının sırası
Neden veri ağaçları • Nesneleri sıralanmış diziye ekle ve sıralanmış diziden ayıkla • Dizi = “1,3,4,7,8,9,11,22,23,25,27,33” • “10” nesneyi eklemek için, ilk önce dizisinde uygun bir pozisyon bulumak zorundayız– burada, “9” nesneden tam sonrası uygundur • Bu (ekleme) operasyon, arama operasyonuna eşittir, çünkü “10” nesneyi ikiye bölme araması ile aynı şekilde yapıyoruz • Bu nedenle, ekleme ortalama O(log n) vakit gerekiyor • Ayıklama, aynı şekilde ikiye bölme algoritmasını kullanarak O(log n) vakitle yapılabilir • Hem sıralanmış diziyi oluşturma hem diziden ayıklama O(log n) vakit gerekiyor, naif yaklaşımın O(n)’den daha daha çok az
Neden veri ağaçları • Sonuç: sıralanmış dizi veri yapısının oluşturmanındaha fazla vakit ihtiyacına rağmen, büyük veri depolama için sıralanmış veri yapıları daha çok avantajlıdır. –106karşı 20– • Veri agaçları, bilgisayar bilimindeki sıralanmış veri depolama sağlayan veri yapısıdır
Ağaçlar nedir? • Ağaçlar, graflarınbir özel durumudur • Graflar, nesneler (düğümler) ve bağlantılar (oklar) içeren bir çizim/şemadir
Graflar ve ağaçlar düğüm • Bu bir genel graf bağlantı döngü
Graflar ve ağaçlar • Ağaçlar, döngüler içermeyen graflardır
Graflar ve ağaçlar • Bu bir ağaç Döngüler yok
Graflar ve ağaçlar • Ağaç örnekleri Bu ağaç (graf) önceki sayfadaki ağaca eşit –sadece düğümleri taşıdık
Graflar ve ağaçlar • Ağaç örnekleri
Graflar ve ağaçlar • Ağaç örnekleri Başka bir ağaç
Graflar ve ağaçlar Ağacın en yüksek düğümüne ağaç kökü denir • Ağaçların terimleri Ağaç kökü
Graflar ve ağaçlar • Ağaçların terimleri Ağaçdaki bütün bağlantılar için, bağlantının çıktığı düğüme “ana” düğüm denir ve bağlantının bittiği düğüme “çocuk” düğüm denir Ana düğüm Çocuk düğüm
Graflar ve ağaçlar • Ağaçların terimleri Ağaçlarda, tüm düğümlerin her zaman tek ana düğümü olabilir Ana düğüm Çocuk düğüm Bir veya birkaç çocuk olabilir Kökte sadece çocuklar var
Graflar ve ağaçlar Kökünden başka düğümlere “yapraklar” denir • Ağaçların terimleri Yapraklar Kökten aynı uzaklıkta olan yapraklara “seviye” denir Seviyesi Ağacın seviye sayısına “ağacın yüksekliği” denir Ağacın yüksekliği = 4
Graflar ve ağaçlar • Ağaçların terimleri Ağaç kökü Ağaç yaprakları Ana düğüm Çocuk düğüm Ağaç seviyesi Ağacın yüksekliği
Ağaçların uygulanması • Ağaçlar, bağlantılı listelerle uygulanır • Düğümlerin hepsinde bir nesne ve çocuklarına veya anasına (veya ikisine) işaretçiler vardır
Ağaçların uygulanması • Ağaç • Düğümlerin listesi • Düğümün adı (anahtar) • Çocuklarına işaretçi • Anasına işaretçi • Herhangi ek veriler
Graflar ve ağaçlar • Ağaç düğümlerin hepsinde maksimum iki çocuk varsa, o agaca “ikili ağaç” diyoruz Üç çocuk var – ikili ağaç değil bu
Graflar ve ağaçlar • Ağaç düğümlerin hepsinde maksimum iki çocuk varsa, o agaca “ikili ağaç” diyoruz ikili ağaç
Graflar ve ağaçlar • İkili ağaçların biri türüne bilgisayar biliminde arama ağacı de denir
Graflar ve ağaçlar • Arama ağaçlarının en önemli özelliği: • (tüm düğümler numara içerir, o numaralara “anahtarlar” denir) • Her düğüm için, soldakianahtarların hepsi onun anahtarından daha küçük ve sağdaki anahtarlarınhepsi – daha büyük olması gerekiyor 9 5 15 3 18 7 12 1 4 11 14
Graflar ve ağaçlar 9 daha büyük daha küçük 5 15 3 18 7 12 1 4 11 14
Graflar ve ağaçlar 9 5 15 daha küçük daha büyük 3 18 7 12 1 4 11 14
Graflar ve ağaçlar 9 5 15 3 18 7 12 daha küçük daha büyük 1 4 11 14
Graflar ve ağaçlar • Teorem: ---arama ağacları, anahtarların sıralanmış depolanmasını sağlar --- • Etkin (log n) arama ve ayıklama mümkündür 9 5 15 3 7 12 18 1 4 11 14
Veri ağaçların operasyonları • Arama ağaclarının sağlanan operasyonları: • Sayı arama • Minimum sayı bulma • Maksimum sayı bulma • Ana düğüm verme • Çocuk düğüm verme • Yeni sayı ekleme • Sayı silme 9 5 15 3 18 7 12 1 4 11 14
Veri ağaçların operasyonları • Min ve max algoritması çok basit • Min: her zaman sola gitmek • Max: her zaman sağa gitmek 9 max min 5 15 3 7 12 18 1 4 11 14
Veri ağaçların operasyonları • Min ve max algoritması söz kodu/akış şeması mın algoritmasıp:=kök düğümü p‘nin sol çocuğu varken p:=p’nin sol çocuğu döngünün sonu p’yi geri ver //bu mindir başlangıç p’nin sol çocuğu var? evet p:=p’nin sol çocuğu max algoritmasıp:=kök düğümü p’nin sağ çocuğu varken p:=p’nin sağ çocuğu döngünün sonu p’yi geri ver //bu maxdır hair ver p sonuç
Veri ağaçların operasyonları • Arama algoritması • İkiye bölme gibi çalışıyor • Kökten başlayarak anahtarları karşılaştırın; • Hedef şimdiki düğüm anahtarından daha büyükse, sağa gidin; küçükse, sola gidin • V.B. 14 9 14 ? 5 15 14 ? 3 7 12 18 14 ? 1 4 11 14
Veri ağaçların operasyonları başlangıç • Arama algoritması eşit ise daha büyük ise Aramap:=kök düğümü döngüp hedefe eşit isep’yi geri ver ve dur p hedeften daha büyük ise p:=p’nin sol çocuğup hedeften daha küçük ise p:=p’nin sağ çocuğu p’nin çocuğu varken bulunmadı p karşı hedef p:=p’nin sol çocuğu daha küçük ise p:=p’nin sağ cocuğu ver p sonuç
Veri ağaçların operasyonları • Yeni nesne ekleme algoritması • Köküdan, aramada gibi ilerleyin • Yeni düğümü son düğümde sağa ekleyin 8 9 8 ? 5 15 8 ? 3 12 18 7 1 4 8 11 14 Yeni
Veri ağaçların operasyonları • Yeni nesne ekleme algoritması • Köküdan, aramada gibi ilerleyin • Yeni düğümü son düğümde sağa ekleyin Yeni ağaç, arama ağacının koşulu karşılıyor (kolay) 9 8 ? 5 15 8 ? 3 12 18 7 1 4 8 11 14 Yeni
Veri ağaçların operasyonları • Basit operasyonları (özet): • Min – her zaman sola gidin • Max – her zaman sağa gidin • Arama – kökü başlayan, anahtarlar karşılaştırın; hedef anahtardan daha büyüksa, sağa gidin, küçüksa, sola gidin • Ekleme – kökten aramadaki gibi ilerleyin; sonunda, yeni anahtarı son düğümde sağa ekleyin
Veri ağaçların operasyonları • Silme – daha zor bir algoritma • Silme için, üç duruma bakmalıyız • Silenecek düğümde çocuk yoksa – düğümü düşünmeden silebiliriz 9 5 15 3 12 7 Bu düğümü hemen silebiliriz 1 4 11 14
Veri ağaçların operasyonları • Silenecek düğümde tek çocuk varsa – düğümü silip çocuğunu ana düğümüne bağlayabiliriz Düğümü silip tek çocuğunu anasına bağlayabiliriz 9 15 5 3 12 7 1 4 11 14
Veri ağaçların operasyonları • Silenecek düğümde birkaç çocuk varsa... • Düğümün solunda en sağdaki koşede düğümü bulmalıyz 9 5 15 Silenecek düğüm 3 7 12 1 4 11 14
Veri ağaçların operasyonları • Silenecek düğümde birkaç çocuk varsa ... • Düğümün solunda en sağdaki koşede düğümü bulmalıyız 9 5 15 Silenecek düğüm 3 7 12 En sağdaki köşe 1 4 11 14
Veri ağaçların operasyonları • Böyle çocuğu silenecek düğümün yerine taşımalıyız 9 5 15 Silenecek düğüm 3 7 12 1 4 11 14
Veri ağaçların operasyonları • Böyle çocuğu silenecek düğümün yerine taşımalıyız Yeni ağaç, arama ağacının koşulunu karşılıyor 9 4 15 Silenecek düğüm 3 7 12 1 4 11 14
Veri ağaçların operasyonları • Aynı şekilde, şunu solda yapabiliriz... Yeni ağaç, arama ağacının koşulunu karşılıyor 9 5 15 Silenecek düğüm 3 7 12 1 4 11 14 Sağda en soldaki koşe
Veri ağaçların operasyonları • Aynı şekilde, şunu solda yapabiliriz... Yeni ağaç, arama ağacının koşulunu karşılıyor 9 7 15 Silenecek düğüm 3 7 12 1 4 11 14
Veri ağaçların operasyonları • H – ağacın yüksekliğiyse, ağaçların operasyonları O(H) zaman gerekiyorlar 4 9 4 5 15 H 3 12 18 4 7 1 4 11 14
Dengeli veri ağaçları • Genellikle H, log n yaklaşık oluyor ve ağaçlarla operasyonları O(log n) vakit gerekirler • Ama, aslında H ağaç oluşturma sürecine bağlıdır • Örneğin: • Genellikle, H log N’e yakında olabilir • Ama, girdi sıralanmış idi ise , H N’e yakında olacak! • Veri tabanlarına, girdi sıranlanmış olarak verilmemeli
Dengeli veri ağaçları • Düzensiz girdi için H, log n yakında dır 4 9 4 5 15 H 3 12 18 4 7 1 4 11 14
Dengeli veri ağaçları • Düzenli girdi için H=N da olabilir 1 1 1 1 2 2 2 3 3 5 5 7 Nesnelerin hepsi sağa eklendi ! 9