پارت۲
(پارت۱)
بریم ببینیم زبانهای برنامه نویسی مختلف برای حل مشکل سوگیری باقیمانده چیکار کردن. در واقع همهشون از همون ریاضیات استفاده میکنن، فقط به شکل و قالب خودشون🥸 اینجا مثال ما، تولید یک رمز ۵ کرکتری از حروف و اعداده.
👆اینجا در واقع تابع random.choices داره همون کار طرد کردن و ایجاد منطقه امن رو انجام میده.
👆برای جاوا هم تابع nextInt وظیفه طرد کردن و چک کردن محدوده امن رو داره
برای cpp عملاً توزیع رو داریم انجام میدیم. ما ۶۲ تا کرکتر داریم، که چون شماره درایههای آرایه بانک حروف، از ۰ شروع میشه، پس میشه از 0 تا 61. موتور تولید اعداد رندوم( باید حتما لایبرری random رو اضافه کرده باشید) اعداد بزرگی تولید میکنه که تو این بازه نیستن، پس باز هم با همون روش میاد و زوری اعداد رو میندازه تو این بازه، ولی حواسش هست که از سوگیری جلوگیری کنه و این دقیقا وظیفه این قسمته:
به این ترتیب اعداد بدون سوگیری میفتن تو این بازه، و در ادامه هر عدد رندومی که انتخاب بشه از این توزیع، در اصل نشون دهنده یه درایه از آرایه بانک حروف و اعداده، که اون کرکتر با توجه به شمارهش انتخاب، و جایگذاری میشه در رشته نهایی🥸
🔎خلاصه کار: همهشون از یه قانون ساده ریاضی پیروی میکنن
#comp_sci
#Algorithm
#code
#math
@mathloopinfinite
(پارت۱)
بریم ببینیم زبانهای برنامه نویسی مختلف برای حل مشکل سوگیری باقیمانده چیکار کردن. در واقع همهشون از همون ریاضیات استفاده میکنن، فقط به شکل و قالب خودشون🥸 اینجا مثال ما، تولید یک رمز ۵ کرکتری از حروف و اعداده.
import random
import string
def generate_random_string(length=5):
# بانک حروف (شامل حروف بزرگ، کوچک و اعداد)
chars = string.ascii_letters + string.digits
result = ''.join(random.choices(chars, k=length))
return result
print(generate_random_string())
👆اینجا در واقع تابع random.choices داره همون کار طرد کردن و ایجاد منطقه امن رو انجام میده.
import java.util.Random;
public class Main {
public static void main(String[] args) {
String chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
Random random = new Random();
StringBuilder result = new StringBuilder();
for (int i = 0; i < 5; i++) {
// این تابع عدد 62 را میگیره و یک عدد عادلانه بین 0 تا 61 میده
int randomIndex = random.nextInt(62);
result.append(chars.charAt(randomIndex));
}
System.out.println(result.toString());
}
}
👆برای جاوا هم تابع nextInt وظیفه طرد کردن و چک کردن محدوده امن رو داره
// بانک کرکترها
const char chars[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
//موتور تولید اعداد رندوم مثلاً اعداد خیلی بزرگ
thread_local mt19937 gen(random_device{}());
//توزیع اعداد تو بازه مورد نظر
uniform_int_distribution<int> dist(0, 61);
//دادن مقدار اولیه 0 به هر آرایه رشته ۵ حرفی
string result(5, '0');
//جایگذاری با کرکترهای توی بانک
for (char &c : result)
{
c = chars[dist(gen)];
}
return result;
برای cpp عملاً توزیع رو داریم انجام میدیم. ما ۶۲ تا کرکتر داریم، که چون شماره درایههای آرایه بانک حروف، از ۰ شروع میشه، پس میشه از 0 تا 61. موتور تولید اعداد رندوم( باید حتما لایبرری random رو اضافه کرده باشید) اعداد بزرگی تولید میکنه که تو این بازه نیستن، پس باز هم با همون روش میاد و زوری اعداد رو میندازه تو این بازه، ولی حواسش هست که از سوگیری جلوگیری کنه و این دقیقا وظیفه این قسمته:
uniform_int_distribution<int> dist(0, 61);
به این ترتیب اعداد بدون سوگیری میفتن تو این بازه، و در ادامه هر عدد رندومی که انتخاب بشه از این توزیع، در اصل نشون دهنده یه درایه از آرایه بانک حروف و اعداده، که اون کرکتر با توجه به شمارهش انتخاب، و جایگذاری میشه در رشته نهایی🥸
🔎خلاصه کار: همهشون از یه قانون ساده ریاضی پیروی میکنن
#comp_sci
#Algorithm
#code
#math
@mathloopinfinite
❤8