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

网盘建网站中国铁工建设有限公司网站

网盘建网站,中国铁工建设有限公司网站,找建筑工作哪个网站好,泸县建设局网站Python算法题集_单词搜索 题22#xff1a;单词搜索1. 示例说明2. 题目解析- 题意分解- 优化思路- 测量工具 3. 代码展开1) 标准求解【原始矩阵状态回溯】2) 改进版一【字典检测原始矩阵状态回溯】3) 改进版二【矩阵状态回溯】 4. 最优算法5. 相关资源 本文为Python算法题集之一… Python算法题集_单词搜索 题22单词搜索1. 示例说明2. 题目解析- 题意分解- 优化思路- 测量工具 3. 代码展开1) 标准求解【原始矩阵状态回溯】2) 改进版一【字典检测原始矩阵状态回溯】3) 改进版二【矩阵状态回溯】 4. 最优算法5. 相关资源 本文为Python算法题集之一的代码示例 题22单词搜索 1. 示例说明 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中返回 true 否则返回 false 。 单词必须按照字母顺序通过相邻的单元格内的字母构成其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。 示例 1 输入board [[A,B,C,E],[S,F,C,S],[A,D,E,E]], word ABCCED 输出true示例 2 输入board [[A,B,C,E],[S,F,C,S],[A,D,E,E]], word SEE 输出true示例 3 输入board [[A,B,C,E],[S,F,C,S],[A,D,E,E]], word ABCB 输出false提示 m board.lengthn board[i].length1 m, n 61 word.length 15board 和 word 仅由大小写英文字母组成 **进阶**你可以使用搜索剪枝的技术来优化解决方案使其在 board 更大的情况下可以更快解决问题 2. 题目解析 - 题意分解 本题是在矩阵内检查是否有相邻元素组成对应单词矩阵内每一个元素最多有4个方向考虑到搜索进入方向从第二个字母开始最多有3个方向可以用回溯法解题回溯法探索与回溯法是一种选优搜索法又称为试探法按选优条件向前搜索以达到目标。但当探索到某一步时发现原先选择并不优或达不到目标就退回一步重新选择这种走不通就退回再走的技术为回溯法。 - 优化思路 通常优化减少循环层次 通常优化增加分支减少计算集 通常优化采用内置算法来提升计算速度 分析题目特点分析最优解 可以使用字典进行字符检测只有存在检测单词所有字符的矩阵才展开搜索 可以使用原始矩阵保存检测状态也可以另外使用矩阵保存检测状态 - 测量工具 本地化测试说明LeetCode网站测试运行时数据波动很大【可把页面视为功能测试】因此需要本地化测试解决数据波动问题CheckFuncPerf本地化函数用时和内存占用测试模块已上传到CSDN地址Python算法题集_检测函数用时和内存占用的模块本题本地化超时测试用例自己生成详见章节【最优算法】代码文件包含在【相关资源】中 3. 代码展开 1) 标准求解【原始矩阵状态回溯】 使用原始矩阵保存检测状态【当前已检测路径值设置为’】实现回溯 页面功能测试马马虎虎超过76% import CheckFuncPerf as cfpclass Solution:def exist_base(self, board, word):def dfs_backtrack(irow, icol, icheckpos):if not 0 irow len(board) or not 0 icol len(board[0]) or \board[irow][icol] ! word[icheckpos]:return Falseif icheckpos len(word) - 1:return Trueboard[irow][icol] result dfs_backtrack(irow 1, icol, icheckpos 1) or \dfs_backtrack(irow - 1, icol, icheckpos 1) or \dfs_backtrack(irow, icol 1, icheckpos 1) or \dfs_backtrack(irow, icol - 1, icheckpos 1)board[irow][icol] word[icheckpos]return resultfor irow in range(len(board)):for icol in range(len(board[0])):if board[irow][icol] word[0] and dfs_backtrack(irow, icol, 0):return Truereturn FalseaSolution Solution() checkmapmatrix copy.deepcopy(mapmatrix) result cfp.getTimeMemoryStr(aSolution.exist_base, checkmapmatrix, checkword) print(result[msg], 执行结果 {}.format(result[result]))# 运行结果 函数 exist_base 的运行时间为 24.00 ms内存使用量为 684.00 KB 执行结果 True2) 改进版一【字典检测原始矩阵状态回溯】 使用字典进行字符集检测符合要求的才开始回溯回溯中使用原始矩阵保存检测状态 页面功能测试性能卓越超越95% import CheckFuncPerf as cfpclass Solution:def exist_ext1(self, board, word):def preCheck():preDict {}for chr in word:if chr in preDict:preDict[chr] 1else:preDict[chr] 1for arow in board:for achr in arow:if achr in preDict and preDict[achr] 0:preDict[achr] - 1for aval in preDict.values():if aval 0:return Falsereturn Truedef dfs_backtrack(irow, icol, icheckpos):if icheckpos imaxlen:return Trueif 0 irow imaxrow and 0 icol imaxcol and board[irow][icol] word[icheckpos]:board[irow][icol] for inextrow, inextcol in (irow, icol 1), (irow, icol - 1), \(irow 1, icol), (irow - 1, icol):if dfs_backtrack(inextrow, inextcol, icheckpos 1):return Trueboard[irow][icol] word[icheckpos]return Falseif preCheck() False:return Falseimaxrow, imaxcol, imaxlen len(board), len(board[0]), len(word)for irow in range(imaxrow):for icol in range(imaxcol):if board[irow][icol] word[0] and dfs_backtrack(irow, icol, 0):return Truereturn FalseaSolution Solution() checkmapmatrix copy.deepcopy(mapmatrix) result cfp.getTimeMemoryStr(aSolution.exist_ext1, checkmapmatrix, checkword) print(result[msg], 执行结果 {}.format(result[result]))# 运行结果 函数 exist_ext1 的运行时间为 25.01 ms内存使用量为 644.00 KB 执行结果 True3) 改进版二【矩阵状态回溯】 使用多维列表结构保存检测路径状态实现回溯 页面功能测试性能良好超过88% import CheckFuncPerf as cfpclass Solution:def exist_ext2(self, board, word):imaxrow, imaxcol, imaxlen len(board), len(board[0]), len(word)path [] * imaxlenmap_check [[False] * imaxcol for x in range(imaxrow)]def dfs_backtrack(icheckpos, irow, icol, imaxrow, imaxcol, board, word, checkmatrix):if irow 0 or irow imaxrow or icol 0 or icol imaxcol:return Falseif checkmatrix[irow][icol]:return Falseif board[irow][icol] ! word[icheckpos]:return Falseif icheckpos imaxlen - 1:return Truepath[icheckpos] word[icheckpos]checkmatrix[irow][icol] Trueif dfs_backtrack(icheckpos 1, irow - 1, icol, imaxrow, imaxcol, board, word, checkmatrix) or \dfs_backtrack(icheckpos 1, irow 1, icol, imaxrow, imaxcol, board, word, checkmatrix) or \dfs_backtrack(icheckpos 1, irow, icol - 1, imaxrow, imaxcol, board, word, checkmatrix) or \dfs_backtrack(icheckpos 1, irow, icol 1, imaxrow, imaxcol, board, word, checkmatrix):return Truecheckmatrix[irow][icol] Falsepath[icheckpos] return Falsefor irow in range(imaxrow):for icol in range(imaxcol):if dfs_backtrack(0, irow, icol, imaxrow, imaxcol, board, word, map_check):return Truereturn FalseaSolution Solution() checkmapmatrix copy.deepcopy(mapmatrix) result cfp.getTimeMemoryStr(aSolution.exist_ext2, checkmapmatrix, checkword) print(result[msg], 执行结果 {}.format(result[result]))# 运行结果 函数 exist_ext2 的运行时间为 43.01 ms内存使用量为 384.00 KB 执行结果 True4. 最优算法 根据本地日志分析最优算法为第1种方式【原始矩阵状态回溯】exist_base 本题测试数据似乎能推出以下结论 字典过滤检测性能消耗极小额外的数据存储带来额外的性能消耗在检测集合和字符串多样化的情况下第二种算法其实是会表现更好 import random, copy imaxrow, imaxcol, checkword 500, 300, mapmatrix[[ for x in range(imaxcol)] for y in range(imaxrow)] words list(abcdefghijklmnopqrstuvwxyz) for irow in range(imaxrow):for icol in range(imaxcol):mapmatrix[irow][icol] random.choice(words) for iIdx in range(1, min(imaxrow, imaxcol)):checkword mapmatrix[imaxrow-iIdx][imaxcol-iIdx] mapmatrix[imaxrow-iIdx][imaxcol-iIdx-1] aSolution Solution() checkmapmatrix copy.deepcopy(mapmatrix) result cfp.getTimeMemoryStr(aSolution.exist_base, checkmapmatrix, checkword) print(result[msg], 执行结果 {}.format(result[result])) checkmapmatrix copy.deepcopy(mapmatrix) result cfp.getTimeMemoryStr(aSolution.exist_ext1, checkmapmatrix, checkword) print(result[msg], 执行结果 {}.format(result[result])) checkmapmatrix copy.deepcopy(mapmatrix) result cfp.getTimeMemoryStr(aSolution.exist_ext2, checkmapmatrix, checkword) print(result[msg], 执行结果 {}.format(result[result]))# 算法本地速度实测比较 函数 exist_base 的运行时间为 24.00 ms内存使用量为 684.00 KB 执行结果 True 函数 exist_ext1 的运行时间为 25.01 ms内存使用量为 644.00 KB 执行结果 True 函数 exist_ext2 的运行时间为 43.01 ms内存使用量为 384.00 KB 执行结果 True5. 相关资源 本文代码已上传到CSDN地址Python算法题源代码_LeetCode(力扣)_单词搜索 一日练一日功一日不练十日空 may the odds be ever in your favor ~
http://www.pierceye.com/news/109676/

