22
G.Y.T.E Bil. Müh. Böl. 132 6 Ağaçlar ve Uygulamaları Bir çevrimsiz graf çevrim içermeyen bir graftır.(Aynı zamanda orman olarak adlandırılır) Bir ağaç bağlı bir çevrimsiz graftır. Böylece bir ormanın her bir elemanı bir ağaçtır, ve herhangi bir ağaç bir bağlı ormandır. Teorem: n düğümlü bir G grafında aşağıdakiler eşdeğerdir. i. G bir ağaçtır. ii. G’de her düğüm çifti arasında, sadece bir yol vardır. iii. G bağlıdır ve G’deki her bir ayrıt bir köprüdür.(köprü silinince graf bağlı olmaktan çıkar) iv. G bağlıdır ve (n-1) ayrıtı vardır. v. G çevrimsizdir ve (n-1) ayrıtı vardır. vi. G çevrimsizdir ve, G’de komşu olmayan iki keyfi düğüm bir ayrıt ile birleştirildiği zaman sonuçtaki genişleyen G' grafı tek bir tur içerir. vii. G bağlıdır, ve eğer G’de herhangi komşu olmayan iki keyfi düğüm bir ayrıt ile birleştirilirse, elde edilen yeni grafın tek bir çevrimi vardır. Genel olarak, ağaçlar ile ilgili algoritmalar üç türlüdür. Verilen bir ağaçta arama ve etiketleme algoritmaları Farklı türlerde ağaç oluşturmak için algoritmalar. Özel bir türdeki ağaçları saymak için algoritmalar. Ağaç: Bir ağaç çevrim içermeyen bağlı bir graftır. Örnek, Şekil 6.1’ de gösterilmiştir. veya veya veya n=1 n=2 n=3 n=4 n=5 Şekil 6.1. Düğüm sayısına göre farklı ağaçlar. Teorem: T, n düğümlü bir graf olarak verilsin. Aşağıdaki ifadeler eşdeğerdir. a. T bağlıdır ve çevrim içermez. b. T bağlıdır ve n-1 ayrıtı vardır. c. T’nin n-1 ayrıtı vardır ve çevrim içermez. d. T bağlıdır ve her bir ayrıt bir köprüdür.

6 Ağaçlar ve Uygulamaları - anibal.gyte.edu.tranibal.gyte.edu.tr/hebe/AblDrive/59669005/w/Storage/104_2011_1_511... · Yukarıdaki algoritma basit fakat verimsizdir. Daha iyi algoritmalardan

  • Upload
    doquynh

  • View
    235

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 6 Ağaçlar ve Uygulamaları - anibal.gyte.edu.tranibal.gyte.edu.tr/hebe/AblDrive/59669005/w/Storage/104_2011_1_511... · Yukarıdaki algoritma basit fakat verimsizdir. Daha iyi algoritmalardan

G.Y.T.E Bil. Müh. Böl. 132

6 Ağaçlar ve Uygulamaları Bir çevrimsiz graf çevrim içermeyen bir graftır.(Aynı zamanda orman olarak adlandırılır) Bir ağaç bağlı bir çevrimsiz graftır. Böylece bir ormanın her bir elemanı bir ağaçtır, ve herhangi bir ağaç bir bağlı ormandır.

Teorem: n düğümlü bir G grafında aşağıdakiler eşdeğerdir.

i. G bir ağaçtır.

ii. G’de her düğüm çifti arasında, sadece bir yol vardır.

iii. G bağlıdır ve G’deki her bir ayrıt bir köprüdür.(köprü silinince graf bağlı olmaktan çıkar)

iv. G bağlıdır ve (n-1) ayrıtı vardır.

v. G çevrimsizdir ve (n-1) ayrıtı vardır.

vi. G çevrimsizdir ve, G’de komşu olmayan iki keyfi düğüm bir ayrıt ile birleştirildiği zaman sonuçtaki genişleyen G' grafı tek bir tur içerir.

vii. G bağlıdır, ve eğer G’de herhangi komşu olmayan iki keyfi düğüm bir ayrıt ile birleştirilirse, elde edilen yeni grafın tek bir çevrimi vardır.

Genel olarak, ağaçlar ile ilgili algoritmalar üç türlüdür.

Verilen bir ağaçta arama ve etiketleme algoritmaları

Farklı türlerde ağaç oluşturmak için algoritmalar.

Özel bir türdeki ağaçları saymak için algoritmalar.

Ağaç: Bir ağaç çevrim içermeyen bağlı bir graftır. Örnek, Şekil 6.1’ de gösterilmiştir.

veya

veya

veya

n=1

n=2

n=3

n=4

n=5

Şekil 6.1. Düğüm sayısına göre farklı ağaçlar.

Teorem: T, n düğümlü bir graf olarak verilsin. Aşağıdaki ifadeler eşdeğerdir.

a. T bağlıdır ve çevrim içermez.

b. T bağlıdır ve n-1 ayrıtı vardır.

c. T’nin n-1 ayrıtı vardır ve çevrim içermez.

d. T bağlıdır ve her bir ayrıt bir köprüdür.

Page 2: 6 Ağaçlar ve Uygulamaları - anibal.gyte.edu.tranibal.gyte.edu.tr/hebe/AblDrive/59669005/w/Storage/104_2011_1_511... · Yukarıdaki algoritma basit fakat verimsizdir. Daha iyi algoritmalardan

G.Y.T.E Bil. Müh. Böl. 133

e. T’nin herhangi iki düğümü tam olarak bir yol ile bağlıdır.

f. T ‘nin hiç çevrimi yoktur, fakat herhangi bir yeni ayrıt eklenmesi tam olarak bir çevrim oluşturur.

6.1 Ağaçlar ile ilgili Tanımlar ve özellikleri

Bir ağaç, çevrim içermeyen bir bağlı yönsüz graftır.

Bir yönsüz graf ancak ve ancak, herhangi iki düğümü arasında tek bir basit yol var ise bir ağaçtır.

Bir köklü ağaç, bir ağaçtan bir düğümün kök olarak belirlenmesi ve herbir ayrıt kökten yönlendirilerek elde edilen bir yönlü graftır.

Bir köklü T ağacında, (u,v) bir yönlü ayrıt olsun,

u, v’nin ebeveyni ve v’de u’nun çocuğudur, aynı ebeveyne sahip çocuklara kardeş denir; bir v düğümünün kök haricindeki ataları, kökten v’ye kadar olan yol üzerindeki

düğümlerdir, v düğümünün torunları v’yi ata olarak gören düğümlerdir; bir yaprak, hiç çocuğu olmayan bir düğümdür, çocuğu olan düğümlere iç düğümler denir; torunlarıyla, birlikte bir v düğümü ve bu torunlara komşu bütün ayrıtlar bir alt graf

oluşturur.

Her iç düğümü m çocuğa sahip olan bir köklü ağaca m-ilişkili ağaç denir, eğer m=2 ise ikili ağaçtır.

Bir köklü ağaçta, bir v düğümünün seviyesi, kökten v’ye olan tek yolun uzunluğudur.

Bir köklü ağacın yüksekliği, düğümlerin seviyelerinin en büyüğüdür.

Yüksekliği h olan bir köklü m-ilişkili ağaç, eğer bütün yapraklar h veya h-1 seviyesinde ise dengeli ağaçtır.

Bir sıralı köklü ağaçta, herbir iç düğümün çocukları sıralıdır. Eğer bir düğümün iki çocuğu varsa, ilk çocuğa sol alt ağaç, ve sağ çocuğa sağ alt ağaç denir.

Ağaçlar; doymuş hidrokarbonları, Kuruluşları, Dosya kataloglarını, paralel işlem için ağ iç bağlantılarını modellemek için kullanılabilir.

6.2 Ağaçların Özellikleri

n düğümlü bir ağacın tam olarak n-1 ayrıtı vardır.

i adet iç düğümü olan bir tam m ilişkili ağaçta n=m.i +1 düğüm bulunur.

Bir tam m-ilişkili;

n düğümlü ağacın, i = (n1)/m iç düğümü ve l = [(m1)n + 1]/m yaprağı vardır.

i iç düğümlü ağacın n = m i + 1 düğümü ve l = (m1)i + 1 yaprağı vardır.

