日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

(十五)算法设计思想之“回溯算法”

發布時間:2023/12/31 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (十五)算法设计思想之“回溯算法” 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

算法設計思想之“回溯算法”

  • 回溯算法是什么?
  • 什么問題適合用回溯算法解決?
  • 適合回溯算法解決的問題
  • 全排列
  • LeetCode:46.全排列
  • LeetCode:78.子集
  • 思考題
  • 回顧

回溯算法是什么?

回溯算法是算法設計中的一種方法
回溯算法是一種漸進式尋找并構建問題解決方式的策略
回溯算法會先從一個可能的動作開始解決問題,如果不行,就回溯并選擇另一個動作,直到問題解決
有點類似鬼吹燈之尋龍訣,探險會碰到很多路,只能一條條試,不通就返回選擇另一條路

什么問題適合用回溯算法解決?

有很多路
這些路里,有死路,也有出路
通常需要遞歸來模擬所有的路

適合回溯算法解決的問題

全排列
子集

全排列

用遞歸模擬出所有情況
遇到包含重復元素的情況,就回溯
收集所有到達遞歸終點的情況,并返回

LeetCode:46.全排列


解題思路
要求:1、所有排列情況;2、沒有重復元素
有出路、有死路
考慮使用回溯算法
解題步驟
用遞歸模擬出所有情況
遇到包含重復元素的情況,就回溯
收集所有到達遞歸終點的情況,并返回

時間復雜度:O(n!),n!=123*…*(n-1)*n
空間復雜度:O(n)

LeetCode:78.子集


解題思路
要求:1、所有子集;2、沒有重復元素
有出路、有死路
考慮使用回溯算法
解題步驟
用遞歸模擬出所有情況
保證接的數字都是后面的數字
收集所有到達遞歸終點的情況,并返回

時間復雜度:O(2^N),因為每個元素都有兩種可能(存在或不存在)
空間復雜度:O(N)

思考題

1、說出回溯算法的套路步驟。
2、用回溯算法的套路步驟,描述走迷宮的過程,無需Coding。

回顧

數據結構:棧、隊列、鏈表、集合、字典、樹、圖、堆
算法:鏈表/樹/圖的遍歷、數組的排序和搜索…
算法設計思想:分而治之、動態規劃、貪心。回溯
重點難點
數據結構:所有數據結構都很重要,跟前端最相關的是鏈表和樹
算法:鏈表/樹/圖的遍歷、數組的排序和搜索…
設計思想:分而治之、動態規劃較常考,貪心、回溯次之
經驗心得
搞清楚數據結構與算法的特點和應用場景
用JS實現一遍,最好能用第二第三語言再實現一遍
學會分析時間/空間復雜度
提煉前端和算法的結合點,用于工作實戰
拓展建議
多刷題,最好能保證300道以上
多總結各種套路、模板
多閱讀源碼,比如React、Lodash、V8
多實戰,將數據結構與算法用于工作

總結

以上是生活随笔為你收集整理的(十五)算法设计思想之“回溯算法”的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。