কুইকসোর্ট বনাম হিপসোর্ট


95

কুইকোর্ট এবং হিপসোর্ট উভয়ই জায়গায় স্থান বাছাই করে। কোনটা ভাল? কোনটি অ্যাপ্লিকেশন এবং ক্ষেত্রে পছন্দসই হয়?


উত্তর:


61

এই কাগজটির কিছু বিশ্লেষণ আছে।

এছাড়াও, উইকিপিডিয়া থেকে:

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


12
এটি লক্ষ করা গুরুত্বপূর্ণ যে সাধারণ বাস্তবায়নে কুইকোর্ট এবং হিপসোর্ট দুটি স্থিতিশীল নয়।
MjrKusanagi

@ ডিভিকে, আপনার লিঙ্কটি cs.auckland.ac.nz/~jmor159/PLDS210/qsort3.html অনুসারে , হিপ সাজানোর জন্য এন = 100 এর জন্য 2,842 তুলনা লাগে, তবে এটি এন = 500 এর জন্য 53,113 তুলনা নেয়। এবং এটি সূচিত করে যে এন = 500 এবং এন = 100 এর মধ্যে অনুপাতটি 18 বার, এবং এটি হে (এন লগএন) জটিলতার সাথে হিপ সাজানোর অ্যালগরিদমের সাথে মেলে না। আমি অনুমান করি যে এটির খুব সম্ভবত সম্ভাবনা আছে যে তাদের গাদা সাজানোর বাস্তবায়নের ভিতরে এক ধরণের বাগ রয়েছে।
Uাবির জিয়াঁ

@ ইউজিয়েন - মনে রাখবেন যে ও () বৃহত্তর এন
এ্যাসেম্পোটিক

এটি গুণকের সাথে সম্পর্কিত নয়। যদি একটি অ্যালগরিদমের ও (এন লগ এন) এর জটিলতা থাকে তবে এটি সময়ের (এন) = সি 1 * এন * লগ (এন) এর একটি ধারা অনুসরণ করে। এবং যদি আপনি সময় (500) / সময় (100) নেন, তবে এটা স্পষ্টতই যে C1 অদৃশ্য হয়ে যাবে এবং ফলাফলটি (500 লগ 500) / (100 লগ 100) = 6.7 এ বন্ধ করা উচিত তবে আপনার লিঙ্কটি থেকে এটি 18 হবে যা স্কেল খুব বেশি।
Uাবির জিয়াঁ

4
লিঙ্কটি মারা গেছে
PlsWork

127

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

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

কুইকোর্টের গোপনীয়তা: এটি প্রায়শই অযৌক্তিক উপাদানগুলির অদলবদল করে না। অদলবদল সময় সাপেক্ষ।

হ্যাপসোর্টের সাহায্যে, আপনার সমস্ত ডেটা ইতিমধ্যে অর্ডার করা থাকলেও অ্যারের অর্ডার দেওয়ার জন্য আপনি 100% উপাদানগুলি অদলবদল করতে চলেছেন।

মার্জোর্টের সাথে এটি আরও খারাপ। আপনি অন্য অ্যারেতে 100% উপাদান লিখতে চলেছেন এবং ডেটা ইতোমধ্যে অর্ডার করা থাকলেও এটি মূলটিতে আবার লিখতে চলেছেন।

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

কুইকসোর্টে যা উচ্চতর তা সবচেয়ে খারাপ ঘটনা নয়, তবে সেরা ক্ষেত্রে! সর্বোত্তম ক্ষেত্রে আপনি একই সংখ্যার তুলনা করেন, ঠিক আছে, তবে আপনি প্রায় কিছুই পরিবর্তন করেন না। গড় ক্ষেত্রে আপনি উপাদানগুলির কিছু অংশ অদলবদল করেন, তবে হিপসোর্ট এবং মার্জেসোর্টের মতো সমস্ত উপাদান নয়। এটিই কুইকোর্টকে সেরা সময় দেয়। কম অদলবদল, আরও গতি।

আমার কম্পিউটারে সি # এর নীচে বাস্তবায়ন, রিলিজ মোডে চলমান রয়েছে, অ্যারেকে মারধর করে middle সেকেন্ডের মাঝারি পাইভট এবং 2 সেকেন্ড উন্নত পিভট দিয়ে (হ্যাঁ, একটি ভাল পিভট পাওয়ার জন্য ওভারহেড রয়েছে))

