JavaScript陣列所有項組合演算法
在這個問題陳述中,我們的任務是藉助Javascript功能獲取陣列中所有項的組合。為此,我們可以使用遞迴方法,迭代地將專案新增到正在執行的組合列表中。
理解問題陳述
問題陳述是在Javascript中編寫一個函式,該函式將幫助找出陣列中所有元素的組合,並建立一個單獨的陣列來顯示這些組合。例如,如果我們有一個數組[1, 2],那麼這個陣列的組合將是[[1, 2], [2]]。
給定問題的邏輯
可以使用遞迴演算法在Javascript中建立一個函式來獲取陣列中所有專案的組合,該演算法將迭代地將專案新增到組合列表中。所以首先我們將定義一個數組並將其初始化為空。在建立的函式中,我們將定義另一個函式來遞迴執行組合列表。
演算法
步驟1 - 宣告一個名為getCombinations的函式,該函式使用陣列引數。
步驟2 - 在函式內宣告一個結果陣列,該陣列將儲存最終的組合列表。
步驟3 - 定義另一個名為recurse的函式,該函式將接收兩個引數cur和rem,其中cur是正在執行的專案列表,rem是我們要新增到組合中的剩餘專案陣列。
步驟4 - 如果rem陣列中沒有剩餘專案,我們將current推入結果陣列,因為我們已經達到了所需的結果。
步驟5 - 否則,我們將迭代rem陣列中的每個專案,並使用包含當前專案的新cur陣列遞迴呼叫遞迴函式。
步驟6 - 使用空的cur陣列和我們想要為其生成組合的完整陣列最初呼叫recurse。
步驟7 - 返回包含輸入陣列所有可能組合的最終結果陣列。
演算法程式碼
//function to get the combinations of input array
function getCombinations(array) {
const result = [];
function recurse(cur, rem) {
if (rem.length === 0) {
result.push(cur);
} else {
for (let i = 0; i < rem.length; i++) {
recurse([...cur, rem[i]], rem.slice(i + 1));
}
}
}
recurse([], array);
return result;
}
//Example usage
const array = [10, 20, 30, 40];
const combinations = getCombinations(array);
console.log(combinations);
複雜度
上面建立的函式的時間複雜度為O(2^n),因為該演算法生成陣列中所有專案的組合,並且有2^n個可能的組合。程式碼的空間複雜度也是O(2^n),因為該演算法生成一個包含2^n個組合的列表。
結論
上述程式碼提供了一個簡單的解決方案,用於在Javascript中生成陣列中所有專案的組合。因此,它具有O(2^n)的時間和空間複雜度,這可能使它對於大型陣列效率較低。因此,在決定是否使用此演算法時,務必注意陣列的大小。
資料結構
網路
關係資料庫管理系統(RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP