নিম্নলিখিত ডিটারমিনিস্টিক (তুলনামূলক ছাড়াই) অ্যালগোরিদম একটি ইনপুট টিপল জন্য কাজ করে (a1,…,an):
- কিছু স্থির জুটির সাথে আপনার তুলনাকারী ব্যবহার করে ফিশার-ইয়েটস পরিবর্তন করুন saya1<a2) একটি কয়েন ফ্লিপ হিসাবে (গ্রহণযোগ্যতা-প্রত্যাখ্যান নমুনা করছেন)। তুলনামূলক আউটপুট হলে1 প্রথমবার, ডিটারমিনিস্টিক ক্ষেত্রে একটি অন্তহীন প্রত্যাখ্যান লুপ এড়াতে এটি উল্টানো ব্যবহার করুন।
- (alচ্ছিক গতিসম্পন্ন: একক জোড়া চেষ্টা করুন) n বার, যেখানে nদৈর্ঘ্য বা আপনার ইনপুট। যদি ফলাফলগুলির মধ্যে দুটি ভিন্ন হয় তবে (1) এ প্রাপ্ত অনুমানটি ফেরত পাঠান
- মার্জ বাছাই করে আপনার অ্যারে বাছাই করুন।
তুলনামূলক হিসাবে একটি ডিস্ট্রিমেন্টিক অর্ডার সম্পর্ক দেওয়া এই অ্যালগরিদম সময় একটি অ্যারে বাছাই O(nlogn) যেহেতু ফিশার-ইয়েটস এলোমেলো চলছে O(n) সর্বাধিক ব্যবহার O(logn)ননর্যান্ডম "এলোমেলো বিটস" (যেমন আপনার তুলনামূলককে কল করে) প্রতিটি ধাপে এবং মার্জ সাজানোর ক্ষেত্রে একই অ্যাসিপটোটিক জটিলতা রয়েছে। (1) এর ফলাফলটি এক্ষেত্রে সম্পূর্ণ অকেজো, তবে যেহেতু এটি একটি বাস্তব ধরণের দ্বারা অনুসরণ করা হয়, এটি কোনও ক্ষতি করে না।
তুলনাকারী হিসাবে একটি বাস্তব মুদ্রা ফ্লিপ দেওয়া (1) প্রতিটি অনুমানের জন্য সমান সম্ভাবনা সহ অ্যারেটিকে অনুমতি দেয় এবং যদি আপনাকে সত্যিই করতে হয় (3) (আপনি বাদ দিয়েছিলেন (2) বা (2) এলোমেলোতা নির্ধারণ করতে ব্যর্থ হয়েছে), এটি কোনও নয় ক্ষতি হ'ল কারণ এর ফলাফলের বিতরণ কেবলমাত্র তার ইনপুটের ক্রমের উপর নির্ভর করে যা (1) এর কারণে সমস্ত অনুক্রমের মধ্যে অভিন্নভাবে বিতরণ করা হয়, সুতরাং পুরো অ্যালগরিদমের ফলাফলটিও অভিন্নভাবে বিতরণ করা হয়। প্রতিটি গ্রহণযোগ্যতা-প্রত্যাখ্যান স্যাম্পলিংয়ের যে পরিমাণ পুনরাবৃত্তি করতে হবে তার পরিমাণ জ্যামিতিকভাবে বিতরণ করা হয় (সম্ভাব্যতার সাথে প্রত্যাখ্যান করুন)<12) এবং সুতরাং এটির একটি প্রত্যাশিত মান রয়েছে <2। প্রতিটি পুনরাবৃত্তি সর্বাধিক ব্যবহার করেlognবিট, তাই রানটাইম বিশ্লেষণ নির্ণায়ক ক্ষেত্রে হিসাবে প্রায় একই, কিন্তু আমরা শুধুমাত্র একটি পেতে প্রত্যাশিত রানটাইম এরO(nlogn), অবিচ্ছিন্নতার সম্ভাবনা সহ (কেবলমাত্র নিশ্চিতভাবেই শেষ হবে )।
জো যেমন উল্লেখ করেছে: আপনি যদি প্রথম বিটের জন্য (1) পরীক্ষা পছন্দ না করেন, (3) তারপর (1) করুন এবং ব্যবহার করুন an<a1 যা সর্বদা হয় 0, যেহেতু অ্যারে ইতিমধ্যে ডিস্ট্রিমেন্টিক ক্ষেত্রে সাজানো হয়েছে। অতিরিক্তভাবে আপনাকে লুপের রেঞ্জের উপরের সীমানা থেকে আপনার এলোমেলো সংখ্যাটি বিয়োগ করতে হবে কারণ এলোমেলো সংখ্যার জন্য উপরের সীমাটি অভিন্ন ক্রিয়াকলাপ দেয়। তবে জেনে রাখুন যে (২) তখন নিষিদ্ধ, কারণ মুক্তিপণের ক্ষেত্রে আপনাকে সর্বদা রদবদল করতে হবে।
এমনকি আপনার তুলনামূলককে (1) এবং (3) এর জন্য একই কলগুলি ব্যবহার করতে পারেন, তবে তারপরে প্রমাণিত যে ফলাফলটি সমানভাবে বিতরণ করা হয়েছে, যদি তা সম্ভব হয় তবে কমপক্ষে আরও বেশি শক্ত।
নিম্নলিখিত অ্যালগরিদম এলোমেলো এবং সাজানোর জন্য কোন পৃথক পর্যায় নেই, তবে asyptotically ধীর। এটি মূলত
বাইনারি অনুসন্ধানের সাথে
সন্নিবেশ অনুসারে সাজানো । আমি ব্যবহার করা হবে
a=(a1,…,an) ইনপুট বোঝাতে এবং
bk=(bk,1,…,bk,k) এর পরে ফলাফল বোঝাতে
kচতুর্থ রাউন্ড:
- সেট b1,1=a1
- যদি a2<a1 তারপর b2=(a2,a1) এবং (c,d):=(2,1) আর b2=(a1,a2) এবং (c,d):=(1,2)। উভয় ক্ষেত্রেad<ac সবসময় হতে হবে 0 (যেমন মিথ্যা) একটি ননরানডম তুলনাকারীর জন্য।
- অর্জন bk জন্য k≥3 প্রাপ্ত bk−1 প্রথম।
- দিন l=⌈log2k⌉ এবং k′=2lঅর্থাৎ k′ এর সর্বনিম্ন শক্তি 2 এর চেয়ে ছোট নয় k।
- দিন i0=0। প্রত্যেকের জন্যj∈{1,…,l} দিন
ij=⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪ij−1+2l−jij−1ij−1+2l−jij−1ij−1+2l−j>k−1∧ad<acij−1+2l−j>k−1∧¬(ad<ac)ij−1+2l−j≤k−1∧bk−1,ij−1+2l−j<akij−1+2l−j≤k−1∧¬(bk−1,ij−1+2l−j<ak)
- যদি il>k পুনরাবৃত্তি (5.) bk=(bk−1,1,…,bk−1,il−1,ak,bk−1,il,…,bk−1,k−1)
- আউটপুট bn
এলোমেলো ক্ষেত্রে: 5 + এর cla ধারাটি মূলত গ্রহণযোগ্যতা-প্রত্যাখ্যানের নমুনা। বাকি অ্যালগরিদম একটি নিষ্পাপ শ্যাফেল: প্রথমটি সাফ করুনk−1 উপাদান এবং যোগ করুন kসমান সম্ভাবনা সহ প্রতিটি পজিশনে তম উপাদান। যদি আমরা সাধারণ সন্নিবেশ সাজান ব্যবহার করি তবে আমরা পরিবর্তে দ্বিপদী বিতরণ করব।
মনে রাখবেন যে এই অ্যালগরিদম ফিশার-ইয়েটস বদলের তুলনায় উভয় মোডে অকার্যকর এবং একত্রীকরণের স্থিতিতে একটি উপাদান সন্নিবেশ করানো যেমন একটি অ্যারে ব্যবহার করে বাইনারি অনুসন্ধানের ক্ষেত্রে লিনিয়ার সময় প্রয়োজন হয় তবে তালিকা ব্যবহার করা ব্যয়বহুল। তবে সম্ভবত একইভাবে হিপ সাজানোর বা গাছের সাজানোর একটি পরিবর্তন দ্রুত অ্যালগরিদমের দিকে নিয়ে যেতে পারে।