تالار گفتمان مانشت
درهم سازی مهندسی کامپیوتر ۹۴ - نسخه‌ی قابل چاپ

درهم سازی مهندسی کامپیوتر ۹۴ - Hopegod - 30 مهر ۱۳۹۵ ۰۷:۳۲ ب.ظ

آیا این جمله درست است؟چرا؟
در روش درهم سازی زنجیره ای اگر از تابع k mod m استفاده کنیم و k کلیدها باشد، برای اینکه هزینه ی جستجو در بدترین حالت کمتر شود بهترین مقدار m با توجه به کلید k عددی اول است که نزدیک k نباشد.

RE: درهم سازی مهندسی کامپیوتر ۹۴ - Pure Liveliness - 30 مهر ۱۳۹۵ ۱۰:۰۱ ب.ظ

سلام.
این جمله کاملا صحیح هست. چون اگه عددی انتخاب کنیم برای m که اول نباشه و فاکتور داشته باشه و اعداد ورودی مضرب اون فاکتور باشن اونوقت خیلی از خونه ها خالی میمونه و فقط چند تاشون پر میشه. اما اگه عدد اول باشه این مشکل پیش نمیاد.
مثال میزنم. فرض کنیم m رو بگیریم ۱۲. در این صورت باید با توجه به تابع hash که [tex]k\: \mod\: m\: [/tex] هست باقیمانده ی اعداد k رو بر m به دست بیاریم و توی خونه ی باقیمونده هَش کنیم.
بدترین حالت رو میخوایم به دست بیاریم.
اگه m رو مثلا ۱۲ فرض کنیم و اعداد ورودی مضرب ۳ باشن، اونوقت اعداد ۰، ۱۲، ۲۴، ۳۶، … میفتن توی خونه ی ۰، چون modشون به ۱۲ برابر با صفر هست.
به همین ترتیب اعداد ۳،۱۵، ۲۷، ۳۹، …. میفتن توی خونه ی ۳ چون modشون به ۱۲ برابر با ۳ هست.
اعداد ۶، ۱۸، ۳۳، ۴۲، … میفتن توی خونه ی ۶ چون modشون بر ۱۲ برابر با ۶ هست.
اعداد ۹، ۲۱، ۳۳، ۴۵، …. میفتن توی خونه ی ۹ چون modشون بر ۱۲ برابر با ۹ هست.
یعنی اگه مضرب ۳ باشن و modشون رو بر ۱۲ بگیریم توی ۴ تا خونه میفتن.
اگه اعداد مضرب ۶ باشن و modشون رو بر ۱۲ بگیریم یا میشه ۰ یا ۶ که توی دو خونه ی ۰ یا ۶ میفتن.
یعنی فاکتور های عدد m مشکل ساز میشن دیگه. اگه اعداد ورودی مضرب یکی از فاکتورهای m باشن فقط یه بخشی از خونه ها پر میشه و یه بخش زیادی خالی میمونه. مثلا اگه اعداد ورودی مضرب ۶ باشن فقط دو تا خونه پر میشه.
البته اگه اعداد رندوم باشن مشکلی پیش نمیاد و با احتمالی همه ی خونه ها یکنواخت پر میشن. ولی ما صحبت از بدترین حالت میکنیم.
پس هر چی فاکتور های عدد بیشتر باشه مشکل ساز میشه و همه ی خونه ها پر نمیشن، بلکه هر چند تا ورودی میرن توی یه خونه. (البته اگه رندوم باشه مشکلی نیست تقریبا)
اما اگه m یه عدد اول باشه در اون صورت فاکتور نداره و [tex]k\: \mod\: m\: [/tex] همه ی خونه ها رو در بر میگیره. مثلا اگه m=11 اونوقت اگه ورودی های مضرب ۳ بیان، مثلا ۳،۱۵،۲۷،۳۹ اونوقت هر کدوم یه جا میفتن. ۳۹ توی خونه ی ۶، ۲۷ توی خونه ی ۵، ۱۵ توی خونه ی ۴ و ۳ توی خونه ی ۳، در حالی که اگه m=12 بود همه ی این ۴ تا ورودی توی خونه ی ۳ میفتادن.
پس توی بدترین حالت ورودی بهتره m رو اول در نظر بگیریم که همه ی خونه ها رو در بر بگیره و مشکلات بالا پیش نیاد.

RE: درهم سازی مهندسی کامپیوتر ۹۴ - Hopegod - 01 آبان ۱۳۹۵ ۰۳:۱۳ ب.ظ

خیلی ممنونم عالی بود.