l yapraklı ağacın, n = (ml1)/(m1) düğümü ve i = (l1)/(m1) iç düğümü vardır.

Yüksekliği h olan m-ilişkili bir ağaçta en çok mh yaprak vardır.

Eğer yüksekliği h olan bir m-ilişkili ağacın l yaprağı var ise, h logm l dir. Eğer m-ilişkili ağaç tam ve dengeli ise, h = logm l ‘dir.

Page 3: 6 Ağaçlar ve Uygulamaları - anibal.gyte.edu.tranibal.gyte.edu.tr/hebe/AblDrive/59669005/w/Storage/104_2011_1_511... · Yukarıdaki algoritma basit fakat verimsizdir. Daha iyi algoritmalardan

G.Y.T.E Bil. Müh. Böl. 134

6.3 Ağaçların Uygulamaları

İkili Arama Ağacı: Bir sıralı köklü ikili ağaçta herbir düğüme; sol alt ağacındaki düğümlerdeki anahtarlardan büyük ve sağ alt ağacındaki düğümlerde bulunan anahtarlardan küçük bir anahtar atanır.(İkili Arama Ağacı Algoritması.)

Karar Ağacı: Herbir iç düğümün bir karara karşılık geldiği bir köklü ağaçta, kararın herbir olası sonucu için bu düğümlerde bir alt ağaç bulunur.(Örnek, Sahte jetonların bulunması)

Önek Kodları: Farklı uzunluktaki bit dizilerini kodlamaya dayalı kodlar, bir harf için bit dizisinin diğer bir harfin ön ekinde olmaması özelliği ile harfleri kodlamakta kullanılır.

Huffman Kodlama Algoritması

Bir ikili ağacı verilen w1 w2 wn ağırlıklar ile aşağıdaki şekilde yinelemeli olarak oluştur:

1. En küçük iki ağırlığında köklü alt ağaçlı şekilde bir ağaç oluştur. Onların birleştirilmiş ağırlıkları, diğer dalların oluşturulması için ağırlıkların kullanılabileceği bu alt ağacın kökünün ağırlığı olur.

2. Bütün ağırlıklar birleştirilene kadar adım 1’i tekrarla. 3. Herbir iç düğümün 2 dalı 0 ve 1 olarak etiketlenir. Herbir harf, ikili ağaçtan elde

edildiği şekilde etiketlerin yolunu alır.

Örnek: Ağacın oluşturulması

İlk önce karakterlerin frekansları (kullanım sıklıkları) hesaplanmalıdır.

Örneğin, elimizdeki veri "BAACC" olsun, B: 1 A: 2 C: 2

En küçük iki frekans toplanır ve frekans tablosu yeniden düzenlenir,

Tek bir ağaç oluşturulana kadar sürekli en küçük frekanslar toplanır,

Şekil 6.2. .Huffman kodlama algoritması örneği

Kapsama Ağaçları(Spanning Trees)

G, bağlı bir graf olsun. G’deki bir kapsama ağacı, G’nin bütün düğümlerini içeren ve aynı zamanda bir ağaç olan G’nin bir alt grafıdır. Ağacın ayrıtlarına dal denir.

Örneğin Şekil 6. 2’deki G grafını ele alalım. Bu grafın üç farklı kapsama ağacı şekil 6.3’de gösterilmiştir.

Page 4: 6 Ağaçlar ve Uygulamaları - anibal.gyte.edu.tranibal.gyte.edu.tr/hebe/AblDrive/59669005/w/Storage/104_2011_1_511... · Yukarıdaki algoritma basit fakat verimsizdir. Daha iyi algoritmalardan

G.Y.T.E Bil. Müh. Böl. 135

d

ecb

a d

ecb

a

d

ecb

a d

ecb

a

1

2 3

Şekli 6.3. Graf ve kapsama ağaçları

Bir G grafının kapsama ağacı sistematik olarak aşağıdaki şekilde bulunabilir.

Küçültme Yöntemi(Cutting-down)

o G’de herhangi bir çevrim seçerek başla.

o Çevrimin ayrıtlarından birini çıkart.

o Bu işleme çevrim kalmayıncaya kadar tekrarla.

Örnek olarak Şekil 6.4’de verilen Bir G grafı için işlemleri yapalım.

d

ecb

a d

ecb

a

d

ecb

aa

b c

d

ecb

aG

Şekil 6.4.

1. Şekil 6.4’deki G grafında adca çevrimini kaldırmak için ac ayrıtını kaldır. Şekil 6.4-a’yı elde et.

2. adcba çevrimini kaldırmak için cb ayrıtını kaldır. Şekil 6.4-b’yi’i elde et.

3. decd çevrimini kaldırmak için ec ayrıtını kaldır. Şekil 6.4-c’deki kapsama ağacını elde et.

Yukarıdaki algoritma basit fakat verimsizdir. Daha iyi algoritmalardan ilk derinlik arama(Geri izleme) ve ilk genişlik arama algoritmalarıdır.

İlk derinlik Arama(Depth-first search): Bu işlem bir köklü ağaç oluşturur ve temelindeki

Page 5: 6 Ağaçlar ve Uygulamaları - anibal.gyte.edu.tranibal.gyte.edu.tr/hebe/AblDrive/59669005/w/Storage/104_2011_1_511... · Yukarıdaki algoritma basit fakat verimsizdir. Daha iyi algoritmalardan

G.Y.T.E Bil. Müh. Böl. 136

yönsüz graf bir kapsama ağacıdır.. 1- önce bir başlangıç düğümü seçilir ve ziyaret edilir 2- Seçilen düğümün bir komşusu seçilir ve ziyaret edilir 3- Seçilen komşu düğümün bir komşusu seçilir ve ziyaret edilir. 4- 3.adım ziyaret edilecek komşu kalmayıncaya kadar devam eder 5- Komşu kalmadığında backtracking ile geri gelinir ve her düğüm için yeniden 3.adıma gidilir.

İlk Genişlik Arama: Bu işlem bir köklü ağaç oluşturur ve temelindeki yönsüz graf bir

kapsama ağacıdır. Bir grafın bağlı parçalarını dolaşır ve bir kapsama ağacı oluşturur

1. Seçilen düğümün tüm komşuları sırayla seçilir ve ziyaret edilir. 2. Her komşu kuyruk içerisine atılır 3. Komşu kalmadığında kuyruk içerisindeki ilk düğüm alınır ve 2.adıma gidilir

Bir ağırlıklı bağlı grafta minimum kapsama ağacı, ağacın ayrıtlarının ağırlıklarının olası

toplamlarının en küçük olduğu bir kapsama ağacıdır.

Kruskal ve Prim’in en küçük kapsama ağacı algoritmaları verilen bir bağlı ağırlıklı graftan en küçük kapsama ağacı elde etmeyi sağlar(Sonraki bölümde bu algoritmalar üzerinde durulacaktır.).

Teorem: Bir grafın ancak ve ancak bir kapsama ağacı var ise bağlıdır.

İspat: G bağlı bir graf olsun. G’den köprü olmayan ayrıtları, herbir ayrıtı bir köprü olan bağlı bir H alt grafı elde edinceye kadar sil. Elde edilen H grafı bir kapsama ağacıdır. Diğer taraftan, eğer G’de bir kapsama ağacı var ise, G’nin herhangi düğüm çifti arasında bir yol vardır; o halde G bağlıdır.

Merkezler ve Çiftmetkezler

Bu bölümde bir ağaç ve ağacın merkezinin elde edilmesi ve dışa doğru hareketten bahsedilecektir. Bu yaklaşım, kimyasal moleküllerin adım adım sayılması için Arthur Cayley tarafından kullanılmıştır. Fakat ağacın merkezi ile ne kastedildiğini açıklamak gerekir.

Merkez ve çiftmerkezleri hesaplamak için basit bir yol.

Algoritma 1

Derecesi 1 olan bütün düğümleri komşu ayrıtlar ile birlikte sil. İşlemi, ya tek bir düğüm(merkez) yada bir ayrıt ile bağlı iki düğüm(çift merkez)

kalıncaya kadar tekrarla.

