Một trình tạo số ngẫu nhiên có thể tạo ra đầu ra khác nhau cho các hạt giống hệt nhau không?


10

Tiêu đề tổng hợp nó lên. Tôi muốn biết liệu có tồn tại một thuật toán có khả năng tạo đầu ra biến đổi cho đầu vào giống hệt nhau mà không dựa vào các nguồn ngẫu nhiên khác như DateTime.Now hoặc một số được tạo từ cảm biến ánh sáng, v.v. Ngoài ra, thuật toán không thể chạy được theo trình tự, chỉ có hai lần chạy riêng biệt, không liên quan tạo ra đầu ra khác nhau.


Những gì bạn đang nói là một trình tạo số giả ngẫu nhiên, cụ thể.
Marcel

Hầu hết các ngôn ngữ cho phép khả năng khởi tạo trình tạo số ngẫu nhiên mà không phải chỉ định hạt giống sao cho hạt giống là "ngẫu nhiên". Có một lý do tại sao hạt giống được sử dụng.
Neil

1
@Neil: trong những trường hợp đó, vẫn còn một hạt giống, nó chỉ là ẩn, thường là thời gian hệ thống.
Michael Borgwardt

@MichaelBorgwardt, tôi chỉ đơn giản nói rằng hạt giống cũng là ngẫu nhiên. Tất nhiên không có gì là thực sự ngẫu nhiên, nhưng thông thường thời gian hệ thống cung cấp một hạt giống đàng hoàng, miễn là bạn không thường xuyên khởi tạo một trình tạo số ngẫu nhiên mà không vượt qua một hạt giống, trong trường hợp đó bạn có thể nhận được hạt giống "ngẫu nhiên" hai lần.
Neil

Có một lĩnh vực nghiên cứu thú vị về phần cứng không chính xác, có độ chính xác được xác định rõ về mặt thống kê. Lợi ích tiềm năng là sử dụng năng lượng thấp hơn. Chỉ cần tính toán 2.0 + 2.0trên một hệ thống như vậy sẽ không cho kết quả giống hệt nhau. Nó không cần một nguồn ngẫu nhiên khác.
MSalters

Câu trả lời:


15

Tôi muốn biết liệu có tồn tại một thuật toán có khả năng tạo đầu ra biến đổi cho đầu vào giống hệt nhau mà không dựa vào các nguồn ngẫu nhiên khác như DateTime.Now hoặc một số được tạo từ cảm biến ánh sáng, v.v.

Không, điều đó về cơ bản là không thể, bởi vì định nghĩa của thuật toán là nó được xác định rõ ràng và có tính xác định, tức là được cung cấp cùng một đầu vào sẽ luôn tạo ra cùng một đầu ra. Có các thuật toán ngẫu nhiên, nhưng chúng yêu cầu ngẫu nhiên làm đầu vào.

Bên cạnh đó, định mệnh là những mục tiêu thiết kế quan trọng nhất của phần cứng máy tính. Một CPU không tạo ra cùng một đầu ra với cùng một đầu vào sẽ hoàn toàn vô dụng đối với hầu hết các mục đích.


14

Không, một thuật toán hệ số giả ngẫu nhiên sẽ luôn sản xuất ra tương tự cho các hạt giống (do đó pseudo -random).

Tôi thấy thú vị khi bạn sử dụng thuật ngữ "thuật toán" thay vì "chương trình". Điều này không bao gồm một loại câu trả lời có nhất định (lỗi mềm trong RAM, xen kẽ luồng khác nhau trong RNG đa luồng, v.v.). Nếu bạn chấp nhận rằng mọi lần chạy thuật toán của bạn đều có cùng một đầu vào trên mỗi lần lặp được chỉ định rõ mà không có tính ngẫu nhiên, thì nó sẽ tạo ra cùng một đầu ra trên mỗi lần chạy.

Điều đó đang được nói, ngay cả những điều cơ bản như nhiệt độ CPU cũng không thể đoán trước được để hoạt động như một nguồn entropy nếu chúng được chuẩn hóa một cách thích hợp. Vì vậy, đừng nghĩ rằng điều này ngụ ý rằng trình tạo số ngẫu nhiên "an toàn về mặt mật mã" có thể được dự đoán nếu bạn biết nó đã chạy lúc mấy giờ; nhiều người trong số họ sử dụng thức ăn entropy do hệ thống tạo ra.


Thuật toán là từ đúng :) Tôi đặc biệt đang cố gắng loại bỏ các nguồn entropy bên ngoài, lỗi bộ nhớ, thứ tự luồng, đầu vào không thể đoán trước như nguồn sáng, v.v. Tôi nghĩ rằng câu hỏi của tôi xuất phát từ sự thiếu hiểu biết về thuật toán ngẫu nhiên và có thể Tôi có thể đã làm cho câu hỏi chung chung hơn. Tôi thực sự tự hỏi liệu có thể tạo bất kỳ hàm nào trả về các kết quả khác nhau cho đầu vào giống hệt nhau (bao gồm tất cả các nguồn của entropy). Có vẻ như câu trả lời là không
ConditionRacer

7

Bạn có biết rằng mọi người làm việc rất chăm chỉ để đảm bảo rằng, được cung cấp cùng một hạt giống, cùng một chuỗi các số ngẫu nhiên được tạo ra mỗi lần? Đây là một đặc tính mong muốn cho những thứ như mô phỏng Monte Carlo, vì nó có nghĩa là kết quả có thể tái tạo hoàn toàn. Nếu bạn không chỉ định hạt giống, một cái gì đó như thời gian sẽ được sử dụng, nhưng khả năng tái tạo chính xác đó thực sự là muốn.

Các RNG duy nhất mà điều này thực sự không mong muốn là những RNG được sử dụng cho mật mã và những RNG thường đạt được điều này bằng cách sử dụng nguồn số ngẫu nhiên của hệ điều hành (không thể tua lại trong các trường hợp thông thường và có thể sử dụng phần cứng ưa thích) để cung cấp hạt giống của chúng.


Vâng, tôi hiểu những gì bạn đang nói. Tôi không cố gắng thực hiện bất cứ điều gì mới, đây chỉ là một sự tò mò đêm khuya.
Điều

1

Tôi cho rằng nếu bạn triển khai thuật toán trên các nền tảng phần cứng khác nhau và nó sử dụng các kỹ thuật như lấy các bit N ở giữa từ một số nguyên, bạn có thể nhận được các câu trả lời khác nhau nếu mã hóa số nguyên khác nhau (lớn / nhỏ / trung bình). Bạn cũng có thể gặp phải các sự cố khi chạy trên các máy có FPU so với các sự cố không xảy ra nếu bạn thao tác với các số có dấu phẩy động. Có lẽ không phải là một vấn đề trên các máy tính để bàn, nhưng có thể là một vấn đề trên điện thoại.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.