python 动态规划 回溯_回溯算法 - 全排列算法实现(pythondart)
回溯算法 , 就是 窮舉
解決一個(gè)回溯問(wèn)題,實(shí)際上就是一個(gè)決策樹(shù)的遍歷過(guò)程.
路徑: 也就是已經(jīng)做出的選擇
選擇列表: 也就是你當(dāng)前可以做的選擇
結(jié)束條件: 也就是到達(dá)決策樹(shù)底層,無(wú)法再做選擇的條件.
回溯算法的一個(gè)特點(diǎn): 它不像動(dòng)態(tài)規(guī)劃存在重疊子問(wèn)題可以?xún)?yōu)化,回溯算法就是純暴力窮舉,復(fù)雜度一般都很高,不可能低于0(n!),因?yàn)楦F舉整顆決策樹(shù)是無(wú)法避免的.
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長(zhǎng)度和track長(zhǎng)度一致' , style="bold red underline")
print('當(dāng)前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 ")
# 輸出結(jié)果: [[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("當(dāng)前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 寫(xiě)的app, 需要源碼可以私信~~
總結(jié)
以上是生活随笔為你收集整理的python 动态规划 回溯_回溯算法 - 全排列算法实现(pythondart)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 荣耀v40搭载鸿蒙吗,荣耀V40照常发布
- 下一篇: python字符串填充_填充函数(Pyt