Bir merkezli ağaca ana ağaç, bir çift merkezli ağaca çift ana ağaç denir. Her ağaç ya ana ya da çiftana ağaçtır.(Her ikisi de değil)

Örneğin Şekil 6.5’deki ağaç verilsin.

Page 6: 6 Ağaçlar ve Uygulamaları - anibal.gyte.edu.tranibal.gyte.edu.tr/hebe/AblDrive/59669005/w/Storage/104_2011_1_511... · Yukarıdaki algoritma basit fakat verimsizdir. Daha iyi algoritmalardan

G.Y.T.E Bil. Müh. Böl. 137

d

ec

b

a f g

Şekil 6.5

Derecesi 1 olan tüm düğümleri sil.

ec f

Derecesi 1 olan tüm düğümleri sil.

e

Böylece e merkezli ağaç merkezidir.

Diğer örnek, Şekil 6.6’daki ağaç verilsin.

d

e

c

b

a f

hg Şekil 6.6

Derecesi 1 olan bütün düğümleri sil.

d

c

b

f

Derecesi 1 olan bütün düğümleri sil.

d

c

Buradan, elde edilen ağaç çift merkezi cd olan çift merkezlidir.

İkili Ağaçlar İkili ağaçlar (binary trees), düğümlerinde en fazla iki dal içeren (0,1 veya 2) ağaçlardır. Ağacın en üstteki düğümüne kök (root) adı verilir. (Şekil 6.7) Doğadaki ağaçların tersine ağaçların graf gösterilimi kökü yukarıda yaprakları aşağıda olacak şekildedir.

Page 7: 6 Ağaçlar ve Uygulamaları - anibal.gyte.edu.tranibal.gyte.edu.tr/hebe/AblDrive/59669005/w/Storage/104_2011_1_511... · Yukarıdaki algoritma basit fakat verimsizdir. Daha iyi algoritmalardan

G.Y.T.E Bil. Müh. Böl. 138

Şekil 6.7 : Bir ikili ağacın grafiksel gösterimleri

Şekil 6.8'deki ağaç, A düğümü kök olmak üzere 9 düğümden oluşmaktadır. Sol alt ağaç B kökü ile başlamakta ve sağ alt ağaç da C kökü ile başlamaktadır. A'dan solda B'ye giden ve sağda C'ye giden iki dal çıkmaktadır.

Şekil 6.8 : Ağaçlarda seviyeler

Ağaçlar ile ilgili Tanımlar: 1) İkili Ağaç (Binary Tree) : Sonlu düğümler kümesidir. Bu küme boş bir küme olabilir

(empty tree). Boş değilse şu kurallara uyar. i) Kök olarak adlandırılan özel bir düğüm vardır. ii) Her düğüm en fazla iki düğüme bağlıdır. iii) Kök hariç her düğüm bir daldan gelmektedir. iv) Tüm düğümlerden yukarı doğru çıkıldıkça sonuçta köke ulaşılır.

2) Düğüm (node) : Ağacın her bir elemanına düğüm adı verilir. Örnekler : A, B, C.

3) Kök (root) : Seviye 0'daki (şemanın en üstündeki) tek düğüm. Örnek : Şekil 6.8'de A bilgisini içeren düğüm.

4) Çocuk (child) : Bir düğümün sol ve sağ dalı aracılığı ile bağlandığı düğümler o düğümün çocuklarıdır. Örnek : B ve C, A'nın çocuklarıdır.

5) Ebeveyn(Parent) : Bir düğüm, sağ ve sol dalları ile bağlandığı düğümlerin ebeveynidir. A düğümü, B ve C düğümlerinin ebeveynidir

6) Bir düğümün seviye (level) veya derinliği (depth) : Bir düğümün kök düğümden olan uzaklığıdır. Örnek : D düğümünün düzeyi veya derinliği 2'dir.

7) Ağacın derinliği (depth of tree) : En derindeki yaprağın derinliği veya yüksekliği (height).

Page 8: 6 Ağaçlar ve Uygulamaları - anibal.gyte.edu.tranibal.gyte.edu.tr/hebe/AblDrive/59669005/w/Storage/104_2011_1_511... · Yukarıdaki algoritma basit fakat verimsizdir. Daha iyi algoritmalardan

G.Y.T.E Bil. Müh. Böl. 139

Örnek : Şekil 6.8'deki ağacın derinliği 3'tür.

8) Yaprak (leaf) : Sol ve sağ dalı boş olan düğümlere yaprak adı verilir. Örnekler : D,G,H,I.

9) Kardeş (sibling, brother) : Aynı parent'a sahip iki düğüme kardeş düğümler adı verilir. Örnekler : B ile C kardeştir. D ile E kardeştir. H ile I kardeştir.

10) üst düğüm (Ancestor) : Bir düğümün ebeveyni birinci atasıdır. Ebeveynin ebeveyni (recursion) ikinci atasıdır. Kök, kendi hariç tüm düğümlerin atası'ıdır.

11) alt düğüm (Descendant) : Bir düğümün iki çocuğu birinci torunları'larıdır. Onların çocukları da ikinci torun'larıdır.

12) Dolu ikili Ağaç(Full binary tree) : i) Her yaprağı aynı derinlikte olan ii) Yaprak olmayan düğümlerin tümünün iki çocuğu olan ağaç dolu ikili ağaçtır (İkinci şart yeterli). Bir dolu ikili ağaçta n tane yaprak varsa bu ağaçta toplam 2n-1 düğüm vardır.

13) Tam ikili ağaç(Complete binary tree) : Dolu ikili ağaçta yeni bir derinliğe soldan sağa doğru düğümler eklendiğinde oluşan ağaçlara Tam ikili ağaç denilir. Böyle bir ağaçta bazı yapraklar diğerlerinden daha derindir. Bu nedenle dolu ikili ağaç olmayabilirler. En derin düzeyde düğümler olabildiğince soldadır.

14) Genel Ağaç(General Tree) : Her düğümün en fazla iki çocuğu olabilme sınırı olmayan ağaçlardır.

15) İkili Arama Ağacı (Binary Search Tree) : Boş olan veya her düğümü aşağıdaki şartlara uyan anahtara sahip bir ikili ağaçtır :

i) Kökün solundaki alt ağaçlardaki (eğer varsa) tüm anahtarlar kökteki anahtardan küçüktür.

ii) Kökün sağındaki alt ağaçlardaki (eğer varsa) tüm anahtarlar kökteki anahtardan büyüktür.

iii) Sol ve sağ alt ağaçlar da ikili arama ağaçlarıdır. İkili Ağaçlar ve İkili Ağaçlar Üzerindeki Dolaşma İşlemleri Dolaşma (traverse), ağaç üzerindeki tüm düğümlere uğrayarak gerçekleştirilir. Ağaçlar üzerindeki dolaşma işlemleri, ağaçtaki tüm bilgilerin listelenmesi veya başka amaçlarla yapılır. Doğrusal veri yapılarında baştan sona doğru dolaşmak kolaydır. Ağaçlar ise düğümleri doğrusal olmayan veri yapılarıdır. Bu nedenle farklı algoritmalar uygulanır. Çok bilinen yöntemler üç tane olup özyinelemeden yararlanırlar : 1) Preorder (depth-first order) Dolaşma (Traversal)

i) Köke uğra (visit) ii) Sol alt ağacı preorder olarak dolaş. iii) Sağ alt ağacı preorder olarak dolaş.

2) Inorder (Symmetric order) Dolaşma

i) Sol alt ağacı inorder'a göre dolaş ii) Köke uğra (visit) iii) Sağ alt ağacı inorder'a göre dolaş.

3) Postorder Dolaşma

i) Sol alt ağacı postorder'a göre dolaş ii) Sağ alt ağacı postorder'a göre dolaş. iii) Köke uğra (visit)

Page 9: 6 Ağaçlar ve Uygulamaları - anibal.gyte.edu.tranibal.gyte.edu.tr/hebe/AblDrive/59669005/w/Storage/104_2011_1_511... · Yukarıdaki algoritma basit fakat verimsizdir. Daha iyi algoritmalardan

G.Y.T.E Bil. Müh. Böl. 140

Şekil 6.9 : İkili Ağaç ve değişik şekillerde dolaşılması

