a*算法的时间复杂度_数据结构(1)——算法和时间复杂度

Data Structure

d574717e58077afffb80c037230b049b.png

1

9cac8216f1c570d3938b2aae7bbb1f09.png

算法和时间复杂度

88f7e668-b62c-eb11-8da9-e4434bdf6706.svg

01.什么是数据结构?

程序设计 = 数据结构 + 算法

数据结构是关系,是数据元素相互之间存在的一种或多种特定关系的集合。

数据结构和算法凌驾于任何一种编程语言之上。

88f7e668-b62c-eb11-8da9-e4434bdf6706.svg

02.逻辑结构和物理结构

数据结构分为逻辑结构物理结构

逻辑结构是指数据对象中数据元素之间的逻辑关系,也是今后需要关注和讨论的问题。

四大逻辑结构:

集合——数据元素除了同属于一个集合之外,没有其他关系。

线性——数据元素具有一对一的关系。

树形——数据元素之间存在一对多的层次关系。

图形——数据元素之间存在多对多的关系。

物理结构一般指数据元素在计算机中的存储方法。

数据元素的存储结构形式有两种:顺序存储链式存储

顺序存储:把数据元素放在地址连续的存储单元中,其数据间的逻辑关系和物理关系是一致的,例如数组结构。

链式结构:把数据元素放在任意的存储单元里,这组存储单元可以是连续的,也可以是不连续的。此时存储关系不能反映逻辑关系,因此需要用指针存放数据元素的地址。

88f7e668-b62c-eb11-8da9-e4434bdf6706.svg

03.算法

算法:解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或者多个操作。

算法的五个基本特征:输入、输出、有穷性、确定性、可行性

算法效率的度量方法:

  1. 算法采用的策略、方案

  2. 编译产生的代码质量

  3. 问题的输入规模

  4. 机器执行指令的速度

88f7e668-b62c-eb11-8da9-e4434bdf6706.svg

04.算法的时间复杂度

定义:在进行算法分析的时候,语句总的执行次数T(n)是关于问题规模 n 的函数,进而分析T(n)随 n 的变化情况并确定T(n)的数量级。

算法的时间复杂度,也就是算法的时间度量,记作:

T(n)=  O(f(n))

它表示随问题规模n的增长,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐近时间复杂度,简称为时间复杂度。其中f(n)表示问题规模 n 的某个函数。

一般情况下,随着输入规模 n 的增大,T(n)增长最慢的是最优算法。

大O记法:用O( )来体现算法时间复杂度的记法。

推导大O阶的算法

  1. 用常数1取代运行时间中的所有加法常数。

  2. 在修改后的运行次数函数中,只保留最高阶项。

  3. 如果最高阶项存在且不为1,则去除这个项的系数。

线性阶——一般含有非嵌套循环。线性阶就是随着问题规模 n 的扩大,对应计算次数呈直线增长。

平方阶——嵌套循环,包括不严格的嵌套循环。循环的时间复杂度等于循环体的复杂度乘以该循环运行的次数。

对数阶——需要应用数列知识。

常用的时间复杂度所耗的时间从小到大依次是:

O(1)< O(logn)< O(n)< O(nlogn)< O(n^2)< O(n^3)< O(2^n)< O(n!)< O(n^n)

最坏情况:查找一个有n个随机数字数组中的某个数字,最好的情况是第一个数字就是,那么算法的时间复杂度是O(1);但也有可能这个数字在最后位置,此时的时间复杂度是O(n)。

平均运行时间——期望运行的时间。

88f7e668-b62c-eb11-8da9-e4434bdf6706.svg

05.算法的空间复杂度

算法的空间复杂度通过计算算法所需的存储空间实现。

算法空间复杂度的计算公式记作:

S(n)= O(f(n))

其中,n为问题规模,f(n)为语句关于n所占存储空间的函数。

通常,我们都是用 “ 时间复杂度 ” 来指运行的时间需求,用 “ 空间复杂度 ” 指空间需求。

关于上面的总结,如果有错误之处,或者疑问,欢迎点击下面【写留言】进行讨论。

