প্রোগ্রামিং সিরিজঃ Search index এর ইতিবৃত্ত

পুরোটা পড়ার সময় নেই? ব্লগটি একবার শুনে নাও।

এই লেখাটি নেয়া হয়েছে “আদর্শ” থেকে প্রকাশিত এবং ঝংকার মাহবুব লিখিত ২য় বই “প্রোগ্রামিংয়ের বলদ টু বস” বই থেকে।

রাশেদ কখনোই ঈদ বা কোনো উৎসবের আগে শপিং করতে যায় না। কারণ উৎসবের আগে প্রচুর কাস্টমার থাকে। তখন দোকানদাররা দামাদামি করা কাস্টমারদের পাত্তা দেয় না। রাশেদ শপিং করতে যায় সাপ্তাহিক দিনগুলাতে। তাও আবার সকাল ১০ টার দিকে। যাতে দোকানদার প্রথম কাস্টমার হিসেবে অল্প লাভ হলেও জিনিস দিয়ে দেয়। মাঝেমধ্যে কম দাম বলে চলে যাওয়ার ভান করে সে। যাতে কাস্টমার চলে যেতে দেখে, দোকানদার পিছন থেকে ডাক দিয়ে, কম লাভে শার্ট-প্যান্ট দিয়ে দেয়। তা ছাড়া শার্ট বা টি-শার্টের কোথাও অল্প ছেঁড়া, ছেঁড়ার ওপর স্টিকার বা তেলের দাগ থাকলে সেটা পাল্টায় না রাশেদ। বরং সমস্যা দেখিয়ে জিনিসের দাম অর্ধেক কমিয়ে নেওয়ার চেষ্টা করে সে। কারণ পুঁচকে ছেঁড়া বা তেলের দাগের চাইতে টাকা বাঁচানো তার কাছে বেশি ইম্পরট্যান্ট।

| Search অ্যালগরিদম  |  index ব্যবহার করে Search  |

Search করলে আমের আঁটি

দুই দিন ধরে অন্তুর মোবাইলের চার্জার খুঁজে পাওয়া যাচ্ছে না। তাকে সান্ত্বনা দিতে রাশেদ বলে উঠল, শোন, অনেকেই অনেক কিছু হারায়। যেমন : ক্লাসের খাতা, বৃষ্টির দিনে ছাতা, জ্যাকেটের হাতা, মসজিদে গেলে জুতা, আরও কত-কী! তবে তুই নাকি ছোটবেলায় ঈদের নামাজ পড়তে গিয়ে পায়জামার ফিতা হারায় ফেলছিলি? থুক্কু, ভুলে গেছিলাম যে এই কথা সবাইকে বলা যাবে না।

আটা ময়দা সুজি, তোমাদের খুঁজি

তবে অনেকের চাকরিই হচ্ছে হারানো জিনিস খোঁজা। সে জন্যই পুলিশ সন্ত্রাসী খোঁজে, তদন্ত কমিটি অপরাধ খোঁজে, চাকরিজীবী প্রমোশন খোঁজে, বাসের হেলপার যাত্রী খোঁজে। এই রকম আটা ময়দা সুজির মতো খুঁজি খুঁজি করতে করতে আমাদের জীবনটা ‘খোঁজ : দ্য সার্চ’ মিশন হয়ে যায়। তবে এই সব খোঁজাখুঁজির মধ্যে যে খোঁজাখুঁজিটা হরহামেশাই করতে হয়, সেটা হচ্ছে মোবাইলের চার্জার খোঁজা। দুনিয়াতে এমন কোনো মানুষ পাওয়া যাবে না যে মাসে দুই-চারবার মোবাইলের চার্জার হারায় না।

চার্জার খুঁজতে গেলে প্রথমেই খুঁজবি টেবিলের ওপরে, বইয়ের চিপাচাপাতে। সেখানে না পেলে খুঁজবি বালিশের নিচে। প্যান্টের পকেটে, ভার্সিটির ব্যাগে। আর কোথাও না পেলে চৌকির নিচে খোঁজা ছাড়া উপায় থাকবে না। এখন চৌকির নিচে খোঁজা শুরু করতে গেলে তুই একবার ডান সাইড থেকে, আরেকবার বাম সাইড থেকে এলোপাতাড়ি স্টাইলে খুঁজতে পারস। তবে এই সিস্টেমে খুঁজলে অনেক সময় লেগে যেতে পারে। তাই ঠান্ডা মাথায় এক পাশ থেকে শুরু করে একটু একটু করে আগাইতে পারস।

