Hashing
হ্যাশিং কি?
- হ্যাশিং ফাংশন ইনপুট হিসাবে স্পেসিফিক ডাঁটা(ফর এক্সাম্পল স্ট্রিং) নেয় এবং নরমালি একটা ইন্টিজার রিটার্ন করে
- এই ইন্টিজার আউটপুটকে হ্যাশ নাম্বার বলে
- একটা ডাটার হ্যাশ নাম্বার সব সময় একই থাকে
- একাধিক ডাটার হ্যাশ নাম্বার একই রকম হতে পারে
- একটা ভালো হ্যাশ ফাংশন হলো যার হ্যাশ নাম্বার যত কম ডুপ্লিকেট হয়
মডিউলো বা মড(mod) কি?
- মড অপারেশন হচ্ছে একটা অপারেশন, যেখানে একটা নাম্বারকে অন্য একটা নাম্বার দিয়ে ভাগ দিলে ভাগশেষ বা রিমাইন্ডার বের করে দেয়
- প্রোগ্রামিং এ একে % সাইন দিয়ে প্রকাশ করা হয়
- যেমন ১৬, ১৭, ১৮ এই তিনটা সংখ্যাকে যদি 5 দিয়ে ভাগ দেই তাহলে তাদের ভাগশেষ যা থাকবে তাই ওই সংখ্যাগুলার এর মড। যেমন
- 16%5 = 1
- 17%5 = 2
- 18%5 = 3
হ্যাশিং এবং মড এর মধ্যে সম্পর্ক কি?
হ্যাশিং এবং মড এই দিয়ে চমৎকার সব কাজ করা যায়। ধরা যার আমাদের কিছু স্ট্রিং টাইপ ডাঁটা(ফর এক্সাম্পল নাম) আছে যাদেরকে পাঁচটা বাকেটে এমনভাবে ভাগ করে রাখতে হবে যেন, একই নামের সবাই এক্সাক্টলি সেম বাকেটে থাকে।
- প্রথমে নাম থেকে হ্যাশ নাম্বার বের করতে হবে
- তারপর হ্যাশ নাম্বারকে ৫ দিয়ে মড করলেই বাকেট এর নাম্বার পেয়ে যাব। ফর এক্সাম্পল
- hashFunction("abul") -> 10, বাকেট এর ইনডেক্স = 10%5 = 0
- hashFunction("babul") -> 11, বাকেট এর ইনডেক্স = 11%5 = 1
- hashFunction("kabul") -> 12, বাকেট এর ইনডেক্স = 12%5 = 2
- hashFunction("habul") -> 13, বাকেট এর ইনডেক্স = 13%5 = 3
- hashFunction("dabul") -> 14, বাকেট এর ইনডেক্স = 14%5 = 4
- এই দুটা জিনিষ মিলে একটা টুলের মত কাজ করে এবং কপিউটার সিস্টেমের অনেক জায়গায় এই টুলকে কাজে লাগিয়ে অনেক প্রবলেম এর সমাধান করা হয়। যেমন লোড ব্যালান্সিং এর সময় একই ক্লায়েন্টকে সবসময় একটা স্পেসিফিক সার্ভারে পাঠানো।
প্লেইন হ্যাশিং এবং মড এর সমস্যা
যখন বাকেট এর সংখ্যা কম বা বেশি করা হবে, তখন আগের সব কিছুক ফেলে দিয়ে আবার নতুন থেকে শুরু করতে হবে। ফর এক্সাম্পল যদি বাকেট সংখ্যা 4 হয়ে যায়
- hashFunction("abul") -> 10, বাকেট এর ইনডেক্স = 10%4 = 2
- hashFunction("babul") -> 11, বাকেট এর ইনডেক্স = 11%4 = 3
- hashFunction("kabul") -> 12, বাকেট এর ইনডেক্স = 12%4 = 0
- hashFunction("habul") -> 13, বাকেট এর ইনডেক্স = 13%4 = 1
এই সমস্যাকে সমাধান করার জন্য উন্নত হ্যাশিং ফাংশন রয়েছে। যেমন
- কন্সিস্টেন্ট হ্যাশিং
- রণ্ডেভু(Rendezvous, উচ্চারণ rɒndɪvuː) হ্যাশিং