অনুশীলনে অন্যান্য বাছাই করা অ্যালগরিদমের চেয়ে কুইকোর্টটি আরও ভাল কেন?


31

এটি জনোমা কর্তৃক সিএস.এসইতে একটি প্রশ্নের পুনঃস্থাপন । তার কাছে সম্পূর্ণ ক্রেডিট এবং লুণ্ঠন বা সিএসএসই

একটি স্ট্যান্ডার্ড অ্যালগরিদম কোর্সে আমাদের শেখানো হয় যে কুইকোর্টটি হ'ল ও (এন লগ এন) এবং সবচেয়ে খারাপ ক্ষেত্রে ও (এন) হয়। একই সময়ে, অন্যান্য বাছাই আলগোরিদিম চর্চিত যা হে হয় (n log n) সবচেয়ে খারাপ ক্ষেত্রে (যেমন মধ্যে mergesort এবং heapsort সেরা ক্ষেত্রে (যেমন, এবং এমনকি রৈখিক সময়) bubblesort ) কিন্তু মেমরি কিছু অতিরিক্ত চাহিদার সঙ্গে।

আরও কিছু চলমান সময়ে তাত্ক্ষণিকভাবে দেখার পরে বলা স্বাভাবিক যে কুইকোর্ট অন্যের মতো দক্ষ হওয়া উচিত নয়

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

তাহলে, কেন কুইকোর্টগুলি অনুশীলনে অন্যান্য বাছাই করা অ্যালগরিদমকে ছাড়িয়ে যায়? এটি কি বাস্তব-বিশ্বের ডেটাগুলির কাঠামোর সাথে সম্পর্কযুক্ত ? কম্পিউটারে মেমরিটি যেভাবে কাজ করে তার সাথে এটির কি সম্পর্ক আছে? আমি জানি যে কিছু স্মৃতি অন্যের চেয়ে দ্রুততর হয় তবে আমি জানি না যে এই পাল্টা-স্বজ্ঞাত পারফরম্যান্সের আসল কারণ কিনা (তাত্ত্বিক অনুমানের সাথে তুলনা করলে)।


3
ক্যুইসকোর্ট খ্যাতি এমন এক সময় থেকে শুরু হয় যখন ক্যাশে উপস্থিত ছিল না।
এপ্রোগ্রামার

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

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

1
কাউকে সম্পূর্ণতার জন্য এটি বলতে হবে, তাই আমি করব: কুইকোর্টটি (সাধারণত) স্থিতিশীল নয়। এই কারণে, আপনি এটি ব্যবহার করতে নাও চান। এছাড়াও, এই কারণে, আপনার ডিফল্ট বাছাই কোনও কুইকসোর্ট নাও হতে পারে যখন আপনি এটি চান।
রাল্ফচাপিন

1
@ রাফেল: প্রায়শই যাকে কুইক সার্ট বলা হয় আসলে কিছুটা ভিন্নতা যেমন ইন্ট্রো সাজ্ট (ব্যবহৃত, আফাইক, সি ++ স্ট্যান্ডার্ড লাইব্রেরিতে), খাঁটি কুইক সার্ট নয়।
জর্জিও

উত্তর:


21

আমি সম্মত হব না যে কুইকোর্টটি অনুশীলনে অন্যান্য বাছাই করা অ্যালগরিদমের চেয়ে ভাল।

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

সর্বাধিক কুইকোর্ট (কোন র্যান্ডম পিভট নয়) এই সম্ভাব্য সাধারণ কেসটিকে ও (এন ^ 2) (এলোমেলো পিভট দিয়ে ও (এন এলজি এন) হ্রাস করা) হিসাবে বিবেচনা করে, যখন টিমসোর্ট এই ক্ষেত্রে কে (এন) এ পরিচালনা করতে পারে।

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

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


18

দ্রুত বাছাইটিকে দ্রুত হিসাবে বিবেচনা করা হয় কারণ অন্য কোনও জ্ঞাত অ্যালগরিদমের চেয়ে সহগ ছোট হয়। এর কোনও কারণ বা প্রমাণ নেই, কেবলমাত্র একটি ছোট সহগের কোনও অ্যালগরিদম খুঁজে পাওয়া যায়নি। এটি সত্য যে অন্যান্য অ্যালগরিদমেও ও ( এন লগ এন ) সময় থাকে, তবে বাস্তব বিশ্বে সহগগুলিও গুরুত্বপূর্ণ important

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