দেয়ালের রং বার্জার, search করে এখন চার্জার

এই যে চার্জার খুঁজতেছস। এই খোঁজাখুঁজি করাটা একটা কাজ। যেই সিস্টেমে চৌকির নিচে চার্জার খুঁজতেছস, একই সিস্টেমে চৌকির নিচে বই, পাঞ্জাবি, জুতা খুঁজতে পারবি। তার মানে খোঁজার কাজটা একই সিস্টেমের। সেটা যেকোনো জিনিস খুঁজতে ব্যবহার করতে পারবি। আর তুই যেহেতু খোঁজার কাজ করতেছস। তাই খোঁজার কাজকে search বলতে পারস। কারণ খোঁজাকে ইংরেজিতে search বলে।

তুই উচ্চতায় খাটো। তোর হাত তেমন লম্বা না। তাই তোর নিজের হাত দিয়ে চৌকির মাঝখানে বা পিছনের দিকে যেসব জিনিস পড়ে আছে, সেগুলা ধরে টেনে বের করতে পারবি না। সে জন্য বিকল্প পন্থা হিসেবে একটা লাঠি জোগাড় করে ফেলছস।

প্রথমেই লাঠি দিয়ে চৌকির তলা থেকে একটা একটা করে জিনিস টেনে বের করে আনবি। তারপর দেখবি সেটা চার্জার কি না। যদি চার্জার হয়, তাহলে তোর খোঁজাখুঁজির কাজ শেষ। কারণ চার্জার পেয়ে গেছস। আর সেটা চার্জার না হলে আবারও লাঠি দিয়ে অন্য আরেকটা জিনিস টেনে বের করবি। তারপর চেক করবি সেটা চার্জার কি না। সেটাও চার্জার না হলে তার পরের জিনিসটা লাঠি দিয়ে টেনে বের করবি। তার মানে যতক্ষণ পর্যন্ত চার্জার না পাস ততক্ষণ পর্যন্ত লাঠি দিয়ে বের করতে থাকবি। এখন ওপরের চার্জার খোঁজার কাজকে স্টেপ বাই স্টেপ লিখলে—

স্টেপ-১ : চৌকির নিচে কী কী জিনিস আছে, সেটার একটা সম্ভাব্য তালিকা বানাবি 

স্টেপ-২ : একটা একটা করে জিনিস টেনে বের করবি

স্টেপ-৩ : চেক করে দেখবি সেটা চার্জার কি না

স্টেপ-৪ : সেটা চার্জার হলে কাজ শেষ। আর চার্জার না হলে খুঁজতে থাকবি

কোনো একটা কাজ বা প্রোগ্রামের ধাপগুলা স্টেপ বাই স্টেপ লেখাকে প্রোগ্রামিংয়ের ভাষায় অ্যালগরিদম (algorithm) বলে। এই অ্যালগরিদম জিনিসটা নিয়ে আপাতত মাথা গরম করার দরকার নাই। শুধু মনে রাখবি কোনো একটা জিনিস সার্চ করার বা খুঁজে বের করার জন্য যে প্রোগ্রাম লেখা হয় সেটাকে সার্চ অ্যালগরিদম বলে। এইটুকুই। আর সার্চ অ্যালগরিদম ব্যবহার করে বিভিন্ন জিনিস খোঁজা হয়। তার মানে তুই যে একটু আগে চার্জার খুঁজতেছিলি। সেটা ছিল সার্চ অ্যালগরিদম দিয়ে চার্জার খোঁজার কাজ। এখন চার্জার খোঁজার স্টেপগুলা ইংরেজিতে লিখলে নিচের মতো হবে—

for each jinish in choukirTola

        get a jinish

        if jinish is a charger

               got charger and stop the search

ওপরের ইংরেজি লেখার প্রথম লাইনে লেখা আছে, “for each jinish in choukirTola” তার মানে তোর চৌকির তলায় যা যা জিনিস আছে, সেগুলার মধ্যে খুঁজতে হবে। অর্থাৎ তোর চৌকির তলায় অনেকগুলা জিনিস আছে। আর অনেকগুলা জিনিস থাকলে সেগুলাকে একসাথে একটা array-এর মধ্যে রাখা যায়।    

