15.06.2015 Views

anahtar - Trakya Üniversitesi

anahtar - Trakya Üniversitesi

anahtar - Trakya Üniversitesi

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

DOSYA ORGANİZASYONU<br />

ÖZLEM AYDIN<br />

TRAKYA ÜNİVERSİTESİ<br />

BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ<br />

Doğrudan erişimli dosya organizasyonu


Sunum planı<br />

Doğrudan erişimli dosyalar<br />

Anahtar değerin tek adres olması durumu<br />

Anahtar değerin tek adrese dönüştürülmesi<br />

durumu<br />

Hash fonksiyonları


Doğrudan erişimli dosyalar<br />

Kayıtlara doğrudan erişim imkanı sağlayan<br />

dosyalardır.<br />

Doğrudan erişimli dosyalarda, bir kayda<br />

erişebilmek için o kaydın dosyada depolandığı<br />

yerin adresinin belirlenmesi gereklidir.<br />

Bu tür dosyalarda disk sahasının tam anlamıyla<br />

kullanılabilmesi sağlanmakta ve değerlendirme<br />

zamanı oldukça kısalmaktadır.


Doğrudan erişimli dosyalar<br />

Doğrudan erişim dosyası düzenlenmesinde<br />

kullanılan doğrudan adresleme yöntemi, bir<br />

kaydın <strong>anahtar</strong>ına göre uygun disk adresinin<br />

belirlenmesi olarak tanımlanır.


Doğrudan erişimli dosyalar<br />

Dosyadaki kayda iki değişik yolla doğrudan<br />

erişebilir.<br />

1. Anahtar değerin tek adres olması durumu<br />

2. Anahtar değerin tek adrese çevrilmesi durumu


Anahtar değerin tek adres olması durumu<br />

Aranan kayda doğrudan tek bir adımla<br />

gerçekleşmesi durumudur. Bu durumun<br />

gerçekleşmesi için aranan kaydın <strong>anahtar</strong><br />

değerinin direk bir adres değerini göstermesi<br />

gerekir.<br />

Sakıncası, kullanılan alandan çok daha fazla yer<br />

ayrılması durumudur.


Anahtar değerin tek adres olması durumu-<br />

ÖRNEK<br />

Bir dosyada 1-100 arası koda sahip olan<br />

ürünlerin kayıtlarını saklayalım. Ürün kodu 35<br />

olan olan kayıt dosyada 35. pozisyonda olacaktır.<br />

Eğer ürün kodları, 1000-9999 arasında olsaydı<br />

ve yine 100 çeşit ürün olsaydı, bu durumda çok<br />

fazla miktarda kullanılmayan boş alan olacaktır.


Anahtar değerin tek adrese dönüştürülmesi<br />

durumu<br />

Anahtar değerini tek bir adrese dönüştürmenin<br />

standart bir yolu yoktur. Üzerinde çalışılan<br />

verinin durumuna göre yöntem değişmektedir.<br />

Bu dönüşümün yapılmasında kullanılan<br />

yöntemlerden bir tanesi Hashing Algoritması<br />

olarak tanımlanmaktadır.


Anahtar değerin tek adrese dönüştürülmesi<br />

durumu- ÖRNEK<br />

<br />

Bir havayolu şirketinin rezervasyon sisteminde rezervasyon<br />

bilgileri tutulmak istensin.<br />

Her gün 1-999 arası uçuş olsun.<br />

Yıl boyunca günler 1-366 ile numaralandırılır.<br />

Uçuş numarası ve gün ardarda eklenerek uçuşa ait adres<br />

bilgisi elde edilebilir.<br />

Tek adres = Uçuş Numarası || Gün Numarası ise<br />

Adres aralığı: 001001 (en küçük adres değeri) – 999366(en büyük adres değeri)<br />

Tek adres = Gün Numarası || Uçuş Numarası ise<br />

Adres aralığı: 001001 (en küçük adres değeri) – 366999(en büyük adres değeri)<br />

<br />

Bu tür değişikliklerle adres uzayı <strong>anahtar</strong> uzayını karşılayamıyorsa<br />

hashing algoritmaları kullanılır.


Hashing algoritması<br />

Hashing algoritmasının iki temel elemanı vardır:<br />

1. Hash fonksiyonu<br />

Kaydın <strong>anahtar</strong> bilgisinden adres bilgisine<br />

geçişi sağlayan dönüştürme işlemini yapan<br />

fonksiyondur.<br />

2. Collision-Resolution (Çarpışma-Çözümleme)<br />

yöntemi<br />

Hash fonksiyonunun farklı <strong>anahtar</strong><br />

değerlerinin aynı adres değerini üretmesi<br />

durumunun çözümünde kullanılan yöntemdir.


Hash fonksiyonu<br />

Daha geniş aralıktaki <strong>anahtar</strong>ları daha küçük<br />

alandaki adreslere dönüştürmek için hash<br />

fonksiyonu kullanılır.<br />

Hash (<strong>anahtar</strong>)<br />

Olası adres<br />

Hash fonksiyonundan dönen adres olası adrestir.<br />

Her <strong>anahtar</strong> değer için tek adres garantisi<br />

yoktur. Çünkü adres uzayı ile <strong>anahtar</strong> uzayı aynı<br />

değildir.


Hash fonksiyonu<br />

Bir hash fonksiyonunun farklı <strong>anahtar</strong> değerleri<br />

için aynı adres değerini üretmesi kaçınılmazdır.<br />

Böyle bir durumda çarpışma meydana gelir.<br />

Hash fonksiyonu sonucunda elde edilen adres<br />

