Vấn đề này và các giải pháp khác nhau được đề xuất hấp dẫn tôi. Tôi đã làm một bài kiểm tra nhỏ về ba thuật toán cơ bản được đề xuất và giá trị trung bình mà chúng sẽ mang lại cho các con số được tạo ra.
choose_one_and_divide_rest
means: [ 0.49999212 0.24982403 0.25018384]
standard deviations: [ 0.28849948 0.22032758 0.22049302]
time needed to fill array of size 1000000 was 26.874945879 seconds
choose_two_points_and_use_intervals
means: [ 0.33301421 0.33392816 0.33305763]
standard deviations: [ 0.23565652 0.23579615 0.23554689]
time needed to fill array of size 1000000 was 28.8600130081 seconds
choose_three_and_normalize
means: [ 0.33334531 0.33336692 0.33328777]
standard deviations: [ 0.17964206 0.17974085 0.17968462]
time needed to fill array of size 1000000 was 27.4301018715 seconds
Đo thời gian sẽ được thực hiện với một hạt muối vì chúng có thể bị ảnh hưởng nhiều hơn bởi việc quản lý bộ nhớ Python so với chính thuật toán. Tôi quá lười biếng để làm điều đó đúng với timeit
. Tôi đã làm điều này trên 1GHz Atom để giải thích lý do tại sao nó mất quá lâu.
Dù sao, select_one_and_divide_rest là thuật toán do Andrie đề xuất và áp phích câu hỏi của anh ta/mình (AND): bạn chọn một giá trị a [0,1], sau đó nhập [a, 1] và sau đó bạn nhìn những gì bạn đã để lại. Nó cho biết thêm một, nhưng đó là về nó, các bộ phận đầu tiên là hai lần lớn như hai người kia. Người ta có thể đoán được nhiều ...
select_two_points_and_use_intervals là câu trả lời được chấp nhận bởi ddzialak (DDZ). Phải mất hai điểm trong khoảng [0,1] và sử dụng kích thước của ba khoảng phụ được tạo bởi các điểm này dưới dạng ba số. Làm việc như một say mê và các phương tiện là tất cả 1/3.
select_three_and_normalize là giải pháp của Anders Gustafsson và Josh O'Brien (JOB). Nó chỉ tạo ra ba số trong [0,1] và bình thường hóa chúng trở lại thành một số 1. Hoạt động tốt và đáng ngạc nhiên hơn một chút trong việc thực hiện Python của tôi. Phương sai là thấp hơn một chút so với giải pháp thứ hai.
Có bạn có nó. Không có ý tưởng về những gì phân phối beta các giải pháp này tương ứng hoặc tập hợp các tham số nào trong bài báo tương ứng mà tôi đã đề cập trong một nhận xét nhưng có lẽ một người khác có thể hình dung ra điều đó.
Đây có phải là tùy chọn để chuẩn hóa lại các số ngẫu nhiên sau khi tạo không? –
Làm thế nào về việc tạo ra 2 số ngẫu nhiên a và b? Sau đó, a + b + c = 1 => c = 1 - (a + b) –
và nếu tổng a và b lớn hơn 1? – mmann1123