簡體   English   中英

從 n 個元素的數組中找出形成元素 K 的方法數

[英]Find the number of ways to form an element K from an array of n elements

給定一個包含n元素的數組,找出從這n元素形成元素K的方法數。 例如,如果數組為{3,9,1,4,2,5}K = 5可能的方式有:

1+4,
2+3,
1+2+2,
1+1+1+1+1,
1+3+1,
1+1+1+2

所以答案應該是 6。請為此提出一個算法。

基本算法如下所示:

  • 對於數組中的每個元素x
    • 如果x等於k ,則[x]是一個解
    • 如果x小於k ,則找到kx的解並將它們與x組合

在代碼中實現這一點的最簡單方法是作為一個簡單的遞歸算法(這里是 Python):

def find_sums(array, k):
    for x in array:
        if x == k:
            yield [x]
        elif x < k:
            for s in find_sums(array, k - x):
                yield [x] + s

但是請注意,這對於較大的數組來說效率不高,因為所有對find_sums(array, k - x)調用find_sums(array, k - x)一遍又一遍地重復,但這可以通過記憶化動態編程輕松修復 此外,結果可能包含一些“重復項”,例如[1, 4][4, 1] 您可以通過構造來避免這些(跟蹤部分結果中的最大元素)或之后將它們過濾掉(例如,排序並轉換為集合)。 此外,如果您不希望結果中出現單數列表,您也必須將它們過濾掉。

這些調整留給讀者作為練習。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM