স্পট-অন চেঞ্জ হোটেলের ভিতরে একটি স্যুভেনির দোকানের গর্বিত মালিক হিসাবে নিজেকে কল্পনা করুন। ক্যাশ রেজিস্টার বন্ধ করার সময়, আপনি 8 ইউরোর বেশি লক্ষ্য করেন। মনে হচ্ছে একজন অতিথি সঠিক পরিবর্তনটি পাননি। এতে হোটেলের সুনাম নষ্ট হতে পারে। এটি এড়াতে, আপনি ভুল পরিবর্তনের রহস্য সমাধান করার সিদ্ধান্ত নেন। দোকানের নগদ ব্যবস্থা খোলার পরে, আপনি আবিষ্কার করেন যে দুটি ভিন্ন অ্যাকাউন্টে ত্রুটি ঘটেছে!
আপনি একটি পরিকল্পনা তৈরি করুন: প্রতিটি ঘরে গিয়ে অতিথিদের জিজ্ঞাসা করুন যে তারা দোকানে কী পরিবর্তন পেয়েছেন যতক্ষণ না আপনি ভুল বিল সহ দুটি খুঁজে পান। প্রথম তলায় পৌঁছে, একজন অতিথি পরিবর্তনের জন্য 4 ইউরো পাওয়ার রিপোর্ট করেছেন। আপনি গণনা করেন যে আপনাকে এমন একটি সংখ্যা খুঁজে বের করতে হবে যা 4 ইউরোতে যোগ করলে ফলাফল 8 হয়। দ্বিতীয় তলায় গেলে অতিথির পরিবর্তন হল 5 ইউরো। 4 + 5 ফলাফল 9, তাই এটি এই এক হতে পারে না… পঞ্চম তলা, ষষ্ঠ… দশম, না, না, না!
যেহেতু আপনি প্রথম প্রচেষ্টায় মানটি খুঁজে পাননি, আপনি দ্বিতীয় তলায় নেমে যান এবং সমস্ত অতিথিদের তাদের পরিবর্তন সম্পর্কে আবার জিজ্ঞাসা করতে শুরু করেন যাতে আপনি পরবর্তী ফ্লোরের মানের সাথে এটি তুলনা করতে পারেন, ক্লান্তিকর, তা নয় এটা? কম্পিউটার বিজ্ঞানে, এই অনুসন্ধান পদ্ধতিটিকে ব্রুট ফোর্স বলা হয়, একটি অত্যন্ত ধীরগতির অনুসন্ধান পদ্ধতি যা অ্যারেতে নিম্নলিখিতগুলির সাথে একটি আইটেমের তুলনা করে কাজ করে।
এটি অনেক সময় ব্যয় করে এবং কার্যকর নয়, স্পট-অন চেঞ্জ হোটেলের সমস্ত ফ্লোরে কয়েকবার উপরে ও নীচে যাওয়ার কল্পনা করুন! এটি আপনার জন্য ব্যবহারিক নয় এবং কম্পিউটারের জন্যও ব্যবহারিক নয়।
আপনি যদি একটি সফ্টওয়্যার প্রোগ্রামে মেঝেতে উপরে এবং নীচের দিকে যাওয়া কীভাবে হবে সে সম্পর্কে কৌতূহলী হন তবে এটি জাভাস্ক্রিপ্টে এরকম দেখাবে:
twoSum(nums, target) { for (let i = 0; i < nums.length; i++) { for (let j = i + 1; j < nums.length; j++) { if (nums[i] + nums[j] === target) { return [i, j]; } } } }
শান্তভাবে পরিস্থিতি মূল্যায়ন করার পরে, আপনি বুঝতে পারেন যে ভুল পরিবর্তনের সাথে দুটি অতিথিকে খুঁজে পাওয়ার আরও কার্যকর উপায় রয়েছে।
আপনি আপনার প্রাথমিক গাণিতিক অন্তর্দৃষ্টি পরিমার্জন করেন যে 9 ইউরো সমান x + y। কিছুটা পাটিগণিত প্রয়োগ করলে, আপনি বুঝতে পারবেন যে: x + y = 9 হল y = 9 — x বলার মতই, এবং এটি আপনার অনুসন্ধানের কার্যকারিতা বাড়ানোর সময় সমস্ত পার্থক্য তৈরি করে।
আরেকটি বিষয় যা আপনার কৌশলে পরিবর্তিত হয়েছে তা হল অতিথিরা আপনাকে যে মানগুলি বলেছে তা লিখতে আপনি এখন একটি নোটপ্যাড নেবেন, তাই আপনাকে অতিথিদের জন্য একই মান দুইবার জিজ্ঞাসা করতে হবে না এবং আপনাকে ব্যয় করতে হবে না দিন সিঁড়ি উপরে এবং নিচে যাচ্ছে. (লিফট ভাঙ্গার জন্য কি ভয়ানক সময়!)
নতুন টুল হাতে নিয়ে, আপনি প্রথম তলায় যান, যেখানে একজন অতিথি আপনাকে জানান যে তাদের 5 ইউরো পরিবর্তন করা হয়েছে। আপনি এটিকে {5: 0} হিসাবে রেকর্ড করেন, 0 অবস্থানে 5 এর মান নির্দেশ করে। সমীকরণে 5 দিয়ে x প্রতিস্থাপন করে, আপনি y = 8-5 গণনা করবেন, যার ফলে y = 3 হবে। যেহেতু আপনার নোটপ্যাড এখনও খালি, আপনি করবেন না 3 নম্বরটি রেকর্ড করা নেই, যা ফলাফল 8-এ পৌঁছানোর জন্য 5-এর পরিপূরক সংখ্যা হবে। তারপর আপনি আপনার নোটপ্যাডে 5 নম্বরটি লিখুন (মনে রাখবেন যে এই মুহূর্তে যাচাইকৃত নম্বরটি সর্বদা লিখতে হবে এবং এর পরিপূরক নয়; আপনি আপনি যে টার্গেট নম্বর লিখে রেখেছেন তার সাথে তুলনা করতে শুধুমাত্র পরিপূরক ব্যবহার করবে)। আপনি দ্বিতীয় অতিথির কাছে যান, যিনি পরিবর্তনে 2 ইউরো পাওয়ার কথা উল্লেখ করেছেন। সূত্রটি আবার প্রয়োগ করা হচ্ছে: y = 8–2 => y = 6, আপনি আপনার রেকর্ড পরীক্ষা করুন, যেখানে আপনি 6 নম্বরটি খুঁজে পাচ্ছেন না। এভাবে, আপনি আপনার রেকর্ডে 2 যোগ করুন, যা এখন দাঁড়ায় {5:0, 2:1}। অনুসন্ধান অব্যাহত, পরবর্তী অতিথি প্রাপ্তির রিপোর্ট 3 ইউরো পরিবর্তন. আপনি আবার গণনা করুন: y = 8–3 => y = 5। বিঙ্গো! আপনি আপনার নোটপ্যাডে একটি 5 রেকর্ড আছে! ফ্লোর 0 থেকে অতিথি 2 তলা থেকে একজনের পরিপূরক! এই পদ্ধতিটি একটি হ্যাশ টেবিল হিসাবে পরিচিত, এবং এটি আপনার এবং কম্পিউটার উভয়ের জন্যই অনেক দ্রুত এবং কার্যকর। জাভাস্ক্রিপ্টে, এটি নিম্নরূপ প্রয়োগ করা হবে:
twoSum(nums, target) { const myTable = {}; for (let i = 0; i < nums.length; i++) { const complementaryNumber = target - nums[i]; if (complementaryNumber in myTable) { return [i, myTable[complementaryNumber]]; } myTable[nums[i]] = i; } }
এটি লিটকোড থেকে একটি সহজ সমস্যা যা আপনি এর পিছনের ধারণাগুলি বোঝার পরেই সহজ হয়ে যায়। আমি সুপারিশ করছি যে আপনি নিজেই সমস্যাটি সমাধান করার চেষ্টা করুন এবং এর পিছনে অন্তর্দৃষ্টি তৈরি করার চেষ্টা করার জন্য কিছু সময় ব্যয় করুন, আপনার নিজস্ব সাদৃশ্য তৈরি করুন, পর্যালোচনা করুন এবং সমাধানের দিকে যাওয়ার আগে সিউডোকোড লেখার চেষ্টা করুন।
আমি আশা করি আমার সাদৃশ্য আপনাকে দুটি সমষ্টি চ্যালেঞ্জের পিছনের ধারণাগুলি আরও ভালভাবে বুঝতে সাহায্য করেছে।
পরে আবার দেখা হবে!