• Sonuç bulunamadı

3. BİRLEŞTİR/BUL (UNION/FIND) VERİ YAPISI KULLANILARAK

3.1. Birleştir/Bul (Union/Find) Veri Yapısı

Birleştir/bul veri yapısı denklik probleminin çözümüne etkili bir yol sunar. Bir kümedeki eleman çiftinin birbirleriyle bağıntısının olup olmaması doğru ve yanlış olarak ifade edilir. Doğru ise bağıntı vardır, yanlış ise bağıntı yoktur. Bir bağıntının denklik bağıntısı olabilmesi için üç özelliğinin olması gerekir; yansıyan, simetrik ve geçişken. Yansıyan: aRa tüm a∈S, Simetri: aRb ancak ve ancak bRa Geçişken: aRb ve bRc ise aRc (Weiss, 2012).

Denklik ilişkisi(a~b) verilen iki noktanın bağlantılı olup olmadığını bulmak kolaydır. İki boyutlu bir dizi oluşturularak noktalar arası bağlantı varsa ilgili hücreye 1 yoksa 0 yazılarak bağlantılar tespit edilebilir. Ancak zorluk, bağlantıların direk olduğu durumlarda değil dolaylı olduğu durumlarda ortaya çıkıyor. Beş elemanlı bir küme{a1, a2, a3, a4,a5} için elemanların tümünün bağlantılı olup olmadığını belirleyecek 25 farklı bağlantı çifti vardır. Ancak a1’in a2 ile, a3’ün a4 ile, a5’in a1 ile ve a4’ün a2 ile bağlantılı olduğu bilinirse bu kümedeki tüm elemanların bağlantılı olduğu söylenebilir.

113

Bir S kümesindeki a elemanı ait olduğu alt kümedeki tüm elemanlarla bağlantılıdır. Bir kümedeki elemanların ait olduğu alt kümelere ayrılması bu kümenin alt bölümlere bölünmesi anlamına gelir. Her bir elamanın ait olduğu sadece bir alt küme vardır. Eğer a ve b elemanlarının bağlantılı olup olmadığına karar vermek istiyorsak elemanların ait oldukları alt kümelerin bilinmesi yeterli olacaktır. Elemanlar aynı alt kümeye ait ise bağlantılı, değilse bağlantılı değildir.

Birleştir/bul veri yapısı n elemanlı bir kümeyi n tane alt küme şeklinde ele alır. Daha sonra bu kümeler arasında birleştirme ve bulma işlemi yapar. Birleştirme işlemi iki farklı alt kümeye ait elemanları bir alt kümede birleştirir. Birleştirilen iki alt kümedeki tüm elemanlar bir alt kümeye ait olur. Bul işleminde elemanın hangi kümeye ait olduğu belirlenir.

Birleştir/bul veri yapısının iki temel fonksiyonu vardır; birleştir ve bul fonksiyonları. Bul fonksiyonu girdi olarak verilen bir elemanın hangi kümeye ait olduğunu verir. Birleştir fonksiyonu verilen iki elemanın birleştirir. Birleştirme işlemi yapılırken ilk önce bu elemanların ait oldukları alt kümeler bulunur. Eğer elemanların ait oldukları kümeler aynı ise birleştirme işlemi yapılmaz. Eğer elemanlar farklı alt kümelere aitse bu iki alt küme birleştirilerek tek bir alt küme elde edilir. Birleştir/bul veri yapısını gerçekleştirmek için kullanılan algoritmalar dinamik yapıdadır. Çünkü algoritmanın çalışması esnasından birleştir işleminden dolayı kümeler değişebilmektedir.

Tablo 3.1. Farklı Birleştir/bul algoritmalarının zaman karmaşıklığı (Sedgewick ve Wayne, 2011)

Algoritma Yapıcı Metot Birleştir Bul

Hızlı-bul N N 1

Hızlı-birleştir N Ağaç yüksekliği Ağaç yüksekliği

Ağırlıklı-hızlı-

birleştir N lgN lgN

Yol-sıkıştırmalı- ağırlıklı-hızlı- birleştir

N Sabit zamana çok yakın ancak sabit

zamanlı değil

114

Birleştir/bul algoritmasını gerçekleştirmek için önerilen farklı yaklaşımlar vardır; hızlı-birleştir, hızlı-bul, ağırlıklı-hızlı-birleştir ve yol-sıkıştırmalı-ağırlıklı-hızlı- birleştir. Yaklaşımların zaman karmaşıklığı Tablo 3.1.’de verilmiştir.

Algoritmanın gerçekleştirilmesi için n elemanlı bir dizi yeterli olacaktır. Algoritma ilk çalışmaya başladığında yapıcı metot dizi deki tüm elemanlara kendi indeks değerini atayacaktır.

3.1.1. Hızlı-bul

Bir alt kümedeki tüm elemanlar aynı değere sahiptirler. Bul fonksiyonu girdi olarak verilen bir elemanın ait olduğu alt kümeyi sabit zamanda verir. Birleştirme fonksiyonu aynı kümeye ait olmayan iki elemanın alt kümelerini birleştirmek için iki alt kümedeki elemanlar bir değerle temsil edilir. Bunun için alt kümelerden birinin değeri diğer alt kümenin değeri ile değiştirilir. Değiştirilecek alt kümenin tüm elemanlarının değerinin değişmesi gerektiği için dizi baştan sona taranır. Bu nedenle zaman karmaşıklığı N’dir.

3.1.2. Hızlı-birleştir

Hızlı-birleştir yaklaşımı iki farklı alt kümeye ait elemanların birleşimini alt kümeye ait kök elemanların birleştirilmesi ile gerçekleştirir. Girdi olarak verilen iki elemanın kök elemanları bulunur eğer kök elemanlar farklı ise birleştirilmek istenen elemanlar farklı alt kümelere aittir. Kök elemanlardan birinin değeri diğerine atanarak birleştirme işlemi gerçekleştirilir. Hızlı-birleştir yaklaşımı ile alt kümelerin birleşimi ağaç yapısını meydana getirecektir. Birleştirmede kök dizinlerin bulunması ağaç yüksekliği kadar olacaktır. Ancak en kötü durumda algoritmanın çalışma performansı N’dir.

3.1.3. Ağırlıklı-hızlı-birleştir

Hızlı birleştirmede iki farklı alt kümenin birleştirmesinde alt kümelerden biri diğerine rasgele dahil olur. Bu işlemde alt kümlerin büyüklüklerine bakılmaz. Ağırlıklı-hızlı- birleştir yaklaşımında alt kümelerin sahip oldukları eleman sayısı yani büyüklüğü dinamik olarak hesaplanır. Birleştirme işlemi yapılacağı zaman küçük ağaç büyük ağaca dahil olur. Böylece ağacın yüksekliğinin logN olması garanti edilmiş olur. Oluşan ağaç yüksekliğinin maksimum boyutu logN olduğundan dolayı bulma işlemi ve birleştirme işlemi logN zamanda gerçekleştirilir.

115

3.1.4. Yol-sıkıştırmalı-ağırlıklı-hızlı-birleştir

Bu yaklaşım ağacın yüksekliğini minimum seviyeye indirir. Her bulma işlemi yapılırken ağacın yüksekliği azalır ve minimum seviyede ağaç yüksekliği elde edilir. Sabit zamana yakın bir performans elde edilir.

3.2. Birleştir/Bul Veri Yapısının GMACA Sınıflarının Ayrıştırılmasında