Tôi đã sử dụng chức năng random_element()
do SAGE cung cấp để tạo phân vùng số nguyên ngẫu nhiên cho một số nguyên nhất định (N
) có độ dài cụ thể (S
). Tôi đang cố tạo các mẫu ngẫu nhiên không thiên vị từ tập hợp tất cả các phân vùng cho các giá trị đã cho là N
và S
. Hàm SAGE nhanh chóng trả về các phân vùng ngẫu nhiên cho N (tức là Partitions(N).random_element()
).Một thuật toán để tạo ngẫu nhiên các phân đoạn nguyên của một chiều dài cụ thể, bằng Python?
Tuy nhiên, nó chậm vô cùng khi thêm S
(ví dụ: Partitions(N,length=S).random_element()
). Tương tự, lọc ra các phân vùng ngẫu nhiên của N
có chiều dài S
cực kỳ chậm.
Tuy nhiên, và tôi hy vọng điều này sẽ giúp ai đó, tôi đã tìm thấy rằng trong trường hợp khi hàm trả về một phân vùng của N
không phù hợp với độ dài S
, mà phân vùng liên hợp thường có độ dài S. Đó là:
S = 10
N = 100
part = list(Partitions(N).random_element())
if len(part) != S:
SAD = list(Partition(part).conjugate())
if len(SAD) != S:
continue
Điều này làm tăng tốc độ mà các phân vùng có độ dài S
được tìm thấy và dường như để sản xuất mẫu không thiên vị (tôi đã kiểm tra kết quả chống lại cả một tập hợp các phân vùng cho các giá trị khác nhau của N
và S
).
Tuy nhiên, tôi đang sử dụng các giá trị của N (ví dụ: 10,000
) và S (ví dụ: 300
) làm cho phương pháp này thậm chí còn chậm một cách không chính xác. Nhận xét liên quan đến chức năng random_element()
của SAGE thừa nhận có rất nhiều chỗ để tối ưu hóa. Vì vậy, có cách nào để tạo nhanh hơn các phân vùng số nguyên không thiên vị (ví dụ: ngẫu nhiên) các giá trị đã cho của N
và S
, có lẽ, bằng cách không tạo phân vùng không khớp với S
? Ngoài ra, việc sử dụng phân vùng liên hợp hoạt động tốt trong nhiều trường hợp để tạo ra các mẫu không thiên vị, nhưng tôi không thể nói rằng tôi hiểu chính xác lý do tại sao.
Cảm ơn bạn đã trả lời nhưng tôi không thấy cách chức năng này mang lại phân vùng dựa trên lấy mẫu ngẫu nhiên đồng nhất. – klocey
@ klocey, tôi đã bỏ lỡ thực tế rằng bạn đang tạo ra các phần tử ngẫu nhiên từ chuỗi, xin lỗi. –
Tôi đã thực hiện chức năng này và so sánh các mẫu ngẫu nhiên được tạo ra với bộ phân vùng đầy đủ cho một số kết hợp của N và S. So sánh được thực hiện bằng cách sử dụng đường cong mật độ hạt nhân được tạo ra từ chênh lệch phân vùng. Giống như mọi chiến lược lấy mẫu khác mà tôi đã thử, hàm này mang lại các mẫu thiên vị (phân vùng thấp hơn phương sai dự kiến). Rõ ràng, thật khó để tạo ra một mẫu ngẫu nhiên không thiên vị từ tập hợp của tất cả các phân vùng cho tổng N và chiều dài nhất định S. Hàm SAGE là gần nhất mà tôi đã đến, nhưng nó ở mức tối ưu. – klocey