অ্যালগরিদমের সহজ কথা
১. বাসায় মেহমান এসেছে
২. জামা পাল্টে অন্য জামা পর
৩. চুল পরিপাটি কর
৪. মেহমানের সামনে দাঁতে নখ কাটবে না
৫. মেহমানের খাবার থেকে খেতে চাইবে না
৬. মেহমানকে ছড়া শোনাবে
৭. মেহমান “লক্ষ্মী বাচ্চা” বললে তাকে ধন্যবাদ দেবে
৮. মেহমানের সামনে শোরগোল করবে না
৯. মেহমান বিদায় নিলে তবে আগেকার অবস্থায় ফিরে যেতে পারবে…
কথাবার্তা কি অপ্রাসঙ্গিক ঠেকছে? না জনাব! অন্যরকমভাবে বলছি, কিন্তু বলছিলাম অ্যালগরিদমের কথাই। পরিবারের ছোট সদস্যদের জন্য মেহমান আসার দিনগুলোতে এমনই কিছু কঠোর নির্দেশনা দেওয়া হয়ে থাকে অনেক বাড়িতেই। আচরণ সংক্রান্ত ভজঘট এড়াতে তাকে কিছু জিনিস শিখিয়ে দেওয়া হয় এভাবে। এই যে মেহমান থাকার পুরোটা সময় তার কী কী করণীয় বা বর্জনীয় তা তাকে জানানো হচ্ছে, এই নির্দেশগুলো সম্মিলিতভাবে অনেকটাই একটা অ্যালগরিদম! পার্থক্য হলো, অ্যালগরিদম কাজ করে নির্দিষ্ট ধাপ অনুসরণ করে। অর্থাৎ কোন কাজের পর কোন কাজটি করতে হবে, তা পূর্ব নির্ধারিত থাকে অ্যালগরিদমে। তো শিশুকেও যদি উপরে বর্ণিত কাজগুলো পরপর করার নির্দিষ্ট ধারা বানিয়ে দেওয়া হয়, তখন পুরো ব্যাপারটিকে আক্ষরিক অর্থেই একটি অ্যালগরিদমের নাম দিয়ে দেয়া যাবে। সেটা হবে ‘মেহমান আগমন অ্যালগরিদম’ কিংবা এমন কিছু!
বিজ্ঞানের ভাষায় অ্যালগরিদম
অ্যালগরিদম হলো কোনো নির্দিষ্ট কাজ সম্পন্ন করার জন্য কিছু নির্দেশনার সেট বা গুচ্ছ। এটা হতে পারে কোনো সাধারণ প্রক্রিয়া। যেমন ধরুন, আপনি কয়েকটি সংখ্যা যোগ করে সেই যোগফলকে একটি নির্দিষ্ট নাম দিতে চাচ্ছেন। পুরো কাজটি সম্পন্ন করার জন্য আপনি অবশ্যই কিছু ধাপ অনুসরণ করবেন, এই ধাপগুলোকেই একসাথে করলে একটা গুচ্ছ বা সেট তৈরি হচ্ছে, যেটাকে বলা হয় অ্যালগরিদম। কম্পিউটার বিজ্ঞানের মূল পাঠ্য বিষয়াদির অন্তর্ভুক্ত এই বিষয়টি। কম্পিউটার তো মানবশিশু নয়, যে খানিক দেখে-শুনে আর খানিক ধমক খেয়ে সব শিখে ফেলছে, কিছু এদিক-সেদিক হলেও দিব্যি কাজ চালিয়ে নেবে! কম্পিউটার একটি যন্ত্র, যাকে সুনির্দিষ্টভাবে একেকটা শিক্ষা দিতে হয় এবং তবেই কম্পিউটার আমাদের কোনো সুনির্দিষ্ট সমাধান দিতে পারে বা আমাদের নির্দেশনা মতো সঠিক কাজটা করতে পারে। আর তা করতেই ব্যবহার করা হয় বিভিন্ন অ্যালগরিদম, যা কম্পিউটার বুঝে নেয় এবং সেই অনুযায়ী আমাদের বিভিন্ন সমস্যার সমাধান করে।
সামান্য যোগ-বিয়োগ হোক কিংবা বড়-ছোট সংখ্যা খুঁজে বের করার কাজ, কিংবা জটিল সব কম্পিউটার প্রোগ্রাম, মূলে আছে বিভিন্ন অ্যালগরিদম। ফ্লো চার্টের মাধ্যমে আপনি পাঁচটি সংখ্যার মাঝে বড়টি খুঁজে বের করে দেখাচ্ছেন, সেটা একটা অ্যালগরিদম। কিংবা পর্যায়ক্রমে এক থেকে দশ পর্যন্ত সংখ্যা প্রিন্ট করার ধাপগুলো লিখছেন, অ্যালগরিদম সেটাও। তবে আপনার মনুষ্য ভাষা তো যন্ত্র বুঝবে না, তাই নিজের ভাষায় যে অ্যালগরিদম লিখছেন সেটাকে তারপর যন্ত্রের ভাষায় রূপান্তর করে নেয়া লাগবে। আর কম্পিউটারের বোধগম্য ভাষা হলো বিভিন্ন প্রোগ্রামিং ল্যাঙ্গুয়েজ। সি, পাইথন, জাভা এগুলো ভিন্ন ভিন্ন প্রোগ্রামিং ল্যাঙ্গুয়েজের নাম, যেগুলো আপনার অ্যালগরিদমকে কম্পিউটারের কাছে বোধগম্য করে তুলবে। প্রোগ্রামিংয়ের ভাষাকে সংক্ষেপে কোড বলা হয়।
সমস্যা সমাধানের ধারা
সহজে বোধগম্য ভাষায় একটি অ্যালগরিদম দেখা যাক। এক থেকে দশ পর্যন্ত সংখ্যা প্রিন্ট করার উদাহরণটাই বিবেচনা করা যাক। আগেই বলা হয়েছে, অ্যালগরিদমে কোনো কাজ সম্পাদন করার ধাপগুলো নির্ধারিত থাকা চাই। তাহলে সেই মতো ১ থেকে ১০ ক্রমানুসারে সংখ্যাগুলো কম্পিউটারের পর্দায় দেখাতে চাইলে কেমন হতে পারে অ্যালগরিদম, দেখুন তো আপনার ভাবনার সাথে মেলে কিনা।
ধাপ ১: x নামক ধ্রুবকের মান ০ দিয়ে সূচিত করি
ধাপ ২: x এর মান ১ বৃদ্ধি করি
ধাপ ৩: x এর মান প্রিন্ট করি
ধাপ ৪: যদি x এর মান ১০ এর চেয়ে ছোট হয় তবে ধাপ ২-এ ফেরত যাই এবং পরবর্তী নির্দেশনা অনুসরণ করি
ধাপ ৫: যদি x এর মান ১০ এর সমান কিংবা ১০ থেকে বড় হয়, কাজ সমাপ্ত করি
ফ্লো চার্টের ব্যবহার
তো, এই ছিলো একটি সহজ অ্যালগরিদম, যা কয়েকটি ধাপের মাধ্যমে লেখা হয়েছে। একই জিনিস আপনি ফ্লো চার্টে দেখাতে পারেন। ফ্লো চার্ট মানে গ্রাফিক্যাল উপস্থাপন, যা আপনার কথাগুলোকে কিছুটা সাংকেতিক রূপ দেবে এবং সংক্ষিপ্ত করবে। অ্যালগরিদম লেখার জন্য ফ্লো চার্টে বিভিন্ন ধরনের প্রতীকের ব্যবহার হয়, যেগুলো বাক্সের মতো দেখতে এবং যারা ভিন্ন ভিন্ন মানে বহন করে। যেমন, শুরু এবং শেষ নির্দেশ করা বাক্স দেখতে এক রকম, আবার সিদ্ধান্ত নির্দেশ করা বাক্সের চেহারা ভিন্ন রকম হয়।
অ্যালগরিদমের উৎপত্তি
ইতিহাস বলে, নবম শতাব্দীর ফার্সি বিজ্ঞানী, গণিতবিদ ও জ্যোতিষী মুহাম্মদ ইবনে মুসা আল-খোয়ারিজমি হচ্ছেন অ্যালগরিদমের জনক। তার নাম আল-খোয়ারিজমিই থেকেই নামকরণ হয়েছে অ্যালগরিদমের। শুরুতে শব্দটা ছিলো ‘অ্যালগরিজম’ এবং এটি ব্যবহৃত হতো গাণিতিক সমস্যা সমাধানের নিয়মাবলী নির্দেশ করতে। পরবর্তীতে শব্দটি ‘অ্যালগরিদমে’ পরিণত হয়।
অ্যালগরিদমের আছে অনেক রকমফের
কম্পিউটার বিজ্ঞান একমাত্রিক কোনো বিষয় নয়; এর আছে অনেকগুলো শাখা, ভিন্ন ভিন্ন বিষয় নিয়ে কাজ করে সেগুলো। আর সেসব কাজ সামলাতে অ্যালগরিদমও আছে বিভিন্ন রকমের। অপারেটিং সিস্টেমে যে অ্যালগরিদম আপনি কাজে লাগাচ্ছেন, আর্টিফিশিয়াল ইন্টেলিজেন্সের জন্য তা খাটবে না। তার জন্য আছে ভিন্ন ধরনের অ্যালগরিদম, যেগুলো আবার নেটওয়ার্কিংয়ের ক্ষেত্রে কাজের উপযোগী হবে না।
বহুল ব্যবহৃত কিছু অ্যালগরিদম
কিছু অ্যালগরিদমের নাম দেয়া হচ্ছে নিচে, যেগুলো সিএসই অর্থাৎ কম্পিউটার বিজ্ঞান ও প্রকৌশলের জগতে বহুল ব্যবহৃত ও বিখ্যাত। জটিল সব সমস্যার সমাধানকে সহজ করে কম্পিউটার বিদ্যাকে মানুষের কাছে আরো বোধগম্য করে তুলতে কাজ করছে এসব অ্যালগরিদম।
সর্টিং অ্যালগোরিদমের নাম নিতে গেলে অবশ্যই বলতে হয় সিলেকশন সর্ট, ইনসারশন সর্ট, মার্জ সর্ট, বাবল সর্ট, কুইক সর্ট, হিপ সর্ট এসব অ্যালগোরিদমের কথা। সর্টিং অ্যালগোরিদম সংখ্যা বিন্যাসের কাজে ব্যবহৃত হয়। এই অ্যালগোরিদমগুলোর একেকটি কাজ করে একেক পদ্ধতিতে। যেমন- একটি পদ্ধতি হচ্ছে ডিভাইড অ্যান্ড কনকার পদ্ধতি, যেটি কিছু সংখ্যাকে ভাগ করে নেবে প্রথমে, আর তারপর একটি নির্দিষ্ট ভাগে কাজ করবে।
ইন্টারনেটের সুরক্ষা নিয়ে কথা বলতে গেলে আবশ্যিকভাবে আসবে আরএসএ (RSA) অ্যালগোরিদমের নাম। ক্রিপ্টোগ্রাফির বিখ্যাত এই অ্যালগোরিদম তৈরি না হলে হয়তো ইন্টারনেট ব্যবহারের অনেক দিকই এখনো অধরা থাকতো। ক্রিপ্টোগ্রাফি বা সাংকেতিক লিপির ধারণাকে সাধারণ মানুষের কাছে পরিচিত করে তুলতে অবদান রেখেছে এই অ্যালগোরিদম। ডেটা সিকিউরিটিতে ভূমিকা রাখা এমন আরেকটি অ্যালগোরিদম হলো সিকিউর হ্যাশ অ্যালগোরিদম।
জেনেটিক অ্যালগোরিদম ব্যবহার করা হয় কৃত্রিম বুদ্ধিমত্তা শাখায়। এই ক্ষেত্রে আরো আছে ট্র্যাভেলিং সেলসম্যান অ্যালগোরিদম, লজিস্টিক রিগ্রেশন অ্যালগোরিদম। এদের প্রতিটিরই রয়েছে গুরুত্বপূর্ণ ব্যবহার।
নামটা শুনতেই যা একটু খটমট, কিন্তু সাধারণ মানুষের অনেক অনেক কষ্টের লাঘব করে কম্পিউটার বিদ্যাকে আরো সহজ করে তুলতে কাজ করে চলা অ্যালগোরিদমকে তার কাজের জন্যই ভালোবাসা যায় কিন্তু, তাই না?