Teorem: İkili Arama Ağaçları İkili arama ağaçları, her bir düğümün solundaki (sol alt ağacındaki) tüm düğümler kendisinden küçük, sağındakiler (sağ alt ağacındakiler) de kendisinden büyük olacak şekilde oluşturulurlar (Şekil 6.10). İkili arama ağaçlarındaki en önemli işlemlerden birisi aramadır. Örnek olarak şekil 6.10’daki ağaçta, 44 sayısını aratmak 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, 67 sayısını aratmak için şu işlem sırası izlenir : Karşılaştırma 1 : 67, 47 ile karşılaştırılır. 67>47 olduğundan sağ daldan ilerlenir. Karşılaştırma 2 : 67, 77 ile karşılaştırılır. 67<77 olduğundan sol daldan ilerlenir. Karşılaştırma 3 : 67, 65 ile karşılaştırılır. 67>65 olduğundan sağ daldan ilerlenir. Karşılaştırma 4 : 67 , 68 ile karşılaştırılır. 67<68 olduğundan sol daldan ilerlenir.

: NULL. Aranan anahtar değeri ağaçta bulunamadı.

Şekil 6.13 : İkili Arama Ağacı

Görüldüğü gibi arama işleminin etkinliği ağacın yüksekliğine bağlıdır. İkili arama ağaçları dengeli tutulabilirse, bir anahtar değerini aramada oldukça hızlıdırlar. Böyle olduğunda n

Page 10: 6 Ağaçlar ve Uygulamaları - anibal.gyte.edu.tranibal.gyte.edu.tr/hebe/AblDrive/59669005/w/Storage/104_2011_1_511... · Yukarıdaki algoritma basit fakat verimsizdir. Daha iyi algoritmalardan

G.Y.T.E Bil. Müh. Böl. 141

elemanlı bir ağaç en fazla log2n düzeyden oluşur. Bir değerin bulunması veya ağaçta olmadığının belirlenmesi için en fazla log2n karşılaştırma yapılır. Örnek olarak 1000 elemanlı bir ikili arama ağacında bir elemanın bulunabilmesi için en fazla 10 karşılaştırma yapmak gerekecektir (210=1024 > 1000). Bağlı listelerde ise bulunacak elemanın değerine göre (eleman sonda ise) 1000 karşılaştırma yapmak gerekebilir. Teorem: n düğümlü bir ikili ağacın minimum yüksekliği(derinliği) tavan(log(n+1)) -1’dir. İspat: T n düğümlü bir ikili ağaç ve h da yüksekliği olsun. k seviyesinde en fazla 2k adet düğüm bulunur(burada k=0,1,2,..,h) dır. Böylece,

n 1+2 +22 + 23 +…+ 2h =2h+1 -1 dir. Buradan h +1 log (n+1) dır .bu ise h tavan(log (n+1)) -1dir.

Page 11: 6 Ağaçlar ve Uygulamaları - anibal.gyte.edu.tranibal.gyte.edu.tr/hebe/AblDrive/59669005/w/Storage/104_2011_1_511... · Yukarıdaki algoritma basit fakat verimsizdir. Daha iyi algoritmalardan

G.Y.T.E Bil. Müh. Böl. 142

7 Kapsama Ağacı Problemleri 7.1 Tanımlar:

Kapsama alt Grafı: Bir grafın tüm düğümlerini kapsayan ağaca kapsama alt grafı denir.

Kapsama ağacı: Orijinal grafın bütün düğümlerini kapsayan ve ağaç olan bir alt grafa kapsama ağacı denir.

En küçük kapsama ağacı: Bir ağırlıklı ve bağlı grafın kapsama ağaçları arasında ağırlığı en az olan ağaca En küçük kapsama ağacı denir.

Kiriş: Eğer T=(V,E’), G=(V,E) grafında bir kapsama ağacı ise, G nin E’ de olmayan ayrıtlarına T’nin kirişi enir.

Ayırma kümesi: Eğer bir G=(V,E) grafının ayrıtlarının bir alt kümesi olan D’nin elemanları olan ayrıtlardan herhangi birisi G den çıkarıldığında G bir bağlı olmayan graf oluyorsa, D ye ayırma kümesi denir.

Kesi kümesi(Cutset): Eğer, bir ayırma kümesinin hiç bir öz alt kümesi ayırma kümesi değilse, D’ye kesi kümesi denir. Böyle bir ayırma kümesinin tam olarak bir ayrıtı vardır ve böyle bir kesi kümesi köprü olarak adlandırılır.

• Problem:

– Verilen Bir yönsüz bağlı ağırlıklı G=(V,E) grafı için en küçük kapsama ağacı T’nin bulunması

• Ağırlıklar pozitiftir.

• Kapsama ağacının maliyeti T’deki bütün ayrıtların ağırlıklarının toplamıdır.

• En küçük kapsama ağacı, olası en küçük maliyetli kapsama ağacıdır.

– Tipik uygulama, Bir bilgisayar ağında birkaç düğümü en küçük maliyetli bir kapsama ağacı ile bağlanması.

Teorem: Bir bağlı G grafının C devresindeki e ayrıtının ağırlığı, C devresindeki diğer ayrıtların ağırlığından daha büyük ise e, G deki herhangi bir en küçük kapsama ağacı için bir ayrıt değildir.

7.2 Kruskal’ın Algoritması :(Ağırlıklı bağlı yönsüz graf ın kapsama ağacının bulunması)

Adım 1: Grafta en az maliyetli ayrıtı bul(Eğer birden fazla ise rastgele birini seç) Seçilen ayrıtı verilen bir renk ile işaretle(Kırmızı olsun)

Adım 2: Grafta En düşük maliyetli ve işaretli veya kırmızı devreye yakın olmayan işaretlenmemiş olan ayrıtı bul. Bu ayrıtı kırmızı olarak işaretle.

Adım 3: Graftaki her bir düğümü ziyaret edinceye kadar devam et.(veya N düğüm sayısı olmak üzere, N-1 ayrıt bulunana kadar) Kırmızı renkli ayrıtlar istenen kapsama ağacıdır.

Örnek : Kruskal algoritması ile bir grafın kapsama ağacının elde edilmesi

Page 12: 6 Ağaçlar ve Uygulamaları - anibal.gyte.edu.tranibal.gyte.edu.tr/hebe/AblDrive/59669005/w/Storage/104_2011_1_511... · Yukarıdaki algoritma basit fakat verimsizdir. Daha iyi algoritmalardan

G.Y.T.E Bil. Müh. Böl. 143

1

4

2

654

131

4

1

3

2

a

32 1 2

654

1

b

3

1 2

654

11

c

3 1 2

654

11

d

32

1 2

654

131

e

32 1

4

2

654

131

f

32

Şekil 7. 1. Kruskal’ın algoritması ile el de edilen kapsama ağacı

Kruskal’ın Algortimasının doğruluğu

Kruskal’ın algoritması bir En küçük kapsama ağacı üretir.

–Kruskal’ın açgözlü algoritması ağırlıkları artan şekilde sıralanmış olan e1, e2, …, en-1 ayrıtlarını içeren bir TG ağacını üretmiş olsun. Böyle bir grafta, 1 k n-1 için e1, e2, …, ek ayrıtlarını içeren bir en küçük kapsama ağacı vardır.