static void Main(string[] args)
{
    int[] arrToSort = new int[100000000];
    var r = new Random();
    for (int i = 0; i < arrToSort.Length; i++) arrToSort[i] = r.Next(1, arrToSort.Length);

    Console.WriteLine("Press q to quick sort, s to Array.Sort");
    while (true)
    {
        var k = Console.ReadKey(true);
        if (k.KeyChar == 'q')
        {
            // quick sort
            Console.WriteLine("Beg quick sort at " + DateTime.Now.ToString("HH:mm:ss.ffffff"));
            QuickSort(arrToSort, 0, arrToSort.Length - 1);
            Console.WriteLine("End quick sort at " + DateTime.Now.ToString("HH:mm:ss.ffffff"));
            for (int i = 0; i < arrToSort.Length; i++) arrToSort[i] = r.Next(1, arrToSort.Length);
        }
        else if (k.KeyChar == 's')
        {
            Console.WriteLine("Beg Array.Sort at " + DateTime.Now.ToString("HH:mm:ss.ffffff"));
            Array.Sort(arrToSort);
            Console.WriteLine("End Array.Sort at " + DateTime.Now.ToString("HH:mm:ss.ffffff"));
            for (int i = 0; i < arrToSort.Length; i++) arrToSort[i] = r.Next(1, arrToSort.Length);
        }
    }
}

static public void QuickSort(int[] arr, int left, int right)
{
    int begin = left
        , end = right
        , pivot
        // get middle element pivot
        //= arr[(left + right) / 2]
        ;

    //improved pivot
    int middle = (left + right) / 2;
    int
        LM = arr[left].CompareTo(arr[middle])
        , MR = arr[middle].CompareTo(arr[right])
        , LR = arr[left].CompareTo(arr[right])
        ;
    if (-1 * LM == LR)
        pivot = arr[left];
    else
        if (MR == -1 * LR)
            pivot = arr[right];
        else
            pivot = arr[middle];
    do
    {
        while (arr[left] < pivot) left++;
        while (arr[right] > pivot) right--;

        if(left <= right)
        {
            int temp = arr[right];
            arr[right] = arr[left];
            arr[left] = temp;

            left++;
            right--;
        }
    } while (left <= right);

    if (left < end) QuickSort(arr, left, end);
    if (begin < right) QuickSort(arr, begin, right);
}

10
নং বিবেচনার জন্য +1 অদলবদল, বিভিন্ন বাছাই করা অ্যালগরিদমের জন্য প্রয়োজনীয় অপারেশনগুলি পড়ুন / লেখুন
ycy

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

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

4
মার্জ বাছাই করার জন্য উপাদানগুলির 100% অনুলিপি করতে হবে না, যদি না এটি পাঠ্যপুস্তক থেকে কিছু খুব নির্ভুল বাস্তবায়ন হয়। এটি বাস্তবায়ন করা সহজ, যাতে আপনার কেবল তাদের 50% (দুটি মার্জ করা অ্যারের বাম দিক) অনুলিপি করতে হবে। আপনার কাছে দুটি উপাদানকে "অদলবদল" না করা পর্যন্ত অনুলিপি স্থগিত করাও তুচ্ছ, সুতরাং ইতিমধ্যে সাজানো ডেটা সহ আপনার কোনও মেমরির ওভারহেড থাকবে না। এমনকি 50% এমনকি প্রকৃতপক্ষে সবচেয়ে খারাপ পরিস্থিতি, এবং আপনার যে 0 ও 0% এর মধ্যে কিছু থাকতে পারে।
ddekany

4
@ মারকুইনহোপেলি বলতে চাইছিলাম যে আপনার বাছাই করা তালিকার আকারের তুলনায় আপনার কেবলমাত্র 50% বেশি উপলব্ধ মেমরি দরকার, এটি 100% নয় যা একটি সাধারণ ভুল ধারণা বলে মনে হয়। তাই আমি পিক মেমরি ব্যবহার সম্পর্কে বলছিলাম। আমি কোনও লিঙ্ক দিতে পারি না, তবে আপনি যদি দেখতে পান যে ইতিমধ্যে সাজানো অর্ধেকটি স্থানে রেখে দেওয়া হয়েছে তবে কেবল বাম অর্ধেকটিতেই সমস্যা রয়েছে যেখানে আপনি যে উপাদানগুলি এখনও গ্রাস করেননি সেগুলি ওভাররাইট করে) পুরো বাছাইয়ের প্রক্রিয়া চলাকালীন আপনাকে কত স্মৃতি অনুলিপি করতে হবে তা অন্য একটি প্রশ্ন, তবে স্পষ্টতই সবচেয়ে খারাপ পরিস্থিতি যে কোনও বাছাই করা অ্যালগরিদমের জন্য 100% এর নিচে হতে পারে না।
ddekany

