python 动态规划 回溯_回溯算法 - 全排列算法实现(pythondart)
回溯算法 , 就是 窮舉
解決一個回溯問題,實際上就是一個決策樹的遍歷過程.
路徑: 也就是已經做出的選擇
選擇列表: 也就是你當前可以做的選擇
結束條件: 也就是到達決策樹底層,無法再做選擇的條件.
回溯算法的一個特點: 它不像動態規劃存在重疊子問題可以優化,回溯算法就是純暴力窮舉,復雜度一般都很高,不可能低于0(n!),因為窮舉整顆決策樹是無法避免的.
python代碼:
from rich.console import Console
from rich import print
console = Console()
res = []
def permute( nums):
tarck = []
backtrack(nums,tarck)
return res
def backtrack(nums,track):
if (len(track) == len(nums) ):
res.append(track.copy())
console.log( 'nums長度和track長度一致' , style="bold red underline")
print('當前res是: '+ str(res))
return res
for i in nums:
if i in track:
continue
track.append(i)
backtrack(nums,track)
track.pop()
res = permute([1,2,3])
console.log( res , style="bold green ")
# 輸出結果: [[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2], [3, 2, 1]]
dart代碼:
List> res = [];
List> permute(List nums){
List track = [] ;
backtrack(nums, track);
return res;
}
void backtrack(List nums, List track){
if (nums.length == track.length){
res.add(track.sublist(0));
print("當前res是: "+res.toString());
return ;
}
for(int i=0;i
if (track.contains(nums[i])){
continue;
}
track.add(nums[i]);
backtrack(nums, track);
track.removeLast();
}
}
void main() {
var xx = permute([1,2,3]);
print(xx);
}
Flutter 寫的app, 需要源碼可以私信~~
總結
以上是生活随笔為你收集整理的python 动态规划 回溯_回溯算法 - 全排列算法实现(pythondart)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 荣耀v40搭载鸿蒙吗,荣耀V40照常发布
- 下一篇: axure 输入框默认灰色字_Axure