কুইকসোর্ট: পিভট নির্বাচন করা


109

কুইকসোর্ট বাস্তবায়ন করার সময়, আপনাকে যা করতে হবে তার মধ্যে একটি হল একটি পাইভট চয়ন করা। তবে আমি যখন নীচের মতো সিউডোকোডটি দেখি, তখন কীভাবে পিভটটি বেছে নেওয়া উচিত তা পরিষ্কার নয়। তালিকার প্রথম উপাদান? অন্যকিছু?

 function quicksort(array)
     var list less, greater
     if length(array) ≤ 1  
         return array  
     select and remove a pivot value pivot from array
     for each x in array
         if x ≤ pivot then append x to less
         else append x to greater
     return concatenate(quicksort(less), pivot, quicksort(greater))

কেউ কি আমাকে পাইভট বাছাই করার ধারণাটি বুঝতে এবং বিভিন্ন পরিস্থিতিতে বিভিন্ন কৌশলের জন্য আহ্বান জানাতে সহায়তা করতে পারে।


উত্তর:


87

একটি এলোমেলো পিভট নির্বাচন করা আপনার সম্ভাবনাটি হ্রাস করে যে আপনি সবচেয়ে খারাপ ক্ষেত্রে (এন 2 ) পারফরম্যান্সের মুখোমুখি হবেন (সর্বদা প্রথম বা শেষ নির্বাচন করা সর্বাধিক বাছাই করা বা প্রায় বিপরীত সাজানো ডেটার জন্য সবচেয়ে খারাপ ক্ষেত্রে পারফরম্যান্সের কারণ হতে পারে)। মধ্যবর্তী উপাদান নির্বাচন করা বেশিরভাগ ক্ষেত্রে গ্রহণযোগ্য হবে।

এছাড়াও, আপনি যদি নিজেরাই এটি প্রয়োগ করে থাকেন তবে এমন অ্যালগরিদমের সংস্করণ রয়েছে যা স্থানে কাজ করে (যেমন দুটি নতুন তালিকাগুলি তৈরি না করে এবং পরে সেগুলিকে সম্মতি না দিয়ে)।


10
আমি এই ধারণাটিকে দ্বিতীয় করে বলব যে কোনও অনুসন্ধান নিজেই বাস্তবায়িত করা সেই চেষ্টাটির পক্ষে উপযুক্ত নয়। এছাড়াও, এলোমেলোভাবে নম্বর জেনারেটরগুলি মাঝে মাঝে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে আসার কারণে আপনি কীভাবে এলোমেলো নম্বরগুলি বাছছেন তাও যত্নবান হন।
পিটারএলেন ওয়েবেব

@ জোনাথন লেফলারের উত্তর আরও ভাল
নাথান

60

এটি আপনার প্রয়োজনীয়তার উপর নির্ভর করে। এলোমেলোভাবে একটি পিভট নির্বাচন করা এমন ডেটা সেট তৈরি করা আরও শক্ত করে যা ও (এন ^ 2) কর্মক্ষমতা তৈরি করে। 'মেডিয়ান-অফ-থ্রি' (প্রথম, শেষ, মাঝের) সমস্যাগুলি এড়ানো একটি উপায় is তুলনা তুলনামূলক তুলনামূলক কর্মক্ষমতা সম্পর্কে সতর্ক থাকুন; যদি আপনার তুলনাগুলি ব্যয়বহুল হয়, তবে মো 3 এলোমেলোভাবে (একক পিভট মান) বেছে নেওয়ার চেয়ে বেশি তুলনা করে। ডাটাবেস রেকর্ডগুলির তুলনা করা ব্যয়বহুল হতে পারে।


আপডেট: উত্তরের মন্তব্যগুলি টানছে।

এমডিকেস দৃserted়ভাবে বলেছেন:

'3 এর মিডিয়ান' প্রথমটি মাঝের নয়। তিনটি এলোমেলো সূচী চয়ন করুন এবং এর মধ্যম মানটি নিন। পুরো বিষয়টি হ'ল এটি নিশ্চিত করা আপনার পিভটগুলির পছন্দটি নির্বিচারবাদী নয় - এটি যদি হয় তবে সবচেয়ে খারাপ ক্ষেত্রে ডেটা বেশ সহজেই তৈরি করা যায়।

