Fisher–Yates shuffle
ফিশার-ইয়েটস শাফেল একটি সীমাবদ্ধ ক্রম পরিবর্তন করার জন্য একটি অ্যালগরিদম। অ্যালগরিদমটি ক্রমের সমস্ত উপাদানের একটি তালিকা নেয় এবং কোনও উপাদান না থাকা পর্যন্ত তালিকা থেকে এলোমেলোভাবে একটি উপাদান অঙ্কন করে ক্রমাগত পরিবর্তিত ক্রমের পরবর্তী উপাদান নির্ধারণ করে। অ্যালগরিদমটি একটি নিরপেক্ষ বিন্যাস তৈরি করেঃ প্রতিটি বিন্যাস সমানভাবে সম্ভাব্য। অ্যালগরিদমের আধুনিক সংস্করণটি পরিবর্তন করা আইটেমগুলির সংখ্যার সাথে আনুপাতিক সময় নেয় এবং সেগুলিকে জায়গায় পরিবর্তন করে। ফিশার-ইয়েটস শাফেলের নামকরণ করা হয়েছে রোনাল্ড ফিশার এবং ফ্রাঙ্ক ইয়েটসের নামে, যিনি প্রথম এটি বর্ণনা করেছিলেন এবং ডোনাল্ড নুথের নামে এটি নুথ শাফেল নামেও পরিচিত। ফিশার-ইয়েটস শাফলের একটি রূপ, যা সাট্টোলোর অ্যালগরিদম নামে পরিচিত, এলোমেলো বিন্যাসের পরিবর্তে দৈর্ঘ্য n এর এলোমেলো চক্রাকার বিন্যাস তৈরি করতে ব্যবহার করা যেতে পারে। 1938 সালে রোনাল্ড ফিশার এবং ফ্রাঙ্ক ইয়েটস তাদের বই স্ট্যাটিস্টিক্যাল টেবিল ফর বায়োলজিক্যাল, এগ্রিকালচারাল অ্যান্ড মেডিকেল রিসার্চ-এ ফিশার এবং ইয়েটসের মূল পদ্ধতি দ্য ফিশার-ইয়েটস শাফেল-এর বর্ণনা দেন। তাদের অ্যালগরিদমের বর্ণনায় পেন্সিল এবং কাগজ ব্যবহার করা হয়েছিল; এলোমেলো সংখ্যার একটি টেবিল এলোমেলোতা সরবরাহ করেছিল। 1 থেকে এন পর্যন্ত সংখ্যার এলোমেলো বিন্যাস তৈরি করার জন্য প্রদত্ত মৌলিক পদ্ধতিটি নিম্নরূপঃ 1 থেকে এন পর্যন্ত সংখ্যাগুলি লিখুন। এক এবং অবশিষ্ট (অন্তর্ভুক্ত) অসংলগ্ন সংখ্যার মধ্যে একটি এলোমেলো সংখ্যা কে বেছে নিন। নীচের প্রান্ত থেকে গণনা করে, kth সংখ্যাটি বের করুন যা এখনও বের হয়নি, এবং একটি পৃথক তালিকার শেষে এটি লিখুন। সমস্ত সংখ্যা শেষ না হওয়া পর্যন্ত দ্বিতীয় ধাপ থেকে পুনরাবৃত্তি করুন। ধাপ 3-এ লেখা সংখ্যার ক্রমটি এখন মূল সংখ্যার একটি এলোমেলো বিন্যাস। তবে শর্ত থাকে যে উপরের ধাপ 2-এ বাছাই করা এলোমেলো সংখ্যাগুলি সত্যিই এলোমেলো এবং নিরপেক্ষ, তাই ফলস্বরূপ বিন্যাস হবে। ফিশার এবং ইয়েটস সরবরাহকৃত টেবিলগুলি থেকে যে কোনও পছন্দসই পরিসরে এই জাতীয় এলোমেলো সংখ্যা কীভাবে এমনভাবে পাওয়া যায় তা বর্ণনা করার যত্ন নিয়েছিলেন যা কোনও পক্ষপাত এড়ায়। তারা একটি সহজ পদ্ধতি ব্যবহার করার সম্ভাবনার পরামর্শও দিয়েছিল-এক থেকে এন-এ এলোমেলো সংখ্যা বাছাই করা এবং যে কোনও ডুপ্লিকেট ফেলে দেওয়া-ক্রমবিন্যাসের প্রথমার্ধ তৈরি করতে এবং কেবল বাকি অর্ধেকের জন্য আরও জটিল অ্যালগরিদম প্রয়োগ করা, যেখানে একটি ডুপ্লিকেট সংখ্যা বাছাই করা অন্যথায় হতাশাজনকভাবে সাধারণ হয়ে উঠবে। আধুনিক অ্যালগরিদম কম্পিউটার ব্যবহারের জন্য ডিজাইন করা ফিশার-ইয়েটস শাফলের আধুনিক সংস্করণটি 1964 সালে রিচার্ড ডারস্টেনফেল্ড দ্বারা চালু করা হয়েছিল এবং দ্য আর্ট অফ কম্পিউটার প্রোগ্রামিং-এ ডোনাল্ড ই. নুথ দ্বারা "অ্যালগরিদম পি (শাফলিং)" হিসাবে জনপ্রিয় করা হয়েছিল। ডার্স্টেনফেল্ডের নিবন্ধ বা দ্য আর্ট অফ কম্পিউটার প্রোগ্রামিংয়ের নুথের প্রথম সংস্করণ কেউই ফিশার এবং ইয়েটসের কাজকে স্বীকৃতি দেয়নি; তারা হয়তো এটি সম্পর্কে অবগত ছিল না। নুথের দ্য আর্ট অফ কম্পিউটার প্রোগ্রামিংয়ের পরবর্তী সংস্করণগুলিতে ফিশার এবং ইয়েটসের অবদানের উল্লেখ রয়েছে। ডার্স্টেনফেল্ডের বর্ণিত অ্যালগরিদমটি ফিশার এবং ইয়েটসের দেওয়া অ্যালগরিদমের চেয়ে বেশি দক্ষঃ যেখানে ফিশার এবং ইয়েটসের পদ্ধতির একটি সরল কম্পিউটার বাস্তবায়ন উপরের ধাপ 3-এ অবশিষ্ট সংখ্যাগুলি গণনা করতে অযথা সময় ব্যয় করবে, ডার্স্টেনফেল্ডের সমাধান হল প্রতিটি পুনরাবৃত্তিতে শেষ অপ্রচলিত সংখ্যার সাথে অদলবদল করে "আঘাত" সংখ্যাগুলিকে তালিকার শেষে নিয়ে যাওয়া। এটি সরল বাস্তবায়নের তুলনায় অ্যালগরিদমের সময় জটিলতা হ্রাস করে। এই পরিবর্তনটি নিম্নলিখিত অ্যালগরিদম দেয় (শূন্য-ভিত্তিক অ্যারের জন্য)। --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- উদাহরণস্বরূপ, যদি জে = 3 হয়, তবে কেউ স্ক্র্যাচ প্যাডে তৃতীয় অক্ষরটি আঘাত করে এবং ফলস্বরূপ এটি লিখে দেয়ঃ একটি দ্বিতীয় এলোমেলো সংখ্যা বেছে নেওয়া হয়, এবার 1 থেকে 7 পর্যন্ত। যদি সংখ্যাটি 4 হয়, তবে কেউ চতুর্থ অক্ষরটি বের করে দেয় যা এখনও স্ক্র্যাচ প্যাডে আঘাত করেনি এবং ফলাফলের সাথে এটি যুক্ত করেঃ পরবর্তী এলোমেলো সংখ্যাটি 1 থেকে 6 পর্যন্ত নির্বাচিত হয়, এবং তারপরে 1 থেকে 5 পর্যন্ত, এবং আরও অনেক কিছু, সর্বদা উপরের মতো স্ট্রাইক-আউট প্রক্রিয়াটি পুনরাবৃত্তি করেঃ আধুনিক পদ্ধতি ডারস্টেনফেল্ডের অ্যালগরিদমের সংস্করণে, নির্বাচিত অক্ষরগুলি বের করে অন্য কোথাও অনুলিপি করার পরিবর্তে, সেগুলি এখনও নির্বাচিত হয়নি এমন শেষ অক্ষরের সাথে অদলবদল করা হয়। আগের মতোই এ থেকে এইচ পর্যন্ত অক্ষর দিয়ে শুরু করুনঃ 1 থেকে 8 পর্যন্ত একটি এলোমেলো সংখ্যা জে নির্বাচন করুন, এবং তারপর জে এবং 8 নম্বর অক্ষরগুলি অদলবদল করুন। সুতরাং, যদি এলোমেলো সংখ্যাটি 6 হয়, উদাহরণস্বরূপ, তালিকার 6ষ্ঠ এবং 8ম অক্ষরগুলি অদলবদল করুনঃ পরবর্তী এলোমেলো সংখ্যাটি 1 থেকে 7 পর্যন্ত নির্বাচিত হয় এবং নির্বাচিত অক্ষরটি 7ম অক্ষরের সাথে অদলবদল করা হয়। উদাহরণস্বরূপ, যদি এটি 2 হয়, 2য় এবং 7ম অক্ষরগুলি অদলবদল করুনঃ বিন্যাস সম্পূর্ণ না হওয়া পর্যন্ত প্রক্রিয়াটি পুনরাবৃত্তি করা হয়ঃ আটটি ধাপের পরে, অ্যালগরিদমটি সম্পূর্ণ হয় এবং ফলস্বরূপ বিন্যাসটি হল জি. ই. ডি. সি. এ. এইচ. বি. এফ। অর্থাৎ, একটি প্রি-ইনিশিয়ালাইজড অ্যারে দেওয়া হলে, এটি অ্যারের একটি অদলবদলিত অনুলিপি তৈরি করার পরিবর্তে অ্যারের উপাদানগুলিকে জায়গায় অদলবদল করে। এটি একটি সুবিধা হতে পারে যদি রদবদল করার জন্য অ্যারেটি বড় হয়। একই সাথে একটি অ্যারে শুরু এবং অদলবদল করার জন্য, অদলবদলের একটি "ইনসাইড-আউট" সংস্করণ করে কিছুটা বেশি দক্ষতা অর্জন করা যেতে পারে। এই সংস্করণে, একটি ক্রমানুসারে উপাদান সংখ্যা i কে অ্যারেতে প্রথম i অবস্থানের মধ্যে একটি এলোমেলো অবস্থানে রাখে, পূর্বে সেই অবস্থানে থাকা উপাদানটিকে i অবস্থানে স্থানান্তরিত করার পরে। যদি এলোমেলো অবস্থানটি i নম্বর হয়, তবে এই "সরানো" (একই জায়গায়) একটি আরম্ভহীন মান জড়িত, তবে এটি কোন ব্যাপার না, কারণ মানটি তখন অবিলম্বে ওভাররাইট করা হয়। কোনও পৃথক সূচনা প্রয়োজন হয় না, এবং কোনও বিনিময় সঞ্চালিত হয় না। সাধারণ ক্ষেত্রে যেখানে সোর্সকে কিছু সহজ ফাংশন দ্বারা সংজ্ঞায়িত করা হয়, যেমন 0 থেকে n−1 পর্যন্ত পূর্ণসংখ্যা, সোর্সকে কেবল ফাংশন দিয়ে প্রতিস্থাপন করা যেতে পারে কারণ এক্সিকিউশনের সময় সোর্সকে কখনও পরিবর্তন করা হয় না। সূত্রটির এলোমেলোভাবে অদলবদল করা অনুলিপিতে n উপাদানগুলির একটি অ্যারে শুরু করার জন্য, উভয়ই 0-ভিত্তিকঃ 0 থেকে n−1 পর্যন্ত i-এর জন্য random পূর্ণসংখ্যা এমনভাবে করুন যে 0 ≤ j ≤ i যদি j ≤ i a [i] ≤ a [j] a [j] ≤ উৎস [i] ইনসাইড-আউট অদলবদলকে আনয়ন দ্বারা সঠিক হতে দেখা যায়। একটি নিখুঁত র্যান্ডম নম্বর জেনারেটর ধরে নিলে, প্রতিটি এন! এলোমেলো সংখ্যার বিভিন্ন ক্রম যা এলোমেলো কল থেকে পাওয়া যেতে পারে তা মানগুলির একটি ভিন্ন বিন্যাস তৈরি করবে, তাই এগুলি সবই ঠিক একবার প্রাপ্ত হয়। যে শর্তটি পরীক্ষা করে যে, যে ভাষাগুলিতে শুরু না করা অ্যারের মানগুলি অ্যাক্সেস করতে কোনও সমস্যা নেই, সেখানে জে ষ্ণ আই বাদ দেওয়া যেতে পারে কিনা। এটি Hn ≈ ln n + γ অপ্রয়োজনীয় অ্যাসাইনমেন্টের প্রত্যাশিত ব্যয়ে n শর্তাধীন শাখাগুলিকে সরিয়ে দেয়। এই কৌশলটির আরেকটি সুবিধা হল যে n, উৎসে উপাদানগুলির সংখ্যা, আগে থেকে জানার প্রয়োজন নেই; আমাদের কেবলমাত্র উৎস তথ্যের শেষটি সনাক্ত করতে সক্ষম হতে হবে যখন এটি পৌঁছায়। অ্যারের নীচে a খালি থেকে শুরু করে পুনরাবৃত্তিমূলকভাবে তৈরি করা হয় এবং a.length বর্তমান দেখা উপাদানগুলির সংখ্যাকে উপস্থাপন করে। একটি খালি অ্যারে 'ক' কে উৎসের এলোমেলোভাবে অদলবদল করা অনুলিপিতে সূচনা করার জন্য যার দৈর্ঘ্য জানা যায় নাঃ যেখানে source.moreDataAvailable জে-র্যান্ডম পূর্ণসংখ্যা এমন যে 0 ≤ জে ≤ a.length যদি জে = a.length a.append (source.next) অন্যথায় a.append (এ [জে]) এ [জে] source.next সাট্টোলোর অ্যালগরিদম 1986 সালে সান্ড্রা সাট্টোলো দ্বারা (সর্বাধিক) দৈর্ঘ্যের অভিন্নভাবে বিতরণ করা চক্র তৈরি করার জন্য একটি খুব অনুরূপ অ্যালগরিদম প্রকাশ করা হয়েছিল। ডারস্টেনফেল্ড এবং সাট্টোলোর অ্যালগরিদমের মধ্যে একমাত্র পার্থক্য হল পরেরটিতে, উপরের দ্বিতীয় ধাপে, র্যান্ডম নম্বর জে এর মধ্যে থেকে বেছে নেওয়া হয়। এই সহজ পরিবর্তনটি অ্যালগরিদমকে পরিবর্তন করে যাতে ফলস্বরূপ বিন্যাস সর্বদা একটি একক চক্র নিয়ে গঠিত হয়। প্রকৃতপক্ষে, নীচে বর্ণিত হিসাবে, সাধারণ ফিশার-ইয়েটস পাল্টানোর উদ্দেশ্যে দুর্ঘটনাক্রমে সাট্টোলোর অ্যালগরিদম বাস্তবায়ন করা বেশ সহজ। এটি (n−1)-এর ছোট সেট থেকে বিন্যাস বাছাই করে ফলাফলকে পক্ষপাতদুষ্ট করবে! সমস্ত এন-এর পূর্ণ সেটের পরিবর্তে দৈর্ঘ্য এন-এর চক্র! সম্ভাব্য বিন্যাস। সাট্টোলোর অ্যালগরিদম সর্বদা n দৈর্ঘ্যের একটি চক্র তৈরি করে যা আনয়ন দ্বারা দেখানো যেতে পারে। আনয়ন দ্বারা ধরে নিন যে লুপের প্রাথমিক পুনরাবৃত্তির পরে, অবশিষ্ট পুনরাবৃত্তিগুলি n−1 দৈর্ঘ্যের চক্র অনুসারে প্রথম n−1 উপাদানগুলিকে বিন্যস্ত করে (অবশিষ্ট পুনরাবৃত্তিগুলি কেবলমাত্র সেই প্রথম n−1 উপাদানগুলিতে প্রয়োগ করা সাট্টোলোর অ্যালগরিদম)। এর মানে হল যে প্রাথমিক উপাদানটিকে তার নতুন অবস্থান পি-তে ট্রেস করা, তারপর মূলত অবস্থান পি-তে থাকা উপাদানটিকে তার নতুন অবস্থানে নিয়ে যাওয়া, এবং আরও অনেক কিছু, একজন কেবল অন্যান্য সমস্ত অবস্থান পরিদর্শন করার পরে প্রাথমিক অবস্থানে ফিরে আসে। ধরুন প্রাথমিক পুনরাবৃত্তিটি চূড়ান্ত উপাদানটিকে (অ-চূড়ান্ত) অবস্থান k-এর সাথে অদলবদল করেছে এবং প্রথম n−1 উপাদানগুলির পরবর্তী বিন্যাসটি এটিকে অবস্থান l-এ নিয়ে গেছে; আমরা সমস্ত n উপাদানগুলির বিন্যাস π-কে প্রথম n−1 উপাদানগুলির অবশিষ্ট বিন্যাস σ-এর সাথে তুলনা করি। এইমাত্র উল্লিখিত পর্যায়ক্রমিক অবস্থানগুলি সন্ধান করলে, k অবস্থানে না পৌঁছানো পর্যন্ত π এবং σ-এর মধ্যে কোনও পার্থক্য থাকে না। কিন্তু তারপর, π-এর অধীনে মূলত k অবস্থানে থাকা উপাদানটিকে l অবস্থানে না গিয়ে চূড়ান্ত অবস্থানে নিয়ে যাওয়া হয় এবং মূলত চূড়ান্ত অবস্থানে থাকা উপাদানটিকে l অবস্থানে নিয়ে যাওয়া হয়। সেখান থেকে, π-এর অবস্থানের ক্রম আবার σ-এর ক্রম অনুসরণ করে, এবং প্রয়োজনীয় হিসাবে প্রাথমিক অবস্থানে ফিরে আসার আগে সমস্ত অবস্থান পরিদর্শন করা হবে। বিন্যাসের সমান সম্ভাবনার ক্ষেত্রে, এটি পর্যবেক্ষণ করা যথেষ্ট যে পরিবর্তিত অ্যালগরিদম (এন-1) জড়িত! উৎপাদিত এলোমেলো সংখ্যার স্বতন্ত্র সম্ভাব্য ক্রম, যার প্রতিটি স্পষ্টভাবে একটি ভিন্ন বিন্যাস তৈরি করে এবং যার প্রতিটি ঘটে-এলোমেলো সংখ্যার উৎস নিরপেক্ষ বলে ধরে নিয়ে-সমান সম্ভাবনার সাথে। (এন-1)! এইভাবে উৎপাদিত বিভিন্ন বিন্যাস সঠিকভাবে n দৈর্ঘ্যের চক্রের সেটকে নিষ্ক্রিয় করেঃ এই ধরনের প্রতিটি চক্রের চূড়ান্ত অবস্থানে n মান সহ একটি অনন্য চক্র স্বরলিপি রয়েছে, যা (n−1)-এর অনুমতি দেয়! চক্র স্বরলিপির অন্যান্য অবস্থানগুলি পূরণ করার জন্য অবশিষ্ট মানগুলির বিন্যাস। পাইথনে সাট্টোলোর অ্যালগরিদমের একটি নমুনা বাস্তবায়ন হলঃ এলোমেলো আমদানি থেকে র্যান্ড্রেঞ্জ ডেফ সাট্টোলো _ সাইকেল (আইটেম)-> কিছুই নয়ঃ "সাট্টোলোর অ্যালগরিদম"। আই = লেন (আইটেম) যেখানে আই> 1: আই = আই-1 জে = র্যান্ড্রেঞ্জ (আই) #0 <= জে <= আই-1 আইটেম [জে], আইটেম [আই] = আইটেম [আই], আইটেম [জে] অন্যান্য শাফলিং অ্যালগরিদমের সাথে তুলনা ফিশার-ইয়েটস শাফলের অ্যাসিম্পটোটিক সময় এবং স্থান জটিলতা সর্বোত্তম। একটি উচ্চ-মানের নিরপেক্ষ এলোমেলো সংখ্যার উৎসের সাথে মিলিত হয়ে, এটি নিরপেক্ষ ফলাফল তৈরি করারও নিশ্চয়তা দেয়। অন্যান্য কিছু সমাধানের তুলনায়, এর সুবিধাও রয়েছে যে, যদি ফলাফলের বিন্যাসের শুধুমাত্র একটি অংশের প্রয়োজন হয়, তবে এটি মাঝপথে বন্ধ করা যেতে পারে, এমনকি থামানো যেতে পারে এবং বারবার পুনরায় চালু করা যেতে পারে, যা প্রয়োজন অনুযায়ী ক্রমবিন্যাস ক্রমবর্ধমানভাবে তৈরি করে। সরল পদ্ধতি সমস্ত উপাদান থেকে এলোমেলোভাবে নির্বাচিত অন্য উপাদানের সাথে প্রতিটি উপাদানকে অদলবদল করার সরল পদ্ধতি পক্ষপাতদুষ্ট। বিভিন্ন বিন্যাসের প্রত্যেকটির জন্য উত্পন্ন হওয়ার বিভিন্ন সম্ভাবনা থাকবে, কারণ বিভিন্ন বিন্যাসের সংখ্যা, অ্যালগরিদমের এলোমেলো ফলাফলের সংখ্যাকে সমানভাবে ভাগ করে না। বিশেষত, বার্ট্রান্ডের স্বীকার্য অনুসারে এবং-এর মধ্যে কমপক্ষে একটি মৌলিক সংখ্যা থাকবে এবং এই সংখ্যাটি ভাগ করবে কিন্তু ভাগ করবে না। র্যান্ডম ইম্পোর্ট থেকে র্যান্ড্রেঞ্জ ডেফ নাইভ _ শাফল (আইটেম)-> ননঃ "" একটি সরল পদ্ধতি। এটি কী করা উচিত নয় তার একটি উদাহরণ-এর পরিবর্তে ফিশার-ইয়েটস ব্যবহার করুন। n = লেন (আইটেম) i-এর জন্য পরিসীমা (n): j = র্যান্ড্রেঞ্জ (n) #0 <= j <= n-1 আইটেম [j], আইটেম [i] = আইটেম [i], আইটেম [j] বাছাই একটি বিকল্প পদ্ধতি সেটের প্রতিটি উপাদানকে একটি এলোমেলো সংখ্যা বরাদ্দ করে এবং তারপর নির্ধারিত সংখ্যা অনুযায়ী সেটটি সাজায়। বাছাই পদ্ধতিতে ফিশার-ইয়েটসের মতো একই অ্যাসিম্পটোটিক সময় জটিলতা রয়েছেঃ যদিও সাধারণ বাছাই ও (এন লগ এন), তবে ও (এন) সময়ে র্যাডিক্স বাছাই ব্যবহার করে সংখ্যাগুলি দক্ষতার সাথে সাজানো হয়। ফিশার-ইয়েটস রদবদলের মতো, বাছাই পদ্ধতিটি নিরপেক্ষ ফলাফল তৈরি করে। যাইহোক, নির্ধারিত র্যান্ডম সংখ্যাগুলি কখনই ডুপ্লিকেট না হয় তা নিশ্চিত করার জন্য অবশ্যই যত্ন নিতে হবে, যেহেতু বাছাই অ্যালগরিদমগুলি সাধারণত টাইয়ের ক্ষেত্রে এলোমেলোভাবে উপাদানগুলি অর্ডার করে না। উপরন্তু, এই পদ্ধতির জন্য অ্যাসিম্পটোটিকভাবে বৃহত্তর স্থান প্রয়োজনঃ ও (এন) এলোমেলো সংখ্যার জন্য অতিরিক্ত সঞ্চয় স্থান, বনাম ফিশার-ইয়েটস শাফলের জন্য ও (1) স্থান। পরিশেষে, বাছাই পদ্ধতির একটি সহজ সমান্তরাল বাস্তবায়ন রয়েছে, ফিশার-ইয়েটস শাফলের বিপরীতে, যা ক্রমানুসারে হয়। উপরের পদ্ধতির একটি বৈকল্পিক যা ব্যবহারকারী-নির্দিষ্ট তুলনা ফাংশনের সাথে বাছাইকে সমর্থন করে এমন ভাষাগুলিতে কিছু ব্যবহার দেখেছে তা হল একটি তালিকাটিকে একটি তুলনা ফাংশনের সাথে বাছাই করে যা এলোমেলো মান প্রদান করে। যাইহোক, এটি অত্যন্ত অ-অভিন্ন বিতরণ তৈরি করার সম্ভাবনা রয়েছে, যা উপরন্তু ব্যবহৃত বাছাই অ্যালগরিদমের উপর ব্যাপকভাবে নির্ভর করে। উদাহরণস্বরূপ, ধরুন কুইকসোর্ট বাছাই অ্যালগরিদম হিসাবে ব্যবহৃত হয়, যেখানে একটি নির্দিষ্ট উপাদান প্রথম পিভট উপাদান হিসাবে নির্বাচিত হয়। অ্যালগরিদমটি পিভটকে অন্যান্য সমস্ত উপাদানের সাথে তুলনা করতে শুরু করে যাতে তাদের মধ্যে কম এবং তার চেয়ে বড়গুলি আলাদা করা যায় এবং সেই গোষ্ঠীগুলির আপেক্ষিক আকারগুলি পিভট উপাদানটির চূড়ান্ত স্থান নির্ধারণ করবে। অভিন্নভাবে বণ্টিত এলোমেলো বিন্যাসের জন্য, প্রতিটি সম্ভাব্য চূড়ান্ত অবস্থান পিভট উপাদানটির জন্য সমানভাবে সম্ভাব্য হওয়া উচিত, তবে যদি প্রতিটি প্রাথমিক তুলনা সমান সম্ভাবনার সাথে "কম" বা "বেশি" ফেরত দেয়, তবে সেই অবস্থানের পি = 1/2-এর জন্য একটি দ্বিপদী বন্টন থাকবে, যা অনুক্রমের মাঝখানে অবস্থান দেয় এবং প্রান্তের কাছাকাছি অবস্থানের তুলনায় অনেক বেশি সম্ভাব্যতা দেয়। মার্জ সার্টের মতো অন্যান্য বাছাই পদ্ধতিতে প্রয়োগ করা এলোমেলো তুলনা ফাংশনগুলি এমন ফলাফল তৈরি করতে পারে যা আরও অভিন্ন বলে মনে হয়, তবে তা একেবারেই নয়, কারণ দুটি ক্রমকে একত্রিত করে বার বার সমান সম্ভাবনার সাথে একটি বেছে নেওয়া হয় (যতক্ষণ না একটি ক্রমের ক্লান্তির কারণে পছন্দটি বাধ্য হয়) একটি অভিন্ন বিতরণ সহ ফলাফল তৈরি করে না; পরিবর্তে একটি ক্রম বেছে নেওয়ার সম্ভাবনা এতে অবশিষ্ট উপাদানগুলির সংখ্যার সাথে আনুপাতিক হওয়া উচিত। প্রকৃতপক্ষে কোনও পদ্ধতি যা সমান সম্ভাব্যতা ("মুদ্রা উল্টানো") সহ কেবল দ্বিমুখী এলোমেলো ঘটনা ব্যবহার করে, একটি সীমাবদ্ধ সংখ্যক বার পুনরাবৃত্তি করে, একটি অভিন্ন বন্টনের সাথে একটি ক্রমের (দুটিরও বেশি উপাদানের) বিন্যাস তৈরি করতে পারে না, কারণ প্রতিটি কার্যকরকরণ পথে সম্ভাব্যতা হিসাবে একটি মূলদ সংখ্যা থাকবে যা হর হিসাবে 2 এর ঘাত থাকবে, যখন প্রয়োজনীয় সম্ভাবনা 1/এন! প্রতিটি সম্ভাব্য বিন্যাসের জন্য সেই রূপটি হয় না। নীতিগতভাবে এই অদলবদল পদ্ধতির ফলে অন্তহীন লুপ বা অ্যাক্সেস লঙ্ঘনের মতো প্রোগ্রাম ব্যর্থতাও হতে পারে, কারণ একটি বাছাই অ্যালগরিদমের সঠিকতা অর্ডার সম্পর্কের বৈশিষ্ট্যের উপর নির্ভর করতে পারে (যেমন ট্রানজিটিভিটি) যা এলোমেলো মান তৈরি করে এমন তুলনা অবশ্যই থাকবে না। যদিও এই ধরনের আচরণ বাছাইয়ের রুটিনের ক্ষেত্রে হওয়া উচিত নয় যা কখনও এমন তুলনা করে না যার ফলাফল নিশ্চিতভাবে পূর্বাভাস দেওয়া যেতে পারে (পূর্ববর্তী তুলনার উপর ভিত্তি করে), ইচ্ছাকৃতভাবে এই ধরনের তুলনা করার বৈধ কারণ থাকতে পারে। উদাহরণস্বরূপ, যে কোনও উপাদানের নিজের সমান তুলনা করা উচিত তা দক্ষতার কারণে সেগুলিকে প্রহরী মান হিসাবে ব্যবহার করার অনুমতি দেয় এবং যদি এটি হয় তবে একটি এলোমেলো তুলনা ফাংশন বাছাই অ্যালগরিদমকে ভেঙে দেবে। পক্ষপাতের সম্ভাব্য উৎসগুলি ফিশার-ইয়েটস শাফেল বাস্তবায়নের সময় যত্ন নেওয়া আবশ্যক, উভয়ই অ্যালগরিদমের বাস্তবায়নে এবং এলোমেলো সংখ্যার প্রজন্মের উপর নির্মিত, অন্যথায় ফলাফলগুলি সনাক্তযোগ্য পক্ষপাত দেখাতে পারে। পক্ষপাতিত্বের বেশ কয়েকটি সাধারণ উৎস নীচে তালিকাভুক্ত করা হয়েছে। বাস্তবায়নের ত্রুটি ফিশার-ইয়েটস শাফেল বাস্তবায়নের সময় একটি সাধারণ ত্রুটি হল ভুল পরিসীমা থেকে এলোমেলো সংখ্যা বাছাই করা। ত্রুটিপূর্ণ অ্যালগরিদমটি সঠিকভাবে কাজ করে বলে মনে হতে পারে, তবে এটি সমান সম্ভাবনার সাথে প্রতিটি সম্ভাব্য বিন্যাস তৈরি করবে না এবং এটি কোনও নির্দিষ্ট বিন্যাস তৈরি নাও করতে পারে। উদাহরণস্বরূপ, একটি সাধারণ অফ-বাই-ওয়ান ত্রুটি হ 'ল উপরের উদাহরণে অদলবদল করার জন্য এন্ট্রির সূচক জে বেছে নেওয়া হবে যাতে এটি যে এন্ট্রির সাথে অদলবদল করা হবে তার সূচক আই এর চেয়ে সর্বদা কঠোরভাবে কম হয়। এটি ফিশার-ইয়েটস শাফলকে সাট্টোলোর অ্যালগরিদমে পরিণত করে, যা সমস্ত উপাদানকে জড়িত করে একটি একক চক্রের সমন্বয়ে কেবল বিন্যাস তৈরি করেঃ বিশেষত, এই পরিবর্তনের সাথে, অ্যারের কোনও উপাদান কখনও তার মূল অবস্থানে শেষ হতে পারে না। একইভাবে, সর্বদা প্রতিটি পুনরাবৃত্তিতে বৈধ অ্যারে সূচকগুলির পুরো পরিসীমা থেকে জে নির্বাচন করাও এমন একটি ফলাফল তৈরি করে যা পক্ষপাতদুষ্ট, যদিও স্পষ্টতই কম। এটি এই সত্য থেকে দেখা যায় যে এটি করার ফলে অদলবদলগুলির স্বতন্ত্র সম্ভাব্য ক্রম পাওয়া যায়, যেখানে কেবল এন রয়েছে! একটি এন-উপাদান অ্যারের সম্ভাব্য বিন্যাস। যেহেতু nn কখনই n দ্বারা সমানভাবে বিভাজ্য হতে পারে না! যখন n> 2 (যেহেতু পরেরটি n-1 দ্বারা বিভাজ্য, যা n-এর সাথে কোনও মৌলিক গুণক ভাগ করে না), তখন কিছু বিন্যাস অবশ্যই অন্যদের তুলনায় অদলবদলের nn ক্রমের বেশি দ্বারা উত্পাদিত হতে হবে। এই পক্ষপাতের একটি সুনির্দিষ্ট উদাহরণ হিসাবে, একটি তিন-উপাদান অ্যারে [1,2,3] অদলবদল করার সম্ভাব্য ফলাফলের বিতরণ পর্যবেক্ষণ করুন। এই অ্যারেতে 6টি সম্ভাব্য বিন্যাস রয়েছে (3! = 6), কিন্তু অ্যালগরিদম 27টি সম্ভাব্য অদলবদল তৈরি করে (33 = 27)। এই ক্ষেত্রে, [1,2,3], [3,1,2], এবং [3,2,1] প্রত্যেকটি 27টি রদবদলের মধ্যে 4টির ফলাফল, এবং বাকি 3টি বিন্যাসের প্রত্যেকটি 27টি গড়বদলের মধ্যে 5টিতে ঘটে। ডানদিকের ম্যাট্রিক্স 7 দৈর্ঘ্যের তালিকার প্রতিটি উপাদানের সম্ভাবনা দেখায় যা অন্য কোনও অবস্থানে শেষ হয়। লক্ষ্য করুন যে বেশিরভাগ উপাদানের জন্য, তাদের মূল অবস্থানে (ম্যাট্রিক্সের প্রধান তির্যক) শেষ হওয়ার সম্ভাবনা সবচেয়ে কম, এবং একটি স্লট পিছনের দিকে সরানোর সম্ভাবনা সবচেয়ে বেশি। মডুলো বায়াস একটি ফিশার-ইয়েটস শাফেল করার সাথে বিভিন্ন পরিসর থেকে অভিন্নভাবে বিতরণ করা র্যান্ডম পূর্ণসংখ্যা বাছাই করা জড়িত। বেশিরভাগ র্যান্ডম নম্বর জেনারেটর, যাইহোক-সত্য হোক বা ছদ্মবেশী-শুধুমাত্র সরাসরি 0 থেকে RAND _ MAX পর্যন্ত একটি নির্দিষ্ট পরিসরে সংখ্যা সরবরাহ করবে এবং কিছু লাইব্রেরিতে, RAND _ MAX 32767 এর মতো কম হতে পারে। এই সংখ্যাগুলিকে একটি পছন্দসই পরিসরে বাধ্য করার একটি সহজ এবং সাধারণভাবে ব্যবহৃত উপায় হল মডুলো অপারেটর প্রয়োগ করা; অর্থাৎ, পরিসীমার আকার দ্বারা তাদের ভাগ করা এবং অবশিষ্টাংশ নেওয়া। যাইহোক, 0-1 থেকে 0-এন পর্যন্ত প্রতিটি পরিসরে এলোমেলো সংখ্যা তৈরি করার জন্য ফিশার-ইয়েটস শাফেলের প্রয়োজনীয়তা প্রায় নিশ্চিত করে যে এই পরিসরগুলির মধ্যে কয়েকটি এলোমেলো সংখ্যা উৎপাদকের প্রাকৃতিক পরিসরকে সমানভাবে বিভক্ত করবে না। সুতরাং, অবশিষ্টাংশগুলি সর্বদা সমানভাবে বিতরণ করা হবে না এবং আরও খারাপ, পক্ষপাতটি পদ্ধতিগতভাবে ছোট অবশিষ্টাংশের পক্ষে থাকবে। উদাহরণস্বরূপ, ধরে নিন যে আপনার এলোমেলো সংখ্যার উৎস 0 থেকে 99 পর্যন্ত সংখ্যা দেয় (যেমন ফিশার এবং ইয়েটসের মূল সারণির ক্ষেত্রে ছিল), এবং আপনি 0 থেকে 15 পর্যন্ত একটি নিরপেক্ষ এলোমেলো সংখ্যা পেতে চান। আপনি যদি শুধুমাত্র সংখ্যাগুলিকে 16 দ্বারা ভাগ করেন এবং অবশিষ্টাংশ গ্রহণ করেন, তাহলে আপনি দেখতে পাবেন যে 0-3 সংখ্যাগুলি অন্যদের তুলনায় প্রায় 17 শতাংশ বেশি দেখা যায়। এর কারণ হল 16 সমানভাবে 100 কে ভাগ করেঃ 16-এর 100-এর চেয়ে কম বা সমানের বৃহত্তম গুণিতক হল 6 × 16 = 96, এবং অসম্পূর্ণ পরিসীমা 96-99-এর সংখ্যাগুলিই পক্ষপাতের কারণ। সমস্যাটি সমাধানের সবচেয়ে সহজ উপায় হল অবশিষ্টাংশ নেওয়ার আগে সেই সংখ্যাগুলি ফেলে দেওয়া এবং উপযুক্ত পরিসরে একটি সংখ্যা না আসা পর্যন্ত আবার চেষ্টা চালিয়ে যাওয়া। যদিও নীতিগতভাবে এটি, সবচেয়ে খারাপ ক্ষেত্রে, চিরকালের জন্য নিতে পারে, প্রত্যাশিত পুনঃপ্রার্থনার সংখ্যা সর্বদা একের কম হবে। একটি সম্পর্কিত সমস্যা বাস্তবায়নের সাথে ঘটে যা প্রথমে একটি এলোমেলো ভাসমান-বিন্দু সংখ্যা তৈরি করে-সাধারণত পরিসরে [0,1]-এবং তারপরে এটি পছন্দসই পরিসরের আকার দ্বারা গুণ করে এবং নীচে বৃত্তাকার করে। এখানে সমস্যা হল যে এলোমেলো ভাসমান-বিন্দু সংখ্যা, যদিও সাবধানে তৈরি করা হয়, সর্বদা শুধুমাত্র সীমাবদ্ধ নির্ভুলতা থাকে। এর মানে হল যে কোনও নির্দিষ্ট পরিসরে সম্ভাব্য ভাসমান বিন্দু মানগুলির একটি সীমাবদ্ধ সংখ্যা রয়েছে এবং যদি পরিসীমাটি বেশ কয়েকটি বিভাগে বিভক্ত করা হয় যা এই সংখ্যাটিকে সমানভাবে বিভক্ত করে না, তবে কিছু বিভাগ অন্যদের তুলনায় আরও সম্ভাব্য মান নিয়ে শেষ হবে। যদিও ফলস্বরূপ পক্ষপাত পূর্ববর্তী ক্ষেত্রে একই নিয়মতান্ত্রিক নিম্নমুখী প্রবণতা দেখাবে না, তবুও এটি থাকবে। সিউডোরান্ডম জেনারেটর একটি অতিরিক্ত সমস্যা দেখা দেয় যখন ফিশার-ইয়েটস শাফেল একটি সিউডোরান্ডম নম্বর জেনারেটর বা পিআরএনজি দিয়ে ব্যবহার করা হয়ঃ যেহেতু এই জাতীয় জেনারেটর দ্বারা সংখ্যার আউটপুটের ক্রমটি একটি অনুক্রমের শুরুতে তার অভ্যন্তরীণ অবস্থা দ্বারা সম্পূর্ণরূপে নির্ধারিত হয়, তাই এই জাতীয় জেনারেটর দ্বারা চালিত একটি শাফেল সম্ভবত জেনারেটরের স্বতন্ত্র সম্ভাব্য অবস্থার চেয়ে বেশি স্বতন্ত্র বিন্যাস তৈরি করতে পারে না। এমনকি যখন সম্ভাব্য অবস্থার সংখ্যা বিন্যাসের সংখ্যা অতিক্রম করে, তখনও সংখ্যার ক্রম থেকে বিন্যাসে ম্যাপিংয়ের অনিয়মিত প্রকৃতির অর্থ হল যে কিছু বিন্যাস অন্যদের তুলনায় প্রায়শই ঘটবে। সুতরাং, পক্ষপাত হ্রাস করার জন্য, পিআরএনজির অবস্থার সংখ্যা কমপক্ষে মাত্রার বেশ কয়েকটি ক্রম দ্বারা বিন্যাসের সংখ্যা অতিক্রম করা উচিত। উদাহরণস্বরূপ, অনেক প্রোগ্রামিং ভাষা এবং/অথবা গ্রন্থাগার দ্বারা প্রদত্ত অন্তর্নির্মিত সিউডোরান্ডম নম্বর জেনারেটরে প্রায়শই কেবল 32 বিট অভ্যন্তরীণ অবস্থা থাকতে পারে, যার অর্থ এটি কেবল 232 টি বিভিন্ন ক্রম সংখ্যা তৈরি করতে পারে। যদি এই ধরনের জেনারেটর 52টি কার্ডের ডেক পাল্টানোর জন্য ব্যবহার করা হয়, তবে এটি কেবল 52টির একটি খুব ছোট ভগ্নাংশ তৈরি করতে পারে! ≈ 2225.6 সম্ভাব্য বিন্যাস। 226 বিটেরও কম অভ্যন্তরীণ অবস্থা সহ একটি জেনারেটরের পক্ষে 52-কার্ড ডেকের সমস্ত সম্ভাব্য বিন্যাস তৈরি করা অসম্ভব। কোনও সিউডোরান্ডম নম্বর জেনারেটর প্রারম্ভিককরণের বিন্দু থেকে শুরু করে আরও স্বতন্ত্র ক্রম তৈরি করতে পারে না, যার সাথে এটি শুরু করা যেতে পারে এমন স্বতন্ত্র বীজ মান রয়েছে। সুতরাং, একটি জেনারেটর যার 1024 বিট অভ্যন্তরীণ অবস্থা রয়েছে কিন্তু যা একটি 32-বিট বীজ দিয়ে শুরু করা হয়, তা শুরু করার ঠিক পরেই কেবল 232 টি ভিন্ন বিন্যাস তৈরি করতে পারে। এটি আরও বিন্যাস তৈরি করতে পারে যদি কেউ বিন্যাস তৈরি করার জন্য এটি ব্যবহার শুরু করার আগে জেনারেটরটি অনেকবার অনুশীলন করে, তবে এটি এলোমেলোতা বাড়ানোর একটি অত্যন্ত অদক্ষ উপায়ঃ ধরুন কেউ জেনারেটরটি এক বিলিয়ন পর্যন্ত এলোমেলো সংখ্যা ব্যবহার করার ব্যবস্থা করতে পারে, সরলতার জন্য 230 বলুন, সূচনা এবং বিন্যাস তৈরির মধ্যে সময়, তবে সম্ভাব্য বিন্যাসের সংখ্যা এখনও মাত্র 262। আরও একটি সমস্যা দেখা দেয় যখন উপরে বর্ণিত পরিসীমা হ্রাসের বিভাজন-এবং-গ্রহণ-অবশিষ্ট পদ্ধতির সাথে একটি সাধারণ রৈখিক সঙ্গতিপূর্ণ পিআরএনজি ব্যবহার করা হয়। এখানে সমস্যাটি হল যে মডুলো 2ই-এর সাথে রৈখিক কংগ্রুয়েন্সিয়াল পিআরএনজি-র নিম্ন-ক্রমের বিটগুলি উচ্চ-ক্রমের বিটগুলির তুলনায় কম এলোমেলোঃ জেনারেটরের নিম্ন এন বিটগুলির সর্বাধিক 2এন-এর সময়কাল থাকে। যখন বিভাজকটি দুটির একটি শক্তি হয়, তখন অবশিষ্টাংশটি নেওয়ার অর্থ মূলত উচ্চ-ক্রমের বিটগুলি এমনভাবে নিক্ষেপ করা, যাতে একটি উল্লেখযোগ্যভাবে কম এলোমেলো মান দিয়ে শেষ হয়। এল. সি. জি-তে প্রাইম মডুলো থাকলে বিভিন্ন নিয়ম প্রযোজ্য হয়, তবে এই ধরনের জেনারেটরগুলি অস্বাভাবিক। এটি সাধারণ নিয়মের একটি উদাহরণ যে একটি নিম্নমানের আর. এন. জি বা পি. আর. এন. জি নিম্নমানের শাফল তৈরি করবে। আরও দেখুন আরসি4, একটি স্ট্রিম সাইফার যা একটি অ্যারে রিজার্ভয়ার স্যাম্পলিংয়ের উপর ভিত্তি করে, বিশেষত অ্যালগরিদম আর যা ফিশার-ইয়েটস শাফেল রেফারেন্সগুলির একটি বিশেষত্ব বাহ্যিক লিঙ্ক একটি ইন্টারেক্টিভ উদাহরণ কম্বিনেটোরিয়াল অ্যালগরিদম এলোমেলো অ্যালগরিদম বিন্যাস মন্টে কার্লো পদ্ধতি উদাহরণ সহ সিউডোকোড নিবন্ধগুলি উদাহরণস্বরূপ পাইথন (প্রোগ্রামিং ভাষা) কোড সহ