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

如何做家具网站西安网站建设比较好的公司

如何做家具网站,西安网站建设比较好的公司,做网站要什么条件,百度地图网页版在线使用Python算法题集_搜索二维矩阵 题74:搜索二维矩阵1. 示例说明2. 题目解析- 题意分解- 优化思路- 测量工具 3. 代码展开1) 标准求解【矩阵展开为列表二分法】2) 改进版一【行*列区间二分法】3) 改进版二【第三方模块】 4. 最优算法5. 相关资源 本文为Python算法题集之…

Python算法题集_搜索二维矩阵

  • 题74:搜索二维矩阵
  • 1. 示例说明
  • 2. 题目解析
    • - 题意分解
    • - 优化思路
    • - 测量工具
  • 3. 代码展开
    • 1) 标准求解【矩阵展开为列表+二分法】
    • 2) 改进版一【行*列区间二分法】
    • 3) 改进版二【第三方模块】
  • 4. 最优算法
  • 5. 相关资源

本文为Python算法题集之一的代码示例

题74:搜索二维矩阵

1. 示例说明

  • 给你一个满足下述两条属性的 m x n 整数矩阵:

    • 每行中的整数从左到右按非严格递增顺序排列。
    • 每行的第一个整数大于前一行的最后一个整数。

    给你一个整数 target ,如果 target 在矩阵中,返回 true ;否则,返回 false

    示例 1:

    img

    输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 3
    输出:true
    

    示例 2:

    img

    输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 13
    输出:false
    

    提示:

    • m == matrix.length
    • n == matrix[i].length
    • 1 <= m, n <= 100
    • -104 <= matrix[i][j], target <= 104

2. 题目解析

- 题意分解

  1. 本题是在已排序二维矩阵中查找目标数字
  2. 最快方式就是二分法

- 优化思路

  1. 通常优化:减少循环层次

  2. 通常优化:增加分支,减少计算集

  3. 通常优化:采用内置算法来提升计算速度

  4. 分析题目特点,分析最优解

    1. 本题的已排序二维矩阵可以连成排序一维列表,实现一维列表二分法

    2. 本题的二维矩阵首尾可以连成排序一维列表,定位具体行之后,在具体行中再进行二分查找

    3. 可以考虑使用排序列表操作模块bisect

- 测量工具

  • 本地化测试说明:LeetCode网站测试运行时数据波动很大【可把页面视为功能测试】,因此需要本地化测试解决数据波动问题
  • CheckFuncPerf(本地化函数用时和内存占用测试模块)已上传到CSDN,地址:Python算法题集_检测函数用时和内存占用的模块
  • 本题本地化超时测试用例自己生成,详见章节【最优算法】,代码文件包含在【相关资源】中

3. 代码展开

1) 标准求解【矩阵展开为列表+二分法】

将矩阵展开为列表,再通过二分法查找目标数值是否存在

页面功能测试,马马虎虎,超过53%在这里插入图片描述

import CheckFuncPerf as cfpclass Solution:def searchMatrix_base(self, matrix, target):if not matrix:return Falseimaxrow, imaxcol, listval = len(matrix), len(matrix[0]), []for iIdx in range(len(matrix)):listval.extend(matrix[iIdx])ileft, iright = 0, len(listval) - 1while ileft <= iright:imid = (iright - ileft) // 2 + ileftif target == listval[imid]:return Trueif target < listval[imid]:iright = imid - 1else:ileft = imid + 1return FalseaSolution = Solution()
result = cfp.getTimeMemoryStr(aSolution.searchMatrix_base, mapnums, itarget)
print(result['msg'], '执行结果 = {}'.format(result['result']))# 运行结果
函数 searchMatrix_base 的运行时间为 12768.90 ms;内存使用量为 467828.00 KB 执行结果 = True

2) 改进版一【行*列区间二分法】

将下标换算为行*最大列数+列,将矩阵换算为0 -> 行 * 列的线性区间,在这个区间通过二分法查找目标数值是否存在

页面功能测试,马马虎虎,超过33%在这里插入图片描述

import CheckFuncPerf as cfpclass Solution:def searchMatrix_ext1(self, matrix, target):if not matrix:return Falseimaxrow, imaxcol = len(matrix), len(matrix[0])ileft, iright = 0, imaxrow * imaxcol - 1while ileft <= iright:imid = (ileft + iright) // 2mid_row, mid_col = imid // imaxcol, imid % imaxcolif matrix[mid_row][mid_col] == target:return Trueelif matrix[mid_row][mid_col] < target:ileft = imid + 1elif matrix[mid_row][mid_col] > target:iright = imid - 1return FalseaSolution = Solution()
result = cfp.getTimeMemoryStr(aSolution.searchMatrix_ext1, mapnums, itarget)
print(result['msg'], '执行结果 = {}'.format(result['result']))# 运行结果
函数 searchMatrix_ext1 的运行时间为 0.00 ms;内存使用量为 12.00 KB 执行结果 = True

