PDA

View Full Version : سوال: تابع هش(Hash Function) بهینه برای هش کردن کلمه



mmdsharifi
جمعه 23 خرداد 1393, 11:57 صبح
سلام
من تازه با هش آشنا شدم و باید برای یک پروژه ساختمان داده که ساخت BST با فایل تکست هست،بایستی خط به خط فایل رو بخونم و (کلمه انگلیسی و معنی فارسی) و کلمه ها شو هش کنم و با hash_value که بهم می ده BinarySearchTree رو بسازم.

public int Hash(string word)
{
if (word != null)
{




int h = 1;
for (int i = word.Length -1; i>=0 ; i--)
{
h += (((word[i]) % 97) + 1) * (word.Length - i);
}
return h;
}
return 0;
}


این تابع هش خودمه.اولین مشکلی که به نظر می رسه اینکه واسه حالتهای مختلف یک کلمه مثل ali اعداد متفاوتی رو می ده.


ail,34
ali,37
lai,48
lia,56

ایا این احتمال وجود داره،که با وجود این همه تدابیر! باز هم برای دو کلمه متفاوت یک هش یکسان بما بده؟
شما چه هش فانکشن رو پیشنهاد می دید؟

مسعود اقدسی فام
جمعه 06 تیر 1393, 11:07 صبح
این که واسه حالتای مختلف هش متفاوتی می‌ده مشکل نیست. خاصیت هش همین هست که باید با کوچکترین تغییر خروجی متفاوتی تولید بکنه. جابجا شدن تغییر بزرگی حساب می‌شه.
زمانی که قصد دارید رشته‌هایی به طول مثلا هزار (یعنی هزار کاراکتر نوشتاری که هر کاراکتر می‌تونه بیشتر از شصت مقدار الفبا یا عدد داشته باشه) رو به عددی بین یک تا هزار (که خیلی کوچکتر از فضای خود رشته‌هاست) هش کنید، طبیعتا ممکنه هش یکسان تولید بشه. این مساله غیر قابل اجتناب هست. اما یه هش موفق هشی هست که اینقدر پیچیده و درهم کننده باشه که نشه به راحتی دو رشته رو پیدا کرد که به یه عبارت هش بشن.