1
Tại sao máy tính gặp khó khăn trong việc phát sinh số ngẫu nhiên?
0
trungkfc02570 đã đăng:

Tại sao người ta thường nói rằng việc phát sinh ra số ngẫu nhiên trong máy tính là điều không thể và số ngẫu nhiên đó hoàn toàn có thể biết trước được.

thêm bình luận...
0
xuans2huy510 đã đăng:

Bởi vì máy tính hoạt động dựa trên sự chỉ dẫn của con người mà sự chỉ dẫn đó được thể hiện qua các thuật toán, nói đến thuật toán là nói đến sự logic, có khuôn mẫu, tính chính xác và biết trước được kết quả đầu ra của nó, những tính chất này hoàn toàn đối lập với sự ngẫu nhiên. Sự ngẫu nhiên có khuôn mẫu gì không? Không. Sự ngẫu nhiên có logic không? Không. Sự ngẫu nhiên có cần tính chính xác không? Không. Sự ngẫu nhiên có biết trước được đầu ra là gì không? Không.

Bên dưới phần cứng máy tính là tập hợp các cổng luận lý, tính toán logic với các giá trị 0 và 1, là nơi cuối cùng thực hiện các thuật toán. Điều này có nghĩa là khi thuật toán nhận vào một input cố định nào đó, thì output tương ứng có bao giờ thay đổi không? Không bao giờ. Cho dù bạn có chạy chương trình bao nhiêu lần đi nữa và ở thời điểm nào đi chăng nữa.

Lấy ví dụ hàm tính tổng đơn giản như sau,

int tinhTong(int a, int b){
    return a + b;
}

int a = 2;
int b = 3;
int c = tinhTong(a, b);

Khi bạn chạy thuật toán trên với hàm tinhTong nhận vào giá trị 23, cho ra kết quả là 5, kết quả sẽ mãi mãi là 5 mặc dù bạn có chạy thuật toán trên bao nhiêu lần đi chăng nữa. Bởi vì hàm tinhTong luôn thực hiện theo sự chỉ dẫn của các dòng mã nguồn bên trong nó, bạn muốn thay đổi output chỉ còn cách thay đổi input.

Vậy câu hỏi đặt ra là làm thế nào để tạo một số hoàn toàn ngẫu nhiên mà dựa vào sự chỉ dẫn bởi các dòng mã nguồn? Đọc câu hỏi bạn có thể thấy ngay sự mâu thuẫn ở đây, đã gọi là ngẫu nhiên thì sẽ không biết trước được kết quả, mà đã không biết trước được kết quả thì làm gì có sự chỉ dẫn, mà nếu sự chỉ dẫn có tồn tại, chúng ta hoàn toàn có thể biết được kết quả được gọi là "sự ngẫu nhiên" đó, mà nếu đã biết trước được kết quả thì còn gì gọi là tạo số ngẫu nhiên nữa, và câu trả lời là máy tính không thể tự tạo một số ngẫu nhiên thật sự.

Trong thực tế, người ta cố gắng mô phỏng hóa quá trình tạo số ngẫu nhiên trong máy tính bằng các công cụ toán học, mặc dù không thể tạo ra số ngẫu nhiên thật sự nhưng số ngẫu nhiên giả trên máy tính đã đủ để sử dụng trong các chương trình bình thường, game, ...v.v.

Ví dụ hàm rand() trong C/C++ là hàm tạo số ngẫu nhiên giả, nó cần thêm hàm srand() để khởi tạo giá trị input, nếu bạn không khởi tạo giá trị input khác nhau, hàm rand() sẽ luôn luôn trả về cùng 1 kết quả.

Trong các chuyên ngành mã hóa và mật mã, sự ngẫu nhiên được tăng cường bởi các thuật toán mạnh mẽ hơn để đảm bảo rằng khóa không thể bị lần ra. Dù vậy, ý tưởng phát sinh sự ngẫu nhiên thật sự trong một thiết bị mang tính "máy móc" là điều không thể, mặc dù máy tính có bộ xử lý logic và hiệu quả nhưng chúng ta có bộ óc sinh học tuyệt vời.

đã bổ sung 5.5 năm trước bởi
xuans2huy510

Awesome.

trungkfc02 03.11.2018
thêm bình luận...
Bạn đang thắc mắc? Ghi câu hỏi của bạn và đăng ở chế độ cộng đồng (?)