কেন একীভূত O (লগ এন)?


27

Mergesort একটি বিভাজন এবং বিজয়ী অ্যালগরিদম এবং ও (লগ এন) কারণ ইনপুট বারবার অর্ধেক হয়ে যায়। তবে এটি ও (এন) হওয়া উচিত নয় কেননা প্রতিটি লুপটি ইনপুট অর্ধেক হয়ে গেলেও প্রতিটি ইনপুট আইটেমটি প্রতিটি অর্ধেক অ্যারেটিতে অদলবদল করতে পুনরাবৃত্তি করা প্রয়োজন? এটি আমার মনের মধ্যে মূলত অসম্পূর্ণভাবে হে (এন)। সম্ভব হলে উদাহরণ প্রদান করুন এবং কীভাবে সঠিকভাবে অপারেশনগুলি গণনা করবেন তা ব্যাখ্যা করুন! আমি এখনও কিছু আপ কোড করা হয়নি তবে আমি অনলাইনে অ্যালগরিদমগুলি খুঁজছি। উইকিপিডিয়া কীভাবে মার্জোর্টটি কাজ করে তা দৃশ্যত দেখানোর জন্য কী ব্যবহার করছে তার একটি জিআইএফ সংযুক্ত করেছি।

এখানে চিত্র বর্ণনা লিখুন


33
এটি ও (এন লগ এন)
এস্পেন স্কভ পেডারসেন

18
এমনকি'sশ্বরের বাছাই করা অ্যালগরিদম (একটি অনুমানের বাছাই করা অ্যালগরিদম যা একটি ওরাকলে অ্যাক্সেস করে যা প্রতিটি উপাদান সম্পর্কিত যেখানে এটি বলে) এর রানটাইম রয়েছে ও (এন) কারণ এটি প্রতিটি উপাদানকে অন্তত একবার ভুল অবস্থানে স্থানান্তরিত করতে হবে।
ফিলিপ

উত্তর:


59

এটি ও (এন * লগ (এন)), ও (লগ (এন)) নয়। আপনি যেমন সঠিকভাবে লক্ষ্য করেছেন, পুরো ইনপুটটি অবশ্যই পুনরাবৃত্তি করতে হবে এবং এটি অবশ্যই ও (লগ (এন)) বার হওয়া উচিত (ইনপুটটি কেবল অর্ধেক হে (লগ (এন)) বার হতে পারে)। এন আইটেমগুলি পুনরাবৃত্ত লগ (n) বার দেয় ও (এন লগ (এন))।

এটি প্রমাণিত হয়েছে যে কোনও তুলনা বাছাই এর চেয়ে দ্রুত কাজ করতে পারে না। কেবলমাত্র সেই ধরণের প্রতিরূপ যা ইনপুটটির কোনও বিশেষ সম্পত্তির উপর নির্ভর করে যেমন রেডিক্স সারণি এই জটিলতাটিকে হারাতে পারে। সংশ্লেষের ধ্রুবক কারণগুলি সাধারণত এতটা দুর্দান্ত নয় যদিও খারাপ জটিলতার সাথে অ্যালগরিদমগুলি প্রায়শই কম সময় নিতে পারে।


3
এস / দ্রুত / নিম্ন জটিলতা সহ /
জে কে।

33

মার্জ সাজানোর জটিলতা হ'ল O (nlogn) এবং নন O (লগইন)।

মার্জ সাজান একটি বিভাজন এবং বিজয়ী অ্যালগরিদম is এটিকে 3 টি পদক্ষেপের দিক দিয়ে ভাবুন -

  1. বিভাজন পদক্ষেপটি উপ-অ্যারেগুলির প্রত্যেকের মধ্যবিন্দুকে গণনা করে। এই পদক্ষেপের প্রতিটিটিতে O (1) সময় লাগে।
  2. বিজয়ী পদক্ষেপটি পুনরাবৃত্তভাবে এন / 2 (এমনকি এন এর জন্য) প্রতিটি উপাদানের দুটি সাববারি সাজায়।
  3. মার্জ পদক্ষেপটি এন উপাদানগুলিকে মার্জ করে যা O (n) সময় নেয়।