İspat; Tüme varım ile yapılacaktır. – Başlangıç durumu: • k = 1 için öneri kolayca sağlanır. Indüksiyon adımı: – e1, e2, …, ek-1 ayrıtlarına sahip bir T* en küçük kapsama ağacı olduğunu kabul edelim. – Durum 1: ek T*: • Böylece, T* e1, e2, …, ek ayrıtlarının tamamını içerir ve ifade doğrulanır. – Durum 2: ek T*: • Eğer ek yı TG den çıkartırsak, TG kopuk hale gelir ve iki bileşeni olur(bileşenlere A ve B diyeceğiz. • ek yı T*’a ekleyelim. Bu, T* da A ve B nin her ikisini de içeren bir devre oluşturur. • Böylece, devre ek ‘dan farklı ve bir ucu A da diğeri B de olan bir e’ ayrıtı içerir. • e’ ayrıtını çıkart ve yeni graf T’ olarak işaretle. T’ bir kapsama ağacıdır. • w(e’ ) w(ek), olduğunu dikkate al, diğer durumda Kruskal’ın algoritması ek yerine e’ nü seçecekti. • T’ nün maliyeti : w(T’ ) = w(T*) + w(ek) – w(e’ ) olarak yazılabilir. Bu w(T’ ) w(T*) anlamına gelir.. • T* bir en küçük kapsama ağacı olduğu için, w(T’ ) = w(T*) dir ve aynı zamanda T’ bir en küçük kapsama ağacıdır. • Bundan başka, T’ ,kanıtlamak istediğimiz e1, e2, …, ek ayrıtlarının her birisini içerir. .Böylece, her k için e1, e2, …, ek ayrıtlarının her birini içeren bir en küçük kapsama ağacı olduğunu ispatlamış oluruz.

Kruskal ‘ın algoritmasının zaman karmaşıklığı en kötü durumda, O(m.logm) dir.(m ayrıt sayısı)

Page 13: 6 Ağaçlar ve Uygulamaları - anibal.gyte.edu.tranibal.gyte.edu.tr/hebe/AblDrive/59669005/w/Storage/104_2011_1_511... · Yukarıdaki algoritma basit fakat verimsizdir. Daha iyi algoritmalardan

G.Y.T.E Bil. Müh. Böl. 144

7.3 Prim’in Algoritması • Ana düşünce: Keyfi bir s düğümünden başla ve yavaş yavaş ağacı büyüt.

Bağlı düğümler kümesi S yi ele alırız. Herhangi bir düğümü başlangıç düğümü olarak al (başlangıç Düğümü v olsun) ve v ye bağlı olan tüm ayrıtları incele. En küçük ağırlıklı ayrıt e={v,w} ve bu ayrıt G'nin T alt grafının bir ayrıtı olsun. v ve w ye bağlı bütün ayrıtları incele ve içlerinde ağırlığı en küçük olan f ‘yi seç. Bu f yi T alt grafına ekle. F ayrıtı ya v ile yeni u düğümü arasında veya w ile yeni u düğümü arasında olabilir. Bu evrede v,w ve u olmak üzere üç adet düğüm bulunmuş olur. v,u ve w düğümlerine bağlı olan e ve f dışındaki tüm ayrıtları incele ve en küçük ağırlıklı olan bir g ayrıtını e ve f ile çevrim oluşturmayacak şekilde al. Bu fazda g, T ye eklenir.

Bu işleme bütün düğümler hesaplanıncaya kadar devam eder ve elde edilen graf bir kapsama ağacıdır.

Algoritmanın adımları aşağıda gösterilmiştir.

Giriş: V düğümleri ve E ayrıtları ile bir bağlı ve ağırlıklı G.

İlklendirme: Vyeni = {x}, burada x, V den bir keyfi düğümdür(başlangıç noktası), Eyeni={}

Vyeni = V oluncaya kadar tekrarla:

o v nin Vyeni içinde w nin ise içinde olmadığı enküçük ağırlıklı bir (v,w) ayrıtını E den (eğer aynı ağırlıklı birden fazla ayrıt varsa çevrim oluşturmayacak şekilde keyfi olarak) seç.

o v yi Vyeni ye, (u, v) yi Eyeni ye ekle

Çıkış: Vyeni ve Eyeni bir en küçük kapsama ağacını temsil eder.

Teorem: Eğer v, bağlı bir G grafında herhangi bir düğüm ve v ye bağlı olan ayrıtların ağırlığı en küçük olan bir ayrıt e ise e, G de ki her en küçük kapsama ağacının bir ayrıtıdır.

İspat: T bir en küçük kapsama ağacı olsun ve e={v,w}, T nin bir ayrıtı olmadığı kabul edilsin.H, T ye e eklenerek elde edilen G nin bir alt grafı olsun. H’nın v v1 v2 …..vr w v ile gösterilen tek bir C(e) devresi vardır, burada e={v,w} ve f={v,v1} dir. Şimdi e ve f nin her ikisi de v ye bağlıdır ve e nin ağırlığı f nin ağırlığından daha küçüktür. Eğer f yi H dan ayırırsak, ağırlığı T den daha küçük olan bir T’ kapsama ağacı elde ederiz, bu bir çelişkidir.

Sonuç: Eğer v G'nin herhangi bir düğümü ise ve eğer v ye bağlı ayrıtlardan hiç birisinin ağırlığı e’den küçük olmayan v ye bağlı bir ayrıt e ise, G de bir ayrıtı e olan bir en küçük kapsama ağacı vardır. Örnek: Prim’in algoritması ile kapsama ağacı oluşturulması

1

4

2

654

131

4

1

3

2

a

32 1 2

654

1

b

3

1 2

654

11

c

3 1 2

654

11

d

32

1 2

654

131

e

32 1 2

654

1

4

1

f

32

3

Şekil 7. 2. Prim’in algoritması ile elde edilen kapsama ağacı

Page 14: 6 Ağaçlar ve Uygulamaları - anibal.gyte.edu.tranibal.gyte.edu.tr/hebe/AblDrive/59669005/w/Storage/104_2011_1_511... · Yukarıdaki algoritma basit fakat verimsizdir. Daha iyi algoritmalardan

G.Y.T.E Bil. Müh. Böl. 145

Prim’in Algortimasının doğruluğu Prim’in algoritması bir En küçük kapsama ağacı üretir.

– Prim’in açgözlü algoritması algoritmanın eklediği sırada numaralanmış olan e1, e2, …, en-1

ayrıtlarını içeren bir TG ağacını üretmiş olsun. Böyle bir grafta, 1 k n-1 için e1, e2, …, ek ayrıtlarını içeren bir en küçük kapsama ağacı vardır.

İspat Tüme varım ile yapılacaktır.

– Başlangıç durumu:

• k = 1 için öneri kolayca sağlanır.

Indüksiyon adımı:

– e1, e2, …, ek-1 ayrıtlarına sahip bir T* en küçük kapsama ağacı olduğunu kabul edelim.

– Durum 1: ek T*:

• Böylece, T* e1, e2, …, ek ayrıtlarının tamamını içerir ve ifade doğrulanır.

– Durum 2: ek T*:

• S algoritmanın k-1 adımından sonra bitirilen düğümlerin kümesi olsun.

• ek yı T*’a ekleyelim. Bu, T* da bir devre oluşturur.

• devre ek ‘dan farklı ve bir ucu S de diğeri S de olmayan bir e’ ayrıtı içerecektir.

• e’ ayrıtını çıkart ve yeni graf T’ olarak işaretle. T’ bir kapsama ağacıdır.

• w(e’ ) w(ek), olduğunu dikkate al, diğer durumda Prim’in algoritması ek yerine e’ nü seçecekti.

• T’ nün maliyeti : w(T’ ) = w(T*) + w(ek) – w(e’ ) olarak yazılabilir. Bu w(T’ ) w(T*) anlamına gelir..

• T* bir en küçük kapsama ağacı olduğu için, w(T’ ) = w(T*) dir ve aynı zamanda T’ bir en küçük kapsama ağacıdır.

• Bundan başka, T’ ,kanıtlamak istediğimiz e1, e2, …, ek ayrıtlarının her birisini içerir.

Böylece, her k için e1, e2, …, ek ayrıtlarının her birini içeren bir en küçük kapsama ağacı olduğunu ispatlamış oluruz.

Prim’in algoritmasının Analizi

• Çalışma Zamanı:

– Herbir düğümü S de değil onun en küçük ağırlıklı komşularının olduğu S de bulundurarak algoritmayı daha verimli hale getirebiliriz.

• Bu komşunun maliyeti cost[v] de ve komşuları other[v] de saklanır.

– Aynı küme işlemlerini Dijkstra'nın algoritmasındaki gibi yaparız(yapıyı ilklendirme, değerleri m kerede azalt, en küçüğü n-1 kerede seç).

Bu yüzden bir dizi ile gerçeklendiğinde O(n2) zaman bulunur, bir heap ile gerçeklendiğinde, O((n + m) log n) zaman bulunur.(n düğüm sayısı, m ayrıt sayısı)

Prim’in algoritmasının icra zamanı sadece düğümlerin sayısına bağlıdır, fakat aynı sayıda düğümlü bir graf için ayrıtların sayısı artarken Kruskal’ın algoritması artar.Bununla birlikte genelde hangisinin daha verimli olduğunu söylemek mümkün değildir. Verimlilik, ağın yapısına ve ağırlığın dağılımına bağlıdır. Çoğu durumda oluşturulan veri yapısı verimliliğe doğrudan etkilidir.

Page 15: 6 Ağaçlar ve Uygulamaları - anibal.gyte.edu.tranibal.gyte.edu.tr/hebe/AblDrive/59669005/w/Storage/104_2011_1_511... · Yukarıdaki algoritma basit fakat verimsizdir. Daha iyi algoritmalardan

G.Y.T.E Bil. Müh. Böl. 146

8 En Kısa Yol Problemleri Eğer bir yönlü grafın her bir yayına bir ağırlık(örn .uzaklık) verilirse, bu doğal olarak verilen bir düğümden verilen diğer bir düğüme bir en kısa yol bulma problemi olur. Çoğu optimizasyon problemi bu tipten en kısa yol problemine dönüştürülerek çözülür ve yöneylem araştırmasındaki çoğu optimizasyon problemi, en kısa yol algoritmalarını alt rutin olarak çağrılarak çözülür. En kısa yol problemlerinin çözümünde Dijkstra ve Floyd-Warshall algortimaları açıklanacaktır. Dijksta’nın algoritmasında grafın ayrıtlarının ağırlığı pozitif değerlidir. Oysa Floyd-Warshall algoritması negatif ağırlıklı devrelerin varlığında kullanılabilir.

8.1 Dijkstra’nın Algoritması

Dijkstra’nın Algoritması, bir graf üzerinde istenilen bir düğümden, graftaki diğer tüm düğümlere giden En Küçük Maliyetli(E.K.M) yolları (shortest path) bulmak için kullanılan bir algoritmadır. Algoritma şu şekilde açıklanabilir.

G=(V,E) yönlü grafında, V={1,2,….,n} ve (i,j) yaylarının negatif olmayan ağırlıkları a(i,j) olsun. Eğer i den j ye bir yay yok ise a(i,j) sonsuz olarak alınır. Böylece G için A= a(i,j) de diyagonalı sıfır olan nxn boyutlu bir ağırlık matrisi vardır. Problem, düğüm 1 den diğer bütün düğümlere en kısa yol ve en kısa mesafeyi bulmaktır.

Her bir i düğümüne kalıcı veya geçici bir etiket verilir. Kalıcı etiket L(i) 1. düğümde i. Düğüme olan en kısa mesafedir, oysa geçici etiket L’(i) 1. den i. ye olan en kısa mesafenin üst sınırıdır. Algoritmanın her bir fazında, P kalıcı etiketli düğümlerin kümesi ve T onun eşleniğidir. Başlangıçta her bir i için, P={1}, L(1)=0 ve L’(i) = a(1,i) dir. P=V olduğu zaman algoritma durur. Her bir iterasyon aşağıdaki iki adımdan oluşur.

Adım 1: (Kalıcı etiketin belirlenmesi) : T de en küçük L’(k) olan bir k düğümünü belirle. Eğer böyle bir k yok ise dur, çünkü T deki düğüm 1 den herhangi bir düğüme yol yoktur. k yı P kümesine ekle. Eğer P=V ise dur.

Adım 2: (Geçici etiketin gözden geçirilmesi) : Eğer j, T de bir düğüm ise, L’(j) yi daha küçük L’(j) ve L(k)+ a(k,j) ile değiştir. Adım 1 e git. min(L’(j), (L(k)+ a(k,j))

Düğüm etiketleri geçici ve kalıcı olarak işaretlenirler. Geçici etiket, aynı düğüme daha kısa bir yol bulunursa başka bir etiketle değiştirilir. Daha iyi bir yol bulunamayacaksa etiket kalıcı olarak işaretlenir.

Teorem: Dijkstra’nın algoritması düğüm 1’den her bir i düğümüne olan en kısa mesafeyi bulur.

İspat (İndüksiyon): P de bulunan herbir i için, L(i), 1 den i düğümüne olan E.K.M.ye eşit ve P de bulunmayan herbir j için ve L’(j), 1 den j. Düğüme olan E.K.M dir. P bir elemanlı ise bu doğrudur.

P nin m elemanına kadar teoremin doğru olduğunu kabul edelim. İndüksiyon hipotezi ile k düğümünü P ye eklemeden hemen önce L’(k), P deki her ara düğüm için 1 den k’ya en kısa yolun uzunluğuna eşittir. Şimdi k, P ye eklenir ve L(k)=L’(k) dır. L(k) nın 1 den k ya en küçük mesafe olduğunu iddia ediyoruz. Eğer değilse d, 1 den k ya en kısa mesafe olsun. Buradan d<L(k)=L’(k) dır. Böylece 1 den k ya herhangi bir en kısa yolun P den olmayan en az bir ara düğümü olmalıdır. Böyle bir düğüm v olsun. 1 den v ye en kısa mesafe d’ olsun. Buradan d’≤ d olduğu açıktır. Fakat d< L’(k) d nin en küçük olduğu anlamına gelir. Bu ise L’(k) nın en küçük kabulüyle çelişkidir. O halde teoremin doğruluğu sağlanır.

Örnek: Şekil 8.1 de verilen ağı kullanarak Dijkstra algoritması ile en kısa yolları bulalım. Yay üzerindeki sayılar mesafeleri göstermektedir.

Şekil 8.1. En kısa yolları belirlenecek Örnek yönlü graf.

4

8

2

6

3

4

1 1

1

6

4

6

57

7

5

5

82

Page 16: 6 Ağaçlar ve Uygulamaları - anibal.gyte.edu.tranibal.gyte.edu.tr/hebe/AblDrive/59669005/w/Storage/104_2011_1_511... · Yukarıdaki algoritma basit fakat verimsizdir. Daha iyi algoritmalardan

G.Y.T.E Bil. Müh. Böl. 147

Tablo 8.1. Şekil 8.1deki graf için Dijkstra algoritmasının Adımları Adım1 (Kalıcı etiketin belirlenmesi) Adım2 (Geçici etiketin gözden geçirilmesi)

P={1} L(1)= 0 İter 1

T={2,3,4,5,6,7} L’(2)= 4 L’(3)= 6 L’(4)= 8 L’(5)= - L’(6)= - L’(7)= -

P={1,2} L(1)= 0 L(2)= 4

T= T-{2}={3,4,5,6,7} L’(3)= min{6, L’(2)+ a(2,3)} L’(4)= min{8, L’(2)+ - } L’(5)= min{- , L’(2)+ a(2,5)} L’(6)= min{-, L’(2)+ -} L’(7)= min{-, L’(2)+ -} gecici

P={1,2} L(1)= 0 L(2)= 4 İter 2

T={3,4,5,6,7} L’(3)= 5 L’(4)= 8 L’(5)= 11 L’(6)= - L’(7)= -

P={1,2,3} L(1)= 0 L(2)= 4 L(3)=5

T= T-{3}={4,5,6,7} L’(4)= min{8, L’(3)+ a(3,4)} L’(5)= min{11, L’(3)+ a(3,5)} L’(6)= min{-, L’(3)+ a(3,6)} L’(7)= min{-, L’(3)+ -}

P={1,2,3} L(1)= 0 L(2)= 4 L(3)=5 İter 3

T={4,5,6,7} L’(4)= 7 L’(5)= 10 L’(6)= 9 L’(7)= -

P={1,2,3,4} L(1)= 0 L(2)= 4 L(3)=5 L(4)=7

T= T-{4}={5,6,7} L’(5)= min{10, L’(4)+ -} L’(6)= min{9, L’(4)+ a(4,6)} L’(7)= min{-, L’(4)+ -}

P={1,2,3,4} L(1)= 0 L(2)= 4 L(3)=5 L(4)=7 İter 4

T={5,6,7} L’(5)= 10 L’(6)= 9 L’(7)= -

P={1,2,3,4,6} L(1)= 0 L(2)= 4 L(3)=5 L(4)=7 L(6)=9

T= T-{6}={5,7} L’(5)= min{10, L’(6)+ a(6,5)} L’(7)= min{-, L’(6)+ a(6,5)}

P={1,2,3,4,6} L(1)= 0 L(2)= 4 L(3)=5 L(4)=7 L(6)=9 İter 5

T={5,7} L’(5)= 10 L’(7)= 17

P={1,2,3,4,6,5} L(1)= 0 L(2)= 4 L(3)=5 L(4)=7 L(6)=9 L(5)=10

T= T-{5}={7} L’(7)= min{17, L’(5)+ a(5,7)}

P={1,2,3,4,5,6} L(1)= 0 L(2)= 4 L(3)=5 L(4)=7 L(6)=9 L(5)=10 )1-5) İter 6

