انجمنهای فارسی اوبونتو
کمک و پشتیبانی => برنامهسازی => نویسنده: بهنام … در 13 بهمن 1400، 08:46 بظ
-
سلام.
یه اسکریپت ساده دارم برای گزینش تصادفی شماری خط از میون چند پرونده.
shuf -n 30 j01.txt > t.txt # of 100 lines
shuf -n 2000 j02.txt >> t.txt # of 6000 lines
...
shuf -n 500 j50.txt >> t.txt # of 9000 lines
آیا shuf (شوف؟) بهخوبی خروجی تصادفی میده؟ نمیخوام احتمال گزینش برخی خطها بهطور محسوسی بیشتر از دیگران باشه، وگرنه پس از چند بار برخی خطها بیش از حد خونده میشند و برخی هرگز. آیا لازمه برای هر گزینشی چند بار مخلوطشون کنم یا توان خود shuf کافیه؟
روی لپتاپ قدیمی و ضعیف انجام میدم.
-
فکر کنم درست کار بده. اگه میخواهید شانسی بودن اون بیشتر بشه، میتونید با dd اطلاعات رو از فایل random یا urandom توی /dev/ بخونید، خروجی رو بدید به یه ابزار مثل tr تا اعداد رو از خروجی جدا کنه و بعد هر کاری میخواهید با اون عدد بکنید. میتونید یه بررسی هم بکنید که عدد از مقدار مورد نظر شما کوچکتر باشه و اگه نبود، دوباره مراحل ساخت عدد تکرار بشه.
شاید لازم باشه برای اینکار، یه اسکریپت bash (یا شاید sh) بنویسید.
-
ممنون. سر فرصت این راهی را که گفتید آزمایش میکنم.
-
نمیدونم pseudo random number generator چیه و شوف دقیقاً چیکار میکنه، ولی:
دو سه تا آزمون ساده برای /dev/random و حالت پیشگزیدهٔ شوف انجام دادم و انگار بهکارگیری /dev/random پنج برابر بهتر از پیشگزیده بود. و کار باهاش هم آسون بود. اینجوری:
shuf --random-source=/dev/random -n <number> <input-file> > <output-file>
اگه بعداً موردی دیدم باز میگم.
-
نمیدونم pseudo random number generator چیه و شوف دقیقاً چیکار میکنه، ولی:
pseudo random number generator یه چیزیه که اول کار یه عددی دریافت میکنه (بهش میگن seed) و بعد اعداد تصادفی به ما میده. کسی که از بیرون این اعداد رو میبینه و ، اعداد رو تصادفی به حساب میاره.
حالا چرا pseudo random number generator یا همون "تولید کنند عدد نیمه تصادفی" هست و نه یه تولید کنند عدد تصادفی واقعی، به این خاطره که اگه کسی اون seed رو داشته باشه، خیلی راحت میتونه بدونه توی هر مرحله چه عددی تولید میشه و اینجوری دیگه اون اعداد تصادفی به حساب نمیان.
این از نظر امنیتی برای تولید کلید، میتونه مشکل به حساب بیاد. ولی معمولا این seed فقط دست کامپیوتر هست و تا وقتی که دست کس دیکهای نیفته، مشکلی پیش نمیاد.
معمولا خود پردازندهها یه چنین چیزی داخل خودشون دارند تا سیستمعامل از اعداد تصادفی تولید شده استفاده کنه.
کرنل لینوکس چنتا پیکربندی مربوط به این داره. با اون پیکربندیها میشه تنظیم کرد که کرنل به اعداد تصادفی که پردازنده میده اعتماد کنه یا اینکه با اون اعداد، اعداد تصادفی خودش رو بسازه.