এখন, 1 এবং 3 পদক্ষেপের জন্য অর্থাৎ ও (1) এবং ও (এন) এর মধ্যে ও (এন) বেশি is আসুন 1 এবং 3 পদক্ষেপগুলি মোট ও (এন) সময় নেয়। বলুন এটি কিছু ধ্রুবক জন্য সিএন।

এই পদক্ষেপগুলি কতবার কার্যকর করা হয়?

এর জন্য নীচের গাছটি দেখুন - উপরের থেকে নীচে স্তর পর্যন্ত প্রতিটি স্তরের জন্য প্রতিটি দৈর্ঘ্যের 2 টি উপ-অ্যারেগুলিতে একত্রীকরণের পদ্ধতিতে কল করুন। এখানে জটিলতা 2 * (সিএন / 2) = সিএন লেভেল 3 কলগুলির প্রতিটি এন / 4 দৈর্ঘ্যের 4 টি সাব-অ্যারেতে একত্রীকরণের পদ্ধতি। এখানে জটিলতা 4 * (সিএন / 4) = সিএন এবং আরও ...

এখন, এই গাছের উচ্চতা প্রদত্ত এন এর জন্য (লগইন + 1)। সুতরাং সামগ্রিক জটিলতা হ'ল (লগন + 1) * (সিএন)। এটি একত্রিত বাছাই অ্যালগরিদমের জন্য ও (nlogn)।

এন উপাদানগুলির জন্য সাজানোর মার্জ করুন

চিত্রের ক্রেডিট: খান একাডেমি


9

মার্জ বাছাই একটি পুনরাবৃত্তির অ্যালগরিদম এবং সময়ের জটিলতা নিম্নলিখিত পুনরাবৃত্তির সম্পর্ক হিসাবে প্রকাশ করা যেতে পারে।

টি (এন) = 2 টি (এন / 2) + ɵ (এন)

উপরোক্ত পুনরাবৃত্তিটি পুনরাবৃত্তি ট্রি পদ্ধতি বা মাস্টার পদ্ধতি ব্যবহার করে সমাধান করা যেতে পারে। এটি দ্বিতীয় মাস্টার পদ্ধতির ক্ষেত্রে এবং পুনরাবৃত্তির সমাধান ɵ (n লগ এন) হয়।

মার্জ বাছাইয়ের সময় জটিলতা n (এনলগন) সমস্ত 3 ক্ষেত্রে (সবচেয়ে খারাপ, গড় এবং সেরা) হিসাবে মার্জ করা বাছাই সর্বদা অ্যারেটিকে দুই ভাগে ভাগ করে এবং দুটি অংশকে একীভূত করতে রৈখিক সময় নেয়।

এটি ইনপুট অ্যারেটিকে দুটি অংশে ভাগ করে, দুটি অংশের জন্য নিজেকে কল করে এবং পরে দুটি সাজানো অর্ধেককে একত্রিত করে। মার্জ () ফাংশনটি দুটি অংশকে মার্জ করার জন্য ব্যবহৃত হয়। মার্জ (আরআর, এল, এম, আর) হ'ল মূল প্রক্রিয়া যা ধরে নিয়েছে যে আরার [এল..এম] এবং অ্যারে [এম + ১.আর] বাছাই করা হয়েছে এবং দুটি সাজানো সাব-অ্যারে এক সাথে একীভূত করা হয়েছে। বিশদ জন্য নিম্নলিখিত সি বাস্তবায়ন দেখুন।

MergeSort(arr[], l,  r)
If r > l
     1. Find the middle point to divide the array into two halves:  
             middle m = (l+r)/2
     2. Call mergeSort for first half:   
             Call mergeSort(arr, l, m)
     3. Call mergeSort for second half:
             Call mergeSort(arr, m+1, r)
     4. Merge the two halves sorted in step 2 and 3:
             Call merge(arr, l, m, r)

এখানে চিত্র বর্ণনা লিখুন