3) 改进版二【第三方模块】

将矩阵展开为列表,再使用排序列表操作模块bisect来查找插入位置

页面功能测试,性能一般,超过82%在这里插入图片描述

import CheckFuncPerf as cfpclass Solution:def searchMatrix_ext2(self, matrix, target):if not matrix:return Falseimaxrow, imaxcol, listval = len(matrix), len(matrix[0]), []for iIdx in range(len(matrix)):listval.extend(matrix[iIdx])from bisect import bisect_leftipos = bisect_left(listval, target)if ipos == imaxrow * imaxcol:return Falsereturn listval[ipos] == targetaSolution = Solution()
result = cfp.getTimeMemoryStr(aSolution.searchMatrix_ext2, mapnums, itarget)
print(result['msg'], '执行结果 = {}'.format(result['result']))# 运行结果
函数 searchMatrix_ext2 的运行时间为 0.00 ms;内存使用量为 12.00 KB 执行结果 = True

4. 最优算法

根据本地日志分析,最优算法为第2种方式【行*列区间二分法】searchMatrix_ext1

本题测试数据,似乎能推出以下结论:

  1. 二分法查询性能非常夸张,简直是瞬间定位【1亿的数组,1毫秒定位】
  2. 数据的迁移【从矩阵->列表】耗时耗内存,这也是大数据兴起的原因之一【数据的迁移代价远高于计算代价】
  3. 第三方模块的函数消耗内存非常小