T={7} L’(7)= 16 P=V ise dur.

P={1,2,3,4,5,6,7}L(1)= 0 L(2)= 4 L(3)=5 L(4)=7 L(5)=10 L(6)=9 L(7)= 16

T= Boş Küme

Bir kere düğüm 1 den diğer düğümlere olan en küçük mesafe hesaplanınca, düğüm 1 den diğer düğümlere olan en kısa yolun bulunması çok kolaydır. Bu aşağıdaki şekilde en kısa yol ağacı oluşturularak yapılır.

Page 17: 6 Ağaçlar ve Uygulamaları - anibal.gyte.edu.tranibal.gyte.edu.tr/hebe/AblDrive/59669005/w/Storage/104_2011_1_511... · Yukarıdaki algoritma basit fakat verimsizdir. Daha iyi algoritmalardan

G.Y.T.E Bil. Müh. Böl. 148

Herbir i düğümü( düğüm 1 hariç) için öyle bir j düğümü bulalım ki;

a. ağda i den j ye bir yay

b. L(j)<L(i) ve

c. L(j) + a(i,j) = L(i) olsun.

Eşitlik bozma keyfidir.Yay(j,i) ağaç içinde bulunur. Şekil 8.1 de ele alınan örnekte, 3. ve 4.düğümden 6 ya yaylar vardır. Bunu şöyle görebiliriz