değerleri aynı çıkması durumunda, çıkan kayıt<br />

çeşitli yöntemlerle elde edilen başka bir adrese<br />

yazılır.<br />

Bir hash fonksiyonunda bulunması gereken<br />

özelliklerden biri çarpışmaya az sebep olmasıdır.


Hash fonksiyonu<br />

Hash tablosu<br />

0<br />

1<br />

25025 Hande<br />

Kayıtlar<br />

2<br />

3<br />

19001 Nehir<br />

25025 Hande<br />

22200 Onur<br />

45002 Gökhan<br />

Hash<br />

fonksiyonu<br />

4<br />

5<br />

6<br />

7<br />

19001 Nehir<br />

45002 Gökhan<br />

8<br />

key<br />

9<br />

22200 Onur


Hash fonksiyonu<br />

Hash fonksiyonlarında bulunması gereken<br />

özellikler şunlardır:<br />

‣ Anahtarları adres aralığında düzgün dağıtmalıdır.<br />

‣ Hızlı bir şekilde çalışmalıdır.


Hash fonksiyonu<br />

Doğrudan erişimli dosyalarda kayıtlar, <strong>anahtar</strong><br />

değerlerin hash fonksiyonu ile dönüştürülmesi<br />

sonucu elde edilen adreslerde depolanır.<br />

Hash fonksiyonu nümerik <strong>anahtar</strong> değeri<br />

gerektirir.<br />

Anahtar değerin karakter olması durumunda<br />

ASCII kodları kullanılır.


Hash fonksiyonları<br />

Key Mod N<br />

Key Mod P<br />

Truncation<br />

Folding<br />

Squaring<br />

Radix conversion<br />

Alphabetic keys


Key Mod N<br />

En çok kullanılan hash fonksiyonlarından biridir.<br />

Boyutu n olan bir tabloda, bu fonksiyon bir x<br />

<strong>anahtar</strong>ını 0 ile n-1 arasında bir değer ile<br />

eşleştirir.<br />

h(x) = x mod n


Key Mod P<br />

Önceki hash fonksiyonunun değişikliğe uğramış<br />

halidir.<br />

Burada p n’den küçük veya eşit ilk asal sayıdır.<br />

f(key) = key Mod p


Truncation (Kesme)<br />

Anahtarın belirli kısmı alınır ve tablo değeri olarak<br />

belirlenir.<br />

Örneğin;<br />

8 rakamdan oluşan bir <strong>anahtar</strong> değeri, 1000 kayıtlık<br />

bir tabloya yerleştirmek istediğimizde <strong>anahtar</strong>ın 4.,<br />

7. ve 8. rakamlarını hash değeri olarak<br />

belirleyebiliriz.<br />

21296876 976


Truncation (Kesme)<br />

<br />

Bu fonksiyonun bir diğer adı da substring’dir. Arama yapılacak olan key<br />

değerinin anlamlı kısımları alınarak fonksiyon sonucu belirlenir.<br />

Örneğin; bir öğrenci numarası bilgisindeki haneler şu şekilde olsun :<br />

Öğrenci numarası : XXYYZZNNN<br />

XX: Öğrencinin okula giriş yılı,<br />

ZZ: Bolum kodu,<br />

YY: Fakülte kodu,<br />

NNN: öğrenci sırası<br />

<br />

Aynı bölümde okuyan öğrencilerin olduğu bir dosyada arama yapılacaksa<br />

önemli olan yıl bilgisi ile öğrenci sırasıdır. Fakülte kodu ve bölüm kodu<br />

gereksizdir. Yani fonksiyondan dönen değer:<br />

Hash(Key) := Hash(XXYYZZNNN) := XXNNN


Folding (Katlama)<br />

Anahtar belirli kısımlara bölünür ve elde edilen<br />

bu kısımlar üzerinde eldesiz toplama işlemi<br />

gerçekleştirilir.<br />

a. Sınırdan katlama<br />

1 2 3 4 5 6 7 8 9<br />

321<br />

456<br />

987<br />

+<br />

654<br />

Bulunan 654 değeri 123456789<br />

<strong>anahtar</strong> nolu kaydın tutulduğu adres<br />

olacaktır.


Folding (Katlama)<br />

b. Sınırdan keserek üst üste katlama<br />

Anahtarın kesilen bölümlerinden eldesiz<br />

toplama işlemi gerçekleştirilir.<br />

123<br />

456<br />

789<br />

+<br />

258<br />

1 2 3 4 5 6 7 8 9


Squaring (Karesini alma)<br />

Anahtar değerin karesi alınır ve sonucun orta<br />

kısmı seçilerek adres değeri olarak belirlenir.<br />

key=2315 olarak verilsin.<br />

(2315) 2 = 5359225<br />

hash(2315)=592


Radix conversion (Radix dönüşmesi)<br />

Anahtar değerinin 10 tabanından farklı bir sayı<br />

olduğu düşünülür ve tekrar 10 tabanına çevrilir.<br />

1234 = 1 * 11 3 + 2 * 11 2 + 3 * 11 1 + 4 * 11 0 =<br />

1331 + 242 + 33 + 4= 1610<br />

(1234) 11 =(1610) 10<br />

Ardından truncation kullanılabilir.


Alfanümerik <strong>anahtar</strong>lar (Alphabetic keys)<br />

Alfabetik karakter veya karakter grubunun<br />

nümerik karşılığı elde edilerek herhangi bir<br />

hash fonksiyonunun uygulanmasıdır.<br />

Örneğin key değerimiz “BC” olsun :<br />

Hash(Key):=Hash(BC):=Hash(66+67)=Hash(133)

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!