
আমরা যখনই "Algorithm (অ্যালগরিদম)" শব্দটা শুনি, কী মনে হয় আপনার? হয়তো ভাবেন, এটা নিশ্চয়ই Computer Science-এর কোনো জটিল বিষয়, যা শুধুমাত্র University-র Professor-রা গবেষণা করেন, অথবা Software Engineer-দের বিশেষ Programming Language-এর কোড দিয়ে তৈরি কোনো রহস্যময় Formula! প্রথম ঝলকে দেখে হয়তো মনে হতে পারে, Algorithm মানেই বুঝি জটিল Mathematics আর উচ্চতর Problem Solving-এর বিশেষ কৌশল, যা সাধারণ মানুষের বোধগম্যতার বাইরে। কিন্তু সত্যি বলতে কী, Algorithm এমন একটি মৌলিক ধারণা যা Mathematics-এর গভীর সমীকরণের চেয়েও বেশি করে আমাদের দৈনন্দিন Life-এর সাধারণ Logic এবং Step-এর সাথে জড়িত। বিশ্বাস করুন আর নাই করুন, আপনার Daily Life-এর প্রায় প্রতিটি ক্ষেত্রে, প্রতিটি Task-এর Completion-এর পেছনে কোনো না কোনো Algorithm কাজ করে যাচ্ছে। মজার ব্যাপার হলো, আমরা প্রায়শই এই Algorithm-গুলো ব্যবহার করি, কিন্তু সে সম্পর্কে মোটেও সচেতন থাকি না!
হ্যাঁ, ঠিকই শুনছেন! আপনি অজান্তেই আপনার Life-এর অনেক Problem Solution-এর জন্য অসংখ্য Algorithm শিখে ফেলেছেন এবং সেগুলোকে Daily Life-এর Task-এ প্রয়োগ করতে অভ্যস্ত হয়ে গেছেন। এই Claim-টা শুনে হয়তো আপনার একটু অবাক লাগছে, তাই না? এটা কি করে সম্ভব? কিন্তু চিন্তা নেই, আমি আপনাকে কিছু বাস্তব Example দিয়ে প্রমাণ করে দেবো যে, Algorithm আসলে কোনো দূরের বা অচেনা বিষয় নয়, বরং আপনার হাতের কাছেই, আপনার প্রতিদিনের কাজের মধ্যেই তার Presence বিদ্যমান। Algorithm-এর এই সহজবোধ্যতা এবং সর্বব্যাপীতা (Ubiquitous Presence) আমাদের Problem Solving-এর Process-কে কীভাবে প্রভাবিত করে, তা চলুন একটু বিস্তারিত আলোচনা করি!

আমাদের প্রত্যেকের Daily Life-এর কিছু সাধারণ অভ্যাস বা Task আছে, যা আমরা খুব স্বাচ্ছন্দ্যে করি। আমরা সেগুলো করি কারণ সেগুলো সবচেয়ে Logical এবং Efficient মনে হয়। কিন্তু এই আপাতদৃষ্টিতে সাধারণ কাজগুলোর ভেতরেই লুকিয়ে আছে Algorithm-এর চমকপ্রদ প্রয়োগ। চলুন, সেই উদাহরণগুলো একটু গভীর ভাবে Explored করি এবং বোঝার চেষ্টা করি কীভাবে এগুলো আমাদের Algorithm-এর ধারণা তৈরি করে।