L(3) +a(3,6) = 5+4 = 9 = L(6) ve

L(4) +a(4,6) = 7+5 = 12

Böylece (3,6) yayı ağacın içindedir. (3,5) ile (6,5) arasında ağaçta bulunabilecek bir sonuç eşitliği olduğu kolayca görülebilir ve onlardan sadece birini alabiliriz. Şekil 8.2 de, Şekil 8.1 deki grafın 1. düğümünden diğer bütün düğümlerine en kısa yolları veren bir en kısa yol ağacı görülmektedir.

Şekil 8.2. en kısa yol Ağacı

Algoritmanın karmaşıklığı en kötü durumda O(n2) dir.

8.2 Floyd-Warshall Algoritması

Dijkstra’nın algoritması, ağırlık fonksiyonu keyfi olduğu zaman uygun değildir. Ağırlık fonksiyonu pozitif olarak sınırlanmadığı zaman en kısa mesafe problemini çözmek için kullanılan bir algoritma Floyd-Warshall algoritmasıdır. Eğer i de başlayıp i de biten bir negatif tur var ise, i den herhangi bir düğüme en küçük yolu düşünmenin anlamı yoktur.

Warshall Algoritması, bir graf üzerinde tüm düğüm çiftleri arasındaki minimum uzaklığı (shortest path) bulmak için kullanılan bir algoritmadır. Bunun için her (i , k) düğüm çifti için aşağıdaki eşitliğe bakılır:

D [i , k] = min (D [i , k] , D [i , j] + D [j , k])

Yani, i düğümünden k düğümüne gitmek için bir yeni bir j düğümü üzerinden geçilen başka bir yol bulunmuşsa ve bulunan bu yeni yolun daha az maliyetli olduğu anlaşılırsa i ve k arasındaki yeni yol, bu yol olarak seçilir.

n düğümlü ve keyfi ağırlık fonksiyonlu bir yönlü grafı ele alalım. A=aij, nxn lik ağırlık matrisi ve P=(pij) ,pij=j olan diğer bir nxn lik matris olsun. Algoritmanın icrasında n iterasyon vardır.

j. İterasyon , A(j-1) ve P(j-1) olan iki nxn lik matris ile başlar(başlangıçta A(0) =A ve P(0) =P dir) ve A(j) ve P(j) ile sona erer. Matristeki elemanlar aşağıdaki şekilde tanımlanır.

Eğer, dik(j-1) ≤ dij

(j-1) + djk(j-1) ise, A(j)(i,k) = A(j-1)(i,k) ve P(j)(i,k)=P(j-1)(i,k)dir. Diğer durumda,

A(j)(i,k) = A(j-1)(i,j) + A(j-1)(j,k) ve P(j)(i,k)=P(j-1)(i,j) dir.

Page 18: 6 Ağaçlar ve Uygulamaları - anibal.gyte.edu.tranibal.gyte.edu.tr/hebe/AblDrive/59669005/w/Storage/104_2011_1_511... · Yukarıdaki algoritma basit fakat verimsizdir. Daha iyi algoritmalardan

G.Y.T.E Bil. Müh. Böl. 149

Algoritma bittiğinde A’=A(n) ve P’= P(n) olmak üzere iki matris elde edilir. Bu yordam en kötü durumda A matrisinin güncellenmesinde (n-1)2 karşılaştırma ve her iterasyonda eşit sayıda toplama işlemi gerektirir, oysa P matrisinin güncellenmesi herhangi bir iş gerektirmez. Bu nedenle en çok n iterasyon olduğu için en kötü durum karmaşıklığı O(n3) dür.

Şekil 8.3’deki graf için algoritmanın iterasyonları Aşağıda gösterilmiştir.

Şekil 8.3. Örnek Graf.

A(0)=

0665

3010

703

340

P(0)=

4321

4321

4321

4321

A(1)=

0265

3010

703

340

P(1)=

4121

4321

4321

4321

d0(4,1)=1;4,1,3

A(2)=

0163

30107

703

340

P(2)=

4222

4322

4321

4321

A(3)=

0163

30107

4703

0340

P(3)=

4222

4322

3321

3321

A’=A(4)=

0163

3096

4703

0340

P’=P(4)=

4222

4344

3321

3321

A’ matrisinden düğüm 3 den düğüm 1 e (3,1) girişinin 6 olduğu görülür. P’ den (3,1) girişinin 4 olduğu görülür. Böylece 3 den 1 e en kısa yolda (3,4) , ilk yaydır. (4,1) girişi 2 dir. Böylece sonraki yay (4,2) dir. Sonra (2,1) girişinin 1 olduğunu görürüz. Böylece son yay (2,1) dir. Ortalamada Dijkstra’nın algoritmasının Floyd-Warshall’ınkinden daha performanslı olduğu görülür.

Floyd-Warshall’ın algoritması graftaki negatif çevrimleri de bulabilmektedir.

-3 2

34

1

5

4

36

-7 106

-3

Page 19: 6 Ağaçlar ve Uygulamaları - anibal.gyte.edu.tranibal.gyte.edu.tr/hebe/AblDrive/59669005/w/Storage/104_2011_1_511... · Yukarıdaki algoritma basit fakat verimsizdir. Daha iyi algoritmalardan

G.Y.T.E Bil. Müh. Böl. 150

9 Sonlu Durumlu makineler ve Otomata Teorisi

9.1 Sonlu Durumlu Makineler ve Turing Makineleri

9.1.1 Sonlu durumlu Makine:

(a) Bir başlangıç durumu olan ve Sonlu sayıda duruma sahip {Q = q0,q1,.......qn} olan,

(b) : Giriş{G=x1,x2,......,xn}, ve Çıkış{Ç=z1,z2,......,zm}, olmak üzere sonlu Alfabe(A) vardır.

(c) : Bu parametreler ile bir geçiş fonksiyonu tanımlanır: { QxG → ÇxQ }

Z(t+1) çıkışı temelde x(t)’ye bağlıdır Q(t)’ye , o andaki durum veya makinelerin başından geçen olaylar(History) denir.

Şekil 9.1

9.1.2 Akseptör(Sonlu) : Bir sonlu akseptör aşağıdakilerden oluşur.

