গত পর্বে আমরা লিনিয়ার সার্চ কি ? কিভাবে ইমপ্লিমেন্ট করতে হয় তা সম্পর্কে শিখেছিলাম। এই আর্টিকেলে আমরা ছোট একটা প্রব্লেম লিনিয়ার সার্চ ব্যাবহার করে সমাধান করবো ।
প্রব্লেমের নাম - নাম্বারের খোজে
আপনি যদি প্রব্লেমটি বুঝে থাকেন তাহলে কোড লিখা শুরু করে দিন আর যদি বুঝে থাকেন কিন্তু সমাধান করতে নাহ পারেন তাহলে আমি আপনাকে সমাধানটি করে দিচ্ছি -
প্রব্লেমটিতে বলা হয়েছে যে, ইনপুট হিসেবে একটি নাম্বারের অ্যারে nums এবং অ্যারে থেকে যে নাম্বার খোজ করবো অর্থাৎ x নিতে হবে । তারপর অ্যারের প্রথম অর্ধেকের প্রত্যেকটা উপাদানের সাথে 5 যোগ করে পুরো অ্যারেতে x কে খুজতে হবে । যদি x কে অ্যারেতে পাওয়া যায় তাহলে আউটপুট হিসেবে একটি স্ট্রিং YES অথবা NO প্রিন্ট করতে হবে ।
আমরা এই প্রব্লেমটি প্লেইন জাভাস্ক্রিপ্ট দিয়ে সমাধান করবো । সমস্যাটি আপনি অনেক ভাবেই সমাধান করতে পারেন , তবে আমরা গত লেকচারের অনুসারে অর্থাৎ লিনিয়ার সার্চ ব্যাবহার করবো -
১। প্রথমে একটি ফাংশন নিই -
const findTheNumber = (nums, x) => {
// code here
}
আমি findTheNumber() নামে একটি ফাংশন এবং দুইটি প্যাঁরামিটার
nums এবং x নিয়েছি । এখন উপরোক্ত প্রব্লেমটি সমাধান করা যাক -
const findTheNumber = (nums, x) => {
// অ্যারের মাঝের ইনডেক্স নাম্বার
let halfNumber = Math.floor(nums.length/2);
// nums অ্যারের দ্বিতীয় অর্ধেক array তে রাখলাম
let array = [...nums.slice(halfNumber, nums.length - 1)];
// nums অ্যারের প্রথম অর্ধেকে লুপ চালাইলাম
for(let i = 0; i <= halfNumber; i++){
// nums অ্যারের প্রথম অর্ধেকের প্রত্যেকে উপাদানের সাথে
// ৫ যোগ করে array তে রাখলাম
array.push(nums[i] + 5);
};
// এখন আমরা (array) এই অ্যারেতে লিনিয়ার সার্চ ব্যাবহার করে x খুজবো
let isFound = false;
for(let j = 0; j<array.length; j++){
if(array[j] === x){
isFound = true;
}
}
// যদি isFound = true হয় তাহলে YES নয়তো NO রিটার্ন করি
return (isFound ? "YES" : "NO");
}
প্রত্যেকটি লাইনে কমেন্ট আউট করে বোঝানো হয়েছে কিভাবে কি করতেছে । তারপরেও যদি আপনি নাহ বুঝেন তাহলে একটু একটু করে কোড লিখুন এবং রান করুন ।
এই সমাধানটা আমরা আরও অনেকভাবে সমাধান করতে পারি, কোডও অনেক ছোট হবে । কিন্তু পুরো-পুরি লিনিয়ার সার্চ অ্যালগরিদম ব্যাবহার করে করলাম যাতে আগের লেকচারের ইমপ্লিমেন্টেশনটাও অ্যাপ্লায় করতে পারি ।
সমাধান একটু বড় হলেও কিন্তু সহজ এখন টেস্ট কেস গুলো অ্যাপ্লায় করে দেখি প্রোগ্রাম ঠিকঠাক কাজ করে কি নাহ ?
১। প্রথম টেস্ট কেস পরীক্ষা -
let result = findTheNumber([1,2,3,4,5],7);
console.log(result);
// YES
১। দ্বিতীয় টেস্ট কেস পরীক্ষা -
let result = findTheNumber([10,20,30,40],70);
console.log(result);
// NO
সবকিছু ঠিকঠাক ।
সবার সুবিধার্থে উপরের সমাধানটি কোনো প্রকার কমেন্ট ছাড়া দেওয়া হইলো -
const findTheNumber = (nums, x) => {
let halfNumber = Math.floor(nums.length/2);
let array = [...nums.slice(halfNumber, nums.length - 1)];
for(let i = 0; i <= halfNumber; i++){
array.push(nums[i] + 5);
};
// linear search apply
let isFound = false;
for(let j = 0; j<array.length; j++){
if(array[j] === x){
isFound = true;
}
}
return (isFound ? "YES" : "NO");
}
ধন্যবাদ সবাইকে আজকে এই পর্যন্তই।
# linear search problem
# linear search algorithm
0 comments:
Post a Comment