যা আমি প্রতিক্রিয়া:

  • পি কিরচেনহোফার, এইচ প্রোডিংগার দ্বারা মেডির -অফ-থ্রি পার্টিশন (১৯৯ With) সহ হোয়ারের সন্ধান অ্যালগরিদম বিশ্লেষণ সি মার্টিনেজ আপনার যুক্তি সমর্থন করে (যে 'মিডিয়েন-অফ-থ্রি' তিনটি এলোমেলো আইটেম)।

  • Portal.acm.org এ বর্ণিত একটি নিবন্ধ আছে যা হান্নু এরকি'র লেখা 'দ্য ওয়ার্স্ট কেস পারমিটেশন ফর মেডিয়ান-অফ-থ্রি কুইকোর্ট' সম্পর্কে, দ্য কম্পিউটার জার্নাল, খণ্ড ২ 27, নং ৩৮, ১৯৮৪ সালে প্রকাশিত। [আপডেট ২০১২-০২- 26: নিবন্ধটির জন্য পাঠ্য পেয়েছি । বিভাগ 2 'দি অ্যালগরিদম' শুরু হয়: ' এ [এল: আর] এর প্রথম, মধ্য এবং শেষ উপাদানগুলির মধ্যস্থতা ব্যবহার করে বেশিরভাগ ব্যবহারিক পরিস্থিতিতে বেশিরভাগ ব্যবহারিক পরিস্থিতিতে মোটামুটি সমান আকারের অংশগুলিতে দক্ষ পার্টিশন অর্জন করা যেতে পারে। 'সুতরাং এটি প্রথম-মধ্য-শেষ Mo3 পদ্ধতির বিষয়ে আলোচনা করছে।]

  • আর একটি ছোট্ট আর্টিকেল যা আকর্ষণীয় তা হ'ল এমডি ম্যাকিল্রয়ের " সফটওয়্যার-অনুশীলন এবং অভিজ্ঞতা, ভলিউমে প্রকাশিত " কুইকোর্টের জন্য একটি কিলার অ্যাডভারসারি " । 29 (0), 1–4 (0 1999)। এটি ব্যাখ্যা করে যে প্রায় কোনও কুইকসোর্ট কীভাবে চতুর্ভুজ আচরণ করবে।

  • এটিএন্ডটি বেল ল্যাবস টেক জার্নাল, অক্টোবর ১৯৮৪ "একটি কার্যনির্বাহী রুটিনের নির্মাণের তত্ত্ব ও অনুশীলন" বলছে "হোয়ার বেশ কয়েকটি এলোমেলোভাবে নির্বাচিত লাইনের মধ্যবর্তী অংশকে বিভক্ত করার পরামর্শ দিয়েছিলেন। সেডজউইক [...] প্রথমটির মধ্যমা বেছে নেওয়ার পরামর্শ দিয়েছেন [। ..] শেষ [...] এবং মাঝখানে "। এটি ইঙ্গিত দেয় যে 'মিডিয়ান-অফ-থ্রি' উভয় কৌশলই সাহিত্যে জ্ঞাত। (আপডেট 2014-11-23: নিবন্ধটি আইইইই এক্সপ্লোর বা উইলির কাছ থেকে পাওয়া যাবে বলে মনে হয় - যদি আপনার সদস্যপদ থাকে বা কোনও ফি দিতে প্রস্তুত থাকেন))

  • সফটওয়্যার অনুশীলন ও অভিজ্ঞতা, খণ্ড ২৩ (১১), ১৯৯৩-এ প্রকাশিত জেএল বেন্টলে এবং এমডি ম্যাকিল্রয়ের 'ইঞ্জিনিয়ারিং এ সাজান ফাংশন' , বিষয়গুলির একটি বিস্তৃত আলোচনায় যায় এবং তারা অংশটির ভিত্তিতে একটি অভিযোজিত পার্টিশন বিভাজন অ্যালগরিদম বেছে নিয়েছে ডাটা সেট আকার। বিভিন্ন পদ্ধতির জন্য ট্রেড-অফগুলি নিয়ে প্রচুর আলোচনা রয়েছে।

  • 'মিডিয়ান অফ-থ্রি' এর জন্য গুগল অনুসন্ধান আরও ট্র্যাকিংয়ের জন্য বেশ ভাল কাজ করে।

তথ্যের জন্য ধন্যবাদ; আমি এর আগে কেবল 'মিডিয়ান-অফ-থ্রি' ডিটারমিনিস্টিকের মুখোমুখি হয়েছিলাম।