আপনার কি মনে আছে ছোটবেলায় Dictionary Check করার দিনগুলো? কিংবা এখনো যদি কখনো কোনো নতুন English Character বা শব্দের First Letter জেনে সেটি খুঁজতে হয়, তাহলে আপনি কীভাবে Check করেন? ধরুন, আপনার হাতে একটি বিশাল Dictionary আছে এবং আপনি 'R' দিয়ে শুরু হওয়া একটি First Letter-এর শব্দ খুঁজছেন। আপনি কি Dictionary-র প্রথম Page থেকে শেষ Page পর্যন্ত একটি একটি করে উল্টে দেখেন? অবশ্যই না! কারণ আপনি জানেন এটা কতটা সময়সাপেক্ষ এবং ক্লান্তিকর একটি Process হবে। তাহলে আপনি কী কৌশল অবলম্বন করেন?
আপনার ছোটবেলার এই সহজবোধ্য Skill টি, যা আপনি আজো প্রায় অবচেতন মনেই করেন, এটিই হলো Computer Science-এর একটি অত্যন্ত গুরুত্বপূর্ণ এবং শক্তিশালী Algorithm, যার নাম "Binary Search"! Data Structure-এর দৃষ্টিকোণ থেকে, আপনি যে Dictionary ব্যবহার করছেন, সেটি আসলে একটি Sorted "Array" (কারণ Dictionary-র সব শব্দ Alphabetical Order-এ সাজানো থাকে)। আর আপনি যে Page খোলা, Letter Check করা এবং Search Range ছোট করার ধারাবাহিক Operation গুলো করছেন, সেটিই হলো "Binary Search" Algorithm। এই Algorithm কেন এত শক্তিশালী এবং Efficient? কারণ এটি প্রতিটি Step-এ আপনার Search Space-কে প্রায় অর্ধেক করে দেয়। এই "Divide And Conquer" (ভাগ করো এবং জয় করো) কৌশলটি একটি বড় Dictionary-তেও খুব দ্রুত আপনার কাঙ্ক্ষিত শব্দ খুঁজে বের করা সম্ভব করে তোলে। কল্পনা করুন, যদি একটি Linear Search-এর মতো প্রতিটি Page ধরে ধরে খুঁজতেন, তাহলে কতটা সময় লাগতো! Binary Search আমাদেরকে এই অদক্ষতা থেকে মুক্তি দেয়।

আপনারা যারা Playing Cards খেলেন, তারা নিশ্চয়ই জানেন যে প্রতিটি Round-এর আগে হাতের Cards গুলোকে একটি নির্দিষ্ট Order-এ (যেমন ছোট থেকে বড়) সাজিয়ে নেওয়া কতটা জরুরি। এতে Card খেলা আরও সহজ এবং Strategy তৈরি করা আরও সুবিধাজনক হয়। কিন্তু আপনি আপনার Playing Cards গুলো কীভাবে সাজিয়ে নেন, যখন নতুন Cards পান বা খেলার সময় Cards এলোমেলো হয়ে যায়?
Playing Cards গোছানোর এই পদ্ধতিটি হলো "Insertion Sort" Algorithm-এর একটি চমৎকার বাস্তব উদাহরণ। এই Algorithm তুলনামূলকভাবে ছোট Dataset গুলোকে পরিচালনা করার জন্য অত্যন্ত Efficient এবং সহজবোধ্য। এর একটি বড় সুবিধা হলো, এটি "In-Place Sorting" করে, অর্থাৎ অতিরিক্ত Memory-র প্রয়োজন হয় না এবং এটি "Adaptive" - যদি Dataset আংশিকভাবে Sorted থাকে, তাহলে এটি আরও দ্রুত কাজ করে। মজার ব্যাপার হলো, অনেক Professional Programming Language-এর Sorting Library Function-এর মধ্যেও এই Insertion Sort-এর Presence দেখা যায়, বিশেষ করে যখন ছোট Data-এর সাথে কাজ করতে হয় অথবা অন্যান্য Complex Sorting Algorithm (যেমন Timsort বা Introsort) এর অংশ হিসেবে। এটি একটি খুব Fundamental Sorting Algorithm যা এর সরলতা এবং কার্যকারিতার জন্য শিক্ষাক্ষেত্রে এবং কিছু ব্যবহারিক Scenario-তে বহুল ব্যবহৃত।

