博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据结构与算法(1)基本概念
阅读量:4036 次
发布时间:2019-05-24

本文共 1484 字,大约阅读时间需要 4 分钟。

这是我架构师系列第一篇文章,也是我的开山之作吧,所以在今后的文章中,我觉得还是要以通俗的比较容易理解的话来阐述问题。想要后续系列的文章,关注我,我会持续发布(希望你不是那个只收藏不看的人)。

废话不多说,如果我们想要学好数据结构与算法,首先脑海中要时刻记住两个关键词汇,时间效率和空间效率。这个两个词汇贯穿了整个架构师知识体系。那什么是时间效率和空间效率呢?通俗的理解就是:我们使用两个不同的程序去解决同一个问题,时间短的说明时间效率高,消耗空间小的说明空间效率高。现在回到我们的数据结构题目上。

我们在研究数据结构与算法的时候,其实就是在使用不同的数据结构和不同的算法去优化计算机的时间效率和空间效率。那么有什么数据机构还有算法有这么好的性能呢?先对这些数据结构分个类。

一、数据结构的分类

从上图可以看到,整个数据结构与算法研究的知识体系也就这么多。还记得刚刚提到的时间效率与空间效率嘛?逻辑结构与存储结构都是为其服务的。而数据的运算是时间效率和空间效率的表现形式。

二、数据结构的分析

数据之间的相互关系称之为逻辑结构。比如集合、线性结构(一对一)、树形结构(一对多)、图形结构(多对多)。

数据在计算机中的存储形式称之为存储结构。

    1、顺序存储:他是用数据元素在存储器中的相对位置来表示数据元素之间的逻辑关系

    2、链式存储:在每一个数据元素中增加一个存放地址的指针,用指针表示元素之间的逻辑关系。

三、时间复杂度与空间复杂度

在文章一开始就描述了时间效率和空间效率,那么他们两个该怎么使用数据去量化呢?或者说是我们该怎么去衡量时间效率和空间效率呢?这就用到了时间复杂度和空间复杂度。

1、首先看时间复杂度:

想要了解时间复杂度,就需要先了解时间频度。一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。一个算法中的语句执行次数称为语句频度或时间频度。记为T(n)。

接下来就引入了时间复杂度的概念。看一下比较官方的定义吧:一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,用T(n)表示,若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f(n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数。记作T(n)=O(f(n)),称O(f(n)) 为算法的渐进时间复杂度,简称时间复杂度。是不是比较难以理解,说白了时间复杂度就是描述时间的规模,比如说时间频度是T(n),时间复杂度就是O(n)。时间频度是T(n+n)的时候,时间复杂度还是O(n)。也就是他的时间规模就是n这个层次了。

常见的算法的时间 复杂度之间的关系为:

O(1)<O(logn)<O(n)<O(nlog n)<O(n2)<O(2n)<O(n!)<O(nn)

举个例子吧:

 a=0;                         //(1)     for(i=1;i<=n;i++)          //(2)        for(j=1;j<=n;j++)       //(3)         a++;                  //(4)

语句(1)执行1次,

语句(2)执行n次

语句(3)执行n2次

语句(4)执行n2次

T(n) = 1+n+2n2= O(n2)

2、空间复杂度

空间复杂度就比较容易理解了,空间复杂度是对一个算法在运行过程中临时占用存储空间大小的一个量度,同样反映的是一个空间规模,我们用 S(n) 来定义。

空间复杂度比较常用的有:O(1)、O(n)、O(n²),

转载地址:http://tobdi.baihongyu.com/

你可能感兴趣的文章
使用轻量级工具emoji-java处理emoji表情字符
查看>>
排序算法的C语言实现C代码
查看>>
c语言快排函数调用方法模板
查看>>
c语言实现多行输入输出数据
查看>>
查找算法
查看>>
C语言单链表实现
查看>>
SQL基本命令集合整理
查看>>
QT中json的生成和解析
查看>>
std::function 和 std::bind 的简单例子
查看>>
CFormView简介
查看>>
Visual Studio 2010 与 VC++ 6.0 的操作差异(一)之对话框中添加OnInitDialog()函数
查看>>
VC的MFC里面控件的ID使用ID_XXXXX和IDR_XXXXX的区别
查看>>
VC++ 获取ListControl选中行
查看>>
用VC++实现应用程序窗口的任意分割(2)
查看>>
“class”类型重定义,include(头文件)重复加载 QT /c++
查看>>
MFC框架类、文档类、视图类相互访问的方法
查看>>
<转>文档视图指针互获
查看>>
C++中头文件相互包含的几点问题
查看>>
内存设备描述表
查看>>
Latex插入eps图片的方法
查看>>