তোর চৌকির তলায় দুনিয়ার হাবিজাবি জিনিস গাদাগাদি করে পড়ে আছে। সেখানে ঘণ্টা তিনেকের সাঁড়াশি অভিযান চালিয়েও সব উদ্ধার করা যাবে না। তারপরও তুই সাহস করে চার্জার খোঁজার মিশনে নামছস। তোর ধারণা, সেখানে টি-শার্ট, জিন্‌স, জুতার বক্স, বই, গামছা, চার্জার, কোকের বোতল, চিপসের খালি প্যাকেট, নোটখাতা, পানির গ্লাস, আমের আঁটি, পাঞ্জাবি ইত্যাদি আছে। আর এই জিনিসগুলা একটা array-এর মধ্যে রাখা খুবই সোজা। জাস্ট এদের নাম লিখে, যেকোনো দুইটা জিনিসের মধ্যে কমা দিয়ে দিবি। আর array-এর মধ্যে যেহেতু চৌকির তলার জিনিসপাতি আছে তাই এই array-এর নাম দিলি চৌকির তলা (choukirTola) তারপর সেই array-এর ভিতরের জিনিসগুলা নিচের মতো করে লিখলি।

var choukirTola = [“tShirt”, “jeans”, “juta”, “boi”, “gamcha”, “charger”, “panjabi”];

বাস্তবে চৌকির তলা হিবিজিবি সব জিনিস পড়ে থাকলে চৌকির তলার নিচে কী কী আছে সব একসাথে দেখা যায় না; বরং একটা একটা করে খুঁজে বের করে চেক করতে হয়। আবার তোর চৌকির তলার নিচে যা যা আছে। আরেকজনের চৌকির তলায় এই জিনিসগুলা না থেকে অন্য জিনিস থাকতে পারে। সেখানে চার্জার থাকতেও পারে আবার না-ও থাকতে পারে। তবে এই উদাহরণের সুবিধার্থে তোর চৌকির তলায় কী কী আছে সেটা ধারণা করে choukirTola নামক array-তে লিখে ফেলছস।

আগের ইংরেজিতে লেখা অ্যালগরিদমের প্রথম লাইনের দিকে তাকা। সেখানে “for each jinish in choukirTola” লেখা আছে। তার মানে চৌকির তলায় যা যা আছে, সেখান থেকে একটা একটা করে জিনিস বের করবি তোর choukirTola নামক array থেকে। আর কোনো একটা array থেকে একটা একটা করে জিনিস বের করার উপায় তুই আগে থেকেই জানস। জাস্ট for লুপ লিখে দিবি নিচের মতো—

for(var i = 0; i < choukirTola.length; i++){

}

তোর ইংরেজিতে লেখা অ্যালগরিদমের সেকেন্ড লাইনে “get a jinish” লেখা আছে। আর কোনো একটা array থেকে একটা করে জিনিস খুঁজে বের করা খুবই সোজা। জাস্ট array-এর নাম লিখে থার্ড ব্র্যাকেটের ভিতরে i লিখে দিবি। নিচের মতো—

for(var i = 0; i < chourkirTola.length; i++){

      var jinish = choukirTola[ i ];

}

ব্যস, অর্ধেক কাজ শেষ। এখন ইংরেজি অ্যালগরিদমের তৃতীয় লাইন দেখ- “if jinish is a charger” লেখা আছে। তার মানে চেক করতেছস jinish টা চার্জার কি না। কোনো একটা জিনিস চেক করার জন্য if-এর পরে শর্ত লিখতে হয়। এখানেও তার ব্যতিক্রম হবে না। তাই দেরি না করে ফুরফুরে মেজাজে নিচের মতো লিখে ফেল।

for(var i = 0; i < choukirTola.length; i++){

      var jinish= choukirTola[ i ];

      if ( jinish == “charger” ){

      }

}

আর অ্যালগরিদমের লাস্ট লাইনে আছে- “got charger and stop the search” লেখা আছে। তাই if-এর পরে ব্র্যাকেটের ভিতরে প্রথম লাইনে console.log (“charger paisi”) লিখবি। এর পরের লাইনে লিখবি break; এই break দেওয়া হয় লুপকে থামানোর জন্য। বাসে ব্রেক দিলে যেমন বাস থেমে যায়। একইভাবে কোনো লুপের ভিতরে break লিখলে লুপ থেমে যায়।

for(var i = 0; i < choukirTola.length; i++){

      var jinish = choukirTola[i];

      if( jinish == “charger”){

           console.log(“charger paisi”);

           break;

      }

}