4
3 এর মধ্যমা প্রথম শেষ মাঝের নয়। তিনটি এলোমেলো সূচী চয়ন করুন এবং এর মধ্যম মানটি নিন। পুরো বিষয়টি হ'ল এটি নিশ্চিত করা আপনার পিভটগুলির পছন্দটি নির্বিচারবাদী নয় - এটি যদি হয় তবে সবচেয়ে খারাপ ক্ষেত্রে ডেটা বেশ সহজেই তৈরি করা যায়।
মাইন্ডভাইরাস

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

4
র্যান্ডম সূচকগুলি বেছে নেওয়ার ক্ষেত্রে সমস্যাটি এলোমেলো সংখ্যা জেনারেটরগুলি বেশ ব্যয়বহুল। যদিও এটি বাছাইয়ের বিগ-ও ব্যয়কে বাড়ায় না, সম্ভবত আপনি প্রথম, শেষ এবং মাঝারি উপাদান বেছে নিয়েছেন তার চেয়ে জিনিসগুলি ধীর করে দেবে। (আসল বিশ্বে, আমি বাজি ধরছি যে কেউ আপনার দ্রুত সাজানোর গতি কমিয়ে আনার জন্য স্বীকৃত পরিস্থিতি তৈরি করছে না))
কেভিন চেন

20

হেই, আমি এই ক্লাসটি শিখিয়েছি।

বিভিন্ন বিকল্প আছে।
সরল: ব্যাপ্তির প্রথম বা শেষ উপাদানটি চয়ন করুন। (আংশিকভাবে সাজানো ইনপুটতে খারাপ) আরও ভাল: ব্যাপ্তির মাঝখানে আইটেমটি চয়ন করুন। (আংশিকভাবে সাজানো ইনপুটটিতে ভাল)

যাইহোক, যেকোন যথেচ্ছ উপাদান বাছাইয়ের ফলে আকারের অ্যারের দুর্বলভাবে আকার 1 এবং n-1 এর দুটি অ্যারে বিভক্ত হওয়ার ঝুঁকি রয়েছে। যদি আপনি প্রায়শই পর্যাপ্ত পরিমাণে এটি করেন তবে আপনার কুইকোর্টটি ও (ও। 2) হওয়ার ঝুঁকি নিয়ে চলে।

আমি যে উন্নতি দেখেছি তা হল পিক মিডিয়ান (প্রথম, শেষ, মাঝের); সবচেয়ে খারাপ ক্ষেত্রে এটি এখনও ও (এন ^ 2) এ যেতে পারে, তবে সম্ভাব্যভাবে দেখা যায় এটি বিরল ঘটনা।

বেশিরভাগ তথ্যের জন্য, প্রথম বা শেষটি বাছাই করা যথেষ্ট। তবে, আপনি যদি দেখতে পান যে আপনি প্রায়শই খারাপ পরিস্থিতিগুলির মধ্যে চলে যাচ্ছেন (আংশিকভাবে সাজানো ইনপুট) তবে প্রথম বিকল্পটি হ'ল কেন্দ্রীয় মানটি বেছে নেওয়া (যা আংশিকভাবে সাজানো তথ্যের জন্য একটি পরিসংখ্যানগত দিকের ভাল পাইভট)।

আপনি যদি এখনও সমস্যায় পড়ে থাকেন তবে মাঝারি পথে চলুন।


1
আমরা আমাদের ক্লাসে একটি পরীক্ষা করেছি, ক্রমান্বিত ক্রমে একটি অ্যারের থেকে K ক্ষুদ্রতম উপাদান পেয়েছি। আমরা এলোমেলো অ্যারে তৈরি করি তারপরে হয় একটি মিনি-হিপ, বা এলোমেলোভাবে নির্বাচিত এবং স্থির পিভট কোকোর্ট এবং তুলনা সংখ্যা গণনা করা হয়। এই "এলোমেলো" ডেটাতে, দ্বিতীয় সমাধানটি প্রথমটির চেয়ে গড়ের চেয়ে খারাপ ফলাফল করে। র্যান্ডমাইজড পিভটটিতে স্যুইচ করা পারফরম্যান্স সমস্যার সমাধান করে। সুতরাং এমনকি গণ্য র্যান্ডম ডেটা জন্য, স্থির পিভট র্যান্ডমাইজড পিভট থেকে উল্লেখযোগ্যভাবে খারাপ সঞ্চালন করে।
রবার্ট এস বার্নেস

