Khi sử dụng (giả) số ngẫu nhiên trong Jython, sẽ hiệu quả hơn khi sử dụng mô-đun ngẫu nhiên Python hoặc lớp ngẫu nhiên của Java?Ngẫu nhiên trong Jython
Trả lời
phiên bản Python là nhanh hơn nhiều trong một thử nghiệm đơn giản trên máy Mac của tôi:
jython -m timeit -s "import random" "random.random()"
1000000 vòng, tốt nhất là 3: 0,266 USEC mỗi vòng lặp
vs
jython -m timeit -s "import java.util.Random; random=java.util.Random()" "random.nextDouble()"
1000000 vòng, tốt nhất là 3: 1.65 usec mỗi vòng lặp
Phiên bản Jython 2.5b3 và phiên bản Java 1.5.0_19.
thời gian, eh? Tôi phải nhớ điều đó !! +1 – richq
timeit là một trong những thứ có chứa trăn 'pin'. Không hoàn toàn cần thiết nhưng rất tốt đẹp để có. –
Sử dụng lớp ngẫu nhiên của Java (và thực sự phải sử dụng thông số kỹ thuật của Java) một thuật toán đồng đẳng tuyến tính, trong khi Python sử dụng Mersenne Twister. Mersenne đảm bảo chất lượng cực kỳ cao (mặc dù không phải là crypto chất lượng!) Số ngẫu nhiên và khoảng thời gian dài vô cùng (nổi chính xác 53 bit, giai đoạn 2 ** 19937-1); máy phát điện đồng tuyến tuyến tính đã nổi tiếng issues. Nếu bạn không thực sự quan tâm đến chất lượng của các số ngẫu nhiên, và chỉ quan tâm đến tốc độ, LCG có thể nhanh hơn chính xác vì nó ít phức tạp hơn.
Trên thực tế, theo một số tiêu chuẩn cũ tôi đã làm trong ngôn ngữ lập trình D, Mersenne Twister nhanh hơn, mặc dù nó sử dụng nhiều bộ nhớ hơn. Điều này là do các twister Mersenne tránh op phân chia mà nhu cầu đồng dư tuyến tính. Về lý do duy nhất để sử dụng congruential tuyến tính là nếu bạn có những hạn chế về bộ nhớ cực đoan hoặc nếu bạn chỉ cần một vài số ngẫu nhiên và thời gian cần để hạt giống máy phát điện là một nút cổ chai. (Congruential tuyến tính có một không gian nhà nước nhỏ hơn để hạt giống là nhanh hơn.) – dsimcha
LCGs cần một bộ phận? Hầu hết các LCG được sử dụng ở đâu đó sử dụng sức mạnh của hai mô đun của chúng (làm cho việc tìm kiếm các thông số phù hợp khó hơn nhưng nhanh hơn đáng kể). – Joey
Java chỉ định một mô-đun chính xác (2 ** 48) -1 và tất cả các thực thi chuẩn Java PHẢI sử dụng chính xác điều đó, vì vậy tôi không thấy "hầu hết các LCG được sử dụng ở đâu đó" phải làm gì với trường hợp - java .Random có những quy tắc rất chính xác. –
- 1. số ngẫu nhiên không quá ngẫu nhiên
- 2. Tại sao không ngẫu nhiên() ngẫu nhiên?
- 3. lặp ngẫu nhiên trong Python
- 4. Số ngẫu nhiên trong C
- 5. Cuộc gặp gỡ ngẫu nhiên không quá ngẫu nhiên
- 6. Trình tạo số ngẫu nhiên phân phối ngẫu nhiên
- 7. số C# ngẫu nhiên không là "ngẫu nhiên"
- 8. Số ngẫu nhiên hoặc số dương Javascript ngẫu nhiên
- 9. C# Ngẫu nhiên (Dài)
- 10. Tạo chuỗi ngẫu nhiên
- 11. random.choice không ngẫu nhiên
- 12. Tổng hợp ngẫu nhiên?
- 13. ngẫu nhiên chuỗi C#
- 14. Số nguyên ngẫu nhiên
- 15. Số ngẫu nhiên Javascript?
- 16. Làm thế nào để 'ngẫu nhiên()' số ngẫu nhiên trong C (Linux)?
- 17. Tạo màu ngẫu nhiên trong Java?
- 18. chức năng ngẫu nhiên trong DrRacket
- 19. Khởi tạo ngẫu nhiên BitSet trong JAVA
- 20. Số ngẫu nhiên trong POSIX C API
- 21. Tạo câu ngẫu nhiên trong JavaScript
- 22. Phần tử ngẫu nhiên trong bản đồ
- 23. Cách lấy số ngẫu nhiên trong JSTL?
- 24. ngẫu nhiên lựa chọn hàng trong R
- 25. phân phối ngẫu nhiên Gaussian trong PostgreSQL
- 26. phát ngẫu nhiên các tệp trong bash
- 27. tạo số ngẫu nhiên ngắn trong java?
- 28. Hạt giống ngẫu nhiên Math.random trong Java
- 29. Tạo số ngẫu nhiên trong C
- 30. cột ngẫu nhiên lấy trong cassandra
Vui lòng xây dựng những gì bạn cho là "hiệu quả". –
Bạn đã thử đo thời gian cần thiết cho mỗi? –