Skip List veri yapısında Seviye Optimizasyonu

Benzer belgeler
Araştırma Makalesi / Research Article. Skip List Veri Yapısında P Eşik Değerlerinin Rastgele Seviye Oluşturma ve Performansa Etkisi

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

Yrd. Doç. Dr. Caner ÖZCAN

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

YZM 2116 Veri Yapıları

YZM 2116 Veri Yapıları

Yrd. Doç. Dr. Caner ÖZCAN

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

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

Max - Min Heap Tree (Max ve Min Yığıt Ağaçları) Veri Yapıları ve Algoritmalar 2 - Mustafa EGE Ders Notları

BIP116-H14-1 BTP104-H014-1

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

BIL222 Veri Yapıları ve Algoritmalar

Veri Yapıları. Öğr.Gör.Günay TEMÜR Düzce Üniversitesi Teknolojis Fakültesi

YZM 2116 Veri Yapıları

Zeki Optimizasyon Teknikleri

YZM 2116 Veri Yapıları

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Ü

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

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

ELN1002 BİLGİSAYAR PROGRAMLAMA 2

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ü

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

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

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

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

Algoritmalara Giriş 6.046J/18.401J

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

VERİ YAPILARI VE PROGRAMLAMA

Görsel Programlama DERS 04. Görsel Programlama - Ders04/ 1

Veri Yapıları Laboratuvarı

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

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İ

C++ Dersi: Nesne Tabanlı Programlama 2. Baskı

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

YZM 2116 Veri Yapıları

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

Gezgin Satıcı Probleminin İkili Kodlanmış Genetik Algoritmalarla Çözümünde Yeni Bir Yaklaşım. Mehmet Ali Aytekin Tahir Emre Kalaycı

Veri Yapıları ve Algoritmalar dönem

Zeki Optimizasyon Teknikleri

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

Sınav Dağılım & IMKB Endeks

BAĞLAÇLI LİSTELER LINKED LISTS

BAĞLAÇLI LİSTELER LINKED LISTS

VERİ YAPILARI DERS NOTLARI BÖLÜM 5 QUEUE (KUYRUK) Yard. Doç. Dr. Deniz KILINÇ

YZM 2116 Veri Yapıları

ALGORİTMA VE PROGRAMLAMA II

YZM ALGORİTMA ANALİZİ VE TASARIM DERS#9: AÇGÖZLÜ ALGORİTMALAR

Alıştırma 1: Yineleme

YZM 2116 Veri Yapıları

Ağaç (Tree) Veri Modeli

Web Madenciliği (Web Mining)

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

Balon & Banka Teslim tarihi: 17 Kasım 2008

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

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

KİNETİK MODEL PARAMETRELERİNİN BELİRLENMESİNDE KULLANILAN OPTİMİZASYON TEKNİKLERİNİN KIYASLANMASI

Teori/Saat Uygulama/Saat Laboratuar/Saat AKTS BLM Dersin Amacı

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

Gezgin Satıcı Probleminin Benzetilmiş Tavlama Yöntemiyle Çözümünde Paralel Hesaplamanın Kullanılması

Fonksiyon Optimizasyonunda Genetik Algoritmalar

DOKUZ EYLÜL ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ DEKANLIĞI DERS/MODÜL/BLOK TANITIM FORMU. Dersin Kodu: CME 4420

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

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

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

YZM 2116 Veri Yapıları

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

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

YZM ALGORİTMA ANALİZİ VE TASARIM DERS#3: ALGORİTMA ANALİZİ#2

ALGORİTMA ANALİZİ. Cumhuriyet Üniversitesi Bilgisayar Mühendisliği Bölümü

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

Week 7. Düğüm bulma Tekli bağlı liste: phead ve ptail Dairesel bağlı liste Çift bağlı liste

