যন্ত্র গণকের যন্তর মন্তর - ২
১৭ ই ফেব্রুয়ারি, ২০০৯ সকাল ১০:৪৪
করিম সাহেবের জাম্বুরা কেনা
করিম সাহেব বাজারে গিয়েছেন জাম্বুরা কিনতে। দোকানী এক গাদা জাম্বুরা সাজিয়ে বসে আছে, সবগুলো দেখতে একই আকারের লাগছে। কিন্তু জাম্বুরা কিনে কিনে চুল পাকানো করিম সাহেব ভালো করেই জানেন, জাম্বুরা যত ভারী হবে, ততো তার স্বাদ ভালো, মজা বেশি।
প্রশ্ন হলো, করিম সাহেব কী করে একগাদা জাম্বুরা থেকে সবচেয়ে ভারীটি বের করবেন।
-----------------------
পাঠ ২
কম্পিউটার প্রোগ্রামিং এ এরকম সমস্যা প্রায়ই আসে, একটা তালিকা থেকে সবচেয়ে বেশি বা কম বা এরকম কিছু একটাকে খুঁজে বের করতে হবে। ধরা যাক, ১০০টা সংখ্যা দেয়া আছে, তার থেকে সবচেয়ে বড় সংখ্যাটা বের করতে হবে।
বিশাল সমস্যা! বেকুব কম্পিউটারকে পুরাটা একবারে দিলে লেজে-গোবরে করে ফেলবে। আসুন, প্রথমে সমস্যাটাকে ছোট করে ফেলি।
-----------------------
১টা যদি সংখ্যা হয়, তাহলে তো আর ঝামেলা নাই। যেটা আছে, সেটাই সবচেয়ে বড়। কাজ শেষ।
২টা যদি সংখ্যা হয়, তাহলে তাদের তুলনা করলেই পাবো কোনটা বড়। সংখ্যা দুইটা ডানহাত ও বামহাত – এই দুই জায়গায় নিয়ে বুঝতে পারি কোনটা বড়। করিম সাহেবের সমস্যায় যদি ফেরত যাই, তাহলে করিম সাহেব দুইটা জাম্বুরা দুই হাতে নিয়ে বুঝতে পারবেন সহজেই কোনটা ভারি।
এখন যদি দুই এর বেশি হয়, ধরা যাক ৩টা, তাহলে? সেটাও সহজ, প্রথমে করিম সাহেব প্রথম দুইটা জাম্বুরা দুই হাতে নিলেন, ধরা যাক ডান হাতেরটা ভারি। তখন বাম হাতেরটা ফেলে ৩য় জাম্বুরাটা বাম হাতে নিলেন, দেখতে চেষ্টা করলেন কোনটা ভারি। ডান হাতে আছে প্রথম দুইটার মধ্যের ভারিটা, আর বাম হাতে অন্যটা, এর মধ্যে যেইটা ভারি হবে, সেটাই ৩টা জাম্বুরার সবচেয়ে ভারিটা।
-----------------------
এই কাজটাকে একটু সাংকেতিক ভাবে এভাবে লেখা যায়, ধরাযাক সংখ্যাগুলো আছে x, y, z এই তিনটা নামে,
যদি x ও y এর মধ্যে x বড় হয়, তাহলে x ও z এর মধ্যে যেটা বড়, সেটাই বৃহত্তম,
অন্যথায় যদি
x ও y এর মধ্যে y বড় হয়, তাহলে y ও z এর মধ্যে যেটা বড়, সেটাই বৃহত্তম।
এই কথাটাই যেকোনো প্রোগ্রামিং ভাষায় লেখা যায়, যেমন ধরুন C ভাষায় লেখা যায় –
![]()
দুর্বোধ্য লাগছে? আসলেই ... এই জিনিষটাকে আরো সংক্ষেপে খুব সহজেই লিখতে পারি এইভাবে -
![]()
মানে তিনটা সংখ্যার প্রথম দুইটার মধ্যে বড় যেটা, সেটার সাথে পরেরটার তুলনা করে যেটাকে বড় পাবো, সেটাই সবচেয়ে বড়।
-----------------------
আচ্ছা, ৩টা সংখ্যার মধ্যে না হয় এই দুই লাইনে বের করা গেলো বড় সংখ্যাটি। কিন্তু যদি ৩টার যায়গায় ৩০০ বা ১কোটি সংখ্যা থাকে? করিম সাহেবের কথাই ধরা যাক, ঝুড়িতে যদি ৫০টি জাম্বুরা থাকে, তাহলে কী করবেন তিনি?
মূলনীতিটা কিন্তু একই থাকছে, কাজেই এভাবে আগানো যেতে পারে,
শুরুতে কোনটা ভারী, তা করিম সাহেব জানেননা, তাই তিনি আন্দাজে একটা বেছে নিয়ে ধরলেন সেইটাই সবচেয়ে ভারী। ঐ জাম্বুরাটাকে নিয়ে রাখলেন ডানহাতে।
এবার ঝুড়ি থেকে একটা একটা জাম্বুরা বাম হাতে নেন, আর দেখেন ডান হাতেরটার চেয়ে এই নতুনটা ভারী কি না। যদি ভারী হয়, তাহলে কথাই নেই, ডান হাতেরটাকে অন্য কোথাও রেখে দিয়ে ডান হাতে পাচার করে দেন বা হাত থেকে নতুন ভারী জাম্বুরাটি। এভাবে একটা একটা করে ঝুড়ির সবগুলো দেখা হয়ে গেলে সব শেষে করিম সাহেবের ডান হাতে যা থাকছে, সেটাই ঝুড়ির সবচেয়ে ভারী জাম্বুরা।
-----------------------
এবার বেকুব কম্পিউটারকে এরকম ব্যাপার কীভাবে সাংকেতিক উপায়ে বোঝানো যায়, তার একটা রূপরেখা দেখা যাক। ধরাযাক, ১০০টি জাম্বুরা আছে, যাদের নম্বর দেয়া হলো ০ থেকে ৯৯ পর্যন্ত (কম্পিউটার বিজ্ঞানীরা আবার ০ থেকে গোণা শুরু করে)। আর জাম্বুরা গুলোর ওজন ধরা যাক আছে weight[0] থেকে weight[99] এভাবে।
আমাদের কাজ হবে বেকুব কম্পিউটারকে বোঝানো, ১০০টি জিনিষের মধ্যে সবচেয়ে ভারী কোনটা, সেটার ক্রমিক নম্বরটি আমাদের জানানোর কৌশল।
শুরুতে, ধরে নেই প্রথমটি সবচেয়ে ভারী।
heaviest = 0 ; (প্রথমটির ক্রমিক নং হলো ০ )
আর সবচেয়ে ভারী জাম্বুরাটির ওজন আমরা মনে রাখবো max_weight নামে, প্রথমে যেহেতু ধরেছি শুরুর জাম্বুরার ওজন বেশি, তাই সেটার ওজনকেই এখানে মনে রাখি।
max_weight = weight[0];
এবার এক এক করে বাকি গুলোকে পরীক্ষা করি, দেখি এই max_weight এর বেশি পাই কি না
(আমরা একটা একটা করে না লিখে বেকুব কম্পিউটার যেইটা ভালো পারে, সেই পুনরাবৃত্তি তথা লুপের মাধ্যমে করা যায়। সংখ্যা যেহেতু ১০০টি, কাজেই আমাদের অত বার মাপামাপির কাজ করলেই চলবে। এই জন্য কম্পিউটারকে নির্দেশ দেয়া যাক, ১০০ বার সে একটা করে ওজন তুলুক, তার পর দেখুক এইটা আগের চেয়ে ভারী কি না)
![]()
ব্যস, এই কাজটুকু শেষ ওজন পর্যন্ত করে গেলেই সব শেষে heaviest এর মধ্যে পাবো সবচে ভারী জাম্বুরাটির ক্রমিক নম্বর, আর তার ওজন পাবো max_weight এর মধ্যে।
-----------------------
সুতরাং, আজকের পাঠে আমরা দেখতে পেলাম, ভারী হালকা বের করার কাজটা আমরা সুকৌশলে বেকুব কম্পিউটারের ঘাড়ে গছিয়ে দিতে পারি, যাতে করে আমরা নাকে তেল দিয়ে আরামে ঘুমোতে পারি, আর করিম সাহেবও জাম্বুরা কেনায় বিশাল দাওটি মারতে পারেন।
লেখাটির বিষয়বস্তু(ট্যাগ/কি-ওয়ার্ড): প্রোগ্রামিং, বই ;
প্রকাশ করা হয়েছে: ফানটুশ বিভাগে । সর্বশেষ এডিট : ১৭ ই ফেব্রুয়ারি, ২০০৯ সকাল ১০:৪৮ | বিষয়বস্তুর স্বত্বাধিকার ও সম্পূর্ণ দায় কেবলমাত্র প্রকাশকারীর...
খোলা_আকাশ বলেছেন:
প্রিয়তে রাখলাম। পরে পড়ব।
বাবুয়া বলেছেন:
এপর্বেও বলছি-অসাধারন!
অসাধারন!!
অসাধারন!!!
ধন্যবাদ।
অনেক অনেক ধন্যবাদ।
তোমার প্রচেস্টা সফল হবে ইনশআল্লাহ।
লেখক বলেছেন: ধন্যবাদ।
অমাবশ্যার চাঁদ বলেছেন:
+ প্রিয়তে রেখেছি
নির্বাসন বলেছেন:
আবারো বলছি...বই আকারে দেখার আশায় রইলাম
আমার জন্য লেখা বলেছেন:
Data structure আর Algorithm ক্লাশের কথা মনে পইরা গেল। +
রাগিব ভাই, আপনার এই ব্যতিক্রমি এবং অসাধারন লেখা থেকে খুব কম লোকেই উপকৃত হতে পারবে এবং কম লোকের হাতেই পৌছবে যদি না আপনি এটা বই আকারে প্রকাশ করেন।
মন্তব্য করলাম যদিও আমি প্রোগামিং-এর প-ও জানি না বা বুঝি না, তবে এবার বুঝবো মনে হয়।
আপনাকে অসংখ্য ধন্যবাদ দিলেও খাটো করা হবে।
লেখক বলেছেন: এই সিরিজ পড়ে কেউ প্রোগ্রামার হয়তো হবেন না, কিন্তু কম্পিউটার যে যাদুর বাক্স না, বরং মানুষের চিন্তা করার পদ্ধতিরই দ্রুত সংস্করণ, সেই ব্যাপারটা পরিস্কার হবে।
আকন্দ বলেছেন:
+++++++++++
সাঁঝবাতি'র রুপকথা বলেছেন:
অনেক বই পড়েছি, কিন্তু ইফ এলস আর ফর লুপ এর এরকম বর্ননা দেখিনাই ...আহারে, আমার ১/১ এর দিকে যদি কিছুদিন আপনার হেল্প পেতাম...
লেখক বলেছেন: সব বইতে খালি কোড লিখে। ভাবখানা এমন, আগে কোড লিখা মুখস্ত করো, মানে পরে বুঝা যাবে। বিদেশেও যা বই দেখেছি, ঐ একই রকম অবস্থা।
মন মণষা বলেছেন:
বিষয় গুলো যুক্তিগত ভাবে স্বাভাবিক হয়ে আসছে...যদিও সি জানি না। তার পরেও লজিক গুলোতে মজা পাচ্ছি। সুভাশিস-সাধুবাদ-চলতে থাকুক...
শাশ্বত শুভ্র বলেছেন:
সেই ১ ১ এর কথা মনে পরে গেলো..... খুব ভালো লাগলো, এভাবে প্রথম থেকে বুঝানো হলে প্রোগ্রামিং বুঝতে ছাত্রদের কষ্ট অনেক কম হতো.....
লেখক বলেছেন: আমার প্রিয় ফল।
নির্বাসন বলেছেন:
রাগিব ভাই আপনার মেইল এড্রেস পেতে পারি?
লেখক বলেছেন: আমার ওয়েবসাইটেই রয়েছে।
ইসানুর বলেছেন:
ঐ পাড়ায় পড়ছিলাম। ভাল লাগছে।
সাদাকালোরঙিন বলেছেন:
আগের লেখাটা মিস করেছিলাম, একসাথে দুটোই পড়ে নিলাম । উদ্যোগকে সাধুবাদ জানানোর ভাষা জানা নেই । আমাদের দেশে প্রযুক্তি বিদেশী ভাষার ( ও তার খটোমটো অনুবাদের ) চাপায় পড়ে সঠিক আগ্রহ তৈরী করতে ব্যর্থ হয়। আপনার উদ্যোগ সার্থক হোক ।
সাদাকালোরঙিন বলেছেন:
আগের লেখাটা মিস করেছিলাম, একসাথে দুটোই পড়ে নিলাম । উদ্যোগকে সাধুবাদ জানানোর ভাষা জানা নেই । আমাদের দেশে প্রযুক্তি বিদেশী ভাষার ( ও তার খটোমটো অনুবাদের ) চাপায় পড়ে সঠিক আগ্রহ তৈরী করতে ব্যর্থ হয়। আপনার উদ্যোগ সার্থক হোক ।
লেখক বলেছেন: ধন্যবাদ।
ভাঙ্গা পেন্সিল বলেছেন:
স্ক্রীনশট ভালো কাজ করছে। আর এগুলা দেইখা এখন মাথার চুল ছিড়া ছাড়া কিছু করার নাই। আফসুসিত হইতেই পড়তে আসি
শফিউল আলম ইমন বলেছেন:
আপনার উদাহরণ এবং লেখার ষ্টাইল অসাধরণ। যে কেউ খুব সহজে বুঝতে পারবে। আশা রাখি খুব শীঘ্রই আপনার বই বের হবে। শুরুটা ও চমৎকার। চালিয়ে যান। পরেরটার অপেক্ষায় রইলাম।ভালো থাকুন।
লেখক বলেছেন: ধন্যবাদ। পরের পর্বে সময় লাগবে একটু ... ![]()
মানচুমাহারা বলেছেন:
ভাইয়া আপনাকে একটু দরকার ছিলো। আমি বীর প্রতীক সিতারা বেগমের ৩টি ছবি পেয়েছি। ড: রফিক নামে একজন আমাকে ছবিগুলো মেইল করেছেন। ছবিগুলো উইকিতে দান করতে উনার কোন আপত্তি নাই। আমাকে কি একটা মেইল করতে পারবেন হাই লিখে। উকিতে ছবি যুক্ত করাটা আমি জানি না আর উইকি স্ট্যাইলে লেখাও শিখি নাই।লেখক বলেছেন: জবাব দিয়েছি।
মোতাব্বির কাগু বলেছেন:
চালিয়ে যান। পরেরটার অপেক্ষায় রইলাম।
লবঙ্গ বলেছেন:
একটা অনুরোধ সবগুলো সিরিজ শেষ হলে পিডিএফ ফরম্যাট এ দিবেন হার্ডকপি রাখতে পারবো।
পাপী বলেছেন:
বাপরে মনে হইতেছে প্রোগ্রামিংটা শিখে ফেলতে পারবো।
বাংলাদেশী সাইকেল ভ্রমণকারী বলেছেন:
পুরোটা পড়লাম, পরে আবার পড়তে হবে বুঝার জন্য।
অঞ্জন সানি বলেছেন:
সহজ কথাটা সহজে বলা অনেক কঠিন............আপনি সেটা করে দেখাচ্ছেন.........কম্পাইলার সেশনাল বহুত যন্ত্রনা দিছে এইবার......সামনে ও এস......
লেখক বলেছেন: গুড লাক।
নিহন বলেছেন:
ধন্যবাদ ,অনেক কিছু জানলাম ।
রাগিব ভাই ! আমি আপনার পোষ্টগুলির একজন মনোযোগী পাঠক। বিষেষ করে, পোগ্রামিং সম্পর্কিত পোষ্টগুলির। আমার বিশ্বাস, শুধু আমিই নই, আরো অনেকেও রয়েছেন। আপনার পোষ্টগুলি পড়েই সর্বপ্রথম আমি প্রচলিত পোগ্রামিং ল্যাঙ্গুয়েজ ও কম্পাইলারগুলি সম্পর্কে একটি মোটাদাগের ধারণা পেলাম। যা ভবিষ্যতে আমাকে অশেষ সাহায্য করবে বলেই আমার ধারণা।
আমি একটি বিষয় জানতে চাচ্ছিলাম। ঠিক আপনার পোষ্ট প্রসঙ্গে নয়, তবে সম্পূর্ণ অপ্রাসঙ্গিকও বলা যাবে না। বলেই ফেলি-
আমি জাভা ল্যাঙ্গুয়েজ শিখতে চাচ্ছি। ঢাকায়, বিশেষ করে ধানমন্ডি/মোহাম্মদপুরের কাছাকাছি কোন ভালো প্রতিষ্ঠান আছে কি ? বিভিন্ন জায়গায় বিচিত্র রকমের এ্যাড দেখে থাকি। কিন্তু এ বিষয়ে আমার জানার খামতি আছে বলে কারো পরামর্শের প্রয়োজন বোধ করছি।
আশা করছি,- তথ্য দিয়ে বাধিত করবেন।
আবারো ধন্যবাদ ! !
লেখক বলেছেন: ধন্যবাদ, মাসরুর।
আমি গত ৫ বছর ধরে প্রবাসী, তাই দেশে জাভা শেখার ভালো জায়গা কোনটা তা বলতে পারছি না। বুয়েটের আইআইসিটিতে সম্ভবত জাভা শেখানোর কোর্স আছে, ওখানে দেখতে পারেন। লাভ দুইটা - ওখানে যারা পড়াবে, তাদের মানের উপরে কিছুটা হলেও ভরসা রাখতে পারেন। আর ওখান থেকে দেয়া সার্টিফিকেট কাজে দেবে।
আর অত ঝামেলায় না যেতে চাইলে কম্পিউটার বিজ্ঞানের ছাত্র, প্রোগ্রামিং শেখায় এমন কারো সাথে যোগাযোগ করতে পারেন। ক্লাসে অনেকজনের মধ্যে শেখার চাইতে কারো কাছে ব্যাচে বা একান্তে পড়ায় অনেক বেশি কাজ হবে।
প্লাস.............
সরি রাগিব ভাই.....
অপ্সরা বলেছেন:
মাথায় সারাক্ষণ অংক গিজগিজ করছে মনে হয়। আমি অংক ভয় পাই।
কালপুরুষ বলেছেন:
ওরে বাবা! কঠিন বিষয়। অংক দেখলেই মাথা ঘুরে।
সোনাবীজ; অথবা ধুলোবালিছাই বলেছেন:
১। জাম্বুরাঅলার পিটুনি খাবার একটা দারুণ ব্যবস্থা।২। কম্পিউটার প্রোগ্রামিং খুব জটিল লাগে, তাই সূত্রগুলো আর দেখলাম না।
ভালো স্টাইল উপস্থাপনার।
সাইফুর বলেছেন:
শুভজন্মদিন
শেরজা তপন বলেছেন:
ভয়াবহ জটিল -মাথায় ঢুকছে না কিছুই
আকাশনীল বলেছেন:
রাগিব ভাই, অসাধারন হইছে। আমার আফসুসিত হোয়া ছাড়া কিছু করার নাই। আমার মনে হয় প্রোগ্রামিং এ বিন্দুমাত্র আগ্রহ যার নাই সে ও আগ্রহী হবে এভাবে বুঝালে। জুনিয়র প্রজন্মের জন্য প্লিজ আপনি বই আকারে প্রকাশ করবেন সিরিজটা। সামনে অ্যারে, পয়েন্টার কিভাবে বোঝান দেখার জন্য অধীর আগ্রহে থাকলাম।
মোহাইমেন বলেছেন:
ভালো লাগতেছে, সুন্দর লেখা।@শেরজা তপন সহ আরো অনেককে: রাগিব ভাইয়ের প্রচেষ্টা সুন্দর। কঠিন ব্যাপারটাকে সহজবোধো করে তোলার চেষ্টা করতেছেন।
অংক-গনিত কোনো ব্যাপার না। অংকে কাচা থাকলেও কোনো প্রবলেম নাই। প্রোগ্রামিং এ গতানুগতিক গনিতে ভালো না হলেও কিছু একটা প্রোগ্রাম লিখে ফেলতে পারবেন। গনিত ভালো পারলে ভালো না পারলেও ক্ষতি নাই। কারন সাধারন এপলিকেশনে আপনি সরাসরি গনিত প্রয়োগ করবেন না। এর ব্যবহার একটু ভিন্ন। রাগিব ভাইয়ের লেখা দেখে মনে হচ্ছে, তার লেখা আর একটু ইনটারনেট ঘাটাঘাটি করলে আমরাও কিছু শিখতে পারবো।
মোহাইমেন বলেছেন:
রাগিব ভাই এ্যারেতে টেষ্ট টিউব কনসেপ্ট কেমন হয়?আর পয়েন্টারে মনে হয় বহুল ব্যবহৃত 'ফাইল সর্টকাট' এর এক্সামপল আমাদের সহজ বোধগম্য হবে, অবশ্য এটা আমার অভিমত।
লেখক বলেছেন: আসলেই একটু ব্যস্ত। ৩য় পর্ব অর্ধেক লেখা আছে, বাকিটা লিখে অচিরেই পোস্ট দিবো।
চিকনমিয়া বলেছেন:
হেপি বাড্ডে
ডেরেক জিটার বলেছেন:
রাগিব ভাই, প্রোগ্রামিং শিখতে হলে কোন ল্যাঙ্গুয়েজ দিয়ে শুরু করা ভাল? আমি স্কুলে থাকতে ভিবি ৬ কিছুটা শিখেছিলাম। প্রোগ্রামিং এর লজিক মোটামুটি বুঝি। কিন্তু সি# শিখতে গিয়ে দেখলাম ১০০০ পৃষ্ঠার বই জটিল সব থিওরীতে ভর্তি কিন্তু উইন্ডোজ অ্যাপ্লিকেশন তৈরি সম্পর্কে প্রায় কিছুই নেই। এজন্য বেশিদিন ধৈর্য রাখতে পারি নি।
সন্ন্যাসী কবি বলেছেন:
বুড়া বয়সে আমার মাথায় প্রোগ্রামিং ডুকবো? তারপরে চেষ্টায় আছি
গেয়ান অর্জনের কোন বয়স নাই।
হ্যাজাক বাতি বলেছেন:
আমি বুয়েটের গণকযন্ত্র কৌশলের শেষবর্ষের ছাত্র। এখনো মনে আছে ১-১ এর সি এর ভয়াবহ ক্লাসগুলার কথা, পরে বুঝতে পারসি যে প্রোগ্রামিং জিনিসটা কত মজার, কিন্তু শুরুর দিনগুলা আসলেই ভয়াবহ ছিল। লজিক, সিন্ট্যাক্স কোনোটাই ঠিকমত পড়ায় নাই, হ-য-ব-র-ল কইরে কোনরকমে ১-১ পার হইসিল। এই সিরিজের পরের পোস্টগুলার অপেক্ষায় থাকলাম।
লেখক বলেছেন: সি কোর্সটা আসলে বেশ বেখাপ্পা ভাবেই পড়ানো হয়। দুর্ভাগ্যবশত আমি আমার শিক্ষকতার অল্প সময়টাতে সি-এর ক্লাস পড়াতে পারিনি ... সে দায়িত্ব পেলে হয়তো অন্যভাবে পড়াবার চেষ্টা করতাম।
সেপ্টেম্বর মাস থেকে এই সিরিজের বাকি পর্বগুলো দেয়ার আশা রাখি।
মাহফুজ খান বলেছেন:
রাগিব ভাই অসাধারন হয়েছে। চালিয়ে যান। মনে পড়ে, ঠিক এভাবেই আপনি আমাদের পড়াতের।
মাহফুজ খান বলেছেন:
রাগিব ভাই অসাধারন হয়েছে। চালিয়ে যান। মনে পড়ে, ঠিক এভাবেই আপনি আমাদের পড়াতেন।
সামহোয়্যার ইন...ব্লগ বাঁধ ভাঙার আওয়াজ, মাতৃভাষা বাংলায় একটি উন্মুক্ত ও স্বাধীন মত প্রকাশের সুবিধা প্রদানকারী প্ল্যাটফর্ম। এখানে প্রকাশিত লেখা, মন্তব্য, ছবি, অডিও, ভিডিও বা যাবতীয় কার্যকলাপের সম্পূর্ণ দায় শুধুমাত্র সংশ্লিষ্ট প্রকাশকারীর...























