github |
---|
true |
بچهها، میشه یکی بهم توضیح بده که Hash Tables چیه؟ 🤔
البته کیان جان. Hash Table یه ساختار دادهست که برای ذخیرهسازی و بازیابی دادهها با سرعت بالا استفاده میشه. 🗂️🔗 Hash Table
بذار یه جور سادهتر بگم. فرض کن یه دفترچه تلفن داری که توش اسم و شماره تلفن آدمها رو مینویسی. حالا اگه بخوای شماره تلفن یه نفر رو پیدا کنی، باید همه دفترچه رو بگردی، درسته؟ ولی اگه از Hash Table استفاده کنی، میتونی خیلی سریع شماره رو پیدا کنی. 📒🔗
دقیقاً. در Hash Table، از یه تابع به نام Hash Function استفاده میکنیم که یه مقدار ورودی (مثل اسم) رو به یه عدد تبدیل میکنه. این عدد به عنوان کلید استفاده میشه و دادهها رو توی یه آرایه ذخیره میکنیم. مثلاً اگه اسم "علی" رو داشته باشیم، تابع Hash یه عدد مثل 5 تولید میکنه و ما شماره تلفن علی رو توی خونه 5 آرایه ذخیره میکنیم
یه مثال ساده بزنم. فرض کن داریم یه لیست از دانشجوها و نمراتشون. اگه بخوایم نمره یه دانشجو رو سریع پیدا کنیم، میتونیم از Hash Table استفاده کنیم. اسم دانشجو رو به عنوان کلید و نمره رو به عنوان مقدار ذخیره میکنیم. اینجوری هر وقت بخوایم نمره یه دانشجو رو پیدا کنیم، فقط کافیه کلید رو به تابع Hash بدیم و مستقیماً به مقدار دسترسی پیدا کنیم. 🎓🔗
آها، حالا فهمیدم. ولی اگه دو تا اسم مختلف همون کلید رو تولید کنن، چی میشه؟ 🤨
این یه مسئله به نام Collision هست. برای حل این مشکل، روشهای مختلفی وجود داره. یکی از رایجترین روشها، استفاده از Linked List هست. یعنی اگه دو تا کلید یه مقدار Hash یکسان تولید کنن، اونها رو به صورت یه لیست توی همون خونه آرایه ذخیره میکنیم.
یه روش دیگه هم Open Addressing هست. توی این روش، اگه یه خونه پر باشه، دنبال خونه بعدی خالی میگردیم تا داده رو ذخیره کنیم. این روشها کمک میکنن که Hash Table بهینهتر عمل کنه و سرعت دسترسی به دادهها بالا بمونه. 🔗 Open Addressing
مرسی بچهها، خیلی خوب توضیح دادید. حالا میفهمم چرا Hash Table اینقدر مفیده. 😊