0
如果我有,比如說n = 7個二元對象,並且說k = 3個等於1,那我怎樣枚舉所有35個排列中的7個在R中選擇3?例如,1110000就是這樣的一個排列(並且通過剩下的34個工作是一個合理的起點)。我可以通過做這樣的事情築巢三個環路寫非遞歸算法,專門爲7選3以下(通過硬編碼數):如何枚舉R中k = 1的n個二元對象的所有排序?
n2Ck <- function() {
output <- NULL
out <- as.numeric(c(rep(1,times=3),rep(0, times=4)))
for (i in 1:5) {
for (j in (i+1):6) {
for (k in (j+1):7) {
out <- out*0
out[c(i,j,k)] <- 1
output <- rbind(output,out)
}
}
}
return(output)
}
主要生產:
nC2k()
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
out 1 1 1 0 0 0 0
out 1 1 0 1 0 0 0
out 1 1 0 0 1 0 0
out 1 1 0 0 0 1 0
out 1 1 0 0 0 0 1
out 1 0 1 1 0 0 0
out 1 0 1 0 1 0 0
out 1 0 1 0 0 1 0
out 1 0 1 0 0 0 1
out 1 0 0 1 1 0 0
out 1 0 0 1 0 1 0
out 1 0 0 1 0 0 1
out 1 0 0 0 1 1 0
out 1 0 0 0 1 0 1
out 1 0 0 0 0 1 1
out 0 1 1 1 0 0 0
out 0 1 1 0 1 0 0
out 0 1 1 0 0 1 0
out 0 1 1 0 0 0 1
out 0 1 0 1 1 0 0
out 0 1 0 1 0 1 0
out 0 1 0 1 0 0 1
out 0 1 0 0 1 1 0
out 0 1 0 0 1 0 1
out 0 1 0 0 0 1 1
out 0 0 1 1 1 0 0
out 0 0 1 1 0 1 0
out 0 0 1 1 0 0 1
out 0 0 1 0 1 1 0
out 0 0 1 0 1 0 1
out 0 0 1 0 0 1 1
out 0 0 0 1 1 1 0
out 0 0 0 1 1 0 1
out 0 0 0 1 0 1 1
out 0 0 0 0 1 1 1
但我不知道如何產生任意n和k的函數。 (輸出格式是比較隨意在這裏,順便說一句。)
我目前所看到的這樣那樣的問題在其他語言中的某些遞歸解決方案(例如,here和here),但我在遞歸真可憐,並且已經我無法理解它們足以將這些算法轉換爲R.我明白,遞歸解決方案想要將問題分解爲兩類:第一個元素爲1(n-1,k-1)的那些,以及那些(n-1,k)的第一個元素爲0,但我迷失在如何實現(我希望這個問題有一個newb
標記...我會高興來改善這個問題,如果你有反饋給我)。
'combinat :: combn(7,3)'如何將返回的數字作爲1的索引? – Gregor
@Gregor謝謝你......我明白這是如何工作的,而且*將*爲我提供解決這個問題的動機所在的更大問題的解決方案。 :)那就是說,有什麼機會可以幫助我理解創建一個遞歸函數來解決問題嗎? – Alexis
遞歸解決方案聽起來很有趣 - 我現在沒有時間回答,但我希望今晚晚些時候能找到時間。 – Gregor