15

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

আপনি বেশিরভাগ ক্ষেত্রে সর্বাধিক গতি চান এমন পরিস্থিতিতে, কুইকসোর্ট হিপসোর্টের চেয়ে বেশি পছন্দ করা যেতে পারে, তবে সঠিক উত্তরও হতে পারে না। গতি-সংকটপূর্ণ পরিস্থিতির জন্য, পরিস্থিতির বিশদটি নিবিড়ভাবে পরীক্ষা করা মূল্যবান। উদাহরণস্বরূপ, আমার কিছু গতি-সমালোচনামূলক কোডে, এটি খুব সাধারণ যে ডেটা ইতিমধ্যে বাছাই করা হয়েছে বা কাছাকাছি-বাছাই করা হয়েছে (এটি একাধিক সম্পর্কিত ক্ষেত্রকে সূচকযুক্ত করে যা প্রায়শই উপরে এবং নীচে একসাথে সরানো হয় বা একে অপরের বিপরীতে উপরে এবং নীচে সরানো হয়, সুতরাং একবার আপনি বাছাই করার পরে, অন্যগুলি হয় বাছাই করা হয় বা বিপরীত-বাছাই করা বা বন্ধ করা হয় ... যার মধ্যেই কুইকসোর্টকে হত্যা করতে পারে)। সেক্ষেত্রে, আমি উভয়ই প্রয়োগ করিনি ... পরিবর্তে, আমি ডিজকস্ট্রার স্মুথসোর্ট ... একটি হিপসোর্ট বৈকল্পিক প্রয়োগ করেছি যা ইতিমধ্যে বাছাই করা বা কাছাকাছি বাছাই করার সময় ও (এন) হয় ... এটি এত মার্জিত নয়, বোঝা খুব সহজ নয়, কিন্তু দ্রুত ... পড়ুনhttp://www.cs.utexas.edu/users/EWD/ewd07xx/EWD796a.PDF আপনি কোডে কিছুটা চ্যালেঞ্জজনক কিছু চাইলে পারেন।


6

কুইকসোর্ট-হিপসোর্ট ইন-প্লেস হাইব্রিডগুলিও খুব আকর্ষণীয়, যেহেতু তাদের বেশিরভাগেরই সবচেয়ে খারাপ ক্ষেত্রে n * লগ এন তুলনা প্রয়োজন (তারা এ্যাসেমপটিক্সের প্রথম মেয়াদে সম্মানের সাথে অনুকূল, তাই তারা সবচেয়ে খারাপ পরিস্থিতি এড়াতে পারে কুইকোর্টের), ও (লগ এন) অতিরিক্ত স্থান এবং তারা ইতিমধ্যে আদেশযুক্ত ডেটা সেট সম্পর্কিত শ্রদ্ধার সাথে কুইকোর্টের ভাল আচরণের কমপক্ষে "অর্ধেক" সংরক্ষণ করে। ডিকার্ট এবং ওয়েইস http://arxiv.org/pdf/1209.4214v1.pdf- তে একটি অত্যন্ত আকর্ষণীয় অ্যালগরিদম উপস্থাপন করেছেন :

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

2

কমপ। মধ্যে quick sortএবং merge sortউভয় যেহেতু জায়গা বাছাই সেখানে দ্রুত সাজানোর জন্য সময় চলমান wrost মামলার সময় চলমান wrost ক্ষেত্রে মধ্যে একটি পার্থক্য আছে এর ধরনের হয় O(n^2)এবং জন্য গাদা সাজানোর এটা এখনওO(n*log(n)) এবং তথ্য একটি গড় পরিমাণ জন্য দ্রুত সাজানোর আরো উপযোগী হতে হবে। যেহেতু এটি এলোমেলোম এলোমেলো তাই সঠিক উত্তর পাওয়ার সম্ভাবনা। কম সময়ে আপনি বেছে নেওয়া পিভট উপাদানগুলির অবস্থানের উপর নির্ভর করবে।

