使用 JavaScript 查詢陣列中所有可能的組合
在給定的問題陳述中,我們被要求使用 JavaScript 功能找到陣列中所有可能的組合。因此,我們將使用一個空陣列,並將所有可能的組合新增到這個陣列中。
上述問題的邏輯
在 JavaScript 中查詢陣列中所有可能的組合最簡單的方法是使用 for 迴圈將組合新增到新建立的陣列中。
為了理解這種實現的邏輯,我們將透過迭代輸入陣列來進行操作,對於每個元素,我們將透過將該專案新增到每個現有組合來建立一個新的組合。此過程將透過迭代當前組合列表並建立一個新的組合來完成,該組合由當前組合和新增到末尾的新元素組成。然後將這個新建立的組合新增到結果陣列的末尾。
例如,我們有輸入陣列 arr = [1, 2, 3]。
我們將從一個空陣列作為我們的初始組合列表開始。然後,我們將迭代 arr 中的每個元素,對於每個專案,我們將迭代當前組合列表並將該元素新增到其中以建立新的組合。
For num = 3, Possible Combination is: [[], [1], [2], [1, 2], [3], [1, 3], [2, 3], [1, 2, 3]] For num = 4, Possible Combination is: [ 4 ], [ 1, 4 ], [ 2, 4 ], [ 1, 2, 4 ], [ 3, 4 ], [ 1, 3, 4 ], [ 2, 3, 4 ], [ 1, 2, 3, 4 ]
演算法
步驟 1 - 任務是從陣列中查詢組合並將它們新增到一個新的子陣列陣列中。為了處理這個概念,我們將定義一個函式並將其命名為 possibleCombination,引數為 arr。
步驟 2 - 在下一行宣告一個空的子陣列陣列,並將其命名為 result。這個陣列將儲存輸入陣列的最終潛在組合。
步驟 3 - 建立一個 for 迴圈來遍歷陣列的元素,並將 result 的長度儲存在 len 變數中。
步驟 4 - 繼續進行第三步,構造另一個 for 迴圈,該迴圈將用於組合輸入片段。
步驟 5 - 顯示所有可能的組合的結果。
示例
// define function to return the possible combinations function posibleCombination(arr) { const result = [[]]; for (let num of arr) { const len = result.length; for (let i = 0; i < len; i++) { const temp = result[i].slice(); temp.push(num); result.push(temp); } } return result; } // print input array and output the combinations const arr = [1, 2, 3]; console.log(posibleCombination(arr));
輸出
[ [], [ 1 ], [ 2 ], [ 1, 2 ], [ 3 ], [ 1, 3 ], [ 2, 3 ], [ 1, 2, 3 ] ]
我們可以看到上面的組合
對於 num = 1,有 2 個可能的組合 [] 和 [1]。
對於 num = 2,有 4 個可能的組合 []、[1]、[2] 和 [1, 2]。
對於 num = 3,有 8 個可能的組合 []、[1]、[2]、[1, 2]、[3]、[1, 3]、[2, 3] 和 [1, 2, 3]。
我們可以在這裡看到,對於數字值 1,有 2 個可能的組合。對於數字 2,有 4 個可能的組合,對於數字 3,有 8 個可能的組合。
時間複雜度
現在是計算上述演算法的時間複雜度的時候了。對於我們的程式碼,時間複雜度將是 O(2^n)。這裡 n 表示陣列的大小。這是因為陣列中每個專案的替代組合數量是兩倍。長度為 n 的輸入陣列的輸出總組合數為 2^n。
結論
在此程式碼中,可能的組合取決於輸入陣列。如果輸入陣列很大,則生成組合所需的時間將高於預期。因此,我們可以根據需要在將來對其進行最佳化。