আপনারা সবাই নিশ্চয়ই প্রতিদিনের Life-এ Supermarket বা দোকানে কেনাকাটা করেন। ধরুন, আপনি Supermarket থেকে 69 টাকার-এর একটি Product কিনেছেন এবং Cashier-কে 100 টাকা দিলেন। এক্ষেত্রে Cashier-এর আপনাকে 31 টাকা Change ফেরত দিতে হবে। একজন Cashier এই 31 টাকা Change কীভাবে দেবেন, তার পেছনেও কিন্তু একটি Algorithm কাজ করে! তিনি খুব স্বাভাবিকভাবেই Figure 1-3 এ দেখানো চিন্তা প্রক্রিয়ার মাধ্যমে এই Problem-টির Solution করেন:
উপরের এই পুরো Step গুলিতে, Cashier প্রতিটি মুহূর্তে সেই Choice টি গ্রহণ করেছেন যা সেই মুহূর্তে সবচেয়ে ভালো মনে হয়েছে – অর্থাৎ, যতটা সম্ভব বড় Denomination-এর Currency ব্যবহার করে অবশিষ্ট Amount কমিয়ে আনা। Data Structure এবং Algorithm-এর দৃষ্টিকোণ থেকে, এই পদ্ধতিটি হলো "Greedy Algorithm"। Greedy Algorithm হলো এমন এক ধরনের Algorithm যা প্রতিটি Step-এ একটি "Best Local Choice" (বর্তমান অবস্থার জন্য সবচেয়ে ভালো Choice) করে, এই আশায় যে এটি একটি "Best Global Solution" (সামগ্রিক সেরা Solution) দেবে। Currency Change-এর ক্ষেত্রে এই Algorithm খুব সুন্দরভাবে কাজ করে, কারণ আমাদের Currency System সাধারণত এমনভাবে ডিজাইন করা হয়েছে যেন Greedy Approach কাজ করে এবং সবচেয়ে কম সংখ্যক Note বা Coin ব্যবহার করে Change দেওয়া সম্ভব হয়।
তবে, একটি গুরুত্বপূর্ণ বিষয় মনে রাখতে হবে: সব Problem-এর জন্য কিন্তু Greedy Algorithm সেরা Solution নাও দিতে পারে। এমন কিছু Scenario আছে যেখানে একটি Local Optimum (তৎকালীন সেরা Choice) আপনাকে Global Optimum (সামগ্রিক সেরা Solution) থেকে দূরে সরিয়ে দিতে পারে। উদাহরণস্বরূপ, যদি আপনার কাছে 1, 7, 10 টাকার Coin থাকে এবং আপনাকে 14 টাকা Change দিতে হয়। Greedy Algorithm প্রথমে 10 টাকা দেবে, তারপর 1 টাকা (বাকী 4 টাকার জন্য) চারবার দেবে (মোট 5টি Coin)। কিন্তু সেরা Solution হলো 7 টাকার দুটি Coin (মোট 2টি Coin)। এটি Greedy Algorithm-এর সীমাবদ্ধতা তুলে ধরে। কিন্তু আমাদের সাধারণ Currency System-এ (যেমন টাকা, ডলার, ইউরো) Greedy Approach সাধারণত কাজ করে।

লক্ষ্য করেছেন তো? আপনার রান্নাঘরের একটি সাধারণ Dish Cooking করা থেকে শুরু করে বিশাল মহাকাশে Rocket-এর Interstellar Travel পর্যন্ত, জীবনের প্রতিটি ছোট-বড় Problem-এর Solution কোনো না কোনো Algorithm-এর উপর নির্ভরশীল। Algorithm হলো একগুচ্ছ সুসংজ্ঞায়িত Step বা নির্দেশাবলী যা একটি নির্দিষ্ট Task সম্পন্ন করতে বা একটি Problem Solution করতে ব্যবহৃত হয়। এটি একটি Recipe-র মতো, যেখানে প্রতিটি Step স্পষ্ট এবং অনুসরণযোগ্য। এই Step গুলো অবশ্যই সুনির্দিষ্ট হতে হবে যাতে যেকোনো ব্যক্তি বা Machine সেগুলো অনুসরণ করে একই ফলাফল পেতে পারে।
Computer-এর আবির্ভাব এই Algorithm-এর ধারণাকে সম্পূর্ণ নতুন মাত্রায় নিয়ে গেছে। Computer আসার আগে Algorithm মানুষ Manually Execute করতো। কিন্তু Computer আসার পর, আমরা বিশাল পরিমাণ Data এবং Complex Problem-কে Algorithm-এর মাধ্যমে সমাধান করতে পারি অভাবনীয় গতিতে। এখন আমরা Programming-এর মাধ্যমে Complex Data Structure গুলোকে Computer-এর Memory-তে সংরক্ষণ করতে পারি। এই Memory হলো Computer-এর অস্থায়ী কাজের জায়গা, যেখানে Data এবং Program দ্রুত Access করা যায়। এরপর, আমরা বিশেষভাবে তৈরি Code লিখে Computer-এর Central Processing Unit (CPU) এবং Graphics Processing Unit (GPU)-কে Algorithm Execute করার নির্দেশ দিতে পারি।
Computer-এর "মস্তিষ্ক" বা "Brain" হিসেবে পরিচিত। এটি Algorithm-এর Step By Step Instruction গুলোকে Process করে এবং Logical Calculation-গুলো সম্পাদন করে। এটি Single-Threaded (একটি কাজ একবারে) Performance-এর জন্য Optimized।
এটি মূলত Graphics Rendering-এর জন্য ডিজাইন করা হলেও, আজকাল এটি Parallel Processing-এর জন্য অত্যন্ত শক্তিশালী একটি Hardware হিসেবে ব্যবহৃত হচ্ছে। বিশেষ করে Machine Learning এবং Artificial Intelligence-এর মতো ক্ষেত্রগুলিতে, যেখানে একই Algorithm-এর অনেক গুলো Instance এক সাথে Execute করতে হয়, সেখানে GPU Algorithm-এর Execution-কে অবিশ্বাস্যভাবে গতি দেয়।
এভাবেই আমরা আমাদের Daily Life-এর জটিল Problem গুলোকে Computer-এর উপর স্থানান্তর করতে পারি এবং অবিশ্বাস্যভাবে আরও Efficient ও Accurate উপায়ে বিভিন্ন Challenge-এর Solution খুঁজে পেতে পারি। Computer-এর Processing Power এবং Algorithm-এর Combination আমাদের পক্ষে এমন সব কাজ করা সম্ভব করে তুলেছে যা আগে শুধুমাত্র কল্পনাতেই সীমাবদ্ধ ছিল। উদাহরণস্বরূপ, GPS Navigation System, Social Media Feed-এর Personalization, Online Recommendation System (যেমন Netflix বা Amazon), Medical Diagnosis, Weather Forecasting, Stock Market Prediction এবং Google-এর মতো Search Engine-গুলো সবই Complex Algorithm-এর উপর নির্ভরশীল। এই Algorithm-গুলোই কোটি কোটি Data Process করে আমাদেরকে প্রয়োজনীয় Information সরবরাহ করে এবং আমাদের জীবনকে অনেক সহজ এবং উন্নত করেছে।