7
+ ডান। শিক্ষকদের আরও সচেতন হওয়া দরকার (এবং আমি একজন শিক্ষক ছিলাম) যে ধ্রুবক কারণগুলি আকারের আদেশ অনুসারে পরিবর্তিত হতে পারে। সুতরাং বিগ-ও নির্বিশেষে পারফরম্যান্স টিউন করার দক্ষতাটি সত্যই গুরুত্বপূর্ণ। সমস্যাটি হ'ল, তারা জিআরফোফ পড়াতে থাকে , কারণ কেবল পাঠ্যক্রমের বুলেট পয়েন্টটি পেরিয়ে যেতে হবে , যা ভুল পদ্ধতির ১৮০ ডিগ্রি is
মাইক ডুনলাভে

2
"এর জন্য কোনও কারণ বা প্রো [ও] চ নেই": অবশ্যই আছে। যদি আপনি যথেষ্ট গভীর খনন করেন তবে আপনি একটি কারণ খুঁজে পাবেন।
গিলস 'খারাপ হয়ে যাওয়া বন্ধ করুন'

2
@ বি সেভেন: অনেকগুলি সরল করার জন্য ... একটি হে (এন লগ এন) বাছাই করা অ্যালগরিদমের জন্য, এন আইটেমগুলি বাছাই করার জন্য বাছাই করা লুপের (এন লগ এন) পুনরাবৃত্তি রয়েছে। গুণফলটি লুপের প্রতিটি চক্রটি কত সময় নেয়। যখন এন সত্যই বড় হয় (কমপক্ষে কয়েক হাজার) তখন গুণফল বিশাল পরিমাণে হলেও ও ()) এর মতো বেশি হয় না। তবে যখন এন ছোট হয়, গুণফল হয় - এবং আপনি কেবলমাত্র 10 টি আইটেম বাছাই করলে এটি সবচেয়ে গুরুত্বপূর্ণ বিষয় হতে পারে।
ম্যাট গ্যালাগার

4
@ মাইকডুনলাভে - একটি ভাল উদাহরণ হ'ল পিরামিডগুলি তৈরি করা ও (এন) আপনার ফটোগুলি বাছাই করার সময় ও (এন এলএন এন) তবে যা দ্রুত!
মার্টিন বেকেট

2
গ্যারান্টিযুক্ত ও (এন লগ এন) অ্যালগরিদম যেমন হিপসোর্ট এবং মার্জসোর্ট রয়েছে, তাই অ্যাসিম্পটিক সবচেয়ে খারাপ-মামলায় কুইকসোর্ট সর্বোত্তমের চেয়ে তত দ্রুত তত দ্রুত নয়। কিন্তু বাস্তব বিশ্বের পারফরম্যান্সে, কিছু কুইকোর্টের রূপগুলি অত্যন্ত ভাল করে। তবে "গুণাগুণটি আরও ছোট" বলার মতো "এটি দ্রুত কারণ এটি দ্রুত" like ধ্রুবক কারণগুলি এত ছোট কেন ? মূল কারণ হ'ল কুইকোর্টটি স্থানীয়ভাবে খুব ভাল - এটি ক্যাশে খুব ভাল ব্যবহার করে। মার্জেসোর্টের ভাল লোকেশনও রয়েছে তবে জায়গাটিতে করা খুব কঠিন।
স্টিভ 314

16

কুইকসোর্ট অন্য সমস্ত বাছাই করা অ্যালগরিদমকে ছাড়িয়ে যায় না। উদাহরণস্বরূপ, ডাউন-আপ হিপ সাজান ( ওয়েগনার 2002 ) যুক্তিসঙ্গত পরিমাণের ডেটার জন্য কুইকোর্টকে আউটফর্ম করে এবং এটি একটি ইন-প্লেস অ্যালগরিদমও। এটি প্রয়োগ করাও সহজ (কমপক্ষে, কিছু অনুকূলিত কুইকোর্টের বৈকল্পিকের চেয়ে শক্ত নয়)।

এটি কেবল তেমন সুপরিচিত নয় এবং আপনি এটি অনেকগুলি পাঠ্যপুস্তকগুলিতে খুঁজে পান না, এটি ব্যাখ্যা করতে পারে যে এটি কোকোর্টের মতো জনপ্রিয় নয়।


+1: আমি কয়েকটি পরীক্ষা চালিয়েছি এবং প্রকৃতপক্ষে মার্জ করা বাছাই করা অবশ্যই বড় অ্যারে (> 100000 উপাদান) এর জন্য দ্রুত সাজানোর চেয়ে ভাল ছিল। হিপ সাজানটি মার্জ সাজ্টের চেয়ে কিছুটা খারাপ ছিল (তবে মার্জ সাজ্টের আরও মেমরি দরকার) আমি মনে করি লোকেরা যাঁকে দ্রুত বাছাই বলে তা প্রায়শই পরিচিতি বাছাই বলা হয়: দ্রুত সাজানো যা পুনরাবৃত্তির গভীরতা একটি নির্দিষ্ট সীমা ছাড়িয়ে গেলে হিপ সারণিতে ফিরে যায়।
জর্জিও

