পাইথনে এলোমেলোভাবে কীভাবে কাজ করা যায়?
আমি জিজ্ঞাসা করি কারণ এটি খুব দ্রুত কাজ করে। আমি যখন এলোমেলো লেখার চেষ্টা করি তখন এটি 10 ^ 6 উপাদানটির জন্য 1 মিনিট কাজ করে, তবে পাইথন এলোমেলোভাবে এটি 8 সেকেন্ডে করে?
পাইথনে এলোমেলোভাবে কীভাবে কাজ করা যায়?
আমি জিজ্ঞাসা করি কারণ এটি খুব দ্রুত কাজ করে। আমি যখন এলোমেলো লেখার চেষ্টা করি তখন এটি 10 ^ 6 উপাদানটির জন্য 1 মিনিট কাজ করে, তবে পাইথন এলোমেলোভাবে এটি 8 সেকেন্ডে করে?
উত্তর:
পাইথনের ফিশার-ইয়েটস সাফল্যrandom.shuffle
ব্যবহার করা হয় যা ও (এন) সময়ে চলে এবং এটি একটি নিখুঁত সাফল্য হিসাবে প্রমাণিত হয় (একটি ভাল এলোমেলো সংখ্যা জেনারেটর ধরে ধরে)।
এটি অ্যারেরটিকে শেষ থেকে প্রথম এন্ট্রিতে পুনরুক্ত করে, প্রতিটি এন্ট্রি নীচে একটি এলোমেলো সূচীতে এন্ট্রি সহ স্যুইচ করে।
ফিশার – ইয়েটস সাফলিংয়ের প্রাথমিক প্রক্রিয়াটি এলোমেলোভাবে টুপি থেকে একটি নম্বর টিকিট বা একটি ডেক থেকে কার্ডগুলি বেছে নেওয়ার মতো, যেখানে কোনও আর অবশিষ্ট নেই। নির্দিষ্ট অ্যালগরিদম যা সরবরাহ করে তা হ'ল দক্ষ ও কঠোর পদ্ধতিতে এই সংখ্যাটি করার একটি উপায় যা সঠিকভাবে করা গেলে নিরপেক্ষ ফলাফলের গ্যারান্টি রয়েছে ...
আধুনিক ... সমাধানটি হ'ল "স্ট্রাইকড" সংখ্যাগুলি প্রতিটি পুনরাবৃত্তিতে সর্বশেষে আনস্ট্রাক সংখ্যার সাথে অদলবদলের মাধ্যমে তালিকার শেষের দিকে নিয়ে যাওয়া। এটি নিষ্পাপ বাস্তবায়নের জন্য ও (এন 2 ) এর তুলনায় ও (এন) এর অ্যালগরিদমের সময়ের জটিলতা হ্রাস করে । এই পরিবর্তনটি নিম্নলিখিত অ্যালগরিদম দেয় (একটি শূন্য-ভিত্তিক অ্যারের জন্য)।
To shuffle an array a of n elements (indices 0..n-1): for i from n − 1 downto 1 do j ← random integer with 0 ≤ j ≤ i exchange a[j] and a[i]