时间复杂度和空间复杂度[数据结构]

參考:本文为小甲鱼教学视频的学习笔记。

 

1、为什么要学习时间复杂度和空间复杂度?你说一个算法好另外一个算法不好,有什么推断根据?哪个算法效率高?怎么推断?那么就要学习时间和空间复杂度了。

思考:学习每个知识之前都应该要考虑一下为什么要学习,学了有什么用处,什么场景下去用。


2、算法的效率高通常是指算法的运行时间,度量一个算法的运行时间有2种方式:

  • 事后统计法:须要编写測试程序。万一不好花费大量的时间精力,赔了娘子又折兵(而且測试环境不同区别不是一般的大)
  • 事前统计法:程序编写前,使用统计方法对算法进行估算

思考:百度搜索事前避孕药和事后避孕药,会有更深刻的理解


3、一个高级语言编写的程序在计算机上执行时所消耗的时间取决于下列因素:

  • 算法採用的策略,方案(方法思路)
  • 编译产生的代码质量(编译器的优劣,编译语言的优劣)
  • 问题的输入规模(输入量的多少,须要一个循环)
  • 机器运行指令的速度(硬件环境)

4、我们研究算法的复杂度,側重的是研究算法随着输入规模扩大增长量的一个抽象。而不是精确地定位须要运行多少次。

由于假设这种话,我们就又不得不考虑编译器优化的问题。然后就没然后了。

思考:由于外部因素的影响非常大。非常难精确定位运行次数。那就对增长量抽象出来进行对照未尝不是一个好的方案。


5、怎样对增长量进行抽象:忽略程序所用的语言、忽略程序跑在什么样的机器上、不计哪些循环索引的增长和循环终止条件、变量声明、打印结果。

我们仅仅关心它所实现的算法。

思考:分析程序的执行时间,最重要的是把程序看成独立于编程语言的算法或者一系列的步骤。


6、我们在分析一个算法的执行时间时:重要的是把基本操作的数量和输入模式关联起来。


思考:分析随着输入量的添加。操作数量的增长情况用以推断算法效率高低。


7、函数的渐进增长:对于给定的两个函数f(n)和g(n),假设存在一个整数N,使得对于全部的n>Nf(n)总是比g(n)大,那么。我们说f(n)的增长渐进快于g(n)。与最高次项线程的常熟并不重要,也能够忽略。常数也能够忽略。推断一个算法的好不好。仅仅通过少量的数据是不能够推断的。以免以偏概全。

思考:推断算法效率是,函数中的常熟和其它次要项经常能够忽略,而更应该关注主项(也就是最高项)的阶数

转载于:https://www.cnblogs.com/bhlsheji/p/5370631.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/357373.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

js编码解码decodeURI()与decodeURIComponent()的区别

区别: encodeURIComponent()对/?:&$,#进行编码,encodeURI()不会 如果url的query和path传参中含有这些字符会被不正确的截断,拿到的参数会是错误的,一般都会用encodeURIComponent()进行编码、decodeURIComponent进行解码 en…

gitlab将分支代码合并到master上

1、首先在test分支上进行git add .git commit -m "test"git push 2、切换到master上git checkout mastergit merge test git push

堆栈跟踪 堆栈跟踪_过滤日志中无关的堆栈跟踪行

堆栈跟踪 堆栈跟踪我喜欢堆栈痕迹。 不是因为我喜欢错误,而是因为发生错误的那一刻,堆栈跟踪是无价的信息源。 例如,在Web应用程序中,堆栈跟踪向您显示完整的请求处理路径,从HTTP套接字到过滤器,Servlet&am…

js检测数组对象中是否有重复值