【写留言】

8ff7e668-b62c-eb11-8da9-e4434bdf6706.svgbaa604a2e0b4583cfa3ef74670543a08.png

---扫码点关注哦---

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

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

相关文章

新开博客啦

其实决定开一个技术博客很久了&#xff0c;但一直都没找到合适的&#xff0c;博客园的背景确实不错&#xff0c;好像没有其他的广告&#xff0c;算是比较清新的一个网站了吧。 从这里开始&#xff0c;记录自己的学习心得&#xff0c;把自己的学习历程拿出来分享&#xff0c;与你…

C++的enum hack

从一个例子开始吧 class Game { private:static const int GameTurn 10;int scores[GameTurn]; };对于支持类内初始化的C编译器&#xff0c;这段代码可以编译通过。 但是较老的C编译器&#xff0c;可能不支持类内初始化&#xff0c;这样我们的静态常量&#xff0c;必须要在类外…

android vcard解析代码,Android使用vcard文件的方法简单实例

本文实例讲述了Android使用vcard文件的方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;FileOutputStream os null;try {os VCardTest.this.openFileOutput("Android.vcf", MODE_PRIVATE);} catch (FileNotFoundException e1) {// TODO Auto-generated…

学会了!如果认错人了,就像这样亲一口!

1 千万不要用曲面屏炒股▼2 谁掏钱多就听谁的准没错▼3 你和你妈的通话记录▼4 em......陷入沉思▼5 人类1994年拍摄到的冥王星人类2018年拍摄到的冥王星▼6 猫&#xff1a;你滚开&#xff01;劳资不要运动&#xff01;▼7 吃下去长肉了你来找我我给你送实验室研究研究▼…

短文件名漏洞如何修复_短文件名漏洞修复

短文件名漏洞其实在13年时还是很令人耳熟能详的&#xff0c;不过随着所在公司的编码语言转型&#xff0c;目前使用ASP.NET的新项目基本上没有了&#xff0c;而更多的是对原来的采用ASP.NET语言开发的项目进行维护或打个补丁。事出突然&#xff0c;12月的某个下午被项目组喊去帮…

在MinGW下使用DShow的方法

用MinGW编译DShow的东西&#xff0c;经常遇到没找到IBaseFilter的问题。本质上是MinGW的w32api并没有提供完整的DShow头文件所致。经过一番折腾&#xff0c;得到了下面的解决方案&#xff1a; 1. 从http://sourceforge.net/projects/mingw-w64/下载mingw-w64-headers&#xff0…

十个现象,识别程序员的“水份”

大家好&#xff0c;我是Z哥。下周五正好是国庆&#xff0c;我也给自己放个假&#xff0c;就不发文了。所以今天是节前最后一篇文章&#xff0c;先提前祝大家国庆快乐&#xff0c;可以好好放松一下。今天我们不聊干货了&#xff0c;聊点轻松的&#xff0c;来吐槽一下程序员的那些…

android 更改edittext内容,Android如何实时更改edittext的内容

为此使用TextWatcher。设置它的EditText用户类型&#xff1a;myEditText1.addTextChangedListener(new TextWatcher() {Overridepublic void afterTextChanged(Editable s) {String value s.toString();// Perform computations using this string// For example: parse the v…

python循环语句嵌套_Python 循环语句

循环语句 ​循环语句主要是用于解决某些重复的代码工作&#xff0c;使需要重复的代码只写一遍即可。 Python循环语句主要有两种&#xff1a;while循环和for...in...循环。 一、while循环 主要用于不确定循环的次数时&#xff0c;根据条件进行判断&#xff0c;条件成立&#xff…

linux部署的java应用,浏览器访问时,报域名解析错误

工作中&#xff0c;经常需要在Linux环境中部署Tomcat&#xff0c;配置java应用。在浏览器中访问应用时&#xff0c;却报域名解析错误&#xff0c;该怎么样解决呢&#xff1f; 解决方法&#xff1a;关闭防火墙 iptables -L -n    查看已添加的iptables规则 iptables -F se…

那些年,冒死拍过的老师逗逼搞笑照片 !

全世界只有3.14 % 的人关注了爆炸吧知识「你曾经拍到过老师哪个搞笑的瞬间」哈哈哈哈哈哈啊哈哈哈哈已笑疯了拍照的人最后真的都没有被打死吗_石小麦&#xff1a;这张&#xff1f;wanngsh-&#xff1a;当历史老师谈及日本女人2HyFMm&#xff1a;班主任扔实心球曹梓建&#xff1…

程序员吐槽_产品经理吐槽大会,程序员勿入

前两天网上有个程序员吐槽大会我看挺多人在转的&#xff0c;这么公开黑产品经理&#xff0c;除了娱乐效果之外&#xff0c;确实也反映了很多问题。作为一个前程序员&#xff0c;现产品经理&#xff0c;我觉得还是得说几句。首先以产品经理的角度自省&#xff0c;然后我再吐槽一…

记一次 .NET 某上市工业智造 CPU+内存+挂死 三高分析

一&#xff1a;背景 1. 讲故事上个月有位朋友加wx告知他的程序有挂死现象&#xff0c;询问如何进一步分析&#xff0c;截图如下&#xff1a;看这位朋友还是有一定的分析基础&#xff0c;可能玩的少&#xff0c;缺乏一定的分析经验&#xff0c;当我简单分析之后&#xff0c;我发…

(太棒了)程序员的十个层次 你属于哪一层?

http://developer.51cto.com/art/201011/233083.htm 转载于:https://blog.51cto.com/smasher/420147

60佳优秀的 Photoshop 网页制作教程【下篇】

Photoshop 作为网页设计利器&#xff0c;是网页设计师必备。曾经和大分享过几篇优秀的 Photoshop 网页制作教程&#xff0c;喜欢的人非常多。今天这篇文章继续向大家分享优秀的 Photoshop 网页制作教程。其实&#xff0c;网页设计并没有你想的那么难&#xff0c;相信看完这些教…

android studio 创建.9文件,自己使用Android studio创建.9(点9)图片

本来标题想写"Mac版Android studio创建.9图片"&#xff0c;但是感觉区别应该不大&#xff0c;因为只需要拖拽一下鼠标就行了&#xff0c;键盘以及快捷键都不用不上。这篇文章其实也是自己看了其他文章后的一点补充&#xff0c;并不是所有人都会有的问题。既然是想标为…

java stream 求和_谈谈Java任务的并行处理

作者&#xff1a;ksfzhaohui前言谈到并行&#xff0c;我们可能最先想到的是线程&#xff0c;多个线程一起运行&#xff0c;来提高我们系统的整体处理速度&#xff1b;为什么使用多个线程就能提高处理速度&#xff0c;因为现在计算机普遍都是多核处理器&#xff0c;我们需要充分…

华为交换机不同网段互访_华为S5700系列交换机使用高级ACL限制不同网段的用户互访...

组网图形图1使用高级ACL限制不同网段的用户互访示例组网需求如图一所示&#xff0c;某公司通过Switch实现各部门之间的互连。为方便管理网络&#xff0c;管理员为公司的研发部和市场部规划了两个网段的IP地址。同时为了隔离广播域&#xff0c;又将两个部门划分在不同VLAN之中。…

现在的男生真的太惨了

1 做男生不容易啊2 这到底是被甲方怎样虐过3 暴风螺旋般的伤口撒盐式连环补刀来源&#xff1a;知乎4 说好的雪橇三傻呢&#xff1f;5 谁都别打扰我看电视6 正弦余弦的空间展示7 这是什么原理&#xff1f;你点的每个赞&#xff0c;我都认真当成了喜欢

EF 更新大量的数据时出现重复键错误

咨询区 ChsharpNewbie&#xff1a;当我把大量的数据插入到数据库时 (PostgreSQL 12 和 Entity Framework Core)&#xff0c;我得到了如下的报错。fail: Microsoft.EntityFrameworkCore.Database.Command[20102]Failed executing DbCommand (197ms) [Parameters[p0?, p1?, p2?…