কেন আকারের অ্যারের বিভাগের আকার 1 এবং n-1 এর দুটি অ্যারেগুলিতে বিভাজন করা O (n ^ 2) হওয়ার ঝুঁকি চালায়?
অ্যারন ফ্রাঙ্ক

মাপের একটি অ্যারে ধরে নিন এন। পার্টিশনকে আকারে [১, এন -১]। পরবর্তী পদক্ষেপটি ডান অর্ধেককে [1, N-2] এ বিভক্ত করছে। এবং এভাবেই, আমাদের আকারের এন পার্টিশন না হওয়া অবধি 1। তবে, আমরা যদি অর্ধেকভাগে বিভাজন করতে পারি, তবে আমরা প্রতিটি পদক্ষেপে N / 2 এর 2 টি পার্টিশন করব, যার ফলে জটিলতার লগ (এন) পদটি হবে;
ক্রিস চডমোর

11

কখনও কোনও স্থির পাইভট বাছাই করবেন না - এটি আপনার অ্যালগরিদমের সবচেয়ে খারাপ পরিস্থিতি হে (এন ^ 2) রানটাইমকে কাজে লাগানোর জন্য আক্রমণ করা যেতে পারে যা কেবল সমস্যার জন্য জিজ্ঞাসা করছে। কুইকসোর্টের সবচেয়ে খারাপ ক্ষেত্রে রানটাইমটি ঘটে যখন 1 টি মৌলের একটি অ্যারে এবং এন -1 উপাদানগুলির একটি অ্যারের বিভাজন ঘটে। মনে করুন আপনি প্রথম বিভাজনকে নিজের পার্টিশন হিসাবে বেছে নিয়েছেন। যদি কেউ আপনার অ্যালগরিদমে ক্রমান্বিত ক্রমে একটি অ্যারে ফিড করে তবে আপনার প্রথম পিভটটি সবচেয়ে বড় হবে, সুতরাং অ্যারেতে থাকা সমস্ত কিছুই এর বাম দিকে চলে যাবে। তারপরে যখন আপনি পুনরাবৃত্তি করবেন, তখন প্রথম উপাদানটি আবার সবচেয়ে বড় হবে, সুতরাং আপনি আরও একবার তার বামে রেখে দেবেন so

আরও ভাল কৌশলটি হ'ল মিডিয়ান অফ -3 পদ্ধতি, যেখানে আপনি এলোমেলোভাবে তিনটি উপাদান বেছে নেন এবং মাঝখানেটি বেছে নিন। আপনি জানেন যে উপাদানটি আপনি বেছে নিয়েছেন তা প্রথম বা শেষ হবে না, তবে কেন্দ্রীয় সীমাবদ্ধ তত্ত্ব দ্বারা মধ্যম উপাদানটির বিতরণ স্বাভাবিক হবে, যার অর্থ আপনি মধ্যের দিকে ঝুঁকবেন (এবং তাই) , এন এলজি এন সময়)।

আপনি যদি পুরোপুরি অ্যালগরিদমের জন্য ও (এনএলজিএন) রানটাইমের গ্যারান্টি দিতে চান তবে একটি অ্যারের মাঝারি আবিষ্কারের জন্য কলাম-অফ -5 পদ্ধতিটি ও (এন) সময়ের মধ্যে চলে, যার অর্থ সবচেয়ে খারাপ অবস্থাতেই কুইকোর্টের জন্য পুনরাবৃত্তি সমীকরণটি হবে be T (n) = O (n) (মাঝারিটি সন্ধান করুন) + O (n) (পার্টিশন) + 2 টি (এন / 2) (বাম এবং ডান পুনরাবৃত্তি করুন)) মাস্টার উপপাদ্য দ্বারা এটি ও (n lg n) । তবে ধ্রুবক ফ্যাক্টরটি বিশাল আকার ধারণ করবে এবং সবচেয়ে খারাপ ক্ষেত্রে পারফরম্যান্সটি যদি আপনার প্রাথমিক উদ্বেগ হয় তবে পরিবর্তে একটি সংযুক্তি বাছাই করুন, যা গড়ে কুইকোর্টের চেয়ে সামান্য ধীর এবং ও (এনএলজিএন) সময়ের গ্যারান্টি দেয় (এবং আরও দ্রুত হবে) এই লম্পট মিডিয়ান কুইকোর্টের তুলনায়)।

