当前位置: 首页 > news >正文

百度做网站的费用子夜免费观看

百度做网站的费用,子夜免费观看,林萌荣温州市网页制作,网站建设 化工目录 一.引言 二.双向 BFS 简介 1.双向遍历示例 2.搜索模版回顾 三.经典算法实战 1.Word-Ladder [127] 2.Min-Gen-Mutation [433] 四.总结 一.引言 DFS、BFS 是常见的初级搜索方式#xff0c;为了提高搜索效率#xff0c;衍生了剪枝、双向 BFS 以及 A* 即启发式搜索… 目录 一.引言 二.双向 BFS 简介 1.双向遍历示例 2.搜索模版回顾 三.经典算法实战 1.Word-Ladder [127] 2.Min-Gen-Mutation [433] 四.总结 一.引言 DFS、BFS 是常见的初级搜索方式为了提高搜索效率衍生了剪枝、双向 BFS 以及 A* 即启发式搜索等高级搜索方式。剪枝通过避免不必要或者次优解来减少搜索的次数提高搜索效率双向 BFS 通过层序遍历从首尾逼近答案提高搜索效率启发式搜索则是从优先级的角度出发基于优先级高低搜索提高搜索效率。本文主要介绍双向 BFS 的使用。 二.双向 BFS 简介 1.双向遍历示例 ◆  双向连通图 求 A - L 所需最短路径。 ◆  遍历层级关系 不同颜色代表不同层级的 BFS绿色为 root蓝色为第二层从左向右递推。 ◆  双向遍历 从 A/L 同时层序遍历当二者扩散的点重合时左右路径长度相加即为最短路径。 2.搜索模版回顾 ◆ DFS - 递归 ◆ DFS - 非递归  ◆ BFS - 栈  三.经典算法实战 1.Word-Ladder [127] 单词接龙: https://leetcode.cn/problems/word-ladder/description/ ◆ 单向 BFS class Solution: def ladderLength(self, beginWord, endWord, wordList)::type beginWord: str:type endWord: str:type wordList: List[str]:rtype: intvalid_word set(wordList)if endWord not in valid_word:return 0stack [(beginWord, 1)]while stack:word, level stack.pop(0)for i in range(len(word)):for char in abcdefghijklmnopqrstuvwxyz:new_word word[:i] char word[i 1:]if new_word endWord:return level 1elif new_word in valid_word:stack.append((new_word, level 1))valid_word.remove(new_word)return 0 这里我们可以打印一下转换的流程图hot 有多层 level 出发第二条路径走到了 cog即结束遍历当然 log 也可以走到 cog 只不过已经不需要了。 hot 2 - lot 3 hot 2 - dot 3 - dog 4 - cog 5 hot 2 - dot 3 - log 4  ◆ 双向 BFS  class Solution(object):def ladderLength(self, beginWord, endWord, wordList)::type beginWord: str:type endWord: str:type wordList: List[str]:rtype: int# 去重使用valid_word set(wordList)# 边界条件if endWord not in wordList or len(wordList) 0:return 0# 双向 BFSbegin, end, step {beginWord}, {endWord}, 1# 同时有元素才能继续如果一遍没元素代表已中断无法联通直接结束while begin and end:# 减少排查的可能性从单词少的方向排查避免无效查询if len(begin) len(end):begin, end end, begin# 存储下一层next_level set()# 遍历下一层的多个结果for word in begin:# 遍历每个位置for i in range(len(word)):# a-zfor char in abcdefghijklmnopqrstuvwxyz:# 节省无必要的替换if char ! word[i]:new_word word[:i] char word[i 1:]# 二者相遇即返回if new_word in end:return step 1if new_word in valid_word:next_level.add(new_word)valid_word.remove(new_word)# 指针替换begin next_levelstep 1return 0 已经将详细的注释加在代码里了从 {start}{end} 两个方向查找每次只找短的缩小无效查询的次数这其实也是一种剪枝的策略正所谓图中有真意欲辨已忘言 ◆ 双向 BFS  剪枝 class Solution(object):def ladderLength(self, beginWord, endWord, wordList)::type beginWord: str:type endWord: str:type wordList: List[str]:rtype: int# 去重使用valid_word set(wordList)if endWord not in wordList or len(wordList) 0:return 0# 剪枝优化s set()for word in wordList:for char in word:s.add(char)s .join(list(s))# 双向 BFSbegin, end, step {beginWord}, {endWord}, 1while begin and end:if len(begin) len(end):begin, end end, begin# 存储下一层next_level set()for word in begin:for i in range(len(word)):# a-zfor char in s:# 节省无必要的替换if char ! word[i]:new_word word[:i] char word[i 1:]if new_word in end:return step 1if new_word in valid_word:next_level.add(new_word)valid_word.remove(new_word)# 指针替换begin next_levelstep 1return 0 上面的两个方法在构建 new_word 时都遍历了所有 26 个字母 char其实我们可以根据 end_word 的去重字符进行状态空间压缩从而减少无意义的遍历因为 char not in end_word 则 new_word 必定 not in end_word从而优化时间复杂度。  2.Min-Gen-Mutation [433] 最小基因突变: https://leetcode.cn/problems/minimum-genetic-mutation/description/  ◆ BFS class Solution(object):def minMutation(self, startGene, endGene, bank)::type startGene: str:type endGene: str:type bank: List[str]:rtype: intif not bank:return -1bank set(bank)if endGene not in bank:return -1stack [(startGene, 0)]while stack:gene, level stack.pop(0)for i in range(len(gene)):for char in ACGT:new_gene gene[:i] char gene[i 1:]if new_gene endGene:return level 1if new_gene in bank:stack.append((new_gene, level 1))bank.remove(new_gene)return -1 和上一题异曲同工之妙只不过从单词接龙变成基因 接龙每次修改的地方有限。 ◆ 双向 BFS class Solution(object):def minMutation(self, startGene, endGene, bank)::type startGene: str:type endGene: str:type bank: List[str]:rtype: intif not bank:return -1bank set(bank)if endGene not in bank:return -1# 初始化首尾front, back, step {startGene}, {endGene}, 0while front and back:next_front set()# 遍历当前层 Genefor gene in front:print(gene)for i in range(len(gene)):for char in ACGT:new_gene gene[:i] char gene[i 1:]# 相遇了if new_gene in back:return step 1# 下一层突变if new_gene in bank:next_front.add(new_gene)bank.remove(new_gene)# 取短的遍历加速if len(next_front) len(back):front, back back, next_frontelse:front next_frontstep 1return -1 和上面异曲同工老曲新唱相当于再温习一遍。其加速点就是左右替换优先遍历可能性少的情况。 四.总结 这节内容 双向 BFS 起始也包含着很多剪枝的策略所以其也属于优化搜索方式的方法之一下一节我们介绍高级搜索的最后一块内容: A* 启发式搜索。
http://www.zqtcl.cn/news/496544/

