Tôi cần một trình tạo giả ngẫu nhiên lấy số là đầu vào và trả về một số phù thủy khác có thể lặp lại và có vẻ là ngẫu nhiên.Thuật toán giả ngẫu nhiên đơn giản
- Mỗi số đầu vào phải phù hợp với chính xác một số đầu ra và ngược lại
- số đầu vào cùng luôn luôn dẫn đến số lượng cùng
- số đầu vào liên tục mà là gần nhau (ví dụ. 1 và 2) nên sản xuất các số đầu ra hoàn toàn khác nhau (ví dụ: 1 => 9783526, 2 => 283)
Nó không được hoàn hảo, nó chỉ là tạo dữ liệu thử nghiệm ngẫu nhiên nhưng có thể tái sản xuất.
Tôi sử dụng C#.
Tôi đã viết đoạn mã ngộ nghĩnh này một thời gian trước đây đã tạo ra điều gì đó ngẫu nhiên.
public static long Scramble(long number, long max)
{
// some random values
long[] scramblers = { 3, 5, 7, 31, 343, 2348, 89897 };
number += (max/7) + 6;
number %= max;
// shuffle according to divisibility
foreach (long scrambler in scramblers)
{
if (scrambler >= max/3) break;
number = ((number * scrambler) % max)
+ ((number * scrambler)/max);
}
return number % max;
}
Tôi muốn có thứ gì đó tốt hơn, đáng tin cậy hơn, làm việc với mọi kích thước (không có đối số tối đa).
Điều này có thể được giải quyết bằng thuật toán CRC không? Hoặc một số công cụ xáo trộn.
Bạn muốn có hàm băm. – phoku
Ngắt của http://stackoverflow.com/questions/239063 – sbi
@sbi: không chắc chắn đây là một bản sao chính xác, được đưa ra yêu cầu cho sự tương ứng độc quyền giữa đầu vào và đầu ra. Xem bình luận 'tanascius' trên câu trả lời của tôi dưới đây. – MusiGenesis