判断数组对象里的某个值是否都是同一个值 isRepeat(arr)> {var hash {};for(let i0;i<arr.length;i){if (!hash[arr[i].externalUserId]) {hash[arr[i].externalUserId] true;}}if(Object.keys(hash).length<arr.length){return true}else{return false}}isRepeat(a…

关于phpcmsv9更新缓存出现链接被重置的问题

今天安装phpcmsv9后更新缓存出现链接被重置的错误&#xff0c;。。找了半天原因。。。原来是apache配置里面的keepAlive显示的是off,,应该将其改为on...然后重新启动apache.... 转载于:https://www.cnblogs.com/yxwkf/p/5373718.html

VUE使用vue-seamless-scroll自动滚动表格数据,对表格数据排序无效的解决办法

使用vue-seamless-scroll循环表格数据&#xff0c;建议使用v-for,ul li 的形式便于操作属性&#xff0c;elemengt ui table可能不好处理兼容性问题及属性设置&#xff0c;尤其是一个页面添加多个表格及效果。 VUE : 排序 this.$refs.seamlessScroll.reset() 效果图

前端常见的加密算法介绍

一、前言 在信息安全越来越受重视的今天&#xff0c;前端的各种加密也变得更加重要。通常跟服务器的交互中&#xff0c;为保障数据传输的安全性&#xff0c;避免被人抓包篡改数据&#xff0c;除了 https 的应用&#xff0c;还需要对传输数据进行加解密。 目前常见的加密算法可…

一时冲动:“通往瓦尔哈拉之路的冒险”

通过所有有关Java 9和Project Jigsaw的讨论&#xff0c;我们不应忽视Java的另一重大变化。 希望在第10版或第11版中&#xff0c; Valhalla项目能够实现并介绍价值类型和专业化。 那么这是怎么回事&#xff0c;项目进展如何&#xff0c;面临什么挑战&#xff1f; 几天前&#x…

小程序分包

一、小程序分包 微信文档写的够清楚了 使用分包 | 微信开放文档 &#xff08;1&#xff09;常规分包注意点&#xff1a; 每个分包只能引用主包和自己的资源 &#xff08;2) 独立分包注意点&#xff1a;特别麻烦 懒得用了吧 独立分包中不能依赖主包和其他分包中的内容 …

git提交代码到自己的分支,并合并到主分支的完整流程。

我在分支sml ,主分支master git status git add . git commit -m"xxx" git pull origin master git push git checkout master git pull origin master git merge sml git push

解决Sublime Text3莫名的中文乱码问题

有好几回用Sublime Text3写着中英混杂的文字的时候&#xff0c;会突然就弹出警告说什么编码不行&#xff0c;然后点击确定后&#xff0c;原来的中文全都乱码了&#xff1a; 然后即使按ctrlz撤回也没用&#xff0c;重新打开也没用&#xff0c;用记事本的转换ansi、unicode等方式…

try catch finally的用法

1、不使用try...catch出现异常后&#xff0c;后面的代码都不会运行了 login() {console.log(b);console.log(hhhhhhhh);}, 2、使用了try...catch出现异常后&#xff0c;try...catch后的代码还会继续运行 login() {try{console.log(b);}catch (e){console.log(e);}console.log…

网站优化第一次网页加载的速度的办法与思路。

网站重新开发了一次&#xff0c;第一次部署到测试网络&#xff0c;访问速度很慢&#xff0c;差不多第一次加载得需要40秒&#xff0c;太慢了&#xff0c;这里简单总结一下。 当然&#xff0c;还有一些无用的.MAP文件都可以删除&#xff0c;图片可以在线压缩一下&#xff0c;代码…

java8 日期api_我们多么想要新的Java日期/时间API?

java8 日期api当前的Java.net 民意测验问题是&#xff1a;“ 对于用Java 8实现的JSR-310&#xff08;新的日期和时间API&#xff09;有多重要&#xff1f; ”在我撰写本文时&#xff0c;将近150位受访者投了赞成票&#xff0c;绝大多数人回答“非常”&#xff08;53&#xff05…

HTML5火焰文字特效DEMO演示---转载

只有google支持 <!DOCTYPE html> <html> <head> <meta charset"UTF-8"> <title>HTML5火焰文字特效DEMO演示 - 何问起</title> <style> html, body { margin: 0px; width: 100%; height: 100%; overflow: hidden; backgrou…

是否打印日志

以下是思路&#xff0c;可以在代码自行判断在什么端什么环境是否打印日志。 使用npm的插件也能实现相同功能。 微信小程序提供了console向调试面板中打印日志。console 是一个全局对象&#xff0c;可以直接访问。在微信客户端中&#xff0c;向 vConsole 中输出日志。提供了以下…

我的Serverless实战——大前端趋势之Serverless从入门到天黑

导读&#xff1a;大厂都在做Serverless&#xff0c;他到底是什么东东呢&#xff1f;可能很多人都没有听说过&#xff0c;听说这个是大前端的一个趋势&#xff0c;最近两年比较火&#xff0c;如果你还没有听说过&#xff0c;那你就需要注意啦。今天孙叫兽带大家了解一下Serverle…

DP~数塔(hrbustoj1004)

Dp 我的理解就是用不知道去推解不知道 能得到知道 &#xff08;倒着推&#xff09; #include<cstdio> #include<cstring> #include<iostream> using namespace std; const int MAXN105; int tower[MAXN][MAXN]; int max(int x,int y) {return x>y?x:y; }…

element ui upload上传文件成功后,清除默认的列表。

问题描述&#xff1a;每次提交之后&#xff0c;这个上传按钮会有默认的列表&#xff0c;其实刷新这个默认列表就没了。 清除标记位置的办法&#xff1a; 清除列表&#xff1a;&#xff08;上传成功后&#xff0c;清空列表&#xff09; 效果图&#xff1a;

处理网络请求qs、图片转base64的优劣

一、引入qs这个库&#xff0c;更好的处理网络请求传参。 qs.parse let url http://item.taobao.com/item.htm?a1&b2&c&dxxx&e; let data qs.parse(url.split(?)[1]);// data的结果是 {a: 1, b: 2, c: , d: xxx, e: }qs.stringify 二、图片文件转为base6…