যদি Data Structure, Algorithm, Array এবং Binary Search-এর মতো Concepts গুলো সম্পর্কে আপনার এখনও একটু অস্পষ্টতা থাকে বা আপনি নিজেকে এই বিষয়ে অনভিজ্ঞ মনে করেন, তাহলে একদমই চিন্তা করার কিছু নেই! এই টিউন সিরিজটি ঠিক সেইসব পাঠক এবং শিক্ষার্থীদের জন্য তৈরি করা হয়েছে, যারা Algorithm-এর জগতের রহস্য উন্মোচন করতে চান। Algorithm শেখা মানে শুধু Computer Science শেখা নয়, এটি আপনাকে আরও ভালো Problem Solver হতে শেখাবে, আপনাকে Critical Thinking-এ উৎসাহিত করবে এবং আপনার Logic-কে শাণিত করবে। আপনার Problem Solving-এর ক্ষমতা বাড়বে, যা আপনার Personal এবং Professional Life-এর প্রতিটি ক্ষেত্রে কাজে দেবে।
তাই আর দেরি না করে, জ্ঞান অন্বেষণের এই রোমাঞ্চকর যাত্রা শুরু করুন। প্রতিটি Step-এ নতুন কিছু শিখুন, Algorithm-এর শক্তিকে নিজের Problem Solving Capacity-তে যুক্ত করুন, আর হয়ে উঠুন আপনার Problem-গুলোর নিজস্ব Algorithm Master! আপনার এই যাত্রা যেন কেবল নতুন জ্ঞান অর্জনের না হয়ে, একটি নতুন Perspective এবং Problem Solving-এর নতুন পদ্ধতির অন্বেষণের যাত্রা হয়।
আমি সোহানুর রহমান। সুপ্রিম টিউনার, টেকটিউনস, ঢাকা। বিশ্বের সর্ববৃহৎ বিজ্ঞান ও প্রযুক্তির সৌশল নেটওয়ার্ক - টেকটিউনস এ আমি 12 বছর 2 মাস যাবৎ যুক্ত আছি। টেকটিউনস আমি এ পর্যন্ত 675 টি টিউন ও 200 টি টিউমেন্ট করেছি। টেকটিউনসে আমার 123 ফলোয়ার আছে এবং আমি টেকটিউনসে 0 টিউনারকে ফলো করি।
কখনো কখনো প্রজাপতির ডানা ঝাপটানোর মত ঘটনা পুরো পৃথিবী বদলে দিতে পারে।