Tôi muốn tìm cách nhanh nhất để tìm tối đa 1000 kết hợp có thể có của số nguyên 'n' để tìm số nguyên mục tiêu.Tìm tất cả các kết hợp của các con số tổng hợp đến một mục tiêu
Ví dụ: Giả sử tôi muốn tính tổng số '20'. Tôi muốn tìm đến 1000 kết hợp của bốn số nguyên tổng hợp cho số này. Các số nguyên có thể tự lặp lại. Tôi cũng có điều kiện là số nguyên không được nhỏ hơn một số cụ thể, trong trường hợp này là 4.
target<-20 #the number I wish to sum to
lowest<-4 #the smallest integer I allow
size<-4 #the number of integers I wish to use to sum
maxposs <- target - ((size-1) * lowest) #given the lowest, this is the max possible integer. In my example it is 8.
Đây là cách tôi bắt đầu làm việc này. Sử dụng combn
để tìm tất cả các kết hợp của bốn số nguyên được chọn và sau đó lọc theo số nguyên kết hợp với mục tiêu của tôi.
m <- combn(rep(lowest:maxposs,size), size)
m1<- m[,colSums(m)==target]
Ở đây, 'm1' có 245 cột. Chỉ có nhiều giải pháp này. Một vài cột cuối cùng:
# [,238] [,239] [,240] [,241] [,242] [,243] [,244] [,245]
#[1,] 4 4 4 4 4 4 5 5
#[2,] 5 5 5 6 7 4 6 4
#[3,] 7 4 5 4 4 5 4 5
#[4,] 4 7 6 6 5 7 5 6
Tuy nhiên, trong ứng dụng thực tế của tôi, tôi có thể đối phó với số nguyên rất cao (tổng hợp lên đến 1000) và muốn giới hạn bản thân mình vào một mẫu ngẫu nhiên 1000 kết hợp có thể. Vì đây là một thử nghiệm thống kê ngẫu nhiên, tốc độ là bản chất. Tôi tự hỏi liệu có ai biết cách làm điều này nhanh hơn không. Cách của tôi không cảm thấy trực giác một cách nhanh chóng.
Không nên là 'maxposs <- target - (size-1) * lowest'? – cyberj0g
@ cyberj0g - vâng, tôi phát hiện ra rằng sau khi tôi đăng – jalapic
'combnPrim' từ' thư viện (gRbase) 'sẽ là [nhanh] (http://stackoverflow.com/questions/26828301/faster-version-of-combn/26828486 # 26828486). – akrun