相关文章:

  • seo快速排名多少钱安阳网站怎么优化
  • 如何在网站后台删除栏目阿里巴巴上做网站要多少钱
  • 网站建设意识形态工作河北省两学一做网站
  • 綦江建站哪家正规php做不了大型网站吗
  • 优秀的设计网站青岛网站设计企业
  • 谁有做爰网站号wordpress 4.8 中文
  • 毕业设计做网站用什么广州中智软件开发有限公司
  • 哪个网站不花钱可以做招聘wordpress没有页脚
  • 免费视频网站素材网络系统管理技能大赛
  • 聊天网站建设网站建设毕业设计评价
  • 网站建设 内容缺乏域名备案要多久
  • 产品展示型网站建设全国新冠疫苗接种率
  • 网站建设商如何自建商城和电商平台
  • 深圳做二类学分的网站开发一平方米多少钱
  • 如何做原创小说网站建一个o2o网站
  • 东莞市住房建设网站互动科技 网站建设
  • 淄博网站建设高端网络seo线上培训多少钱
  • s网站优化工地模板图片
  • 手机网站使用微信支付神级网页设计网站
  • 网站建站大约多少钱如何引流被动加好友
  • 哪些网站可以查企业信息大城县有做网站的吗
  • 上海网站建设电影联wordpress 分类title
  • 杭州网站建设招标免费seo排名优化
  • 网站建设服务费是否无形资产百度一下你就知道官网下载安装
  • 网站付款链接怎么做在线设计商标logo
  • 阿里巴巴做网站多少钱特大新闻凌晨刚刚发生
  • 网站如何做se设计师网站pintset
  • 上海网站制作机构wordpress 优酷免广告
  • 关于网站建设的名言网站开发的技术难点
  • 免费云建站廊坊seo外包