পাইথন এলোমেলো পরিবর্তন কীভাবে কাজ করে?


11

পাইথনে এলোমেলোভাবে কীভাবে কাজ করা যায়?

আমি জিজ্ঞাসা করি কারণ এটি খুব দ্রুত কাজ করে। আমি যখন এলোমেলো লেখার চেষ্টা করি তখন এটি 10 ​​^ 6 উপাদানটির জন্য 1 মিনিট কাজ করে, তবে পাইথন এলোমেলোভাবে এটি 8 সেকেন্ডে করে?


14
শুধু সোর্স কোড তাকান না কেন ?
অলস

4
সেরা শাফল অ্যালগরিদম হ'ল ফিশার-ইয়েটস সাফল্য , এটি ও (এন) সময়ে চলে এবং একটি নিখুঁত সাফল্য হিসাবে প্রমাণিত হয় (ভাল এলোমেলো উত্স ধরে ধরে)
র‌্যাচেট ফ্রিক

1
@ratchetfreak: পাইথন ফিশার-ইয়েটস ব্যবহার করে।
মার্টিজন পিটারস

1
রদবদলের জন্য আপনার অ্যালগরিদম কী?

@ স্লোথ, যাইহোক, রেমন্ড
হেটিংগার

উত্তর:


17

পাইথনের ফিশার-ইয়েটস সাফল্য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]
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.