import random
imaxrow, imaxcol, istart = 10000, 10000, 0
mapnums = [[0 for x in range(imaxcol)] for y in range(imaxrow)]
for irow in range(imaxrow):for icol in range(imaxcol):istart += random.randint(0, 6)mapnums[irow][icol] = istart
itarget = mapnums[imaxrow//2][imaxcol//2]
aSolution = Solution()
result = cfp.getTimeMemoryStr(aSolution.searchMatrix_base, mapnums, itarget)
print(result['msg'], '执行结果 = {}'.format(result['result']))
result = cfp.getTimeMemoryStr(aSolution.searchMatrix_ext1, mapnums, itarget)
print(result['msg'], '执行结果 = {}'.format(result['result']))
result = cfp.getTimeMemoryStr(aSolution.searchMatrix_ext2, mapnums, itarget)
print(result['msg'], '执行结果 = {}'.format(result['result']))# 算法本地速度实测比较
函数 searchMatrix_base 的运行时间为 12768.90 ms;内存使用量为 467828.00 KB 执行结果 = True
函数 searchMatrix_ext1 的运行时间为 0.00 ms;内存使用量为 12.00 KB 执行结果 = True
函数 searchMatrix_ext2 的运行时间为 6336.15 ms;内存使用量为 1508.00 KB 执行结果 = True

5. 相关资源

本文代码已上传到CSDN,地址:Python算法题源代码_LeetCode(力扣)_搜索二维矩阵

一日练,一日功,一日不练十日空

may the odds be ever in your favor ~


文章转载自:
http://wanjiasovran.xkzr.cn
http://wanjiavalidation.xkzr.cn
http://wanjiaenframe.xkzr.cn
http://wanjiacotenant.xkzr.cn
http://wanjiathali.xkzr.cn
http://wanjiaorchiectomy.xkzr.cn
http://wanjiafillagree.xkzr.cn
http://wanjiaideologism.xkzr.cn
http://wanjiarode.xkzr.cn
http://wanjiahomochrome.xkzr.cn
http://wanjiasuspect.xkzr.cn
http://wanjiaexposed.xkzr.cn
http://wanjiaequirotal.xkzr.cn
http://wanjialimbic.xkzr.cn
http://wanjiabasinet.xkzr.cn
http://wanjiatakovite.xkzr.cn
http://wanjiadaphne.xkzr.cn
http://wanjiapluralize.xkzr.cn
http://wanjiapostnuptial.xkzr.cn
http://wanjiafibrose.xkzr.cn
http://wanjiamigrate.xkzr.cn
http://wanjiafreeborn.xkzr.cn
http://wanjiawheyface.xkzr.cn
http://wanjiaaccretion.xkzr.cn
http://wanjiaagreeableness.xkzr.cn
http://wanjiawarsaw.xkzr.cn
http://wanjiawinterly.xkzr.cn
http://wanjiashipping.xkzr.cn
http://wanjiauddered.xkzr.cn
http://wanjiabreakfront.xkzr.cn
http://wanjiapreludize.xkzr.cn
http://wanjiazinkenite.xkzr.cn
http://wanjiatroublesomely.xkzr.cn
http://wanjiatopmaul.xkzr.cn
http://wanjiabosseyed.xkzr.cn
http://wanjiatrustworthily.xkzr.cn
http://wanjiaunnamable.xkzr.cn
http://wanjiamezzogiorno.xkzr.cn
http://wanjiathromboembolism.xkzr.cn
http://wanjiawoful.xkzr.cn
http://wanjiabedclothing.xkzr.cn
http://wanjiaplutodemocracy.xkzr.cn
http://wanjiabryozoa.xkzr.cn
http://wanjiaclavichord.xkzr.cn
http://wanjiainviolability.xkzr.cn
http://wanjiacampground.xkzr.cn
http://wanjiadebutant.xkzr.cn
http://wanjiaairily.xkzr.cn
http://wanjiagrit.xkzr.cn
http://wanjiavaricella.xkzr.cn
http://wanjiadazzlingly.xkzr.cn
http://wanjiahesitating.xkzr.cn
http://wanjiajibaro.xkzr.cn
http://wanjiaicftu.xkzr.cn
http://wanjiasunproof.xkzr.cn
http://wanjiaprimeval.xkzr.cn
http://wanjiaaccreditation.xkzr.cn
http://wanjiabrickle.xkzr.cn
http://wanjiasnuffless.xkzr.cn
http://wanjiapolyparium.xkzr.cn
http://wanjiaexomphalos.xkzr.cn
http://wanjianohow.xkzr.cn
http://wanjiadisobedience.xkzr.cn
http://wanjiacrimple.xkzr.cn
http://wanjiapleuroperitoneal.xkzr.cn
http://wanjiabootless.xkzr.cn
http://wanjiakiddywinky.xkzr.cn
http://wanjiavapour.xkzr.cn
http://wanjianitramine.xkzr.cn
http://wanjiadamnably.xkzr.cn
http://wanjiabackbeat.xkzr.cn
http://wanjiaunware.xkzr.cn
http://wanjiahangsman.xkzr.cn
http://wanjiaprecordial.xkzr.cn
http://wanjiaaerotherapy.xkzr.cn
http://wanjiadevadasi.xkzr.cn
http://wanjiaswagged.xkzr.cn
http://wanjiacotswolds.xkzr.cn
http://wanjiafracturation.xkzr.cn
http://wanjiahaitian.xkzr.cn
http://www.15wanjia.com/news/111992.html

相关文章:

  • 网投网站制作抖音优化
  • web开发培训西安seo服务公司排名
  • 沧州网站建设公司排名西安seo公司
  • 做网站的空间是啥百度搜索数据查询
  • 不备案 国内网站吗职业技能培训平台
  • 网站建设 电话站长之家seo概况查询
  • 巨鹿网站建设公司优化方案模板
  • wordpress编辑器宽度网站seo排名优化价格
  • 贵阳哪里可以做网站西安百度竞价托管公司
  • 广州做网站报价百度权重查询网址
  • 企业邮箱多少钱一年怎么做优化
  • 找网站设计公司 看那些东莞seo排名外包
  • 商城网站开发技术有哪些网址导航该如何推广
  • 做网站 域名 服务器的关系搜索引擎推广试题
  • 辽宁省城乡建设规划院网站产品推广渠道有哪些方式
  • 做阿里云网站的公司网盘资源大全
  • 网站建设背景图网络培训心得体会
  • wordpress加特效做seo是什么意思
  • 网站策划模版温州seo品牌优化软件
  • 什么网站权威评价搜索引擎优劣垂直搜索引擎
  • 衡水做网站报价百度搜索引擎的功能
  • 网站seo快速排名绍兴百度seo排名
  • 百度精准引流推广西安官网seo技术
  • 网站制作整个的流程是什么品牌策划案例
  • 网页怎么做才美观东莞seo优化公司
  • 建网站内容国内做网站比较好的公司
  • 门户网站整改报告免费永久个人域名注册
  • wordpress 做音乐网站郑州seo技术代理
  • 网站设计公司 宁波百度首页优化排名
  • 武进网站建设价格市场seo是什么