@ জর্জিও: কুইকোর্টকে উন্নত করার জন্য কিছু উপায়ে পরিবর্তন করা যেতে পারে, উদাহরণস্বরূপ দেখুন এখানে: algs4.cs.princeton.edu/23quicksort আপনি কি এই উন্নতি চেষ্টা করেছেন?
ডক ব্রাউন

আকর্ষণীয়, আপনি কি আরও পড়তে বই-সাইটের কোনও রেফারেন্স দিতে পারেন? (প্রায়শই একটি বই)
রামজী কহিল

@ মার্টিন: বটম-আপ হিপসোর্ট সম্পর্কে আপনার অর্থ? ঠিক আছে, আমি উপরে একটি রেফারেন্স দিয়েছি। আপনি যদি একটি নিখরচায় সংস্থান চান, তবে জার্মান উইকিপিডিয়াতে এটি সম্পর্কে একটি নিবন্ধ রয়েছে ( ডি.ইউইকিপিডিয়া . org / উইকি / বটমআপ -হ্যাপসোর্ট )। এমনকি আপনি জার্মান ভাষায় কথা না বললেও আমি অনুমান করি আপনি এখনও C99 উদাহরণটি পড়তে পারেন।
ডক ব্রাউন

7

আপনার কেবলমাত্র সবচেয়ে খারাপ ক্ষেত্রে এবং কেবল সময়ের জটিলতায় কেন্দ্র করা উচিত নয়। এটি সবচেয়ে খারাপের চেয়ে গড়ের চেয়ে বেশি, এবং এটি সময় এবং স্থান সম্পর্কে ।

Quicksort:

  • একটি হয়েছে গড় (Θ সময় জটিলতা এন লগ ইন করুন এন );
  • complex (লগ এন ) এর স্পেস জটিলতায় কার্যকর করা যেতে পারে ;

অ্যাকাউন্টে এটিও রয়েছে যে বড় হে নোটেশন কোনও ধ্রুবককে বিবেচনায় নেয় না, তবে বাস্তবে অ্যালগরিদম কয়েকগুণ দ্রুত হলে তা কার্যকর হয়। Θ ( n লগ এন ) এর অর্থ, সেই অ্যালগরিদম কে  এন  লগ ( এন ) এ সঞ্চালিত করে , যেখানে কে ধ্রুবক। কুইকসোর্ট হ'ল সর্বনিম্ন কে এর সাথে তুলনা-সাজানোর অ্যালগরিদম ।


1
@ গিলস: এতে কম কে রয়েছে, কারণ এটি একটি সাধারণ অ্যালগরিদম।
ভের্টেক

5
ডব্লিউটিএফ? এটি কোনও অর্থবোধ করে না। একটি অ্যালগরিদমের সরলতার চলমান গতির সাথে কোনও সম্পর্ক নেই। নির্বাচনের বাছাই কুইকোর্টের চেয়ে সহজ, এটি দ্রুত করে না।
গিলস 'অসন্তুষ্ট হওয়া বন্ধ করুন'

1
@ গিলস: নির্বাচনের ধরণটি হ'ল (n ^ 2) যে কোনও ক্ষেত্রে (সবচেয়ে খারাপ, গড় এবং সেরা)। সুতরাং এটি কতটা সহজ তা বিবেচনা করে না। কুইকসোর্টটি গড় ক্ষেত্রে ও (এন লগ এন) হয় এবং ও (এন লগ এন) সহ সমস্ত আলগোসের মধ্যে এটি সবচেয়ে সহজ।
ভের্টেক

1
@ গিলস: অন্যান্য জিনিস সমান হওয়ায় সরলতা সাহায্যের কার্য সম্পাদন করে। বলুন যে আপনি দুটি আলগোরিদিম তুলনা করছেন যা প্রত্যেকে তাদের নিজ নিজ অভ্যন্তরের লুপগুলির (কে এন লগ এন) পুনরাবৃত্তিগুলি গ্রহণ করে: প্রতি লুপে কম স্টাফ করার দরকার হয় সেই অ্যালগরিদমের কার্যকারিতা সুবিধা রয়েছে।
আগত ঝড়

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

5

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

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


1

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

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

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


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

আমার ধারণাটি ছিল যে এটি সাধারণীকরণ করা পারফরম্যান্স সম্পর্কে, তবে আমি কোনওটিই বিবেচনা করব না। ঠিক বলেছ, যদিও: যদি আপনার তুলনা বিশেষ করে ব্যয়বহুল, আপনার প্রত্যাশিত তুলনা সংখ্যা ... আপ করতে পারেন
comingstorm

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

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

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