回溯演算法 全排列

2022-06-22 06:51:12 字數 1284 閱讀 2921

(1)問題描述:對於給定的集合 a,其中的 n 個元素互不相同,如何輸出這 n 個元素的所有排列(全排列),時間複雜度為o(2n);

例如:全排列:, , , , ,

(2)回溯演算法思想:

這裡以 a 為例,來說明全排列的生成方法,對於這個集合,其包含 3 個元素,所有的排列情況有 3!=6 種,對於每一種排列,其第乙個元素有 3 種選擇 a, b, c,對於第乙個元素為 a的排列,其第二個元素有 2 種選擇 b, c;第乙個元素為 b 的排列,第二個元素也有2種選擇a,c,……,依次類推,我們可以將集合的全排列與一棵多叉樹對應。如下圖所示:

(3)演算法**:

public

class

fullpermutation

/*** 初始化資料

*/private

static

void

initdata()

}/*** 遞迴回溯排列樹求解

*/private

static

void backtrack(int

t)

for (int i = t; i < data.length; i++)

}public

static

void

main(string args)

}

(4)輸入輸出

請輸入資料數量:

4請輸入陣列資料

1 2 3 4排列數為: 1 1 2 3排列數為: 1 1 3 2排列數為: 1 2 1 3排列數為: 1 2 3 1排列數為: 1 3 2 1排列數為: 1 3 1 2排列數為: 1 1 2 3排列數為: 1 1 3 2排列數為: 1 2 1 3排列數為: 1 2 3 1排列數為: 1 3 2 1排列數為: 1 3 1 2排列數為: 2 1 1 3排列數為: 2 1 3 1排列數為: 2 1 1 3排列數為: 2 1 3 1排列數為: 2 3 1 1排列數為: 2 3 1 1排列數為: 3 1 2 1排列數為: 3 1 1 2排列數為: 3 2 1 1排列數為: 3 2 1 1排列數為: 3 1 2 1排列數為: 3 1 1 2

(5)總結:回溯演算法是有一定的規律可循的,根據問題,找出解空間的組織結構,選擇恰當的解決方案:回溯演算法模板。

回溯演算法一般採用深度優先的方式,遞迴求解,人的思維一般對遞迴求解的問題有一定的想象難度,建議在紙上根據**的流程,畫一畫走一遍詳細的過程,便於理解回溯演算法的核心要點。

python回溯演算法全排列 回溯演算法 全排列

1 問題描述 對於給定的集合 a,其中的 n 個元素互不相同,如何輸出這 n 個元素的所有排列 全排列 時間複雜度為o 2n 例如 全排列 2 回溯演算法思想 這裡以 a 為例,來說明全排列的生成方法,對於這個集合,其包含 3 個元素,所有的排列情況有 3 6 種,對於每一種排列,其第乙個元素有 3...

回溯(全排列)

題 輸出自然數 1 到 n 所有不重複的排列,即 n 的全排列,要求所產生的任一數字序列中不允許出現重複的數字。輸入格式 乙個整數 n 1 n 9 輸出格式 由 1 n組成的所有不重複的數字序列,每行乙個序列。每個數字保留 5個常寬。sample input 3sample output 1 2 3...

回溯演算法 素數環 全排列

time 2020 11 25 author jimou chen from math import sqrt n int input num 0 for in range n 1 flag 0 for in range n 1 判斷素數 def prime x for i in range 2,i...