যদি আমরা চিত্রটি ঘনিষ্ঠভাবে পর্যালোচনা করি, আমরা দেখতে পাব যে অ্যারেটি আকার 1 হওয়ার আগে পর্যন্ত পুনরাবৃত্তভাবে দুটি অর্ধে ভাগ করা হয় যখন আকার 1 হয়ে যায়, মার্জ প্রক্রিয়াগুলি ক্রিয়াতে আসে এবং সম্পূর্ণ অ্যারে না হওয়া পর্যন্ত অ্যারেগুলিকে আবার মার্জ করা শুরু করে মার্জ হয়েছে।


1
আপনি এর মার্জ অংশের প্রকৃতি এবং কীভাবে এটি ও (এন লগ এন) এর কার্যকারিতাতে অবদান রাখবেন তা বিশদ বর্ণনা করতে পারেন?

মার্জ ফাংশনের জটিলতা হ'ল ও (এন), যেমন একটি ইনপুট হিসাবে 2 টি অ্যারে লাগে, তাদের তুলনা করুন এবং নতুনটিতে আউটপুট দিন। যেহেতু এটি অ্যারের প্রতিটি উপাদানকে প্রতিটি উপাদানের সাথে তুলনা করছে, এই মার্জ ফাংশনের জটিলতা ও (এন) হিসাবে প্রকাশিত হবে।
নিশান্ত শেঠি

1
আমি সাজানোর এই দৃশ্যটি পছন্দ!
spaaarky21

0

তুলনা ভিত্তিক সাজানো অ্যালগরিদমগুলির একটি কম বাউন্ড থাকে 𝞨(n*log(n)), যার অর্থ O(log(n))সময় জটিলতার সাথে তুলনা ভিত্তিক বাছাই অ্যালগরিদম থাকা সম্ভব নয় ।

যাইহোক, মার্জ সাজান হয় O(n*log(n))। এভাবে ভাবুন।

[ a1,a2,         a3,a4,         a5,a6,          a7,a8     .... an-3,an-2,     an-1, an ] 
   \ /            \  /           \ /             \  /            \  /            \  /    
    a1'            a3'            a5'             a7'            an-3'           an-1'    
      \            /                \             /                 \             /
            a1''                          a5''                       an-3''
             \                             /                         /
                          a1'''                                     /
                           \
                                              a1''''

এটি একটি বিপরীত বাইনারি গাছ দেখায়।

ইনপুট আকার হতে দিন n

প্রতিটি a_nউপাদানগুলির একটি তালিকা উপস্থাপন করে। প্রথম লাইনের একটি a_nমাত্র উপাদান রয়েছে।

প্রতিটি স্তরে, গড়ে মার্জ ব্যয়ের যোগফল হয় n(এমন কোনও কোণার কেস পাওয়া যায় যা ব্যয় কম হয় [1])। এবং গাছের উচ্চতা হয় log_2(n)

সুতরাং, মার্জ সাজানোর সময় জটিলতা O(n*log_2(n))

[1] যদি ইতিমধ্যে বাছাই করা তালিকায় বাছাই করা হয়, যা সেরা কেস বলে। খরচ কমেছে n/2 + n/4 + n/8 + .... + 1 = 2^log_2(n) -1 ~ O(n)। (ধরুন দৈর্ঘ্য nদুটির শক্তি)


-2

বাছাই করা কম্পিউটার বিজ্ঞানের একটি এনপি-সম্পূর্ণ সমস্যা (নন-পলিনমিয়াল সমস্যা)। এর অর্থ হ'ল, গাণিতিকভাবে প্রমাণিত না হওয়া পর্যন্ত উপাদানগুলির তালিকা বাছাই করার সময় আপনি O (n লগ এন) এর নীচে যেতে পারবেন না।

এই নিবন্ধটি উইকিপিডিয়ায় দেখুন ( https://en.wikedia.org/wiki/P_versus_NP_problem )

মূলত এখনও পর্যন্ত কেউ এটি প্রমাণ করতে পারেনি (পি == এনপি) এবং আপনি যদি এটি করেন তবে আপনি প্রথমে কোটিপতি হন, দ্বিতীয়ত আপনি দ্বিতীয় বিশ্বযুদ্ধ শুরু করেন তৃতীয় কারণে আপনি ব্যবহৃত সমস্ত পাব / ব্যক্তিগত কী সুরক্ষা ব্যবস্থা ভেঙে ফেলতে পারবেন আজকাল সর্বত্র :)


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