anahtar - Trakya Ãniversitesi
anahtar - Trakya Ãniversitesi
anahtar - Trakya Ãniversitesi
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)