Ders 4: Diziler (Arrays( Arrays) barisgokce.com

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

Teori/Saat Uygulama/Saat Laboratuar/Saat AKTS BLM Dersin Amacı

1 RUBY HAKINDA 1 Ruby nin Gelişim Hikayesi 1 Neden Ruby? 1 Neden Bu Kadar Popüler? 2

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

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

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

Arama metodlarında temel işlem anahtarları karşılaştırmaktır.

KUYRUKLAR QUEUES. Doç. Dr. Aybars UĞUR

AĞAÇ-TREE VERİ YAPISI

İLİŞKİSEL VERİTABANLARI

Algoritmalar. Sıralama Problemi ve Analizi. Bahar 2017 Doç. Dr. Suat Özdemir 1

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

127 - Twoing Algoritması ile Sınıflandırma Kalp Hastalığı Uygulaması MEHMET AKİF ERSOY ÜNİVERSİTESİ İLHAN UYSAL MEHMET BİLEN SAMİ ULUKUŞ

Final Sınavı Soruları Bahar 2018

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

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

Zeki Optimizasyon Teknikleri. Karınca Algoritması (Ant Algorithm)

F(A, N, K) // A dizi; N, K integer if N<0 then return K; if A[N]>K then K = A[N]; return F(A, N-1, K);

ELN1002 BİLGİSAYAR PROGRAMLAMA 2

BAĞLI LİSTELER BAĞLI LİSTELER

VERİ YAPILARI DERS NOTLARI BÖLÜM 2 ALGORİTMA ANALİZİ. Yard. Doç. Dr. Deniz KILINÇ

GENETİK ALGORİTMA ÖZNUR CENGİZ HİLAL KOCA

YZM 2116 Veri Yapıları

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Veri tabanı içinde bulunan tablolardakibazı sütunlarda bulunan bilgilerin, herkes tarafından görülmesi istenmeyebilir.

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

Transkript:

38 Skip List veri yapısında Seviye Optimizasyonu 1 Mustafa AKSU, 2 Ali KARCI ve 1 Şaban YILMAZ *1 Kahramanmaraş Meslek Yüksek Okulu, Sütçü İmam Üniversitesi, Kahramanmaraş, Türkiye 2 Mühendislik Fakültesi, Bilgisayar Mühendisliği Bölümü, İnönü Üniversitesi, Malatya, Türkiye Özet Skip list, bağlı listelere alternatif olarak Pugh tarafından ortaya atılan bir veri yapısıdır. Skip list veri yapısında bağlı listeler kullanılır. Düğümler, birbirine bağlı listeler halinde farklı seviyelere pramit şeklinde yerleştirilir. Böylece eleman arama, ekleme, silme gibi işlemler kolayca(o(lg N)) yapılabilir. Bununla birlikte, bu veri yapısında seviyelere düğüm ekleme işleminde olması gerekenden çok yüksek seviyeler üretilebilmektedir. Bu makalede rastgele seviye üretme problemi ele alınarak çözüm önerilmiştir. Skip list veri yapısındaki seviye üretme problemi toplam düğüm(eleman) sayısı(nodecount) bulunarak çözülmüştür. Böylece skip list için en ideal seviye level=log 2 (nodecount) formülü ile oluşturulmuştur. 1. Giriş Anahtarlar: Skip list, rastgele seviye, seviye optimizasyonu, veri yapısı. Veri yapıları bilgisayar bilimlerinin bir çok alanında doğrudan veya dolaylı yollardan kullanılmaktadır. Bir çok problemin çözümünde değişik veri yapıları kullanılmaktadır. Zaman zaman mevcut veri yapılarının ihtiyaçlara cevap verememesinden veya işlem, zaman, donanım gibi kısıtlamalardan dolayı yeni veri yapılarına ihtiyaç duyulmuştur. Bazan dinamik, bazan statik bir yapıya ihtiyaç olduğundan farklı veri yapıları ortaya çıkmıştır.bir problemin çözümü için geliştirilen algoritmanın verimliliği düşük olabilir yada algoritma yetersiz kalabilir. Bütün bunlar göz önünde bulundurulduğunda yeni veri yapıları ve algoritmalar ortaya çıkmaya devam edecektir. Skip List PUGH[1,2,3] tarafından ortaya atılan dinamik bir veri yapısıdır. Skip list veri yapısında bağlı listeler kullanılır. Bağlı listeler pramit şeklinde farklı seviyelere yerleştirilir. Skip List veri yapısındaki herbir liste kendi üzerindeki listeleri kapsar. N elemanlı bir Skip list veri yapısında arama, ekleme, silme işlemleri için zaman karmaşıklığı O(lg N)' dir. Dizilerde ve bağlı listelerde bu işlemler O(N) zaman karmaşıklığına sahipken skip list veri yapısında O(lgN) olması büyük bir avantajdır. Skip list veri yapısı algoritmalarının analizi ve iyileştirilmesi adına 10'dan günümüze bazı çalışmalar [6,7,8,,10,11,12,13,14] yapılmıştır. Bütün bunların yanında skip list veri yapısı için geliştirilen algoritmalarda bazı problemler vardır. Bu problemler skip list veri yapısı işlemlerinde (arama, ekleme, silme) performansı düşürmektedir. Bizim çalışmamızda aşağıdaki problemler ele alınıp çözüm önerileri sunulmuştur. Bu problemler şunlardır: a. Yapıya bir düğüm eklerken eklenecek bu düğüm için seviye belirlemede kullanılan PUGH un randomlevel algoritması tutarsız seviye üretmektedir. b. Yapıya düğüm eklendikten sonra Skip list olması gereken seviyeden çok yüksek olabilmektedir. 38

30 2. Materyal ve Metod Bilgisayar bilimlerinde listeler yararlı ve yaygın olarak kullanılan veri yapılarındandır. Programlama açısından liste, aralarında doğrusal ilişki olan veriler topluluğu olarak görülebilir. Veri yapılarında değişik biçimlerde listeler kullanılmakta ve üzerlerinde değişik işlemler yapılmaktadır [4]. Bağlı listeler, çift yönlü bağlı listeler, çevrimsel bağlı listeler, skip list bu veri yapılarından bazılarıdır. 2.1. Bağlı Listeler Bağlı listeler, bir grup düğümün(,,,, 44,, 62, 77, 81, 6, 123) bir araya getirilip birbirlerine bağlanmasıyla oluşturulan bir veri yapısıdır. Bu düğümler sıralı bir şekilde birbirlerine bağlanırsa Şekil 2 deki yapı elde edilir. Bu sıralı yapı herhangi bir pozisyona düğüm ekleme, silme gibi işlemlerde etkin bir şekilde kullanılır. Bağlı listelere erişim için bir başlangıç düğümünü(head) ihtiyaç vardır. Her düğüm veri(ler) ve bir sonraki düğüme bağlantı(next) bileşenlerinden oluşur. Ayrıca bağlı listenin bittiğini ifade eden bir sonlandırıcıya(null) ihtiyaç vardır (Şekil 1). Düğüm(Node) 1 Düğüm(Node) 2 Veri (Data) Sonraki (Next) Veri (Data) Null Şekil 1. Bağlı Liste düğüm Yapısı Bağlı listeler en basit ve en çok kullanılan veri yapılarındandır. Ayrıca diğer bağlı liste çeşitleri, yığıt(stack), kuyruk(queue), skip list gibi veri yapıları da temelde bağlı listelerden oluşur [5]. Bas (Head) 44 62 77 81 6 123 Şekil 2. Bağlı Liste 2.2. Skip listin Oluşturulması Skip List veri yapısında, bağlı liste veri yapısında olduğu gibi listenin her bir elemanı düğüm olarak kabul edilir ve her bir eleman bir anahtar ve bir değer ile ifade edilir. Skip list very yapısında bağlı listeler kullanılır ve bağlı liste elemanları sıralı olarak değişik levellere yerleştirilerek arama işlemlerinde kolaylık sağlanması amaçlanır. Bağlı listeler üst üste birbirinin fihristi olacak şekilde yerleştirilip birbirlerine bağlanırsa Skip List veri yapısı ortaya çıkar (Şekil 3, Şekil 4). {,,,, 44,, 62, 77, 81, 6, 123} düğümlerinden oluşan bir Skip Listin bağlı listelerden oluşturulması Şekil 3 ve Şekil 4 te görülmektedir. İlk olarak tüm düğümler Seviye 0'da yer alır ve sol taraftan başlanarak her 2 i. düğüm(i=0,..,maxlevel(15/31)) atlanarak üste doğru her seviyeyi temsil eden işaretçiler oluşturulur. Bağlı liste 0 Bağlı liste 1... Bağlı liste Ɩ. Bağlı liste 0, Skip List veri yapısında en alt seviyedeki bağlı liste olup tüm düğümleri kapsar. Alttan üste doğru her liste bir altındaki listenin fihristi şeklinde sıralanır. 30

31 77 Bağlı Liste 3 (Seviye 3) + 77 Bağlı Liste 2 (Seviye 2) + 77 6 Bağlı Liste 1 (Seviye 1) + 44 62 77 81 6 123 Bağlı Liste 0 (Seviye 0) Şekil 3. Bağlı listelerden Skip Listin oluşturulması Bağlı listelerde yapılan işlemler O(N) karmaşıklığında yapılmakta iken skip list veri yapısı sayesinde bu karmaşıklık azaltılmıştır. Skip list veri yapısı N tane sıralı düğümden oluşsun. Bağlı liste 0, bu N tane sıralı düğümlerin tamamından oluşur (Şekil 4-Seviye 0). Kuyruk(Tail) 77 Seviye 3 77 Seviye 2 77 6 Seviye 1 44 62 77 81 6 123 Seviye 0 Şekil 4 - Skip List Skip list veri yapısı ekleme, silme, arama işlemleri için kulllanılabilmektedir. Arama algoritmasında aranacak düğüm üst seviyeden başlanarak aşağı seviyelere doğru aranır. Ekleme işleminde önce eklenecek düğüm aranır bulunamamışsa rastgele belirlenen seviyeden itibaren eşleşen konuma yeni değer eklenir, işaretçiler ve listeler güncellenir. İşlem düğümün ekleneceği diğer seviyeler için tekrarlanır. Silme işleminde ise en üst seviyeden başlanarak alt seviyelere doğru arama gerçekleştirilir silinecek düğüm bulununca silinir, işaretçiler ve listeler güncellenir. Aynı işlemler düğümün olduğu diğer seviyeler için tekrarlanır. 31

32 Skip list veri yapısına düğüm ekleme, silme ve arama ile ilgili daha detaylı bilgi ve algoritmalar PUGH[1,2,3] un makalesinde mevcuttur. Bağlı ve sıralı listeler kullanıldığında skip list algoritmalarının(arama, ekleme, silme) zaman karmaşıklığı O(lg N) olmakta, bu da diğer algoritmalar ile karşılaştırıldığında önemli bir zaman farkı avantajı oluşturmaktadır. PUGH'un Skip list veri yapısı için geliştirmiş olduğu algoritmalarda bazı problemler vardır. Bu problemler skip list işlemlerinde (arama, ekleme, silme) performansı düşürmektedir. Bu problemlerden bazıları: Yapıya bir düğüm eklerken eklenecek bu düğüm için seviye belirlemede kullanılan randomlevel algoritması tutarsız seviye üretmektedir. Yapıya birçok düğüm eklendikten sonra Skip list olması gereken seviyeden çok yüksek olabilmektedir. İlerleyen bölümlerde bu sorunlar ele alınıp bunlara çözüm önerileri üzerinde durulacaktır. 2.3. Skip List için seviye(level) oluşturma Skip List veri yapısı inşa edilirken, düğümler rastgele belirlenen seviyelere yerleştirilir. PUGH'un geliştirdiği randomlevel algoritması (Algoritma 2) düğüm eklerken seviye(level) oluşturmak için 1..MaxLevel(15/31) arası rastgele bir değer üretir. Buda Skip List veri yapısında 2-3 düğüm varken bile level olarak yüksek değerler oluşturabilmektedir (Şekil 5.b). Bu istenmeyen bir durumdur. Halbuki 2 veya 3 düğüm varken seviye level=log 2 (N=3) den 2 olmalıdır. Bu şekilde seviye hesaplamak için Skip Listteki toplam düğüm sayısının bilinmesi gerekir. Bunun için düğüm sayısını saklayacak bir değişken (nodecount) tanımlanıp skip list oluşturulurken başlangıç değeri 0 alınmalıdır. Bu değişken(nodecount) Skip list yapısına her düğüm eklemede 1 arttırılıp her düğüm silme işleminde 1 azaltılarak güncel tutulmalıdır. Bu bilgiler doğrultusunda randomlevel algoritması oluşturulmalıdır. İdeal Skip listte N(nodecount) sayıda düğüm varsa bu yapı için olması gereken en yüksek seviye düğüm sayısının 2 tabanında logaritması alınarak bulunur. Skip listin o anki olması gereken seviyesi level = log 2 (N=nodecount) ile bulunur. PUGH'un randomlevel algoritması şöyledir; Algoritma 2 randomlevel() lvl := 1 -- random() that returns --a random value in [0...1) while random()< p and lvl < MaxLevel do lvl := lvl + 1 return lvl Şekil 5'de {,,} düğümlerinden oluşan iki ayrı Skip List yapısı görülmektedir. Şekil 5.a da olması gereken ideal seviye level=log 2 (N=3) den 2 olmaktadır. Şekil 5.b de ise istenmeyen (0..15/31) seviyede gerçekleşen Skip list görülmektedir. 32

33.. Kuyruk(Tail) Seviye 15.. Seviye 3 Kuyruk(Tail) Seviye 1 Seviye 2 Seviye 1 Seviye 0 Seviye 0 (a) Figure 5. (a) İdeal seviyede Skip List, (b) Gerçekleşebilecek Skip List (PUGH) Bizim geliştirmiş olduğumuz randomlevel algoritması (Algoritma 3) ise nodecount değerini esas alarak seviye(level) üreten bir algoritmadır. Algoritma 3 randomlevel(nodecount) int lvl,level; if ( nodecount=0 or head->level=0 ) then {Skip list boşsa level=0 al} level := 0; else { lvl := log 2 (nodecount); {nodecount değerinden level hesaplama} if ( lvl head->level ) then level:=lvl else level := random() % (head->level+1); { Mod alma işlemi } } return level; Bizim algoritmamızda düğüm sayısına (nodecount) bağlı seviye üretildiği için çok yüksek seviyeler üretilmez. Yapı düzenli oluşacağından arama, ekleme, silme işlemlerinde zaman kaybı olmaz. Yani level = log 2 (nodecount) ifadesinin sonucu olan level değeri skip listin o anki olması gereken ideal seviyesidir. İlk olarak geliştirdiğimiz uygulama ile düğümden oluşan bir skip list yapısı oluşturduk. Sonra randomlevel algoritmamızla rastgele seviyeler üretip bu seviyelere rastgele 16 yeni düğüm ekledik. Sonuç olarak bu 16 yeni düğümün seviyelere dağılımı Tablo 1'de görülmektedir. Tablo 1. Rastgele eklenen 16 düğümün seviyelere dağılımı (b) Seviyeler(Levels) 0 1 2 3 4 Düğüm Sayısı 4 3 4 3 2 Aynı işlemleri 72 düğümden oluşan bir skip list yapısı için tekrarladık. Sonra randomlevel algoritmamızla rastgele seviyeler üreterek bu seviyelere rastgele 25 yeni düğüm ekledik. Sonuç olarak bu 25 yeni düğümün seviyelere dağılımı Tablo 2'de görülmektedir. 33

34 Tablo 2. Rastgele eklenen 25 düğümün seviyelere dağılımı Seviyeler(Levels) 0 1 2 3 4 5 6 Düğüm Sayısı 4 3 4 2 4 5 3 Tablo 1 ve Tablo 2 incelendiğinde bizim algoritmamızla elde edilen seviyeler idealdir. Ayrıca rastgele üretilen seviyelere düğümlerin dağılımı da düzenlidir. Skip list için olması gereken ideal seviye korunmuştur. PUGH'un kendi ifadesine göre geliştirdiği olasılıksal randomlevel algoritması (Algoritma 2) 15 düğüm varken bile 14 seviyeli bir yapı oluşturabilmektedir. Bu kötü bir durumdur. Oysa 15 düğümlü bir skip list veri yapısı 4 seviyeden fazla olmamalıdır. Biz bu problemi düğüm sayısından(nodecount) seviye üreterek (Algoritma 3) çözdük. 2.4. Düğüm Ekleme Ekleme algoritmasında üst seviyeden en alt seviyeye doğru eklenecek konum bulunduktan sonra ekleme gerçekleşir. Burada en önemli problem eklenecek düğümün seviyesidir. PUGH 1..15/31(MaxLevel) arası rastgele bir sayı üretip onu seviye alarak düğümü o seviyeden itibaren tüm alt seviyelere doğru eklemektedir. 1..15/31(MaxLevel) arası rastgele bir sayı üretilmesi sonucu skip list yapısında 2-3 düğüm varken bile seviye olarak yüksek değerler(figure 5.b) oluşturabilmektedir. Bu istenmeyen bir durumdur. Halbuki 2 veya 3 düğüm varken seviye level=log 2 (N=3) den 2 olmalıdır(figure 5.a). Bunun için Skip listteki toplam düğüm sayısının bilinmesi gerekir. Bu bilgiler doğrultusunda ekleme algoritması düğüm sayısını güncel tutacak şekilde oluşturulmalıdır. PUGH'un insert algoritmasına nodecount diye bir değişken eklenerek insert algoritması yeniden düzenlenmiştir (Algoritma 4). Algoritmanın bu halinde Skip list yapısına eleman eklenirken her düğüm eklemede nodecount değeri 1 artırılmaktadır. Bu sayede skip listteki toplam düğüm sayısı bulunmaktadır. Nodecount parametresinin o anki değeri skip listin Seviye 0 düzeyindeki toplam düğüm sayısını verir. Algoritma 4 Insert(list, searchkey, newvalue, nodecount) local update[1..maxlevel]; temp := list header; for i := list level downto 1 do while temp next[i] key < searchkey do temp := temp next[i] end while update[i] := temp end for temp := temp next[1]; if temp key = searchkey then temp value := newvalue else newlevel := randomlevel(nodecount); if newlevel > list level then update[i] := list header list level := newlevel end if; 34

35 temp:=makenode(newlevel,searchkey,newvalue); for i := 1 to newlevel do temp next[i] := update[i] next[i]; update[i] next[i] := temp end for nodecount:=nodecount+1; end if-else return nodecount 2.5. Düğüm Silme Skip list veri yapısından bir düğümü silmek için önce arama algoritması kullanılarak silinecek düğüm bulunmalıdır. Düğüm bulunduktan sonra bulunduğu tüm seviyelerden silinir. İşaretçiler(pointer) güncellenir. PUGH un Delete algoritmasını skip list yapısındaki düğüm sayısını güncel tutacak şekilde düzenlemek gerekmektedir. Yani skip list yapısından düğüm silerken her düğüm silme işleminden sonra nodecount değeri 1 azaltılmalıdır. Bu sayede skip listteki toplam düğüm sayısı güncel tutulmaktadır. PUGH un Delete algoritması bunlar dikkate alınarak yeniden düzenlenmiştir(algoritma 5). Algoritma 5 Delete(list, searchkey, nodecount) local update[1..maxlevel]; temp:= list header; for i := list level downto 1 do while temp next[i] key < searchkey do temp := temp next[i] end while; update[i] := temp end for; temp := temp next[1]; if temp key = searchkey then for i := 1 to list level do if update[i] next[i] temp then break end if; update[i] next[i] := temp next[i] end for; free(temp); while list level > 1 and list header next[list level] = NIL do list level := list level 1 end while nodecount:=nodecount-1; end if; return nodecount 35

36 3. Tartışma ve Sonuç Skip list veri yapısı, bağlı liste veri yapısındaki arama, ekleme, silme işlemlerinin O(N) olan zaman karmaşıklığını O(lg N) zaman karmaşıklığına indirmektedir. Bundan dolayı üzerinde durulması, çalışılması ve araştırılması gereken bir veri yapısıdır. Skip List veri yapısı PUGH tarafından ortaya atılan ve bağlı listelerin kullanıldığı, arama işleminde çok hızlı bir veri yapısıdır. Buna karşılık düğüm ekleme, seviye oluşturma, silme işlemlerinde daha önce geliştirilen algoritmalarda bazı problemler vardır. Skip list veri yapısından iyi sonuçlar elde etmek için bu algoritmaların iyileştirilmesi gerekmektedir. Bizim çalışmamızda öncelikle PUGH un Insert ve Delete algoritmalarında iyileştirme yapılmıştır. Böylece skip list veri yapısındaki toplam düğüm sayısı(nodecount) bilinir hale gelmiştir. Yine bu çalışmamızda, skip list veri yapısında tutarsız seviye üretme sorununa çözüm bulunmuştur. Bu sorun, skip list veri yapısındaki toplam düğüm sayısından level=log 2 (nodecount) formülü ile ideal seviye üretilerek çözülmüştür. Böylece skip list oluşturulurken veya düğüm eklenirken çok yüksek seviyelerin oluşturulması sorunu ortadan kalkmıştır. Bizim yaklaşımımızla Skip list veri yapısındaki seviyeler ideal hale gelmiştir. Kaynaklar [1] Pugh W, Skip Lists: A Probabilistic Alternative to Balanced Trees, Communications of the ACM. 10;33(6);668 676 [2] Pugh W, A Skip List Cookbook, Dept. of Computer Science, University of Maryland, College Park, 18, UMIACS TR 8 72.1 [3] Pugh W, Concurrent Maintenance of Skip Lists, Dept. of Computer Science, University of Maryland, College Park, 18, TR 2222 [4] Aybars U, Data Structures Lecture Notes, Department of Computer Engineering, Ege University, 2005. [5] Wikipedia, the free encyclopedia, http://en.wikipedia.org/wiki/linked_list#linear_and_circular_lists. 2012 [6] Herlihy M, Lev Y, Luchangco V, Shavit N, A Simple Optimistic Skiplist Algorithm, SIROCCO 2007;124-138 [7] Colvin R, Groves L, Luchangco V, and Moir M, Formal verification of a lazy concurrent list-based set. In Proceedings of Computer-Aided Verification (Aug. 2006) [8] Vyukov D., Concurrent Skip List, July 12, 2010 [] Kirschenhofer P, Martinez C, Prodinger H, Analysis of an optimized search algorithm for skip lists, Theoretical Computer Science 15;144;1-220 [10] Devroye L, A limit theory for random skip lists, Annals of Applied Probability, 12;2(3);57 60. [11] Kirschenhofer P, Prodinger H, The path length of random skip lists, Acta Informatica, 31 14;8;775 72 [12] Papadakis T, Skip lists and probabilistic analysis of algorithms, Ph.D. Thesis, University of Waterloo, 13; Tech. Report CS-3-28. [13] Papadakis T, Munro J.I, Poblete P.V, Average search and update costs in skip lists, BIT 12; 32;316 332. [14] Poblete P.V, Munro J.I, Papadakis T, The binomial transform and the analysis of skip lists, Theoretical Computer Science 2006;352;1 158 36