মার্জ সাজানোর "বিভাজক" পদক্ষেপটি কি এড়ানো যেতে পারে?


13

বাছাই মার্জ

সুতরাং মার্জ সাজানোর একটি বিভাজন এবং বিজয়ী অ্যালগরিদম। আমি যখন উপরের চিত্রটি দেখছিলাম তখন আমি ভাবছিলাম যে মূলত সমস্ত বিভাজন পদক্ষেপগুলি বাইপাস করা সম্ভব কিনা।

আপনি দু'একটি লাফানোর সময় যদি মূল অ্যারেটি দিয়ে পুনরাবৃত্তি করেন তবে আপনি উপাদানগুলি সূচক i এবং i + 1 এ পেয়ে তাদের নিজের সাজানো অ্যারেতে রাখতে পারেন। এই সমস্ত সাব-অ্যারে একবার ([7,14], [3,12], [9,11] এবং [২,]] ডায়াগ্রামে দেখানো হয়েছে) হয়ে গেলে, আপনি কেবল সাধারণ মার্জ রুটিনটি পেতে এগিয়ে যেতে পারেন একটি সাজানো অ্যারে

অ্যারের মাধ্যমে পুনরুক্তি করা এবং তত্ক্ষণাত প্রয়োজনীয় উপ-অ্যারেগুলি তাদের সম্পূর্ণরূপে বিভাজন পদক্ষেপগুলি সম্পাদন করার চেয়ে কম দক্ষ তৈরি করা উচিত?


সম্পর্কিত: cs.stackexchange.com/questions/77075/…
ওমর

উত্তর:


29

বিভ্রান্তিটি অ্যালগরিদমের ধারণাগত বিবরণ এবং এর প্রয়োগের মধ্যে পার্থক্য থেকে উদ্ভূত হয়েছিল ।

যৌক্তিকভাবে মার্জ সাজানোর বর্ণনাটিকে অ্যারেটিকে আরও ছোট অ্যারেতে বিভক্ত করা এবং তারপরে আবার একত্রিত করা হিসাবে বর্ণনা করা হয়। তবে, "অ্যারের বিভক্ত করা" "মেমরিতে সম্পূর্ণ নতুন অ্যারে তৈরি করা" বা এর মতো কিছু বোঝায় না - এটি কোড হিসাবে প্রয়োগ করা যেতে পারে

/*
 * Note: array is now split into  [0..n) and [n..N)
 */

যেমন কোনও আসল কাজ হয় না, এবং "বিভাজন" নিখুঁত ধারণা। সুতরাং আপনি যা পরামর্শ দেন তা অবশ্যই কাজ করে তবে যৌক্তিকভাবে আপনি এখনও অ্যারেগুলিকে "বিভাজন" করছেন - এটি করার জন্য আপনার কেবল কম্পিউটার থেকে কোনও কাজের দরকার নেই :-)


4
ব্যক্তিগতভাবে আমি নীচে আপ সংযুক্তি সাজানোর পছন্দ করি কারণ এটি এমনভাবে প্রয়োগ করা সহজ যা আপনাকে প্রতিটি পুনরাবৃত্তির স্তরে কোনও টেম্প বাফার বরাদ্দ এড়াতে দেয়। পরিবর্তে আপনি একবার বাফার বরাদ্দ করুন এবং তাদের মধ্যে পিং-পং করুন।
র‌্যাচেট ফ্রিক

এটি - বিভাজন গণনাগতভাবে কোনও অপ-অপশন ... প্লাস ওপস পরামর্শটি কেবলমাত্র একক উপাদান অ্যারেগুলির সংশ্লেষের সমতুল্যের পরিচয়, এবং ২ য় ধাপ থেকে মার্জটি ব্যবহার করা শুরু করে, যা অনর্থক বলে মনে হয়, কারণ আসল একীকরণ ঠিক তেমনি কাজ করে। এটি অপ্টিমাইজ করার কোনও মানে নেই। এটি কেবল অপ্রয়োজনীয় ধারণা এবং যুক্তি উপস্থাপন করে।
luk32

@ আর্টচেতফ্রোক: আমি এটি খুব পছন্দ করি তবে দুঃখের বিষয় এটি টপ-ডাউনের সমতুল্য নয় (কমপক্ষে আমি জানি যে সংস্করণটি)) এটি আলাদাভাবে মার্জ করাটি করবে, মূলত পরবর্তী পাওয়ার -২-এর অ্যারে দৈর্ঘ্য পর্যন্ত গোলাকার, যা আমি মনে করি এটি কিছুটা ধীর হতে পারে। আপনি কি এমন কোনও নীচের সংস্করণ সম্পর্কে জানেন যা অন্য কোথাও মোটা ব্যয় না দিয়ে ঠিক একই মার্জ হয়?
ব্যবহারকারী541686

@ মেহরদাদ একমাত্র আসল ইস্যুটি হ'ল সামান্য লেজ যা একত্রীকরণ করা দরকার the সবচেয়ে খারাপ ক্ষেত্রে এর অর্থ দাঁড়ায় দৈর্ঘ্যের অ্যারেগুলির জন্য একটি আইটেমে একত্রীকরণের জন্য অন্য পাস 1<<n+1। যদিও আমি নিশ্চিত যে আপনি জিনিসগুলিকে সামঞ্জস্য করতে পারেন তাই খুব ছোট লেজটি নীচের পাসে মিশে যায়।
ratchet freak

@psmears "আপনার কম্পিউটার থেকে কোনও কাজ করার দরকার নেই" - সুতরাং আমি অনুমান করছি যে কিছু পুনরাবৃত্ত ডিভাইড ফাংশন (উদাহরণ চিত্রের মধ্যে 7 টি কল) এন কলগুলির পারফরম্যান্স ব্যয়টি মূলত নগণ্য?
জিমি_রোস্টাল 12:58

11

আমি অনুমান করি আপনি কী বোঝাতে চাইছেন তা হ'ল ডাউন-আপ বাস্তবায়ন । নীচের অংশে প্রয়োগের ক্ষেত্রে আপনি একক ঘরের উপাদানগুলি থেকে উপাদানগুলিকে বড় আকারের সাজানো তালিকাগুলি / অ্যারেগুলিতে মার্জ করে উপরের দিকে চলে যান move মাঝের অ্যারে থেকে শুরু করে উপরের দিকে আপনার চিত্রের তীরগুলি বিপরীত করুন, অর্থাত্, এক-উপাদান অ্যারেগুলি।

এছাড়াও, আপনি অ্যারেগুলি কিছু ধ্রুব আকারে না পৌঁছানো পর্যন্ত বিভাজক করে মার্জ সাজকে অনুকূলিত করতে চাইতে পারেন , যার পরে আপনি কেবল উদাহরণস্বরূপ সন্নিবেশ সাজানোর সাহায্যে এগুলি সাজান।

অন্যথায়, অ্যারের বিভাজন ছাড়াই বাছাই করা সম্ভব নয়। প্রকৃতপক্ষে মার্জ সাজ্টের সূচনাটি subarrays কে ভাগ করে বাছাই করছে, অর্থাত্ বিভাজন এবং বিজয়ী।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.