Click here to download (Persian)

Download Report

Transcript Click here to download (Persian)

In the Name of God
Lecture 20
Dynamic Hashing, Linear Hashing
(Section 12.5 – 12.6)
File Structure
Dr. M. Rahgozar
‫روش ‪ Hashing‬قابل توسعه‬
‫‪ ‬انواع روشهاي ديگر ‪ Hashing‬کدامند؟‬
‫(ادامه‪)...‬‬
‫‪ ‬روش ‪ Hashing‬با فضاي پويا (‪ )Dynamic‬چيست؟‬
‫‪ ‬روش ‪ Hashing‬با توسعه خطي (‪ )Linear‬چيست؟‬
‫‪ ‬روشهاي ‪ Hashing‬درمقايسه با يکديگر چگونه اند؟‬
‫‪ ‬در روشهاي ‪ Hashing‬امکان کنترل ‪ Splitting‬چگونه است؟‬
‫‪Dr. M. Rahgozar‬‬
‫‪20-2‬‬
‫‪File Structure‬‬
‫روش ‪ Hashing‬با فضاي پويا‬
‫‪ ‬روش ‪ Hashing‬با فضاي پويا (‪ )Dynamic‬چيست؟‬
‫‪ ‬روش ديگري از ‪ Hashing‬با فضاي متغير ميباشد که شباهتهاي زيادي با روش قبلي دارد‪:‬‬
‫‪ ‬هر دو روش از يک ‪ Directory‬براي نگهداري آدرس ‪Bucket‬ها استفاده ميکنند‪.‬‬
‫‪ ‬هر دو روش از ساختار ‪ Trie‬براي بسط دادن فضاي ‪ Directory‬استفاده مينمايند‪.‬‬
‫‪ ‬تفاوت عمده اين روش اينست که‪:‬‬
‫‪ ‬براي شروع کار مانند روشهاي کالسيک ‪ Hashing‬از يک تابع ‪ Hash‬براي آدرس دهي‬
‫در يک فضاي ثابت )‪ (Fixed Size‬استفاده مينمايد‪.‬‬
‫‪ ‬هنگاميکه دراثر افزايش تعداد کليدها نيازبه ‪ Splitting‬در ‪Bucket‬ها ميشود‪ ،‬درختواره‬
‫هايي با ساختار ‪ Trie‬که ريشه آنها در همان فضاي ثابت اوليه قرار دارد شروع به رشد‬
‫مينمايند‪.‬‬
‫‪Dr. M. Rahgozar‬‬
‫‪20-3‬‬
‫‪File Structure‬‬
‫روش ‪ Hashing‬با فضاي پويا‬
‫مثال‪:‬‬
‫‪‬‬
‫شکل زير نمونه اي از يک ساختاراوليه ‪ Hashing‬با فضاي پويا را نشان ميدهد‪.‬‬
‫‪ ‬در اين ساختار چهار ‪ Bucket‬به چهار آدرس موجود در فضاي ‪ Directory‬مرتبط‬
‫شده اند‪.‬‬
‫‪Original‬‬
‫‪address‬‬
‫‪space‬‬
‫‪4‬‬
‫‪2‬‬
‫‪3‬‬
‫‪1‬‬
‫)‪(a‬‬
‫(شکل ‪ 12.23‬صفحه ‪ 552‬کتاب)‬
‫‪Prof. Hyoung-Joo Kim, Comp Eng, Seoul National Univ.‬‬
‫‪Dr. M. Rahgozar‬‬
‫‪20-4‬‬
‫‪File Structure‬‬
‫روش ‪ Hashing‬با فضاي پويا‬
‫مثال‪( :‬ادامه‪)...‬‬
‫‪ ‬شکل زير نمونه اي از يک مرحله رشد در يک ساختار ‪ Hashing‬با فضاي پويا را نشان ميدهد‪.‬‬
‫‪ ‬در اين مرحله‪ Bucket ،‬مرتبط با آدرس ‪ 4‬به دو ‪ Bucket‬جديد تقسيم شده است‪.‬‬
‫‪ ‬اين نود به دو نود جديد ‪ 40‬و ‪ 41‬که فرزندان آن ميباشند مرتبط شده است‪.‬‬
‫‪ ‬نود ‪ 4‬يک نود ‪ Internal‬محسوب شده ودارای آدرس يک ‪ Bucket‬نخواهد بود‪.‬‬
‫‪ ‬دو نود جديد ‪ 40‬و ‪ 41‬نودهای ‪ External‬محسوب شده ودارای آدرس دو ‪ Bucket‬خواهند بود‪.‬‬
‫‪Original‬‬
‫‪address‬‬
‫‪space‬‬
‫‪4‬‬
‫‪41‬‬
‫‪2‬‬
‫‪3‬‬
‫‪1‬‬
‫‪40‬‬
‫)‪(b‬‬
‫(شکل ‪ 12.23‬صفحه ‪ 552‬کتاب)‬
‫‪Prof. Hyoung-Joo Kim, Comp Eng, Seoul National Univ.‬‬
‫‪Dr. M. Rahgozar‬‬
‫‪20-5‬‬
‫‪File Structure‬‬
‫روش ‪ Hashing‬با فضاي پويا‬
‫مثال‪( :‬ادامه‪)...‬‬
‫‪ ‬شکل زير نمونه اي از يک مرحله ديگر رشد در يک ساختار ‪ Hashing‬با فضاي پويا را‬
‫نشان ميدهد‪.‬‬
‫‪ ‬دراين مرحله اتفاقي مشابه با مرحله قبل در مورد آدرس ‪ 2‬و نيز آدرس ‪ 41‬رخ داده است‪.‬‬
‫‪ ‬نودهاي جديد ‪ 20‬و ‪ 21‬در رابطه با نود ‪ 2‬ايجاد شده اند‪.‬‬
‫‪ ‬همچنين‪ ،‬نودهاي ‪ 410‬و ‪ 411‬در رابطه با نود ‪ 41‬ايجاد شده اند‪.‬‬
‫‪Original‬‬
‫‪address‬‬
‫‪space‬‬
‫‪4‬‬
‫‪3‬‬
‫‪2‬‬
‫‪40‬‬
‫‪41‬‬
‫‪1‬‬
‫‪21‬‬
‫)‪(c‬‬
‫‪20‬‬
‫(شکل ‪ 12.23‬صفحه ‪ 552‬کتاب)‬
‫‪411‬‬
‫‪410‬‬
‫‪Prof. Hyoung-Joo Kim, Comp Eng, Seoul National Univ.‬‬
‫‪Dr. M. Rahgozar‬‬
‫‪20-6‬‬
‫‪File Structure‬‬
‫روش ‪ Hashing‬با فضاي پويا‬
‫اين روش در مقايسه با روش قبلي (‪ ) Extendible Hashing‬چگونه است؟‬
‫‪ ‬با وجود اينکه هر دو روش از ساختار ‪ Trie‬براي بسط دادن فضاي ‪ Hash‬استفاده مينمايند‪،‬‬
‫‪ ‬يک تفاوت مهم بين آنها اينست که در روش قبل ساختار ‪ Trie‬به يک ‪ Binary Tree‬کامل‬
‫و سپس به يک ‪ Array‬تبديل ميشود‪،‬‬
‫‪ ‬در صورتيکه دراين روش ساختار ‪ Trie‬بصورت درختواره يا ‪Linked Structure‬‬
‫استفاده ميگردد‪.‬‬
‫‪ ‬يک تفاوت اساسي نيز اينست که رشد فضاي ‪ Directory‬دراين روش آهسته تر و بتدريج‬
‫صورت ميپذيرد‪.‬‬
‫‪Original‬‬
‫‪address‬‬
‫‪space‬‬
‫‪4‬‬
‫‪40‬‬
‫‪41‬‬
‫‪411‬‬
‫‪3‬‬
‫‪1‬‬
‫‪2‬‬
‫‪21‬‬
‫)‪(c‬‬
‫‪A‬‬
‫‪20‬‬
‫‪01‬‬
‫‪410‬‬
‫‪B‬‬
‫‪C‬‬
‫‪Dr. M. Rahgozar‬‬
‫‪00‬‬
‫‪20-7‬‬
‫‪10‬‬
‫‪11‬‬
‫‪File Structure‬‬
‫روش ‪ Hashing‬با فضاي پويا‬
‫اين روش در مقايسه با روش قبلي چگونه است؟ (ادامه‪)...‬‬
‫‪ ‬از نظر تعداد دسترسي به ديسک‪ ،‬روش قبل اين مزيت را دارد که بيش از حداکثر دو‬
‫دسترسي به ديسک نميتواند داشته باشد‪.‬‬
‫‪ ‬درصورتيکه در اين روش تعداد دسترسي به ديسک ميتواند بيشتر نيز بشود‪ ،‬که به دليل‬
‫استفاده از ‪ Linked Structure‬در اين روش ميباشد‪.‬‬
‫‪ ‬درصورتيکه درروش قبل فضاي ‪ Directory‬در هرمرحله رشد دو برابر ميگردد‪.‬‬
‫‪ ‬البته در روش قبل اندازه هر نود ‪ Directory‬مي تواند نصف اندازه نودهاي‬
‫‪ Directory‬در اين روش باشد زيرا نياز به نگهداشتن ‪ Pointer‬در آنها نميباشد‪.‬‬
‫‪Original‬‬
‫‪address‬‬
‫‪space‬‬
‫‪4‬‬
‫‪40‬‬
‫‪41‬‬
‫‪411‬‬
‫‪3‬‬
‫‪1‬‬
‫‪2‬‬
‫‪21‬‬
‫)‪(c‬‬
‫‪A‬‬
‫‪20‬‬
‫‪01‬‬
‫‪410‬‬
‫‪B‬‬
‫‪C‬‬
‫‪Dr. M. Rahgozar‬‬
‫‪00‬‬
‫‪20-8‬‬
‫‪10‬‬
‫‪11‬‬
‫‪File Structure‬‬
‫روش ‪ Hashing‬با توسعه خطي‬
‫روش ‪ Hashing‬با توسعه خطي (‪ )Linear‬چيست؟‬
‫‪ ‬روش ديگري از ‪ Hashing‬با فضاي متغير است که با دو روش قبل کامال متفاوت ميباشد‪،‬‬
‫‪ ‬بجز در يک مورد که استفاده از بيتهاي ‪ Prefix‬براي تعيين ‪Bucket‬ها ميباشد‪.‬‬
‫‪ ‬در اين روش از ساختار ‪ Trie‬و يا يک ‪ Directory‬جهت آدرس دهي به ‪Bucket‬ها‬
‫استفاده نميشود‪.‬‬
‫‪ ‬فضاي رزرو شده بجاي ‪ Directory‬براي خود ‪Bucket‬ها استفاده ميگردد‪.‬‬
‫‪ ‬و بيتهاي ‪ Prefix‬کليد ‪ Hash‬مستقيما براي انتخاب ‪ Bucket‬مورد نظر در اين فضا‬
‫بکار ميرود‪.‬‬
‫‪Dr. M. Rahgozar‬‬
‫‪20-9‬‬
‫‪File Structure‬‬
‫روش ‪ Hashing‬با توسعه خطي‬
‫الگوريتم ‪ Hashing‬با توسعه خطي چگونه است؟‬
‫در اين الگوريتم‪ ،‬يک مکانيسم رشد تدريجي فضاي ‪ Hash‬بصورت زير تامين ميگردد‪:‬‬
‫‪ ‬هر گاه يک ‪ event‬که معموال سرريز شدن يکي از ‪Bucket‬ها ميباشد رخ دهد يک ‪Bucket‬‬
‫جديد به فضاي ‪ Hash‬اضافه ميگردد‪.‬‬
‫‪ ‬اين ‪ Bucket‬جديد لزومي ندارد که براي تعديل کليدها در ‪ Bucket‬سرريز شده استفاده گردد‪.‬‬
‫‪ ‬بلکه بصورت نوبتي براي تعديل کليدها در يکي از ‪Bucket‬ها که بوسيله اشاره گری موسوم به‬
‫”‪ “Next Bucket to Extend‬مشخص ميشود استفاده ميگردد‪.‬‬
‫‪ ‬براي تعديل کليدها بين ‪ Bucket‬بسط يافته و ‪ Bucket‬جديد يک بيت به تعداد بيتهاي ‪Prefix‬‬
‫اضافه ميگردد و کليدها بين دو ‪ Bucket‬توزيع ميشوند‪.‬‬
‫‪ ‬درصورتيکه ‪ Bucket‬سرريز همان ‪ Bucket‬بسط يافته نباشد‪ ،‬بايستي يک ‪ Bucket‬جديد‬
‫ديگر نيز به ‪ Bucket‬سرريز شده متصل گردد تا کليدهاي اضافي در آن قرار گيرند‪.‬‬
‫‪Dr. M. Rahgozar‬‬
‫‪20-10‬‬
‫‪File Structure‬‬
‫روش ‪ Hashing‬با توسعه خطي‬
‫مثال‪:‬‬
‫‪ ‬شکل زير نمونه اي از يک ساختاراوليه ‪ Hashing‬با توسعه خطي را نشان ميدهد‪.‬‬
‫‪ ‬در اين شکل‪ ،‬چهار ‪ Bucket‬براي قرار دادن کليدها رزرو شده اند‪.‬‬
‫‪ ‬با استفاده از دو بيت اول کليد ‪ Hash‬يکي از چهار ‪ Bucket‬انتخاب ميشود‪.‬‬
‫‪d‬‬
‫‪c‬‬
‫‪b‬‬
‫‪a‬‬
‫‪11‬‬
‫‪10‬‬
‫‪01‬‬
‫‪00‬‬
‫(شکل ‪ 12.24‬در صفحه ‪ 554‬کتاب)‬
‫)‪(a‬‬
‫‪Prof. Hyoung-Joo Kim, Comp Eng, Seoul National Univ.‬‬
‫‪Dr. M. Rahgozar‬‬
‫‪20-11‬‬
‫‪File Structure‬‬
‫روش ‪ Hashing‬با توسعه خطي‬
‫مثال (ادامه‪:)...‬‬
‫‪ ‬شکل زير نمونه اي از يک مرحله رشد در يک ساختار ‪ Hashing‬با توسعه خطي را نشان‬
‫ميدهد‪.‬‬
‫‪ ‬در اين مرحله ‪ Bucket‬دوم يعني ’‪ ‘b‬سرريز شده است‪.‬‬
‫‪ ‬ولي اشاره گر ”‪ “Next Bucket to Extend‬به ‪ Bucket‬اول يعني ’‪ ‘a‬اشاره مينمايد‪.‬‬
‫‪ ‬بنابراين فضاي جديد ’‪ ‘A‬براي تعديل کليدها در ’‪ ‘a‬استفاده ميشود‪.‬‬
‫‪ ‬و يک ‪ Bucket‬ديگر نيز ’‪ ‘W‬براي قرار دادن کليدهاي سرريز شده از ’‪ ‘b‬به آن متصل‬
‫ميگردد‪.‬‬
‫‪w‬‬
‫‪A‬‬
‫‪d‬‬
‫‪c‬‬
‫‪b‬‬
‫‪a‬‬
‫‪100‬‬
‫‪11‬‬
‫‪10‬‬
‫‪01‬‬
‫‪000‬‬
‫(شکل ‪ 12.24‬در صفحه ‪ 554‬کتاب)‬
‫)‪(b‬‬
‫‪Dr. M. Rahgozar‬‬
‫‪Prof. Hyoung-Joo Kim, Comp Eng, Seoul National Univ.‬‬
‫‪20-12‬‬
‫‪File Structure‬‬
‫روش ‪ Hashing‬با توسعه خطي‬
‫‪(c):‬‬
‫‪x‬‬
‫مثال (ادامه‪:)...‬‬
‫‪ ‬شکلهاي )‪ (d) ،(c‬و )‪ (e‬نمونه هاي‬
‫ديگري از مراحل رشد تدريجي فضاي‬
‫‪ Hash‬را نشان ميدهند‪.‬‬
‫‪B‬‬
‫‪101‬‬
‫‪A‬‬
‫‪d‬‬
‫‪100‬‬
‫‪11‬‬
‫‪ ‬روند ذکرشده درمرحله (‪ )b‬در اين‬
‫مراحل نيز بطور مشابه ادامه مييابد‪.‬‬
‫‪c‬‬
‫‪10‬‬
‫‪b‬‬
‫‪a‬‬
‫‪01‬‬
‫‪00‬‬
‫‪y‬‬
‫‪(d):‬‬
‫‪x‬‬
‫)‪:(e‬‬
‫‪x‬‬
‫‪C‬‬
‫‪B‬‬
‫‪A‬‬
‫‪110‬‬
‫‪101‬‬
‫‪100‬‬
‫‪D‬‬
‫‪C‬‬
‫‪B‬‬
‫‪A‬‬
‫‪d‬‬
‫‪c‬‬
‫‪b‬‬
‫‪a‬‬
‫‪111‬‬
‫‪110‬‬
‫‪101‬‬
‫‪100‬‬
‫‪11‬‬
‫‪10‬‬
‫‪01‬‬
‫‪00‬‬
‫‪Dr. M. Rahgozar‬‬
‫‪Prof. Hyoung-Joo Kim, Comp Eng, Seoul National Univ.‬‬
‫‪20-13‬‬
‫‪d‬‬
‫‪11‬‬
‫‪c‬‬
‫‪b‬‬
‫‪a‬‬
‫‪10‬‬
‫‪01‬‬
‫‪00‬‬
‫(شکل ‪ 12.24‬در صفحه ‪ 554‬کتاب)‬
‫‪File Structure‬‬
‫روش ‪ Hashing‬با توسعه خطي‬
‫اين روش در مقايسه با دو روش قبلي‬
‫چگونه است؟‬
‫‪00‬‬
‫‪A‬‬
‫‪01‬‬
‫‪10‬‬
‫‪B‬‬
‫‪ ‬در اين روش به دليل حذف ‪ Directory‬فقط‬
‫يک دسترسي به ديسک براي خواندن‬
‫‪ Bucket‬مورد نظر کافي ميباشد‪.‬‬
‫‪11‬‬
‫‪C‬‬
‫‪Original‬‬
‫‪address‬‬
‫‪space‬‬
‫‪3‬‬
‫‪4‬‬
‫‪411‬‬
‫‪2‬‬
‫‪40‬‬
‫‪41‬‬
‫‪1‬‬
‫‪21‬‬
‫‪20‬‬
‫‪410‬‬
‫‪ ‬رشد فضاي ‪ Hash‬آهسته تر و بسيار کمتر از‬
‫روش ‪ Extendible Hashing‬ميباشد‪.‬‬
‫‪y‬‬
‫‪ ‬بدليل رشد تدريجي و دائم فضاي ‪ Hash‬تعداد‬
‫‪Bucket‬هاي سرريز شده نسبتا پايين بوده و‬
‫تعداد متوسط ‪ I/O‬براي يافتن يک کليد‬
‫نزديک به يک ميماند و از روش ‪Dynamic‬‬
‫‪ Hashing‬بهتر است‪.‬‬
‫‪Dr. M. Rahgozar‬‬
‫‪20-14‬‬
‫‪x‬‬
‫‪C‬‬
‫‪B‬‬
‫‪A‬‬
‫‪d‬‬
‫‪c‬‬
‫‪b‬‬
‫‪a‬‬
‫‪110‬‬
‫‪101‬‬
‫‪100‬‬
‫‪11‬‬
‫‪10‬‬
‫‪01‬‬
‫‪00‬‬
‫‪File Structure‬‬
‫روشهاي کنترل ‪Splitting‬‬
‫در روشهاي ‪ Hashing‬امکان کنترل ‪ Splitting‬چگونه است؟‬
‫‪ ‬همانطور که در ساختارهاي ‪ B-Tree‬از روش ‪ redistribution‬براي به تاخير‬
‫انداختن اعمال حذف و اضافه نودها استفاده مي شد‪،‬‬
‫‪ ‬اينجا نيز با استفاده از ‪Bucket‬هاي ‪ Overflow‬مثال در روش ‪Extendible‬‬
‫‪( Hashing‬مانند روش ‪ )Linear Hashing‬ميتوان از رشد ناگهاني فضاي ‪Hash‬‬
‫اجتناب نمود‪.‬‬
‫‪ ‬در اينصورت تصميم گيري در مورد زمان زياد نمودن فضاي ‪ Hash‬ميتواند بر حسب‬
‫پارامترهايي مانند درصد تراکم کليدها در فضاي رزرو شده (مثال ‪ %75‬يا ‪ )%85‬يا‬
‫تعداد متوسط ‪ I/O‬براي يافتن کليد (مثال ‪ )2‬باشد‪.‬‬
‫‪Dr. M. Rahgozar‬‬
‫‪20-15‬‬
‫‪File Structure‬‬