160 likes | 337 Views
In the Name of God. Lecture 17 Hashing: Algorithm, Collision, Packing (Sections 11.1 – 11.5). Hashing. منظور از Hashing چِيست؟ روش Hashing چگونه است؟ منظور از تلاق ي يا Collision چيست؟ روش هاي کم نمودن تلاقي کدامند؟ انتخاب يک Hash Function چگونه است؟
E N D
In the Name of God Lecture 17Hashing:Algorithm, Collision, Packing(Sections 11.1 – 11.5)
Hashing • منظور از Hashing چِيست؟ • روش Hashing چگونه است؟ • منظور از تلاقي يا Collision چيست؟ • روش هاي کم نمودن تلاقيکدامند؟ • انتخاب يک Hash Function چگونه است؟ • بهينه سازي يک Hash Function چگونه است؟ • روشهايrandomizationبرايکليدهاي عدديچگونهاست؟ • پيش بيني احتمال تلاقيچگونه است؟ • منظور از نسبت تراکم (Packing Density) چيست؟ • روش Progressive Overflow چيست؟
Hashing منظور از Hashing چِيست؟ • روشي براي ايجاد ايندکس ميباشد، • که براي يافتنهر کليد به بيش از يک دسترسي به ديسک (I/O)احتياج نخواهيم داشت. روش Hashingدر مقايسه با روش هاي ديگرچگونه است؟ • براي يافتن يک کليد در بين Nکليد: • روش جست و جوي سري==>تابع خطي مستقيم در رابطه با N==> O(N) • روش هاي B-Tree==>تابع لگاريتمي در رابطه با N==>O( logk(N) ) • روش هاي Hashing==>تابع ثابت==> (1)O
Key Address 1 A 2 B 3 4 C 5 D 6 E 7 F 8 9 G 10 Hashing روش Hashing چگونه است؟ • در اين روش تابعي به نام Hash Function تعريف مي شود، • که براي هرمقدارکليد يک آدرس مشخص در فضاي تعيين شده به ما ميدهد.
Record Address 0 key 1 K=LOWELL 2 3 4 LOWELL. . . Address = 4 5 6 LOWELL’s home address h(K) ... ... Hashing مثال :تابع h(k) را در نظر مي گيريم بطوريکه: • کليد kزيرمجموعه اي از مقادير بنام U و • فضايموجود براي 1000کليد رزرو شده باشد. در اينصورت ميتوان نوشت : h : U { 0,1..,999 } فرض کنيم h(k) به صورت زير تعريف شده باشد: h(k) = ( k[0] * k[1]) mod 1000 در اينصورت برای مقدار کليد k = LOWELL خواهيم داشت: h(LOWELL) = (76 * 79) mod 1000 = 4
ASCII Code for First Two Letters Home Address key k[0] * k[1] 66 X 65 = 4,290 290 BALL 66 65 76 X 79 = 6,004 76 79 LOCK 4 84 X 82 = 6,888 84 82 TREE 888 Hashing مثال (ادامه...) : h : U { 0,1..,999 } h(k) = ( k[0] * k[1]) mod 1000 به همين صورت برای مقادير کليد زير خواهيم داشت:
Hashingتلاقي کليدها در روش منظور از تلاقي يا Collision چيست؟ در روش Hashingمعمولا دو خاصيت زير موجود ميباشد: • هيچ رابطه مستقيمي بينمقادير کليدها و محل آنها در فايل وجود ندارد.(randomizing) • دو کليد مختلف ممکن است در يک آدرس قرار بگيرند. (تلاقي يا collision) مثال:مقادير کليد زير را در نظر ميگيريم: h ( LOWELL ) = h ( LOCK ) = h ( OLIVER ) = 4 • اين سه کليد که آدرس (homeaddress) آنها يکي ميباشد synonymsخوانده مي شوند. • در واقع جلوگيري از ايجاد synonym ها يا تلاقي (collision) بسيار دشوار مي باشد.
کم نمودن تلاقي کليدها روش هاي کم نمودن تلاقيکدامند؟ • انتخابيکhash function خوب براي بسط دادن کامل کليدها در فضاي تعريف شده. • انتخاب فضاي بزرگتر (براي پايين آوردن احتمال تلاقي). • امکان حفظ چند کليد در يک آدرس (buckets).
توليد کليد بکمکتابع Hash انتخاب يک Hash Function چگونه است؟ يکHash Functionساده که فقط تابع قسمتي از کليد نباشد: • کل طول کليد را تبديل به يک سري اعداد مي کنيم. • مثلا کد اسکي (Ascii) کاراکترهايآن. • اعداد به دست آمده را به چند دسته تقسيم کرده و با يکديگر جمع مي کنيم. • مثلا هر دو کاراکتر يک دسته را تشکيل مي دهند. • نتيجه به دست آمده را بر فضايتعيين شده تقسيم مي کنيم • که بهتر است يک عدد اول يا prime numberانتخاب شود و • باقيمانده آنرا به عنوان آدرس انتخاب کنيم.
Acceptable Best Worst Record Address Record Address Record Address 1 1 1 A A A 2 2 2 B B B 3 3 3 4 4 4 C C C 5 5 5 D D D 6 6 6 E E E 7 7 7 F F F 8 8 8 9 9 9 G G G 10 10 10 توليد کليد بکمکتابع Hash بهينه سازي يک Hash Function چگونه است؟ • با مطالعه ساختار کليد ميتوان: • يک الگويمناسب براي مراحل 1و 2 در روش قبل پيدا نمود، • که نتيجه آن بهتر از بسط دادن اتفاقي کليدها مي باشد. (Better-than-random) • در غير اين صورت مثلا براي کليدهاي عددي ميتوان از روش هايrandomizationديگري نيز استفاده کرد.
توليد کليد بکمکتابع Hash روشهايrandomizationبرايکليدهاي عدديچگونهاست؟ • روش اول: • کليد را به توان 2 رسانده و • دو يا چند رقم از وسط نتيجه آن را استخراج مي کنيم. مثال: • روشدوم (Radix Transformation): • کليد را در مبناي ديگري مثلا 11 محاسبه کرده • سپس بر بزرگترين آدرس موجود تقسيم مي کنيم و • باقيمانده آن را به عنوان آدرس انتخاب مي کنيم. مثال:
محاسبه احتمال تلاقي کليدها پيش بيني احتمال تلاقيچگونه است؟ • در صورتيکه توزيع کليدها کاملاrandom باشد، • بکمک تابعPoissonميتوان احتمالتلاقي آدرسها را پيش بيني کرد: x: تعداد کليدها در يکآدرس r: تعداد کليدهاي موجود N: تعداد ما کزيمم آدرس که اگر N و r را خيلي بزرگ بگيريم بطور تقريبي داريم:
محاسبه احتمال تلاقي کليدها پيش بيني احتمال تلاقيچگونه است؟ مثال: اگر N= 1000و r=1000 باشد، خواهيم داشت: 368 آدرس بدون کليد 368 آدرس با يک کليد 184 آدرس با دوکليد 61 آدرس با سهکليد
محاسبه احتمال تلاقي کليدها منظور از نسبت تراکم (Packing Density) چيست؟ • نسبتr به N را (يعني r/N) نسبت تراکم يا(Packing Density) مي گويند. • با پايينآوردن نسبت تراکم، احتمال تلاقي نيز کمتر ميشود. مثال:در مثال قبل اگر نسبت تراکم را کمتر کنيم مثلا r= 500و N= 1000 باشند خواهيم داشت: نسبت تراکم: 607آدرس بدون کليد 303آدرس بايک کليد 90آدرس با دو کليد يا بيشتر
0 1 .... .... Novak. . . Rosen. . . Jasper. . . Morely. . . York … 5 6 7 8 9 Key = York York’shome address (busy) 2nd try (busy) Address 3rd try (busy) = 6 4th try (open) York’sactual address Hash Routine .... .... راه حلي براي تلاقي کليدها روش Progressive Overflow چيست؟ • راه حلي براي مساله تلاقي کليدها ميباشد، • هرگاه آدرس مربوط به يککليد (Homeaddress) بوسيله کليد ديگري اشغال شده باشد، • اولين آدرس آزاد بعداز آن را براي قرار دادن کليد انتخاب ميکنيم. مثال (1) :شکل زير نحوه قرار دادن کليد York را با استفاده از روش فوق نشان ميدهد: (صفحه486 کتاب، شکل (11.4
Search length Home Address 0 1 2 Actual Address Blue… 1 1 2 2 5 20 21 21 22 20 20 21 22 23 24 25 ... Key .... .... Adams. . . Bates. . . Cole. . . Dean. . . Evans. . . = Blue Address = 99 97 98 99 .... ... .... ... Wrappingaround Hash Routine Jello... راه حلي براي تلاقي کليدها (صفحه487 کتاب، شکل (11.5 مثال (2) :شکل زير نحوه قرار دادن کليدBlueرا با استفاده از روش فوق نشان ميدهد: منظور از Searchlengthچيست؟ • تعداد I/O لازم براي يافتن يک کليد ميباشد. • بستگي به فاصله محل قرار گرفتن کليد از آدرس اصلي آن ( Homeaddress ) دارد. مثال (3) :به شکل مقابل توجه کنيد: (صفحه 488 کتاب شکل 11.6(