相关文章:

  • 个人网站备案名称填写货运网站建设公司
  • 有网页源码 怎么做网站外链发布软件
  • 医疗网站建设基本流程wordpress速度加快
  • 网站建设优化开发公司哪家好泰州东方医院男科
  • 怎么自己做歌曲网站大连网站制作公司费用多少
  • 网站专题设计稿用vue做商城网站常用的js
  • 怎么在免费空间里面做网站深圳英文站seo
  • 学风建设网站版块如何用visual studio做网站
  • 山东响应式网站设置字体颜色的网站
  • 美容院网站建设西安有关做网站的公司有哪些
  • 湛江做网站设计公司网络推广网站培训班
  • 大型网站建立萝岗微信网站建设
  • 门户网站建设发展趋势官网网站怎么创建
  • 企业网站如何做自然搜索phpcms 网站转移
  • 站内优化怎么做建设设计网站
  • 如何建设机器人教育网站上海有名的网络公司
  • 网站二级目录做网站淄博网站建设 很乱
  • 常州做网站企业海口网站开发建设
  • 做php网站用什么软件开发wordpress页面图片轮播图
  • 做网站页面大小多大8上的信息课做网站作业
  • 自己做微网站创欧科技 网站建设
  • 网站设计师大学学什么专业北京燕华工程建设有限公司网站
  • 广州专业网站建设企业wordpress 数据库修改
  • 淮南装饰公司网站建设seo 网站树
  • 设计素材下载网站网络营销课程设计报告
  • 安庆公司做网站搜索引擎收录提交入口
  • 城固网站建设wordpress主题谁的最好
  • 国外建站企业北京鑫创网站建设
  • 网站做视频wordpress插件手动升级
  • wordpress收不到网站没有收款接口网站怎么做收款