(a) Başlangıç durumu q0, Son durumlar alt kümesi Q olmak üzere bir Q (sonlu) durum kümesi:

QQ , Qqo ,

(b) : Bir A alfabesi(sonlu) (c) : g : QxA → Q fonksiyonu Örnek:

Q ={ q0, q1 } ; A{0,1}

q0 q1

0 1

1

0

Şekil 9.2

Çıkışta bir işaret yok. q1’i son durum alsak, tek sayıda 1 vererek bunu yine q1’e getirmek mümkün. Bu akseptör tek sayıda bir bulunan bir katarı kabul eder.( 10101110001’i kabul etmez, 6 ad .1 var)

Sonuç : Sonlu akseptör verilen bir katarın verilen bir gramere uygun olup olmadığını kontrol eder. Uygunluk son duruma erişip erişmeme ile anlaşılıyor.

Örnek : A{0,1} , Q{ q0,q1,q2} , q2 : dipsiz kuyu giren çıkamaz} Bu akseptör boş katar, 01,0101, 0101001 gibi katarları kabul eder. Türkçedeki bazı heceler sesli sessiz harflarden oluşur. Bunlar düzenlenebilir.(Şekil: 8.3)

g/ç q0 q1

0 q0 q1

1 q1 q0

M 1x

2x

nx

1z

2z

mz

t0tt 1 nttnt

Page 20: 6 Ağaçlar ve Uygulamaları - anibal.gyte.edu.tranibal.gyte.edu.tr/hebe/AblDrive/59669005/w/Storage/104_2011_1_511... · Yukarıdaki algoritma basit fakat verimsizdir. Daha iyi algoritmalardan

G.Y.T.E Bil. Müh. Böl. 151

q0 q1

0

1

q2

0V1

1 0

q0

Şekil 9.3

Örnek : a 0 ; at 01 ; yat 101 , dört 1011 gibi

Örnek : ANKARA’da KAR var mı? Akseptörü

Şekil 9.4.

KAR bulduğu zaman son durumuna gelecektir. Buna Karakter uyuşturma{string matching} denilir. Uzun bir metnin içerisinde belirli bir harf dizisi var mı onu arıyoruz.

KAR Değil de başka bir şey aranırsa, mesela, aynı katar tekrarlanıyor, öyleki tekrardan sonra en başa değil de daha ileri bir duruma geçilecek. Örnek KARAKAYA, Alt katarlar tekrarlanıyorsa akseptörü çizmek bir hayli zordur.

9.1.3 Sonlu Dönüştürücüler(Transduser) : Bir Q kümesi (başı q0) Bir A alfabesi g : QxA QxA Bu makineler yeni bir katarı alır, bundan yeni bir katar üretir qiajqkal ; qi Q ; aj A Şekil 9.5.

(qi,aj,qk,al) dörtlüsü g fonksiyonunu tanımlar ( qi : durum , aj , alfabe, qk : sonraki durum al: çıkış)

Örnek : A= {a,b,c,d} alfabesi üzerinde aşağıdaki dönüşüm işlemi yapılacaktır. Arka arkaya 2 d görülünceye kadar a ve b karakterleri aynı şekilde kopyalanacak, c’ler a’ya ; d’ler b’ye dönüştürülecektir. Arka arkaya gelen 2 d’den ikincisi a’ya dönüştürülecek. Daha sonra gelen karakterlerin yerine c koyulacaktır.

Böylece dönüştürücünün durum geçiş diyagramı yukarıdaki gibi olacaktır. Bunlarda bellek yoktur. Eğer bellek eklenirse Turing makineleri elde edilir.

q0 q1K Rq2

AvNvK

A q0q3

NvK vR

AvNvR

qi qk

<aj,al>

Page 21: 6 Ağaçlar ve Uygulamaları - anibal.gyte.edu.tranibal.gyte.edu.tr/hebe/AblDrive/59669005/w/Storage/104_2011_1_511... · Yukarıdaki algoritma basit fakat verimsizdir. Daha iyi algoritmalardan

G.Y.T.E Bil. Müh. Böl. 152

q0 q1<avc,a> q2<d,a>

<b,b>

<avc,a>

<b,b>

<A,c><d,b>

Şekil 9.6

9.1.4 Turing makineleri :

Bu makinelerde şerit şeklinde bellek vardır. Herbir bellek gözünde alfabenin sembollerinden biri olacaktır. Yine,

Bir Q kümesi (başı q0) Bir A alfabesi (b boşluk dahil) g : QxA QxA {R,L} kümesi bu şeridi okuyup kafanın sağa mı, yoksa sola mı hareket ettiğini belirtiyor. (qi,aj,qk,al,Y) ile tanımlanır

qi : Makinenin durumu

aj : kafanın şeritten okuduğu sembol

qk : Makinenin yeni durumu

al : Kafanın şerite yazdığı yeni karakter

Y : R veya L olarak sağa yada sola doğru kafanın hareketi(bir göz hareket edecek). Böyle bir bellek özelliği olan ilkel makine turing makinesi olarak bilinir. Turing makinesi programı belirli bir işlemi yapan 5’lilerden oluşur

Örnek: m,n tamsayıları birli sistemde şerit üzerinde temsil edilmiştir. Sıfırı belirtmek için m tamsayısı m+1,1 ile temsil edilmiştir

Birli sistemde 1 ve 4’ü’i temsil etmek için aşağıdaki gösterilim kullanılır.

b 1 1 b 1 1 1 1 1 b

Yazacağımız program m ile n’i toplayacaktır

b 1 1 1 b 1 1 1 1 1 1 b

Burada kafanın konumunun nerede olduğu önemlidir. Kafa en soldaki 1’in üzerindedir

qi sj qk sl Y

0 1 0 1 R 0 b 1 1 L 1 1 1 1 L 1 b 2 b R 2 1 3 b R 3 1 4 b R

Bunu yukarıdaki programla toplayabiliriz.

b 1 1 b 1 1 1 1 1 b

Turing makineleri ile başka işlemler de yapılabilir.

Page 22: 6 Ağaçlar ve Uygulamaları - anibal.gyte.edu.tranibal.gyte.edu.tr/hebe/AblDrive/59669005/w/Storage/104_2011_1_511... · Yukarıdaki algoritma basit fakat verimsizdir. Daha iyi algoritmalardan

G.Y.T.E Bil. Müh. Böl. 153

Örnek : A = {0,1} ,başta ve sonda boşluk bulunsun.

b 0 1 1 0 0 1 b

Bu sayıyı tek yada çift pariteli yapmak için gerekli karakteri en sağına ilave eden program.

b 0 1 1 0 0 1 b

1’leri sayıp tek ise sona 1 koyar, çift sayıda 1 varsa boşluğu sıfır yapar

b b 0 1 1 0 0 1 b b

Başka bir örnekte ikili sistemdeki sayının değerini birli sistemde yazmaktır. Mesela 15’i ikili sistemde okuyup 16 tane bir koymak olabilir.

Alıştırmalar

1. n uzunluğundaki bir listede bulunan sayılardan tamsayı(ondalık kısmı sıfır) olanların toplamını bulan bir algoritmayı psudokod ile yazınız.

2. Sadece atama deyimleri kullanarak x ve y değişkenlerinin değerlerini yer değiştiren algoritmayı psudokod ile yazınız.

3. Herbir işlemin 10-9 sn aldığı bir işlemde f(n) in aşağıdaki karmaşıklık değerleri olduğu algoritmalarda bir saniye içinde ne kadar büyüklükte problem çözülebileceğini hesaplayın.

a)logn b)n c) n2 d) 2n

4. Aşağıdaki akseptör’ün hangi dizileri kabul ettiğini bulun..

5. {1,01,11} dizilerini kabul eden bir akseptör çizin.

Kaynaklar

1. Rowan Garnier, John Taylor, "Discrete mathematics for new technology ", Adam Hilger Publishing, 1992.

2. Mathematics, V.K. Balakrishnan Introductory, Discrete Dover Publ.ISBN 0-486-69115-2 3. Kenneth H .Rosen, “Discrete Mathematics and its Applications”, Mc Graw Hill ,1999.

q0 q11

0,1

0,1 q0q2

0

Başla