Giả sử tôi có một tập hợp các số từ [0, ....., 499]
. Các kết hợp hiện đang được tạo tuần tự bằng cách sử dụng C++ std::next_permutation
. Để tham khảo, kích thước của mỗi tuple tôi kéo ra là 3, vì vậy tôi đang trả về kết quả tuần tự như [0,1,2], [0,1,3], [0,1,4], ... [497,498,499]
.n-th hoặc Kết hợp tùy ý của một tập hợp lớn
Bây giờ, tôi muốn song song mã mà mã này đang ngồi, do đó việc tạo các kết hợp này sẽ không còn hoạt động theo tuần tự nữa. Có bất kỳ thuật toán hiện tại nào để tính toán kết hợp ith
của 3 từ 500 số không?
Tôi muốn đảm bảo rằng mỗi chuỗi, bất kể vòng lặp của vòng lặp nhận được, có thể tính toán kết hợp độc lập dựa trên số i
đang lặp lại. Vì vậy, nếu tôi muốn kết hợp cho i=38
trong chuỗi 1, tôi có thể tính toán [1,2,5]
trong khi đồng thời tính toán i=0
trong chuỗi 2 dưới dạng [0,1,2]
.
EDIT Dưới đây tuyên bố là không thích hợp, tôi trộn lẫn bản thân mình lên
tôi đã xem xét thuật toán sử dụng thừa để thu hẹp mỗi yếu tố cá nhân từ trái sang phải, nhưng tôi không thể sử dụng các như 500! chắc chắn sẽ không phù hợp với trí nhớ. Bất kỳ đề xuất?
Hiển thị cho chúng tôi các tính toán liên quan đến giai thừa. Bạn có thể chỉ nhìn nó sai. Chắc chắn bạn sẽ chia một giai thừa thành một giai thừa khác, thường có nghĩa là đơn giản hóa là có thể. – paddy
Tôi nghĩ tôi cần phải thuật lại câu hỏi của mình. Nó không chỉ là một hoán vị của 500 con số. Đó là một sự kết hợp của 3 trong số 500 có thể. Nhưng tôi muốn có thể chọn một sự kết hợp tùy ý trong số 500 chọn 3 có thể. – bgoers
Có lẽ một cái gì đó như sau: http://code.google.com/p/strtk/source/browse/trunk/strtk.hpp#11622 – Gerdiner