اعداد تصادفی بدون تکرار

فرمول بندی مسئله

بیایید فرض کنیم که باید مجموعه ای از اعداد تصادفی اعداد صحیح را بدون تکرار در یک محدوده مشخص از مقادیر ایجاد کنیم. نمونه هایی در حال حرکت:

  • ایجاد کدهای تصادفی منحصر به فرد برای محصولات یا کاربران
  • اختصاص دادن افراد به وظایف (هر یک به طور تصادفی از لیست)
  • جابجایی کلمات در جست و جو (سلام سئو-شنیکم)
  • بازی لوتو و غیره

روش 1. ساده

برای شروع، بیایید یک گزینه ساده را در نظر بگیریم: باید یک مجموعه تصادفی از 10 عدد صحیح از 1 تا 10 به دست آوریم. با استفاده از تابع ساخته شده در اکسل بین مورد (لبه بین) منحصر به فرد بودن تضمین نمی شود اگر آن را در یک سلول صفحه وارد کنید و 10 سلول آن را کپی کنید، تکرارها به راحتی می توانند اتفاق بیفتند:

اعداد تصادفی بدون تکرار

بنابراین، ما به سمت دیگری خواهیم رفت.

تمام نسخه های اکسل دارای یک تابع هستند رتبه (RANG)، برای رتبه بندی یا به عبارت دیگر تعیین موقعیت بالای یک عدد در یک مجموعه در نظر گرفته شده است. بیشترین تعداد در لیست دارای رتبه = 1، دوم در بالا دارای رتبه = 2 و غیره است.

بیایید تابع را در سلول A2 وارد کنیم SLCHIS (رند) بدون آرگومان و فرمول را تا 10 سلول کپی کنید. این تابع مجموعه ای از 10 عدد کسری تصادفی از 0 تا 1 را برای ما ایجاد می کند:

اعداد تصادفی بدون تکرار

در ستون بعدی تابع را معرفی می کنیم رتبهبرای تعیین موقعیت در رتبه بندی برای هر عدد تصادفی دریافتی:

اعداد تصادفی بدون تکرار

ما در ستون B آنچه را که می خواستیم به دست می آوریم - هر تعداد دلخواه از اعداد صحیح تصادفی غیر تکراری از 1 تا 10.

صرفاً از نظر تئوری، ممکن است یک موقعیت زمانی ایجاد شود که SLCHIS دو عدد تصادفی یکسان در ستون A به ما می دهد، رتبه های آنها مطابقت می یابد و در ستون B یک تکرار خواهیم داشت. با این حال، با توجه به این واقعیت که دقت 15 رقم اعشار است، احتمال چنین سناریویی بسیار کم است.

روش 2. پیچیده

این روش کمی پیچیده تر است، اما تنها از یک فرمول آرایه استفاده می کند. فرض کنید باید لیستی از 9 عدد صحیح تصادفی غیر تکراری در محدوده 1 تا 50 در یک برگه ایجاد کنیم.

فرمول زیر را در سلول A2 وارد کنید، در انتها کلیک کنید Ctrl + Shift + Enter (برای وارد کردن آن به عنوان فرمول آرایه!) و فرمول را به تعداد سلول مورد نظر کپی کنید:

اعداد تصادفی بدون تکرار

روش 3. ماکرو

و البته با استفاده از برنامه نویسی در ویژوال بیسیک می توانید مشکل را حل کنید. در یکی از مقالات قدیمی در مورد نمونه‌گیری تصادفی، من قبلاً به تابع ماکرو آرایه Lotto اشاره کردم که تعداد مورد نیاز اعداد تصادفی غیر تکراری را از یک بازه معین تولید می‌کند.

  • نحوه شمارش تعداد مقادیر منحصر به فرد در یک محدوده
  • انتخاب تصادفی عناصر از یک لیست

پاسخ دهید