极客大学算法训练营覃超第十四课.docxVIP

极客大学算法训练营覃超第十四课.docx

此“教育”领域文档为创作者个人分享资料,不作为权威性指导和指引,仅供参考
  1. 1、本文档共39页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
极客大学算法训练营 第十四课 高级搜索 覃超 Sophon Tech 创始人,前 Facebook 工程师 目录 ? 剪枝 ? 双向 BFS ? 启发式搜索(A*) 初级搜索 1. 朴素搜索 3. 搜索方向: 索 索 双向搜索、启发式搜索 Coin change(零钱置换)的状态树 11 1 5 2 1 10 9 6 1 5 2 2 5 … 9 8 5 5 4 1 1 2 5 1 2 5 … … 4 3 0 1 2 5 0 -1 -4 2 1 -2 … DFS 代码 - 递归写法 visited = set() def dfs(node, visited): if node in visited: # terminator # already visited return visited.add(node) # process current node here. ... for next_node in node.children(): if not next_node in visited: dfs(next_node, visited) DFS 代码 - 非递归写法 def DFS(self, tree): if tree.root is None: return [] visited, stack = [], [tree.root] while stack: node = stack.pop() visited.add(node) process (node) nodes = generate_related_nodes(node) stack.push(nodes) # other processing work ... BFS 代码 def BFS(graph, start, end): queue = [] queue.append([start]) visited.add(start) while queue: node = queue.pop() visited.add(node) process(node) nodes = generate_related_nodes(node) queue.push(nodes) 剪枝 剪枝 -> 50 个分支 -> 50 个分支 -> 50 个分支 -> 50 个分支 三子棋、五子棋等 搜索空间与复杂度 回溯法 当 甚 ? 找到一个可能存在的正确的答案 ? 在尝试了所有可能的分步方法后宣告该问题没有答案 在最坏的情况下,回溯法会导致一次复杂度为指数时间的计算。 实战练习 / / 实战练习 / / n 八皇后代码 def solveNQueens(self, n): if n < 1: return [] self.result = [] self.cols = set(); self.pie = set(); self.na = set() self.DFS(n, 0, []) return self._generate_result(n) def DFS(self, n, row, cur_state): # recursion terminator if row >= n: self.result.append(cur_state) return for col in range(n): if col in self.cols or row + col in self.pie or row - col in self.na: # go die! continue # update the flags self.cols.add(col) self.pie.add(row + col) self.na.add(row - col) self.DFS(n, row + 1, cur_state + [col]) self.cols.remove(col) self.pie.remove(row + col) self.na.remove(row - col) 双向 BFS Breadth First Search (BFS) B D F I A E G L C H K J Breadth-First Search Levels 1 2 3 4 5 6 B D F I A E G J L C H K Two-ended BFS 双向BFS 1 2 3 4 5 6 B D F I A E G J L C H K 实战题目 1. /problems/word-ladder/ 2. /problems/minimum-genetic- mutation/ 启发式搜索 Heuristic Search (A*) 基于 BFS 代码 def BFS(graph, start,

文档评论(0)

原创文库 + 关注
实名认证
文档贡献者

电子图像处理技能证持证人

该用户很懒,什么也没介绍

领域认证该用户于2023年04月20日上传了电子图像处理技能证

1亿VIP精品文档

相关文档