Giả sử chúng ta có các thùng n
trong đó chúng tôi đang ném k
quả bóng. nhanh (tức là sử dụng mã numpy/scipy thay vì mã python) để tạo ra tất cả các kết quả có thể có như ma trận là gì?Tạo tất cả các kết quả có thể có của quả bóng k trong n thùng (tổng các kết quả đa thức/phân loại)
Ví dụ, nếu n = 4
và k = 3
, chúng tôi muốn sau numpy.array
:
3 0 0 0
2 1 0 0
2 0 1 0
2 0 0 1
1 2 0 0
1 1 1 0
1 1 0 1
1 0 2 0
1 0 1 1
1 0 0 2
0 3 0 0
0 2 1 0
0 2 0 1
0 1 2 0
0 1 1 1
0 1 0 2
0 0 3 0
0 0 2 1
0 0 1 2
0 0 0 3
Xin lỗi nếu có hoán vị được bỏ qua, nhưng đây là ý tưởng chung. Các hoán vị được tạo ra không cần phải theo bất kỳ thứ tự cụ thể nào, nhưng danh sách trên đã thuận tiện cho việc phân loại lặp đi lặp lại thông qua chúng một cách tinh thần.
Tốt hơn, có cách nào để ánh xạ mọi số nguyên từ 1 đến multiset number (danh mục của danh sách này) trực tiếp đến một hoán vị nhất định không?
Câu hỏi này có liên quan đến những người sau đây, được thực hiện trong R với cơ sở vật chất rất khác nhau:
- Generating all permutations of N balls in M bins
- Generate a matrix of all possible outcomes for throwing n dice (ignoring order)
tài liệu tham khảo Cũng liên quan:
- https://en.wikipedia.org/wiki/Stars_and_bars_(combinatorics)
- https://en.wikipedia.org/wiki/Multiset#Counting_multisets
- https://en.wikipedia.org/wiki/Combinatorial_number_system
Có cần phải theo thứ tự đó không? – Kupiakos
@Kupiakos nope. Và tôi đã không nhận ra, người đã đăng câu hỏi đầu tiên đó đã tạo ra cùng một danh sách. –
Suy nghĩ về [sao và quán bar] (https://en.wikipedia.org/wiki/Stars_and_bars_ (combinatorics)), sử dụng thuật toán cho "kết hợp không trung gian" để tìm vị trí của các thanh (hoặc dấu sao). Một thuật toán như vậy được trình bày ở đây: [Tìm k-kết hợp cho một số nhất định] (https://en.wikipedia.org/wiki/Combinatorial_number_system#Finding_the_k-combination_for_a_given_number). –