সুতরাং ক

ভাল কল: এল এবং জি এর আকার প্রতিটি 3s / 4 এর চেয়ে কম

খারাপ কল: এল এবং জি এর মধ্যে একটির আকার 3s / 4 এর চেয়ে বেশি

অল্প পরিমাণে আমরা সন্নিবেশ সাজানোর জন্য যেতে পারি এবং খুব বড় পরিমাণে ডেটা হিপ সাজানোর জন্য যেতে পারি।


যদিও মার্জ সাজ্টটি ইন-প্লেস বাছাইয়ের সাথে প্রয়োগ করা যেতে পারে তবে বাস্তবায়ন জটিল। আফাইক, সর্বাধিক সংশ্লেষিত সাজানোর প্রয়োগগুলি স্থানে নয়, তবে তারা স্থিতিশীল।
MjrKusanagi

2

হে (n * লগ (এন)) সবচেয়ে খারাপ চলমান ক্ষেত্রে হিপসোর্টের সুবিধা রয়েছে তাই যেসব ক্ষেত্রে কুইকোর্টটি খুব খারাপভাবে সঞ্চালিত হওয়ার সম্ভাবনা রয়েছে (বেশিরভাগ ক্ষেত্রে সাজানো ডেটা সেটগুলি সাধারণত সাজানো হয়) হিপসোর্টটি বেশি পছন্দ করা হয়।


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

4
@ জাস্টিন - এটি খুব সত্য, আমি একটি নির্বিকার বাস্তবায়নের বিষয়ে কথা বলছিলাম।
জেলিও

4
@ জাস্টিন: সত্য, তবে বড় মন্দার সম্ভাবনা সবসময়ই থাকে, তবে সামান্যই। কিছু অ্যাপ্লিকেশনের জন্য, আমি ও (এন লগ এন) আচরণটি ধীরে ধীরে হলেও নিশ্চিত করতে চাই।
ডেভিড থর্নলি

2

আচ্ছা আপনি যদি আর্কিটেকচার লেভেলে যান ... আমরা ক্যাশে মেমোরিতে ক্যু ডেটা স্ট্রাকচার ব্যবহার করি so তাই যা সারিতে পাওয়া যায় তা বাছাই হয়ে যাবে। দ্রুত সাজানোর ক্ষেত্রে অ্যারেটিকে কোনও দৈর্ঘ্যে বিভক্ত করার কোনও সমস্যা নেই ... তবে গাদাতে সাজান (অ্যারে ব্যবহার করে) এটি এমনটি ঘটতে পারে যা পিতামাতারা ক্যাশে উপলব্ধ সাব অ্যারেটিতে উপস্থিত নাও হতে পারে এবং তারপরে এটি ক্যাশে স্মৃতিতে আনতে হবে ... যা সময় সাপেক্ষ। ওটা কুইকোর্ট সবচেয়ে ভাল !! 😀


1

হিপসোর্ট একটি হিপ তৈরি করে এবং তারপরে বারবার সর্বাধিক আইটেমটি বের করে। এর নিকৃষ্টতম পরিস্থিতি হ'ল ও (এন লগ এন)।

তবে যদি আপনি দ্রুত বাছাইয়ের সবচেয়ে খারাপ পরিস্থিতিটি দেখতে পান যা ও (এন 2) হয় তবে আপনি বুঝতে পেরেছেন যে দ্রুততর বাছাই করা বড় ডেটার জন্য খুব ভাল-পছন্দ নয়।

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

এটি আপনার প্রশ্নের সরাসরি উত্তর দিতে পারে না, ভেবেছিলাম আমি আমার দুটি সেন্ট যুক্ত করব।


4
কখনও বুদ্বুদ সাজানোর ব্যবহার করবেন না। যদি আপনি যুক্তিসঙ্গতভাবে মনে করেন যে আপনার ডেটা বাছাই করা হবে তবে আপনি সন্নিবেশ বাছাইটি ব্যবহার করতে পারেন, বা এমনকি ডেটাটি বাছাই করা হয়েছে কিনা তা পরীক্ষা করতে পারেন। বুদবুর্গ ব্যবহার করবেন না।
vy32