মিডিয়ান অ্যালগোরিদমের মধ্যমা ব্যাখ্যা


6

চেষ্টা করবেন না এবং খুব চালাক হন এবং পাইভটিং কৌশলগুলি একত্রিত করবেন না। যদি আপনি মাঝারিটিতে প্রথম, শেষ এবং একটি এলোমেলো সূচকের মধ্যম বাছাই করে এলোমেলো পাইভটের সাথে 3 এর মাঝারিটি সংযুক্ত করেন তবে আপনি এখনও 3 টি চতুর্ভুজটির মিডিয়ান প্রেরণকারী অনেক বিতরণের ঝুঁকিতে পড়বেন (সুতরাং এটির চেয়ে প্রকৃততর খারাপ সরল র্যান্ডম পিভট)

যেমন একটি পাইপ অঙ্গ বিতরণ (1,2,3 ... এন / 2..3,2,1) প্রথম এবং শেষ উভয়ই 1 হবে এবং এলোমেলো সূচকটি 1 এর চেয়ে কিছু সংখ্যক বেশি হবে, মধ্যস্থতাকে 1 প্রদান করে ( হয় প্রথম বা শেষ) এবং আপনি একটি বহিরাগত ভারসাম্যহীন পার্টিশন পাবেন।


2

এটি করে তিনটি বিভাগে চটজলদি ভাঙ্গা সহজ

  1. এক্সচেঞ্জ বা অদলবদল উপাদান ফাংশন
  2. পার্টিশন ফাংশন
  3. পার্টিশন প্রক্রিয়াজাতকরণ

এটি একটি দীর্ঘ ফাংশনের চেয়ে সামান্য বেশি অদক্ষ তবে এটি বোঝার পক্ষে খুব সহজ।

কোড অনুসরণ:

/* This selects what the data type in the array to be sorted is */

#define DATATYPE long

/* This is the swap function .. your job is to swap data in x & y .. how depends on
data type .. the example works for normal numerical data types .. like long I chose
above */

void swap (DATATYPE *x, DATATYPE *y){  
  DATATYPE Temp;

  Temp = *x;        // Hold current x value
  *x = *y;          // Transfer y to x
  *y = Temp;        // Set y to the held old x value
};


/* This is the partition code */

int partition (DATATYPE list[], int l, int h){

  int i;
  int p;          // pivot element index
  int firsthigh;  // divider position for pivot element

  // Random pivot example shown for median   p = (l+h)/2 would be used
  p = l + (short)(rand() % (int)(h - l + 1)); // Random partition point

  swap(&list[p], &list[h]);                   // Swap the values
  firsthigh = l;                                  // Hold first high value
  for (i = l; i < h; i++)
    if(list[i] < list[h]) {                 // Value at i is less than h
      swap(&list[i], &list[firsthigh]);   // So swap the value
      firsthigh++;                        // Incement first high
    }
  swap(&list[h], &list[firsthigh]);           // Swap h and first high values
  return(firsthigh);                          // Return first high
};



/* Finally the body sort */

void quicksort(DATATYPE list[], int l, int h){

  int p;                                      // index of partition 
  if ((h - l) > 0) {
    p = partition(list, l, h);              // Partition list 
    quicksort(list, l, p - 1);        // Sort lower partion
    quicksort(list, p + 1, h);              // Sort upper partition
  };
};

1

আপনার ডেটা শুরু করার জন্য এটি কীভাবে সাজানো হয় তার উপর এটি সম্পূর্ণ নির্ভর করে। যদি আপনি মনে করেন এটি ছদ্ম-এলোমেলো হয়ে যাবে তবে আপনার সেরা বেট হয় হয় এলোমেলো নির্বাচন বা মধ্যবর্তীটি বেছে নেওয়া।


1

আপনি যদি এলোমেলোভাবে অ্যাক্সেসযোগ্য সংগ্রহটি বাছাই করে থাকেন (অ্যারের মতো) তবে শারীরিক মাঝারি আইটেমটি চয়ন করা সবচেয়ে ভাল। এটির সাথে যদি অ্যারেটি প্রস্তুত থাকে বা সাজানো (বা প্রায় বাছাই করা) হয় তবে দুটি পার্টিশন সমান হবে এবং আপনি সর্বোত্তম গতি পাবেন।

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

