এই চ্যালেঞ্জটি একটি ভর্তি পরীক্ষা থেকে শুরু করে একটি বদ্ধ নম্বর সাইবার সুরক্ষা কোর্স পর্যন্ত to যাইহোক এটি সাইবার সুরক্ষার সাথে করার দরকার নেই, এটি কেবলমাত্র শিক্ষার্থীদের যৌক্তিক এবং কোডিং দক্ষতা পরীক্ষা করার জন্য।
কার্য
একটি প্রোগ্রাম লিখুন যা অ্যারের থেকে এন্ট্রিগুলিকে সরিয়ে দেয় যাতে বাকী মানগুলি কঠোরভাবে হ্রাসমান ক্রমে সাজানো হয় এবং অন্যান্য সম্ভাব্য হ্রাস ক্রমগুলির মধ্যে তাদের যোগফলটি সর্বাধিক হয়।
ইনপুট এবং আউটপুট
ইনপুটটি পূর্ণসংখ্যার মানগুলির একটি অ্যারে হবে যা একে অপরের চেয়ে কঠোরভাবে বৃহত্তর0
এবং সমস্ত পৃথক । আপনি ফাইল, কমান্ড লাইন বা স্টিডিন থেকে ইনপুট পড়বেন কিনা তা চয়ন করতে পারেন।
আউটপুট হ'ল ইনপুটটির একটি উত্থিত-বাছাই করা সাবহারি হবে, যার যোগফল অন্য সম্ভাব্য উতরাই-বাছাই করা সাবহারির চেয়ে বেশি ray
দ্রষ্টব্য: [5, 4, 3, 2]
এটির নিকটবর্তী এবং [5, 4, 1, 3, 2]
এমনকি না হলেও এটির একটি সাবহারে । কেবলমাত্র পপ করা হয়েছিল।4
3
1
ব্রুটেফোর্স সমাধান
অবশ্যই সবচেয়ে সহজ সমাধানটি প্রদত্ত অ্যারের সমস্ত সম্ভাব্য সংমিশ্রণের মধ্যে পুনরাবৃত্তি হবে এবং পাইথনের সর্বাধিক যোগফলের সাথে বাছাই করা সন্ধান করবে :
import itertools
def best_sum_desc_subarray(ary):
best_sum_so_far = 0
best_subarray_so_far = []
for k in range(1, len(ary)):
for comb in itertools.combinations(ary, k):
if sum(comb) > best_sum_so_far and all(comb[j] > comb[j+1] for j in range(len(comb)-1)):
best_subarray_so_far = list(comb)
best_sum_so_far = sum(comb)
return best_subarray_so_far
দুর্ভাগ্যবশত, চেক যদি অ্যারের অনুসারে বাছাই করা হয়, এবং এটি এর উপাদানের সমষ্টি গণক থেকে হয় এবং এই অপারেশন থেকে সম্পন্ন করা হবে বার জন্য থেকে থেকে , মধ্যে asymptotic সময় জটিলতা হতে হবে
চ্যালেঞ্জ
আপনার লক্ষ্য উপরের ব্রুটফোর্সের চেয়ে আরও ভাল সময়ের জটিলতা অর্জন করা। ক্ষুদ্রতম অ্যাসিম্পটিক সময় জটিলতার সাথে সমাধানটি চ্যালেঞ্জের বিজয়ী। যদি দুটি সমাধানের একই অ্যাসিপটোটিক সময়ের জটিলতা থাকে তবে বিজয়ীর মধ্যে ক্ষুদ্রতম অ্যাসিপটোটিক স্থানিক জটিলতা রয়েছে।
দ্রষ্টব্য: আপনি পড়তে, লিখতে এবং পারমাণবিক তুলনায় এমনকি বৃহত সংখ্যায় বিবেচনা করতে পারেন ।
দ্রষ্টব্য: যদি দুটি বা আরও বেশি সমাধান থাকে তবে সেগুলির মধ্যে দুটিই ফিরে আসে।
পরীক্ষার মামলা
Input: [200, 100, 400]
Output: [400]
Input: [4, 3, 2, 1, 5]
Output: [4, 3, 2, 1]
Input: [50, 40, 30, 20, 10]
Output: [50, 40, 30, 20, 10]
Input: [389, 207, 155, 300, 299, 170, 158, 65]
Output: [389, 300, 299, 170, 158, 65]
Input: [19, 20, 2, 18, 13, 14, 8, 9, 4, 6, 16, 1, 15, 12, 3, 7, 17, 5, 10, 11]
Output: [20, 18, 16, 15, 12, 7, 5]
Input: [14, 12, 24, 21, 6, 10, 19, 1, 5, 8, 17, 7, 9, 15, 23, 20, 25, 11, 13, 4, 3, 22, 18, 2, 16]
Output: [24, 21, 19, 17, 15, 13, 4, 3, 2]
Input: [25, 15, 3, 6, 24, 30, 23, 7, 1, 10, 16, 29, 12, 13, 22, 8, 17, 14, 20, 11, 9, 18, 28, 21, 26, 27, 4, 2, 19, 5]
Output: [25, 24, 23, 22, 17, 14, 11, 9, 4, 2]