首頁 >後端開發 >C++ >如何產生數組的所有排列?

如何產生數組的所有排列?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-18 02:27:17394瀏覽

How Can I Generate All Permutations of an Array?

產生陣列的排列

陣列的排列包含其元素的獨特排列。對於 N 元素數組,存在 N! (N 階乘)不同的排列。本問題旨在概述產生這些排列的演算法。

演算法:

考慮以下產生陣列排列的步驟:

  1. 初始化: 先將第一個>
  2. 初始化:

    先將第一個🎜> 初始化:

    先將第一個轉頁元素作為樞軸並將其放置在目前排列清單的第一個位置。
    遞歸排列:
  3. 循環遍歷陣列的其餘元素。將每個元素與主元交換,在下一個位置使用更新的主元遞歸呼叫排列函數,然後再次交換以恢復原始順序。
  4. 例如,給定 {3,4,6, 2,1} 和主元 3 一起迭代 {4,6,2,1}。將 4 與 3 交換,以主元 4 遞歸排列 {4, 3, 2, 1},然後交換回來。

終止:

當迴圈到達最後一個元素,目前排列清單完成。輸出它。

def generate_permutations(arr):
  perms = []
  _generate_permutations_helper(arr, 0, perms)
  return perms


def _generate_permutations_helper(arr, start, perms):
  if start == len(arr) - 1:
    perms.append(arr.copy())
  else:
    for i in range(start, len(arr)):
      arr[start], arr[i] = arr[i], arr[start]
      _generate_permutations_helper(arr, start + 1, perms)
      arr[start], arr[i] = arr[i], arr[start]

實作:

這是上述演算法的 Python實作:
arr = [3, 4, 6, 2, 1]
permutations = generate_permutations(arr)
print(permutations)  # [[3, 4, 6, 2, 1], [3, 4, 2, 6, 1], ... ]

範例用法:

注意: 此方法可以透過僅維護目前排列的開始和結束元素並僅在最後,無需將整個排列清單保留在記憶體中。

以上是如何產生數組的所有排列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn