অ্যালগরিদম কেন শিখবেন?
সমস্যা সমাধানের রেসিপি
অ্যালগরিদম হলো সমস্যা সমাধানের জন্য ধাপে ধাপে তৈরি একটি রেসিপি। আপনি প্রতিদিন অ্যালগরিদম ব্যবহার করেন — শুধু তাকে এই নামে ডাকেন না। এক ডেক তাস সাজানো? অ্যালগরিদম। অফিসে যাওয়ার সবচেয়ে দ্রুত রাস্তা খোঁজা? অ্যালগরিদম। ফোনের কন্টাক্ট লিস্টে একটি নাম খোঁজা? অ্যালগরিদম।
একটি ভালো ও খারাপ অ্যালগরিদমের পার্থক্য হলো, লাইব্রেরির ক্যাটালগ সিস্টেম ব্যবহার করে একটি বই খোঁজা আর বিল্ডিংয়ের প্রতিটি তাক তন্ন তন্ন করে খোঁজার মধ্যে যে পার্থক্য, ঠিক ততটাই। দুটোতেই কাজ হয়। একটিতে লাগে কয়েক সেকেন্ড, অন্যটিতে কয়েক ঘণ্টা।
কেন এটি শেখা জরুরি?
সত্যি করে বলতে, দৈনন্দিন কোডিংয়ে আপনাকে একদম শূন্য থেকে শর্টিং (sorting) অ্যালগরিদম লিখতে হবে না। লাইব্রেরিগুলো আপনার জন্য সেই কাজ করে দেয়। তাহলে কেন এগুলো শিখবেন?
কারণ অ্যালগরিদম আপনাকে কীভাবে চিন্তা করতে হয় তা শেখায়। এগুলো হলো ছদ্মবেশে থাকা দারুণ কিছু সমস্যা সমাধানের কৌশল যা প্রায় প্রতি ক্ষেত্রেই কাজে লাগে:
- বাইনারি সার্চ (Binary search) — সবকিছু চেক করার দরকার নেই। প্রতিবার সমস্যাকে অর্ধেক করে ফেলুন।
- ডিভাইড অ্যান্ড কনকার (Divide and conquer) — একটি বড় সমস্যাকে একই রকম ছোট ছোট সমস্যায় ভাগ করে ফেলুন।
- ডায়নামিক প্রোগ্রামিং (Dynamic programming) — যদি কোনো ছোট সমস্যার সমাধান আগে করে থাকেন, তবে সেটি আর দ্বিতীয়বার করার প্রয়োজন নেই।
- গ্রিডি অ্যালগরিদম (Greedy algorithms) — প্রতিটি পদক্ষেপে সেরা অপশনটি বেছে নিন এবং আশা করুন যে শেষ পর্যন্ত এটি দারুণ কাজ করবে।
- গ্রাফ ট্রাভার্সাল (Graph traversal) — নিয়মতান্ত্রিক উপায়ে সমস্ত সম্ভাবনা যাচাই করুন।
এগুলো কেবলমাত্র শিক্ষাগত কসরত নয়। এগুলো হলো মানসিক টুল বা হাতিয়ার, যা যেকোনো প্রযুক্তিগত সিদ্ধান্ত নিতে আপনার কাজে আসবে।
লিনিয়ার সার্চ বনাম বাইনারি সার্চ
একই ডেটা, একই উত্তর। কিন্তু বাইনারি সার্চে ৮,৭৬,০০০ বার চেক করার বদলে মাত্র ২০ বার চেক করতে হয়েছে। এটাই হলো O(n) এবং O(log n) এর মধ্যে তফাৎ — এবং ডেটার পরিমাণ যত বাড়ে, এই পার্থক্য তত নাটকীয় হতে থাকে।
অ্যালগরিদম আছে সবখানে
আপনার ব্যবহার করা প্রতিটি প্রযুক্তিই অ্যালগরিদম দ্বারা পরিচালিত:
- গুগল সার্চ — পেজর্যাংক (PageRank), গ্রাফ থিওরি ব্যবহার করে ওয়েব পেজগুলোর গুরুত্ব অনুসারে র্যাংক করার একটি অ্যালগরিদম।
- জিপিএস / গুগল ম্যাপস — ডাইকস্ট্রার অ্যালগরিদম (Dijkstra's algorithm) এবং এর অন্যান্য রূপ লাখ লাখ রাস্তার মধ্যে সবচেয়ে ছোট পথটি খুঁজে বের করে।
- নেটফ্লিক্স / স্পটিফাই — রেকমেন্ডেশন অ্যালগরিদম আপনার স্বভাব বিশ্লেষণ করে এবং আপনি এরপর কী পছন্দ করবেন সেই প্যাটার্ন খুঁজে বের করে।
- কমপ্রেশন (Compression) — আপনি যখন কোনো ফাইল জিপ (zip) করেন বা ভিডিও স্ট্রিম করেন, তখন হাফম্যান কোডিং (Huffman coding) এবং LZ77 এর মতো অ্যালগরিদমগুলো ডেটা সংকুচিত করে।
- এনক্রিপশন (Encryption) — RSA, AES — এমন অ্যালগরিদমগুলো যা আপনার পাসওয়ার্ড এবং ক্রেডিট কার্ড নিরাপদ রাখে।
- সোশ্যাল মিডিয়া ফিড — সর্টিং এবং র্যাংকিং অ্যালগরিদমগুলো ঠিক করে যে আপনি প্রথমেই কী দেখতে পাবেন।
বিগ-ও (Big-O) এর ধারণা
অ্যালগরিদমকে সাধারণত কতটা স্কেল করতে পারে তার ওপর ভিত্তি করে পরিমাপ করা হয়। যদি আপনার ডেটাসেটের আকার দ্বিগুণ হয়, তবে অ্যালগরিদম কি দ্বিগুণ সময় নেবে? নাকি সে প্রায় বুঝতেই পারবে না? ঠিক এই জিনিসটাই বিগ-ও নোটেশন (Big-O notation) দিয়ে প্রকাশ করা হয়:
- O(1) — একদম নির্দিষ্ট সময় (Constant time)। ডেটা ১০টি হোক বা ১০ বিলিয়ন, তাতে কিছুই যায় আসে না। এটি তাৎক্ষণিক কাজ করে।
- O(log n) — লগারিদমিক (Logarithmic)। ডেটা দ্বিগুণ করলেও এটি মাত্র একটি অতিরিক্ত ধাপ যোগ করে। বাইনারি সার্চ এভাবে কাজ করে।
- O(n) — লিনিয়ার (Linear)। ডেটা দ্বিগুণ মানে সময়ও দ্বিগুণ। একটি লিস্ট স্ক্যান করা এভাবেই কাজ করে।
- O(n log n) — ডেটা সাজানোর জন্য সবচেয়ে আদর্শ। মার্জ সর্ট (Merge sort) এবং কুইক সর্ট (quick sort) এই শ্রেণিতে পড়ে।
- O(n²) — কোয়াড্রাটিক (Quadratic)। ডেটা দ্বিগুণ হলে সময় ৪ গুণ লাগে। একই ডেটার মধ্যে নেস্টেড লুপগুলো এভাবেই কাজ করে।
- O(2ⁿ) — এক্সপোনেনশিয়াল (Exponential)। একটি নতুন আইটেম যোগ করলে সময় দ্বিগুণ হয়ে যায়। ব্রুট-ফোর্স (Brute-force) বা জোরাজুরির সমাধানগুলো এখানে এসে মুখ থুবড়ে পড়ে।
Complexity
ইন্টারভিউয়ের বাস্তবতা
চলুন এমন এক বিষয়ের কথা বলি যা সবাই এড়িয়ে যেতে চায়: কোডিং ইন্টারভিউ। গুগল, মেটা, অ্যামাজন, অ্যাপল এবং বেশির ভাগ টেক কোম্পানিই তাদের ইন্টারভিউতে অ্যালগরিদম নলেজ পরীক্ষা করে। আপনি পছন্দ করেন বা না-ই করেন, বাস্তবতা এটাই।
তবে মজার বিষয় হলো — কোম্পানিগুলো আপনার অ্যালগরিদম মুখস্থ করার ক্ষমতা পরীক্ষা করে না। তারা পরীক্ষা করে আপনার সমস্যা বিশ্লেষণ করার, প্যাটার্ন চেনার এবং এর কাজের গতি নিয়ে যুক্তি দেওয়ার ক্ষমতা। এগুলো রিয়েল-গেম ইঞ্জিনিয়ারিংয়ের জন্য আসলেই দারুণ সব দক্ষতা যা যেকোনো কাজেই ব্যবহার করা যায়।
সবচেয়ে ভালো ব্যাপার কী জানেন? এই অ্যালগরিদমিক চিন্তাগুলো কখনই পুরোনো হয় না বা হারিয়ে যায় না। ফ্রেমওয়ার্ক প্রতি বছর বদলায়। প্রোগ্রামিং ল্যাঙ্গুয়েজ আসে এবং যায়। কিন্তু অ্যালগরিদম দিয়ে চিন্তা করার এই ক্ষমতাটি রিয়েল লাইফ প্রব্লেম সলভের ক্ষেত্রে আপনাকে স্থায়ীভাবে আপগ্রেড করে দেবে।
ছোট কুইজ
পড়া চালিয়ে যান