মার্জ বাছাই একটি বাছাই করা অ্যালগরিদম যা প্রদত্ত তালিকাকে অর্ধেক ভাগে বিভক্ত করে পুনরাবৃত্তভাবে ছোট দুটি তালিকা বাছাই করে এবং সেগুলি একসাথে সাজানো তালিকায় আবার একত্রিত করে কাজ করে। পুনরাবৃত্তির বেস কেসটি একটি একক তালিকায় উপস্থিত হয়, যা আরও বিভক্ত হতে পারে না তবে ইতোমধ্যে সাজানো সংজ্ঞা অনুসারে।
তালিকার অ্যালগরিদমের কার্য সম্পাদন [1,7,6,3,3,2,5]
নিম্নলিখিত পদ্ধতিতে দৃশ্যমান হতে পারে:
[1,7,6,3,3,2,5]
/ \ split
[1,7,6,3] [3,2,5]
/ \ / \ split
[1,7] [6,3] [3,2] [5]
/ \ / \ / \ | split
[1] [7] [6] [3] [3] [2] [5]
\ / \ / \ / | merge
[1,7] [3,6] [2,3] [5]
\ / \ / merge
[1,3,6,7] [2,3,5]
\ / merge
[1,2,3,3,5,6,7]
কাজটি
একটি প্রোগ্রাম বা ফাংশন লিখুন যা ইনপুট হিসাবে কোনও যুক্তিসঙ্গত উপায়ে পূর্ণসংখ্যার একটি তালিকা গ্রহণ করে এবং এই তালিকার বিভিন্ন পার্টিশনটি মার্জ্ট সাজানোর অ্যালগরিদমের দ্বারা বাছাই করার সময় ভিজ্যুয়ালাইজ করে। এর অর্থ আপনাকে উপরের মতো কোনও গ্রাফ আউটপুট করতে হবে না , তবে কেবল তালিকাগুলি ঠিক আছে:
[1,7,6,3,3,2,5]
[1,7,6,3][3,2,5]
[1,7][6,3][3,2][5]
[1][7][6][3][3][2][5]
[1,7][3,6][2,3][5]
[1,3,6,7][2,3,5]
[1,2,3,3,5,6,7]
তদতিরিক্ত, যে কোনও যুক্তিসঙ্গত তালিকার স্বরলিপি ঠিক আছে, সুতরাং নিম্নলিখিতটিও একটি বৈধ আউটপুট হবে:
1 7 6 3 3 2 5
1 7 6 3|3 2 5
1 7|6 3|3 2|5
1|7|6|3|3|2|5
1 7|3 6|2 3|5
1 3 6 7|2 3 5
1 2 3 3 5 6 7
অবশেষে, দুটি ছোট তালিকায় একটি তালিকা বিভক্ত করার উপায় আপনার পক্ষে যতক্ষণ না উভয় ফলাফলের তালিকার দৈর্ঘ্য একের পর এক পৃথক হয়। এর অর্থ হল এর মধ্যে বিভক্ত [3,2,4,3,7]
হওয়ার পরিবর্তে [3,2,4]
এবং [3,7]
আপনি সমান এবং বিজোড় সূচকগুলিতে ( [3,4,7]
এবং [2,3]
) উপাদানগুলি নিয়েও বিভক্ত করতে পারেন বা প্রতিবার বিভাজনটিকে এলোমেলো করেও দিতে পারেন।
এটি কোড-গল্ফ , তাই কোনও ভাষার সংক্ষিপ্ততম কোডটি বাইট জিতায় পরিমাপ করা।
পরীক্ষার মামলা
উপরে উল্লিখিত হিসাবে, আসল ফর্ম্যাট এবং তালিকা অর্ধেক বিভক্ত করার উপায় আপনার উপর নির্ভর করে।
[10,2]
[10][2]
[2,10]
[4,17,1,32]
[4,17][1,32]
[4][17][1][32]
[4,17][1,32]
[1,4,17,32]
[6,5,4,3,2,1]
[6,5,4][3,2,1]
[6,5][4][3,2][1]
[6][5][4][3][2][1]
[5,6][4][2,3][1] <- Important: This step cannot be [5,6][3,4][1,2], because 3 and 4 are on different branches in the the tree
[4,5,6][1,2,3]
[1,2,3,4,5,6]
[[1,2],[3],[4,5],[6]]
পর্যায়টি আসলে সঠিক সমাধান, কারণ মার্জ সাজ্ট পুনরাবৃত্তভাবে কাজ করছে। এটি হ'ল যদি আমরা [1,2,3,4,5,6]
এটির সাথে শুরু করি এবং এর মধ্যে বিভক্ত হয়ে যাই [1,2,3]
এবং [4,5,6]
তখন সেই তালিকাগুলি চূড়ান্ত পদক্ষেপে মার্জ না হওয়া অবধি স্বাধীনভাবে প্রক্রিয়া করা হবে।
[3]
এবং [2,1]
তারপর, ঐ, বিভিন্ন শাখা রয়েছে তাই আমরা মার্জ করতে পারবেন না [3]
এবং [2]
পরে [2,1]
বিভক্ত করা [2]
এবং [1]
।