কম্পিউটার

সংখ্যার সমান সমষ্টি সহ সমস্ত সাবঅ্যারে খুঁজুন? জাভাস্ক্রিপ্ট (স্লাইডিং উইন্ডো অ্যালগরিদম)


আমরা সংখ্যার একটি অ্যারে এবং একটি সংখ্যা দেওয়া হয়; আমাদের কাজ হল একটি ফাংশন লেখা যা সমস্ত সাব অ্যারেগুলির অ্যানারে প্রদান করে যা দ্বিতীয় আর্গুমেন্ট হিসাবে প্রদত্ত সংখ্যার সাথে যোগ করে৷

যেমন −

const arr =[23, 5, 1, 34, 12, 67, 9, 31, 6, 7, 27];const sum =40;console.log(requiredSum(arr, sum));

নিম্নলিখিত অ্যারে-

আউটপুট করা উচিত <প্রে>[ [ 5, 1, 34 ], [ 9, 31 ], [ 6, 7, 27 ] ]

কারণ এই 3টি সাব অ্যারের প্রতিটি 40 পর্যন্ত যোগ করে।

স্লাইডিং উইন্ডো অ্যালগরিদম (লিনিয়ার টাইম)

এই অ্যালগরিদমটি বেশিরভাগ ক্ষেত্রে ব্যবহৃত হয় যখন আমাদেরকে নির্দিষ্ট মানদণ্ড পূরণ করে এমন একটি স্ট্রিং-এর মধ্যে একটি অ্যারে/সাবস্ট্রিং-এর মধ্যে সাবয়ারে খুঁজে বের করতে হয়। এবং এই সমস্যাটি হল স্লাইডিং উইন্ডো অ্যালগরিদমের জন্য একটি নিখুঁত প্রার্থী৷

স্লাইডিং উইন্ডো অ্যালগরিদম এর নাম থেকে যা বোঝায়, আমরা একটি উইন্ডো তৈরি করি যা মূল অ্যারের একটি সাবয়ারে ছাড়া কিছুই নয়। এই উইন্ডোটি কমিয়ে বাড়ানোর মাধ্যমে স্থিতিশীলতা লাভ করার চেষ্টা করে।

স্থিতিশীলতা বলতে আমরা সমস্যায় নির্দিষ্ট শর্ত বলতে বোঝায় (যেমন এখানে একটি নির্দিষ্ট সংখ্যা যোগ করা)। এটি স্থিতিশীল হয়ে গেলে আমরা উইন্ডোটি রেকর্ড করি এবং এটিকে স্লাইড করা চালিয়ে যাই৷ সাধারণত, 90% সমস্যায়, আমরা উইন্ডোটিকে বাম থেকে শুরু করি এবং এটি অ্যারে / স্ট্রিংয়ের শেষ পর্যন্ত না আসা পর্যন্ত এটিকে স্লাইড করতে থাকি৷

আসুন আমরা স্লাইডিং উইন্ডোজ অ্যালগরিদমের সাথে নিজেদেরকে আরও পরিচিত করতে কোডটি দেখি৷

উদাহরণ

const arr =[23, 5, 1, 34, 12, 67, 9, 31, 6, 7, 27];const sum =40;const findSub =(arr, sum) => { const আবশ্যক =[ ]; for(শুরু =0, শেষ =0, s =0; শেষ <=arr.length || s> sum; ){ if(s  যোগফল){ s -=arr[start]; শুরু++; }else{ প্রয়োজনীয়. push(arr.slice(start, end)); s -=arr[start]; s +=arr[শেষ]; শুরু++; শেষ++; }; }; রিটার্ন প্রয়োজন;};console.log(findSub(arr, sum));

শুরু এবং শেষ ভেরিয়েবলগুলি বিভিন্ন পয়েন্টে উইন্ডোর শুরু এবং শেষের অবস্থান নির্দেশ করে৷

প্রাথমিকভাবে উভয়ই 0 এ শুরু হয়েছিল, তারপরে প্রয়োজনীয় যোগফল প্রদত্ত যোগফলের চেয়ে কম হলে আমরা উইন্ডোর আকার বাড়িয়ে দিতাম, উইন্ডোর আকার বেশি হলে কমিয়ে দিতাম এবং যে কোনও সময়ে উভয়ই সমতুল্য হলে, আমরা সেই সাব্যারেটিকে প্রয়োজনীয় অ্যারেতে ঠেলে দিতাম। এবং ইউনিট দূরত্ব অনুসারে উইন্ডোটি ডানদিকে সরানো হয়েছে৷

আউটপুট

কনসোলে এই কোডের আউটপুট হবে −

<প্রে>[ [ 5, 1, 34 ], [ 9, 31 ], [ 6, 7, 27 ] ]
  1. একটি সংখ্যা X খুঁজুন যার অঙ্কের যোগফল C++ এ N এর সমান

  2. C++ এ 1 এবং 0 এর সমান সংখ্যা সহ সাবয়ারে গণনা করুন

  3. C++ এ 0 যোগ সহ সমস্ত সাবয়ারে প্রিন্ট করুন

  4. পাইথনে ন্যূনতম সংখ্যক অপারেশন সহ সমান সমষ্টি অ্যারে খুঁজে বের করার প্রোগ্রাম