Hash Tables (বা Hash Maps) হলো একটি ডাটা স্ট্রাকচার যা ডাটা সংরক্ষণ এবং অ্যাক্সেস করার জন্য একটি খুব কার্যকরী এবং দ্রুত পদ্ধতি। এটি কীগুলির মাধ্যমে মান (values) সংরক্ষণ করে, এবং দ্রুত নির্দিষ্ট কীগুলির জন্য মান পাওয়ার সুবিধা দেয়। LISP-এ, Hash Tables ব্যবহৃত হয় এমন ডাটা স্টোর করার জন্য যেখানে দ্রুত অনুসন্ধান এবং অ্যাক্সেস প্রয়োজন হয়। Hash Tables-এর মূল ধারণা হলো কীগুলির সাহায্যে মান সংরক্ষণ এবং অ্যাক্সেস করা।
Hash Table কী?
Hash Table হলো একটি ডাটা স্ট্রাকচার যা একটি নির্দিষ্ট কীগুলির (keys) জন্য মান (values) সংরক্ষণ করে। যখন আপনি একটি কীগুলির মাধ্যমে মান অ্যাক্সেস করতে চান, তখন হ্যাশ ফাংশন ব্যবহার করে সেই কীগুলি হ্যাশ করা হয় এবং দ্রুত সংশ্লিষ্ট মান পাওয়া যায়। Hash Table-এ একসাথে বিভিন্ন কীগুলির মান রাখা যায় এবং দ্রুত মান পাওয়া যায় (যতটা দ্রুত কীগুলি হ্যাশ করা যায়)।
LISP-এ Hash Table এর ধারণা
LISP-এ Hash Table একটি বিশেষ ডাটা স্ট্রাকচার যা make-hash-table, gethash, setf, এবং remhash ফাংশন ব্যবহার করে তৈরি এবং পরিচালিত হয়। Hash Table সাধারণত কী এবং মান (key-value pairs) এর মধ্যে সম্পর্ক তৈরি করে এবং key এর মাধ্যমে value অ্যাক্সেস করা যায়।
LISP-এ Hash Table তৈরি এবং ব্যবহার
১. Hash Table তৈরি (make-hash-table)
make-hash-table ফাংশন ব্যবহার করে নতুন একটি hash table তৈরি করা হয়।
সিনট্যাক্স:
(make-hash-table :test 'equal):test: কীগুলির তুলনা করার জন্য ব্যবহৃত ফাংশন। সাধারণত,'equalবা'eqlব্যবহার করা হয়।
উদাহরণ:
(setq my-hash (make-hash-table :test 'equal))এখানে, my-hash নামক একটি নতুন hash table তৈরি হয়েছে, যেখানে কীগুলির তুলনা করার জন্য equal ব্যবহার করা হয়েছে (এটি সাধারণভাবে strings এবং অন্যান্য ডেটা টাইপের জন্য ব্যবহার করা হয়)।
২. মান অ্যাসাইন করা (setf, setf with gethash)
setf ফাংশন ব্যবহার করে hash table-এ একটি কী এর জন্য মান সেট করা হয়। এছাড়া, gethash ফাংশন ব্যবহার করে hash table থেকে কোনো মান বের করা যায়।
সিনট্যাক্স:
(setf (gethash key hash-table) value)উদাহরণ:
(setf (gethash "name" my-hash) "John Doe")
(setf (gethash "age" my-hash) 30)এখানে, my-hash hash table-এ "name" এবং "age" কীগুলোর জন্য মান "John Doe" এবং 30 সেট করা হয়েছে।
৩. Hash Table থেকে মান পড়া (gethash)
gethash ফাংশন ব্যবহার করে hash table থেকে মান পাওয়া যায়। এটি একটি কীগুলির জন্য মান ফেরত দেয়।
সিনট্যাক্স:
(gethash key hash-table)উদাহরণ:
(gethash "name" my-hash) ; আউটপুট: "John Doe"
(gethash "age" my-hash) ; আউটপুট: 30এখানে, "name" এবং "age" কীগুলোর জন্য মান বের করা হচ্ছে।
৪. Hash Table থেকে কী মুছে ফেলা (remhash)
remhash ফাংশন ব্যবহার করে hash table থেকে একটি কী মুছে ফেলা হয়।
সিনট্যাক্স:
(remhash key hash-table)উদাহরণ:
(remhash "age" my-hash)এখানে, "age" কীটি my-hash থেকে মুছে ফেলা হয়েছে।
৫. Hash Table সাইজ বের করা (hash-table-count)
hash-table-count ফাংশন ব্যবহার করে hash table-এ কতটি কী এবং মান (key-value pairs) রয়েছে তা জানা যায়।
সিনট্যাক্স:
(hash-table-count hash-table)উদাহরণ:
(hash-table-count my-hash) ; আউটপুট: 2এখানে, my-hash hash table-এ দুটি কী এবং মান রয়েছে, তাই আউটপুট হবে 2।
Hash Table-এর সুবিধা
- দ্রুত অ্যাক্সেস:
Hash Table কীগুলির মাধ্যমে মান খুঁজে বের করতে অত্যন্ত দ্রুত। সাধারণত, একটি সঠিক কীর জন্য মান বের করার সময় O(1) সময় লাগে, যা একটি টেবিল বা লিস্টের তুলনায় অনেক দ্রুত। - নাম কনফ্লিক্ট প্রতিরোধ:
একাধিক ভেরিয়েবল বা কীগুলির মধ্যে নাম কনফ্লিক্ট থেকে মুক্তি পাওয়া যায়, কারণ Hash Table-এ প্রত্যেকটি কী ইউনিক এবং নির্দিষ্ট থাকে। - ডাইনামিক সাইজিং:
Hash Table সাধারণত ডাইনামিক সাইজিং সাপোর্ট করে, যার ফলে নতুন কীগুলির জন্য স্থির মেমরি ব্লক নির্ধারণের প্রয়োজন হয় না। - মাল্টিপল মান:
একাধিক মান একটি কী এর অধীনে সংরক্ষণ করা যেতে পারে। উদাহরণস্বরূপ, কিছু ডাটা স্ট্রাকচার যেমন লিস্ট বা সেট ব্যবহার করে একাধিক মানের সাথে এক কী সম্পর্কিত হতে পারে।
Hash Table-এর উদাহরণ
একটি সম্পূর্ণ উদাহরণ:
;; Hash Table তৈরি
(setq person-hash (make-hash-table :test 'equal))
;; মান সেট করা
(setf (gethash "name" person-hash) "Alice")
(setf (gethash "age" person-hash) 28)
(setf (gethash "city" person-hash) "New York")
;; Hash Table থেকে মান পড়া
(format t "Name: ~a~%" (gethash "name" person-hash)) ; আউটপুট: Alice
(format t "Age: ~a~%" (gethash "age" person-hash)) ; আউটপুট: 28
(format t "City: ~a~%" (gethash "city" person-hash)) ; আউটপুট: New York
;; Hash Table থেকে একটি কী মুছে ফেলা
(remhash "city" person-hash)
;; Hash Table সাইজ বের করা
(format t "Hash Table size: ~a~%" (hash-table-count person-hash)) ; আউটপুট: 2এখানে, একটি person-hash নামে Hash Table তৈরি করা হয়েছে, যেখানে "name", "age", এবং "city" কীগুলির জন্য মান সেট করা হয়েছে। এরপর, city কীটি মুছে ফেলা হয়েছে এবং নতুন সাইজ বের করা হয়েছে।
সারসংক্ষেপ
| ফাংশন | ব্যাখ্যা | উদাহরণ |
|---|---|---|
make-hash-table | নতুন Hash Table তৈরি করা। | (make-hash-table :test 'equal) |
setf with gethash | Hash Table-এ মান সেট করা। | (setf (gethash "name" my-hash) "John") |
gethash | Hash Table থেকে মান পাওয়া। | (gethash "name" my-hash) |
remhash | Hash Table থেকে একটি কী মুছে ফেলা। | (remhash "age" my-hash) |
hash-table-count | Hash Table-এ কী এবং মানের সংখ্যা বের করা। | (hash-table-count my-hash) |
Hash Table LISP-এ কীগুলির মাধ্যমে দ্রুত এবং দক্ষভাবে ডাটা অ্যাক্সেস করার জন্য একটি অত্যন্ত গুরুত্বপূর্ণ ডাটা স্ট্রাকচার। এটি ব্যবহার করে আপনি বিভিন্ন ধরনের ডাটা ম্যানিপুলেশন দ্রুত এবং কার্যকরীভাবে করতে পারবেন।
Read more