সুতরাং মূলত, আপনি জানতে চান যে এমন কোনও বাছাই করা অ্যালগরিদম রয়েছে যা এর গড় কেস থেকে হ্রাস পাবে না যদি এর সাথে তুলনামূলক ফাংশনটিকে অনুরূপ দেওয়া হয়:
int Compare(object a, object b) { return Random.Next(-1,1); }
... যেখানে র্যান্ডম.নেক্সট () এমন একটি পদ্ধতি যা একটি নির্দিষ্ট অন্তর্ভুক্ত নিম্ন এবং উপরের সীমানার মধ্যে এলোমেলোভাবে উত্পন্ন পূর্ণসংখ্যা উত্পাদন করে।
উত্তরটি হ'ল বেশিরভাগ মৌলিক বাছাই করা অ্যালগরিদমগুলি তাদের গড় কেস অনুসারে সম্পাদন করবে কারণ তারা নিম্নলিখিত দুটি শর্তের মধ্যে কমপক্ষে একটি মেনে চলে:
- দুটি অনন্য উপাদানের মধ্যে একটি তুলনা কখনও বাছাই করে দুবার করা হয় না এবং / অথবা
- সাজানোর প্রতিটি পুনরাবৃত্তিতে, কমপক্ষে একটি উপাদানের সঠিক অবস্থান নির্ধারিত হয় এবং সুতরাং সেই উপাদানটিকে আর কখনও তুলনা করা হয় না।
উদাহরণস্বরূপ, সিলেকশনসোর্টটি অরসোর্টড উপাদানগুলির উপ-তালিকার মাধ্যমে পুনরাবৃত্তি করে "সর্বনিম্ন" এবং / অথবা "সেরা" উপাদানটি (এখন পর্যন্ত প্রত্যেকটির সাথে সর্বকালের সাথে তুলনা করে) এটি সঠিক অবস্থানে রাখে এবং পুনরাবৃত্তি করে। ফলস্বরূপ, এমনকি একটি অ-নিরবোধক তুলনাকারীর সাথেও, প্রতিটি পুনরাবৃত্তির শেষে অ্যালগরিদম একটি মান পেয়েছে যা এটি সবচেয়ে কম বা সবচেয়ে বড় বলে মনে করে, এটি নির্ধারণ করার চেষ্টা করছে এমন অবস্থার সাথে এটিকে অদলবদল করে এবং কখনও বিবেচনা করে না যে উপাদানটি আবার, এটি শর্ত ২ মেনে চলেন। তবে, এ এবং বি এই প্রক্রিয়া চলাকালীন একাধিকবার তুলনা করা যেতে পারে (সবচেয়ে চরম উদাহরণ হিসাবে, বিপরীত ক্রমে সাজানো অ্যারেতে সিলেকশনসোর্টের কয়েকটি পাস বিবেচনা করুন) সুতরাং এটি শর্ত 1 লঙ্ঘন করে ।
MergeSort শর্ত মেনে চলেন 2 তবে 2 নয়; সাব-অ্যারেগুলি যেমন একত্রীকরণ করা হয়, একই উপ-অ্যারেতে (বাম বা ডানদিকে) উপাদানগুলি একে অপরের সাথে তুলনা করা হয় না কারণ এটি ইতিমধ্যে নির্ধারিত হয়ে গেছে যে অ্যারের যে পাশের উপাদানগুলি একে অপরের সাথে সামঞ্জস্য করা হয়েছে; কোনটি কম এবং একীভূত তালিকায় পরবর্তী হওয়া উচিত তা নির্ধারণের জন্য অ্যালগোরিদম কেবল প্রতিটি সুব্ররের ন্যূনতম নিমজ্জনকারী উপাদানটিকে অন্যের সাথে তুলনা করে। এর অর্থ হ'ল যে কোনও দুটি অনন্য বস্তু এ এবং বিকে একে অপরের সাথে সর্বাধিক এক সময়ের সাথে তুলনা করা হবে তবে পূর্ণ সংকলনে কোনও প্রদত্ত উপাদানটির "চূড়ান্ত" সূচকটি অ্যালগরিদম সম্পূর্ণ না হওয়া পর্যন্ত জানা যায় না।
যদিও এর সামগ্রিক কৌশল এবং জটিলতা সিলেকশনসোর্টের মতো দেখায় তবুও ইনসারেশনশর্ট কেবল 1 শর্ত মেনে চলে। প্রতিটি অনিবদ্ধ উপাদান সাজানো উপাদানগুলির সাথে তুলনা করা হয়, সর্বাধিক প্রথম, যতক্ষণ না দেখা পাওয়া যায় যে তদন্তের অধীনে থাকা উপাদানটির চেয়ে কম। উপাদানটি সেই বিন্দুতে sertedোকানো হয় এবং তারপরে পরবর্তী উপাদানটি বিবেচনা করা হয়। ফলাফলটি হ'ল যে কোনও এ এবং বি এর আপেক্ষিক ক্রম একটি তুলনা দ্বারা নির্ধারিত হয়, এবং এ এবং বি এর মধ্যে আরও তুলনা কখনও সম্পাদন করা হয় না, তবে সমস্ত উপাদান বিবেচনা না করা অবধি কোনও উপাদানের চূড়ান্ত অবস্থানটি জানা যায় না।
কুইকসোর্ট মেনে চলেন উভয়কেই করেশর্ত ও নিয়মাবলী। প্রতিটি স্তরে, একটি পাইভট বেছে বেছে এমনভাবে সাজানো হয় যে "বাম দিকে" পিভটের চেয়ে কম উপাদান থাকে এবং "ডানদিকে" পিভটের চেয়ে বেশি উপাদান থাকে। এই স্তরের ফলাফলটি কুইকসোর্ট (বাম) + পিভট + কুইকসোর্ট (ডান) যার অর্থ মূলত পিভট এলিমেন্টের অবস্থানটি জানা যায় (বাম পাশের দৈর্ঘ্যের চেয়ে এক সূচক বেশি), পিভটটি অন্য কোনও উপাদানের সাথে কখনই তুলনা করা হয় না এটি একটি পাইভট হিসাবে নির্বাচিত হওয়ার পরে (এটি পূর্ববর্তী পাইভট উপাদানগুলির সাথে তুলনা করা যেতে পারে তবে সেই উপাদানগুলিও পরিচিত এবং কোনও সাবহারে অন্তর্ভুক্ত নয়), এবং যে কোনও এ এবং বি পাইভটের বিপরীত দিকে শেষ হয় তা কখনই হয় না তুলনায়। খাঁটি কুইকসোর্টের বেশিরভাগ বাস্তবায়নে, বেস কেসটি একটি উপাদান, যার বর্তমান সূচকটি তার চূড়ান্ত সূচক এবং এর সাথে আর কোনও তুলনা করা হয় না।
একমাত্র তুলনামূলক বাছাই করতে পারি যা আমি উভয় শর্ত মেনে চলব না তা হ'ল একটি অপ্টিমাইটিজড বুবলসোর্ট। যদি ক্রমটি মেনে না নেয় যে এক্স পাস করার পরে এক্স সর্বোচ্চ উপাদানগুলি তাদের যথাযথ স্থানে রয়েছে এবং / বা তালিকাটি বাছাই করা হয়েছে তা যাচাই করতে "ডাবল-চেক" পাস ব্যবহার করে, যখন সাজানোটি কেবল "সম্পন্ন" হিসাবে বিবেচিত হবে র্যান্ডম comparator ফিরে এসেছে -1 অথবা 0 একটি পাস সময় তালিকায় প্রতি দুই সন্নিহিত উপাদান এবং এইভাবে কোন অদলবদল সঞ্চালিত হয় (একটি ঘটনা যা, সত্যিই র্যান্ডম, সম্ভাব্যতা সঙ্গে ঘটবে জন্য ; অপেক্ষাকৃত জন্য 25 টি উপাদানের ছোট তালিকা, এটি 2000 সালের সুযোগের মধ্যে একটি, যখন 100 টি উপাদানের সম্ভাবনা 3.7 * 10 -18(2/3)N−1)। তুলনাকারীর ফলাফলের সর্বাধিক নিখুঁত মান বাড়ার সাথে সাথে নেতিবাচক বা শূন্য ফেরতের যে কোনও একটি তুলনার সম্ভাবনা .5 এর দিকে হ্রাস পায়, ফলে অ্যালগরিদমটি শেষ হওয়ার সুযোগ তৈরি হয় যা খুব কম সম্ভাব্য হয় (99 মুদ্রার সম্ভাবনা সমস্ত অবতরণ প্রধানকে পিছলে যায়) যা মূলত এটিতে নীচে নেমে আসে, এটি 1.2 * 10 30 এ 1 )
একটি দীর্ঘ সময়ের লেটার সম্পাদনা করুন: কয়েকটি "প্রকারের" রচনাগুলি এলোমেলো তুলনাকারীকে অন্তর্ভুক্ত না করার জন্য বিশেষভাবে ডিজাইন করা হয়েছে; সম্ভবত সর্বাধিক বিখ্যাত হ'ল বোগোসোর্ট। "একটি তালিকা দেওয়া হয়েছে, যদি তালিকাটি যথাযথ না হয় তবে তালিকাটি বদল করুন এবং আবার চেক করুন"। তাত্ত্বিকভাবে এটি উপরের "অ-অপ্টিমাইজড বুদ্বুদর্ট" এর মতই শেষ পর্যন্ত মানগুলির সঠিক অনুক্রমের উপর আঘাত হানবে, তবে গড় ক্ষেত্রেটি ফ্যাকটোরিয়াল-টাইম (এন! / 2), এবং জন্মদিনের সমস্যার কারণে (পর্যাপ্ত এলোমেলোভাবে অনুমতি পরে আপনি অনন্যগুলির তুলনায় সদৃশ ক্রিয়াকলাপগুলির মুখোমুখি হওয়ার সম্ভাবনা বেশি হয়ে যায়) অ্যালগরিদমটি আনুষ্ঠানিকভাবে অ্যালগোরিদমকে কখনই সম্পূর্ণ না করে এমন সময়সীমা অতিক্রম করে না a