হ্যাশ টেবিল একটি ডেটা স্ট্রাকচার যা ডেটাকে একটি অ্যাসোসিয়েটিভ манনারে সংরক্ষণ করে। একটি হ্যাশ টেবিলে, ডেটা একটি অ্যারে ফরম্যাটে সংরক্ষিত হয়, যেখানে প্রতিটি ডেটা ভ্যালুর নিজস্ব অনন্য সূচক মান থাকে। যদি আমরা কাঙ্ক্ষিত ডেটার সূচক জানি, তবে ডেটা অ্যাক্সেস খুব দ্রুত হয়।
অতএব, এটি একটি ডেটা স্ট্রাকচার যেখানে ডেটার আকার নির্বিশেষে ইনসারশন এবং সার্চ অপারেশন খুব দ্রুত হয়। হ্যাশ টেবিল স্টোরেজ মিডিয়াম হিসেবে একটি অ্যারে ব্যবহার করে এবং হ্যাশ টেকনিক ব্যবহার করে একটি সূচক তৈরি করে যেখানে একটি উপাদান ইনসার্ট করা হবে বা যেখানে থেকে সেটি Lage করা হবে।
হ্যাশিং
হ্যাশিং হলো কি ভ্যালুর একটি রেঞ্জকে একটি অ্যারের সূচকের রেঞ্জে রূপান্তর করার একটি টেকনিক। আমরা মডুলো অপারেটর ব্যবহার করে কি ভ্যালুর একটি রেঞ্জ পেতে যাচ্ছি। ২০ আকারের একটি হ্যাশ টেবিল বিবেচনা করুন, এবং নিচের আইটেমগুলো সংরক্ষণ করা হবে। আইটেমটি (কি, ভ্যালু) ফরম্যাটে।

এখানে একটি হ্যাশ ফাংশন আছে যা কি নেয় এবং একটি টেবিলের জন্য সূচক তৈরি করে। এই সূচকগুলো আমাদের জানায় ভ্যালুটি কোথায় সংরক্ষিত। এখন যেকোনো সময় আমরা একটি কির সাথে জড়িত ভ্যালু খুঁজতে চাইলে, আমাদের শুধু কির ওপর আবার হ্যাশ ফাংশন চালাতে হবে এবং প্রায় কনস্ট্যান্ট টাইমে ভ্যালু পাওয়া যাবে।
হ্যাশ ফাংশন ডিজাইন করা কঠিন। একটি উদাহরণ নিই:
মান লইয়া যাক আমাদের নিচের হ্যাশ ফাংশন আছে:
উদাহরণ
function modBy11(key) {
return key % 11;
}
এবং আমরা এই ফাংশনটি সেই কি-ভ্যালু পেয়ারগুলোর ওপর চালিয়ে যাচ্ছি जिन्हें আমরা সংরক্ষণ করতে চাই, উদাহরণস্বরূপ:
- (15, 20) - হ্যাশ কোড: ৪
- (25, 39) - হ্যাশ কোড: ৩
- (8, 55) - হ্যাশ কোড: ৮
- (26, 84) - হ্যাশ কোড: ৪
এখানে আমরা দেখতে পাচ্ছি একটি কলিশন আছে, অর্থাৎ, যদি আমরা ১৫ আগে সংরক্ষণ করি এবং তারপর এই হ্যাশ ফাংশন দিয়ে কি ২৬ সাথে মুখোমুখি হই, তবে এটি একই স্লটে এই এন্ট্রি ফিক্স করার চেষ্টা করবে। এটাকে কলিশন বলা হয়। এবং এই পরিস্থিতি হ্যান্ডেল করার জন্য, আমাদের একটি কলিশন হ্যান্ডলিং মেকানিজম ডিফাইন করতে হবে। কিছু সুপরিচিত সহজ কলিশন রেজোলিউশন অ্যালগরিদম রয়েছে। উদাহরণস্বরূপ:
- লিনিয়ার প্রোবিং: এই অ্যালগরিদমে, আমরা অ্যারেতে পরবর্তী খালি লোকেশন খুঁজতে পারি পরবর্তী সেলে তাকিয়ে যতক্ষণ না একটি খালি সেল পাই। আমাদের উদাহরণে, যেহেতু ৪ নম্বর হোল নেওয়া হয়েছে, আমরা এটিকে ৫ নম্বরে ফিল করতে পারি।
- সেপারেট চেইনিং: এই বাস্তবায়নে: আমরা হ্যাশ টেবিলের প্রতিটি লোকেশনকে একটি লিস্টের সাথে অ্যাসোসিয়েট করি। যেকোনো সময় কলিশন হলে, আমরা কি-ভ্যালু পেয়ারটিকে এই লিস্টের শেষে অ্যাপেন্ড করি। যদি চেইনগুলো বড় হয়ে যায় তবে এর ফলে অনেক বেশি সার্চ টাইম হতে পারে।
এখন যেহেতু আমরা বুঝতে পেরেছি হ্যাশ টেবিল কীভাবে কাজ করে এবং কলিশন রেজোলিউশন কীভাবে ব্যবহার করা যায়, আসুন HashTable ক্লাস বাস্তবায়ন করি।
আমরা যে মেথডগুলো বাস্তবায়ন করব
আমাদের বাস্তবায়নে এই মেথডগুলো থাকবে:
put(key, value): হ্যাশ টেবিলে একটি নতুন কি-ভ্যালু পেয়ার যোগ করেget(key): একটি কির সাথে জড়িত ভ্যালু পায়remove(key): টেবিল থেকে কি-ভ্যালু পেয়ার সরায়forEach(): সব কি-ভ্যালু পেয়ারের ওপর ইটারেট করতে দেয়static join(): ২টি হ্যাশ টেবিলকে একটি নতুনতে জয়েন করার একটি স্ট্যাটিক মেথড