আপনার যদি খুব বড় র‌্যান্ডম ডেটা সেট থাকে তবে আপনার সেরা বেটটি হল কুইকোর্ট। যদি আংশিক অর্ডার দেওয়া হয়, তবে তা নয়, তবে আপনি যদি বিশাল ডেটাসেটের সাথে কাজ শুরু করেন তবে তাদের সম্পর্কে আপনার কমপক্ষে এটি আরও জানা উচিত।
Kobor42

1

খুব বড় ইনপুটগুলির সাথে কাজ করার সময় হিপ বাছাই করা একটি নিরাপদ বাজি। অ্যাসিপটোটিক বিশ্লেষণ সবচেয়ে খারাপ ক্ষেত্রে হিপসোর্টের বৃদ্ধির ক্রম প্রকাশ করেছে Big-O(n logn), যা কুইকোর্টের চেয়ে Big-O(n^2)সবচেয়ে খারাপ পরিস্থিতি হিসাবে ভাল । তবে, বেশিরভাগ মেশিনে হিপসোর্ট অনুশীলনে কিছুটা ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে চালিত হয় দ্রুত প্রয়োগের কারণে is হিপসোর্ট একটি স্থিতিশীল বাছাই অ্যালগরিদমও নয়।

কুইকোর্টের তুলনায় হিপসোর্টটি অনুশীলনে ধীর গতির কারণটি হল কুইকোর্টে অবস্থিত রেফারেন্সের আরও ভাল লোকাল (" https://en.wikedia.org/wiki/Locality_of_references "), যেখানে তথ্য উপাদান তুলনামূলকভাবে নিকটবর্তী স্টোরেজ অবস্থানের মধ্যে থাকে। যে সিস্টেমগুলি রেফারেন্সের শক্তিশালী লোকাল প্রদর্শিত হয় সেগুলি পারফরম্যান্স অপটিমাইজেশনের জন্য দুর্দান্ত প্রার্থী। হিপ বাছাই, তবে আরও বড় লাফিয়ে পড়ে। এটি কুইকসোর্টকে আরও ছোট ইনপুটগুলির পক্ষে অনুকূল করে তোলে।


4
দ্রুত সাজানোর স্থিতিশীল হয় না।
এন্টিমোনি

1

আমার কাছে হিপসোর্ট এবং কুইকোর্টের মধ্যে খুব মৌলিক পার্থক্য রয়েছে: পরেরটি একটি পুনরাবৃত্তি ব্যবহার করে। পুনরাবৃত্তিমূলক আলগোরিদিমগুলিতে পুনরাবৃত্তির সংখ্যার সাথে গাদা বেড়ে যায়। এটি এন ছোট কিনা তাতে কিছু যায় আসে না , তবে এই মুহূর্তে আমি এন = 10 !! 9 দিয়ে দুটি ম্যাট্রিক পাঠাচ্ছি ! প্রোগ্রামটি প্রায় 10 গিগাবাইট র‌্যাম নেয় এবং যে কোনও অতিরিক্ত মেমরি আমার কম্পিউটারকে ভার্চুয়াল ডিস্ক মেমরিটিতে অদলবদল করতে শুরু করবে। আমার ডিস্কটি একটি র‌্যাম ডিস্ক, তবে এটির মধ্যে অদলবদল করা গতির ক্ষেত্রে একটি বিশাল পার্থক্য করে । সুতরাং সি ++ তে কোডড একটি স্ট্যাটপ্যাক যাতে প্রোগ্রামারটির আগাম অজানা আকার সহ সামঞ্জস্যযোগ্য মাত্রা ম্যাট্রিক্স অন্তর্ভুক্ত থাকে এবং খুব বড় ডেটা ম্যাট্রিক্সের সাথে ব্যবহারে বিলম্ব এড়াতে আমি হিপসোর্টটি পছন্দ করি।


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

0

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


-1

মূল প্রশ্নের উত্তর দিতে এবং এখানে অন্যান্য কয়েকটি মন্তব্যে সম্বোধন করতে:

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

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

নির্বাচন - এন ^ 2 - এটি 20 টিরও কম উপাদানগুলির পক্ষে সত্যই ভাল তবে এটি কার্যকর হয় formed যদি না আপনার ডেটা ইতিমধ্যে বাছাই করা হয় বা খুব, খুব প্রায় তাই। এন ^ 2 সত্যই দ্রুত গতিতে ধীরে ধীরে আসে।

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

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

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


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