আমি সংখ্যার একটি তালিকা বাছাই করার কথা, তবে আমি খুব অলস। সমস্ত নম্বর ক্রমবর্ধমান ক্রম না হওয়া অবধি কীভাবে সমস্ত সংখ্যার অদলবদল করা যায় তা চিত্রিত করা সত্যিই কঠিন, তাই আমি আমার নিজস্ব অ্যালগরিদম নিয়ে এসেছি যা গ্যারান্টি দিয়ে দেবে যে নতুন তালিকাটি সাজানো হয়েছে ¹ এখানে কিভাবে এটা কাজ করে:
আকার N এর তালিকার জন্য আমাদের N-1 পুনরাবৃত্তি প্রয়োজন। প্রতিটি পুনরাবৃত্তির উপর,
N'th সংখ্যা N + 1'th সংখ্যার চেয়ে ছোট কিনা তা পরীক্ষা করুন । যদি এটি হয় তবে এই দুটি সংখ্যা ইতিমধ্যে বাছাই করা হয়েছে এবং আমরা এই পুনরাবৃত্তিটি এড়িয়ে যেতে পারি।
যদি সেগুলি না হয় তবে এই দুটি সংখ্যা ক্রমযুক্ত না হওয়া পর্যন্ত আপনাকে প্রথম এন সংখ্যা ক্রমাগত হ্রাস করতে হবে ।
আসুন একটি কংক্রিট উদাহরণ গ্রহণ করা যাক। ধরা যাক ইনপুটটি ছিল
10 5 7 6 1
প্রথম পুনরাবৃত্তিতে আমরা 10 এবং 5 এর তুলনা করব 10 টি 5 এর চেয়ে বড়, সুতরাং এটি ছোট হওয়া অবধি এটি হ্রাস করব:
4 5 7 6 1
এখন আমরা 5 এবং 7 তুলনা করি 5 5 এর চেয়ে ছোট, সুতরাং আমাদের এই পুনরাবৃত্তির উপর কিছু করার দরকার নেই। সুতরাং আমরা পরের দিকে যান এবং 7 এবং 6 তুলনা করুন। 7 6 এর চেয়ে বড়, সুতরাং আমরা 6 টির চেয়ে ছোট হওয়া অবধি প্রথম তিনটি সংখ্যা হ্রাস করব এবং আমরা এটি পেয়েছি:
2 3 5 6 1
এখন আমরা 6 এবং 1 এর তুলনা করি Again আবার, 6 1 এর চেয়ে বড়, সুতরাং আমরা 1 টির চেয়ে ছোট হওয়া অবধি প্রথম চারটি সংখ্যা হ্রাস করব এবং আমরা এটি পেয়েছি:
-4 -3 -1 0 1
এবং আমরা শেষ! এখন আমাদের তালিকা নিখুঁত বাছাই ক্রমে। এবং জিনিসগুলিকে আরও উন্নত করতে আমাদের কেবল এন -1 বারের মধ্যে তালিকাটি পুনরাবৃত্তি করতে হয়েছিল , সুতরাং এই অ্যালগরিদমটি ও (এন -১) সময় অনুসারে তালিকা সাজায়, যা আমি নিশ্চিত যে সেখানে সবচেয়ে দ্রুততম অ্যালগরিদম ²
আপনার আজকের চ্যালেঞ্জ এই অলস বাছাইটি বাস্তবায়ন করা। আপনার প্রোগ্রাম বা ফাংশনটি আপনার পছন্দসই মানক বিন্যাসে পূর্ণসংখ্যার একটি অ্যারে দেওয়া হবে এবং আপনাকে অবশ্যই এই অলস বাছাই করে নতুন "সাজানো" তালিকাটি ফিরিয়ে দিতে হবে । অ্যারে কখনই খালি হবে না বা অ-পূর্ণসংখ্যা থাকবে।
এখানে কিছু উদাহরন:
Input: 10 5 7 6 1
Output: -4 -3 -1 0 1
Input: 3 2 1
Output: -1 0 1
Input: 1 2 3
Output: 1 2 3
Input: 19
Output: 19
Input: 1 1 1 1 1 1 1 1 1
Output: -7 -6 -5 -4 -3 -2 -1 0 1
Input: 5 7 11 6 16 2 9 16 6 16
Output: -27 -25 -21 -20 -10 -9 -2 5 6 16
Input: -8 17 9 7
Output: -20 5 6 7
সর্বদা হিসাবে, এটি কোড-গল্ফ , তাই আপনি যা করতে পারেন তারতমতম প্রোগ্রামটি লিখুন!
¹ এটির অর্থ যা বোঝায় এটির অর্থ এটি নয় তবে এটি প্রযুক্তিগতভাবে সত্য
² আমি সম্পূর্ণ মজা করছি, দয়া করে আমাকে ঘৃণা করবেন না
<sarcasm>
এই বাছাই করা অ্যালগরিদমটি এখনও O(N^2)
সময় জটিলতায় আটকে থাকে কারণ আপনাকে হ্রাস করতে তালিকার পূর্বের অ্যাক্সেসযুক্ত আইটেমগুলির মধ্যে দিয়ে যেতে হবে। আমি পরিবর্তে তালিকাটি পিছনের দিকে যাওয়ার পরামর্শ দিন এবং প্রয়োজনীয় হিসাবে ধাপে কেবল একটি সংখ্যা হ্রাস করুন। এটি আপনাকে সত্য O(N)
জটিলতা দেবে! </sarcasm>
O(n^2)
মেমরি অ্যাক্সেসের ক্ষেত্রে তবে এটি O(n)
তুলনার জন্য নয় ?
O(N^2)
।