DOSYA ORGANİZASYONU ÖZLEM AYDIN TRAKYA ÜNİVERSİTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ Sıralı erişimli dosya organizasyonu yöntemleri
Sunum planı Sıralı erişimli dosya organizasyonu yöntemleri Basit sıralı arama (Simple sequential search) İkili arama (Binary search) Ara değer arama (Interpolation search) Özel durumlar için sıralı arama (Self organizing sequential search) Öne taşıma (Move to front) Konum değiştir (Transpose) Sayaç (Count)
Sıralı erişimli dosyalar Sıralı erişimli dosya yapısında herhangi bir kayda ulaşmak istenildiğinde ilgili kayda ulaşılıncaya kadar kayıtlar üzerinde dolaşmak gerekir. Başarısız bir aramada dosyadaki tüm kayıtlara bakılması gerekir. İstenilen kayda erişme hızını arttıran arama yöntemleri bulunmaktadır.
Basit sıralı arama (Simple Sequential Search) Dosyadaki kayıtlar, ilk kayıttan başlanarak sırayla aranan kayıtla karşılaştırılır. Aranan kayda en iyi 1 adımda (retrieval probe), en kötü kayıt sayısı kadar adımda ulaşılır. Ortalama olarak düşünüldüğü zaman N tane kayıttan oluşan bir dosyada bir kayda ulaşmak için gerekli adım sayısı ortalama: Ortalama adım sayısı = her kayda erişmek için gerekli adım sayılarının toplamı/n
İkili arama (Binary Search) Kayıt sayısı fazla olduğunda, basit sıralı arama ile erişim işlem yükünü arttırmaktadır. Bu yüzden işlem yükünü azaltan ikili arama yöntemi tercih edilebilir. Bu yöntemde arama yapılacak kaydın anahtar değerleri sıralı olmalıdır. Aranan kayda ulaşabilmek için kayıtlar sürekli iki parçaya ayrılır ve uygun parçada kayıt aranır. Bu yöntemde n kayıtlı bir veri setinde en fazla [log 2 n] karşılaştırma yaparak istenen kayda erişmek mümkündür.
İkili arama algoritması { /* n adet kayıt için */ alt_sinir:=1; ust_sinir:=n; while (alt_sinir <= ust_sinir) { ortanca:=[(alt_sinir+ust_sinir)/2]; if (aranan_key= dizi[ortanca]) { printf( Başarılı Arama ); return;} else if (aranan_key>dizi[ortanca]) alt_sinir:=ortanca+1; else ust_sinir:=ortanca-1; } printf( Başarısız Arama ); }
Ara değer arama (Interpolation Search) Bu arama yöntemi İkili Arama algoritmasına benzemektedir. Verilerin sıralı olması gerekmektedir. Arama sırasında aşağıdaki formül ile orta nokta bulunur. Orta:=[alt_sinir+((aranan_anahtar dizi[alt_sinir]) /(dizi[ust_sinir]-dizi[alt_sinir]))*(ust_sinir alt_sinir)]
Ara değer arama algoritması public int interpolationsearch(int[] sortedarray, int tofind) { // Returns index of tofind in sortedarray, or -1 if not found int low = 0; int high = sortedarray.length - 1; int mid; while (sortedarray[low] <= tofind && sortedarray[high] >= tofind) { mid = low + ((tofind - sortedarray[low]) * (high - low)) / (sortedarray[high] - sortedarray[low]); //out of range is possible here // Repetition of the comparison code is forced by syntax limitations. high = mid - 1; else return mid; } if (sortedarray[low] == tofind) return low; else } return -1; // Not found if (sortedarray[mid] < tofind) low = mid + 1; else if (sortedarray[mid] > tofind)
Özel durumlar için sıralı arama (Self organizing sequential search) Dosyadaki kayıtlar içinde diğerlerine göre daha sık erişilen kayıtlar bulunuyorsa kullanılması avantaj sağlar. En sık kullanılan kayıtların dosyanın en başına taşınması yoluyla uygulanan bir yöntemdir. Örneğin; telefon numaralarının bulunduğu bir dosyada arama yapılırken bazı numaralara daha sık erişilmek istenebilir. Böyle bir durumda bu yöntem kullanılabilir. 3 farklı şekilde uygulanabilir. Öne taşıma (Move To Front) Konum değiştir (Transpose) Sayaç (Count)
Öne taşıma (Move to front) Aranan kayıt dosyanın ilk kaydından itibaren sırayla aranır ve bulunduğunda bu kayıt dosyanın ilk kaydı olarak kaydedilir. Aranan kaydın eski pozisyonuna kadar eski kayıtlar 1 pozisyon sonrasına kaydırılır. Aranan kayıt ilk kayıtsa herhangi bir değişiklik yapılmaz.
Konum değiştir (Transpose) Aranan kayıt dosyanın ilk kaydından itibaren sırayla aranır ve bulunduğunda bu kayıt, kendinden önceki ilk kayıtla yer değiştirir. Diğer kayıtlar aynı pozisyonlarında kalır. Aranan kayıt ilk kayıtsa herhangi bir değişiklik yapılmaz.
Sayaç (Count) Dosyadaki her kayıt için ayrıca kayda kaç kez erişildiği bilgisini tutan bir sayaç alanı bulunmaktadır. Kayıtlar dosyada en büyük sayaç değerli kayıttan itibaren bulunmaktadır. Aranan kayıt, dosyada ilk kayıttan itibaren sırayla aranır, bulunduktan sonra kaydın sayaç değeri bir arttırılır. Dosyadaki kayıtlar Yeni sayaç (count) değerine göre büyükten küçüğe sıralanır.