অনেক সময় জানতে চায় কোনো একটা জিনিস array-এর মধ্যে কোন জায়গায় বা কোন পজিশনে আছে। এটা বের করা খুবই সোজা। জাস্ট console.log-এর ভিতরে charger paisi না লিখে i লিখে দিবি। যাতে i-এর মান আউটপুট দিয়ে দেয়। কারণ i-এর মানই হচ্ছে ওই জিনিসটা, যে পজিশনে আছে তার মান।

for(var i = 0; i < choukirTola.length; i++){

      var jinish = choukirTola[i];

      if( jinish == “charger” ){

           console.log( i );

           break;

      }

}

তবে বেশির ভাগ প্রোগ্রামিং ল্যাঙ্গুয়েজেই array-এর নামের পরে ডট চিহ্ন দিয়ে indexOf লিখে প্রথম ব্র্যাকেটের ভিতরে যে জিনিসটা খুঁজতে চাস সেটার নাম দিলে সেটার পজিশন বলে দেয়। যদি সেই জিনিস array-এর মধ্যে থাকে তাহলে সেই index বা পজিশন বলে দেবে। আর না থাকলে -1 বলে দেবে। যেমন ধর, choukirTola নামক array-এর মধ্যে juta আছে কি না, জানতে চাইলে লিখবি।

choukirTola.indexOf(“juta”);

তাহলে রিটার্ন দেবে 2, কারণ ওই array-এর মধ্যে জুতা 2 পজিশনে আছে। আর যদি choukirTola.indexOf(“balish”) লিখছ তাহলে আউটপুট হিসেবে পাবি—1; কারণ তোর choukirTola নামক array-এর মধ্যে বালিশ (balish) নাই।

প্রোগ্রামিং করার সময় for লুপ চালিয়ে সার্চ করার চেয়ে indexOf বেশি ব্যবহার করা হয়।

নিজে নিজে কর

৮.১ : ধর, তোর খালাতো ভাই তমাল তার গার্লফ্রেন্ডসহ পালিয়ে গেছে। তমালের গার্লফ্রেন্ডের বাবা চৌধুরী সাহেব। তিনি বিশাল একটা দোনালা বন্দুক নিয়ে তোর খালার বাসায় আলটিমেটাম দিয়ে গেছেন, ২৪ ঘণ্টার মধ্যে লম্পট ছেলের হাত থেকে তার শান্তশিষ্ট মেয়েকে ফেরত না দিলে, সবাইকে ঠুস ঠুস করে মেরে ফেলবেন। ঘটনা শুনে তুই গেছস তোর খালাতো ভাই আর তার গার্লফ্রেন্ডকে খুঁজে বের করতে। সে জন্য কই কই খুঁজতে যাওয়া উচিত সেই জায়গাগুলার নাম দিয়ে locations নামে একটা array ডিক্লেয়ার কর। তারপর for লুপ দিয়ে একটা সার্চ অ্যালগরিদম লিখ। যেই অ্যালগরিদম তোর locations নামক array-এর মধ্যে ফ্রেন্ডের বাসা (friendHouse) আছে কি না বলে দেবে।

উত্তর :

৮.২ : কোন খাবারের হোটেলে কী কী ভর্তা আছে, সেটা vortas নামক array-এর মধ্যে লিখ। তারপর সেই array-এর মধ্যে শুঁটকি ভর্তা (shutkiVorta) কোন পজিশনে আছে, সেটা indexOf ব্যবহার করে বল।

উত্তর :

 

ঝংকার মাহবুবের অন্যান্য লেখা সম্পর্কে জানতে চলে যাও এই লিংকে!
ঝংকার মাহবুবকে ফলো করতে পারো ফেসবুক পেইজেও!


১০ মিনিট স্কুলের ব্লগের জন্য কোনো লেখা পাঠাতে চাইলে, সরাসরি তোমার লেখাটি ই-মেইল কর এই ঠিকানায়: [email protected]

Author

Jhankar Mahbub

খুব অল্প বয়সেই লেখালেখি শুরু করেন ঝংকার মাহবুব। শুরুটা ছিল বাসার দেয়ালে, বোনদের বইয়ের পাতাতে, কিংবা ঘুমন্ত অবস্থায় বাবার শরীরে আঁকাআঁকি করে। তারপর থেকে তিন দশক ধরে উনার লেখালেখির পুরোটাই গেছে পরীক্ষার খাতায়, পাশ নম্বরের আশায়।
Jhankar Mahbub
এই লেখকের অন্যান্য লেখাগুলো পড়তে এখানে ক্লিক করুন
What are you thinking?