使用 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。

結論

在此程式碼中,可能的組合取決於輸入陣列。如果輸入陣列很大,則生成組合所需的時間將高於預期。因此,我們可以根據需要在將來對其進行最佳化。

更新於:2023年8月23日

1K+ 次瀏覽

啟動您的 職業生涯

透過完成課程獲得認證

開始
廣告