তবে কোনও লিঙ্কযুক্ত তালিকার জন্য প্রথমটি ছাড়াও যে কোনও কিছু বাছাই করা বিষয়টিকে আরও খারাপ করে দেবে। এটি একটি তালিকাভুক্ত তালিকার মাঝের আইটেমটি বেছে নেবে, আপনাকে প্রতিটি পার্টিশনের ধাপে এটির মাধ্যমে পদক্ষেপ নিতে হবে - একটি ও (এন / 2) ক্রিয়া যুক্ত করুন যা লগএন সময়গুলি তৈরি করে মোট সময় ও (1.5 ডি * লগ এন) করে এবং এটি যদি আমরা জানতে পারি যে তালিকাটি শুরু করার আগে কতক্ষণ হয় - সাধারণত আমরা তা জানি না যে এগুলি গণনা করার জন্য আমাদের সমস্ত পথ পাড়ি দিতে হবে, তারপরে মাঝখানের সন্ধানের জন্য অর্ধ-পথটি প্রস্থান করুন, তারপরে একটি পদক্ষেপের মধ্য দিয়ে যেতে হবে আসল পার্টিশনটি করতে তৃতীয়বার: ও (2.5 এন * লগ এন)


0

আদর্শভাবে পিভটটি পুরো অ্যারের মাঝারি মানের হওয়া উচিত। এটি খারাপ ক্ষেত্রে পারফরম্যান্স পাওয়ার সম্ভাবনা হ্রাস করবে।


1
ঘোড়া সামনে গাড়ী।
ncmathadistist

0

পিভট মান নির্বাচন করার সাথে দ্রুত সাজানোর জটিলতা অনেকাংশে পরিবর্তিত হয়। উদাহরণস্বরূপ যদি আপনি সর্বদা পিভট হিসাবে প্রথম উপাদানটি চয়ন করেন তবে অ্যালগরিদমের জটিলতা ও (এন ^ 2) এর মতো খারাপ হয়ে যায়। পিভট উপাদানটি বেছে নেওয়ার জন্য এখানে একটি স্মার্ট পদ্ধতি রয়েছে- ১. অ্যারের প্রথম, মধ্য, শেষ উপাদানটি চয়ন করুন। ২. এই তিনটি সংখ্যার তুলনা করুন এবং সংখ্যাটি একের চেয়ে বড় এবং অন্যান্য অর্থকালের চেয়ে ছোট এটি সন্ধান করুন। ৩. এই উপাদানটিকে মূল উপাদান হিসাবে তৈরি করুন।

এই পদ্ধতির সাহায্যে পাইভট বেছে নেওয়া প্রায় দুইটি অর্ধে অ্যারে বিভক্ত হয় এবং অতএব জটিলতা হ্রাস করে O (nlog (n))।


0

গড়ে, 3 এর মধ্যকটি ছোট এন এর জন্য ভাল। 5 এর মধ্যকটি বৃহত্তর এন এর জন্য কিছুটা ভাল। নিন্থার, যা "তিনজনের তিনটি মধ্যমাধ্যমী" খুব বড় এন এর জন্য আরও ভাল।

আপনি যত বেশি এন স্যাম্পলিংয়ের সাথে যান ততই আপনার এন বৃদ্ধি পাবে তবে আপনি নমুনাগুলি বাড়ানোর সাথে সাথে উন্নতি নাটকীয়ভাবে হ্রাস পাবে। এবং আপনি নমুনা বাছাই এবং ওভারহেড ব্যয়।


0

আমি মাঝারি সূচকটি ব্যবহার করার পরামর্শ দিচ্ছি, কারণ এটি সহজেই গণনা করা যায়।

আপনি এটি (বৃত্তাকার দৈর্ঘ্য / 2) বৃত্তাকার করে গণনা করতে পারেন।


-1

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


1
3 টি উপাদানের মাঝের সন্ধান স্থির সময়ে করা যায়। আর কোনও নয়, এবং আমাদের অবশ্যই মূল অ্যারে বাছাই করতে হবে। এন বড় হওয়ার সাথে সাথে আমরা আবার বাছাইয়ের সমস্যায় ফিরে আসি।
ক্রিস চুদমোর
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.