文章目录

  • 1.数据结构与算法概念
  • 2.时间复杂度
  • 3.大O计数法表示时间复杂度
  • 4.线性结构与非线性结构

1.数据结构与算法概念

(1)什么是数据结构

  • 数据结构指的是相互之间有一种或者多种特定的关系数据元素集合。
  • 数据结构可以分成逻辑结构和物理结构。
  • 逻辑结构:抽象意义上的结构,按照对象中元素的关系分类

  • 物理结构:又叫存储结构,主要有顺序存储跟链式存储

(2)什么是算法

  • 算法是被计算机使用来解决问题的方法,就对于程序而言,算法就是程序的灵魂,优秀的程序可以在面对大量数据计算时,依旧能够保持高速的计算。
  • 对于小型的程序来说,就算这个算法差劲,解决的问题步骤比较繁琐,这样不会有很大的关系。但是如果对数据量大的程序(如何从海量数据千万级别的数据中快速找到自己想要的一条数据),我们就需要对时间和空间有要有效的利用,也就是设计一个高效的算法,在同样的硬件设备的情况下,有时候会把速度提高十倍甚至上百倍。

(3)什么是程序

  • 程序 = 数据结构 + 算法
  • 数据是程序的中心。数据结构和算法两个概念间的逻辑关系贯穿了整个程序世界,首先二者表现为不可分割的关系。没有数据间的有机关系,程序根本无法设计
  • 数据结构与算法关系:数据结构是底层,算法高层。数据结构为算法提供服务。算法围绕数据结构操作

2.时间复杂度

(1)什么是时间频度

  • 一个算法所花费的时间跟算法里语句的执行次数是成正比的。
  • 算法里的语句执行次数越多,说明所耗的时间就越多。
  • 一个算法的语句执行的次数被称为时间频度T(n)

(2)案例

3.大O计数法表示时间复杂度

(1)什么是大O计数法

  • 算法的时间复杂度通常用大O符号来表示表述,定义的形式为T[n] = O(f(n)),称T(n)受限于f(n)。
  • 如果一个问题的规模是n,解这一问题的某一算法所需要的时间为T(n),T(n)是关于问题规模n的函数
  • T(n)称为这一算法的“时间复杂度”。当输入量n逐渐加大时,时间复杂度的极限情形称为算法的“渐近时间复杂度”。

(2)常见的时间复杂度使用大O表示

  • 常数阶O(1)
int a= 0;
++a;
int c =a+1;

这个代码不管是执行了多少行,只要没有循环等这种复杂的结构,那时间复杂度就是O(1)

  • 线性阶O(n)
int sum= 0;
for(int i =1;i<=100;i++){sum+=i;
}

这段代码for循环里面的代码会执行n次,因为随着n的变化所消耗的时间也随之变化,这类的代码都可以使用O(n)来表示

  • 平方阶O(n²)
int sum= 0;
int n=10;
for(int j = 1;j<=n;j++){for(int i =1;i<n;i++){sum+=i;}
}

这段代码n是10,外层会循环执行10次,内层会循环指向10次,总共指向10*10=100次,也就是n的平方次,使用O(n2)来表示。同理,如果使用了三层循环那么时间复杂度就是O(n3)立方阶

  • 对数阶O(Logn)
int i=1
int sum=100
while(i<sum){i=i*2
}

这里的while循环,每经过一轮,也就是每经过一次i*2的运算,结果就会里sum的值越近 2^x=n,时间复杂度就是O(Logn)

  • 常见的算法时间复杂度由小到大排序

O(1)<O(log2n)<O(n)<O(nlog2n)<O(n2)<O(n3)<O(nk)<O(2n),可以看出随着规模n的不断变大,执行的效率就越低。

4.线性结构与非线性结构

(1)什么是线性结构

  • 线性结构是最常用的数据结构,它的特点是数据元素之间是一对一的关系,如数组a[0]=1,那么数组下标为0的时候就等于了1,这就是一对一的关系。
  • 线性结构的储存结构有两种,一个是顺序存储结构(以数组方式),一种是链式存储结构(链表)。顺序存储结构的线性表又被称作为顺序表,顺序表里存储的元素是连续的,分配的地址也是连续的。
  • 链式存储的线性表又被称为链表,链表里存储的元素不一样是连续的,一般所储存的数据作为一个节点,每个节点分配一个指针来找到下一个节点的位置获取相关信息。
  • 线性结构常见的有:数组、队列、栈、链表

(2)什么是非线性结构

  • 非线性结构里的各个数据元素不保持在一个线性的序列当中,每一个数据元素都可能会与0个或者是多个其他的数据元素发生联系的。
  • 常见的非线性结构有:二维(多维)数组,广义表,树结构,图结构

【数据结构】初识时间空间复杂度相关推荐

  1. 数据结构与算法的时间空间复杂度

    提到数据结构与算法就不得不提时间复杂度和空间复杂度,本人看大部分文章介绍都比较晦涩难懂,就想着用简单的代码示例快速让你理解数据结构与算法的时间空间复杂度. 首先,时间复杂度表示的是使用某个数据结构或者 ...

  2. 算法设计与分析课程的时间空间复杂度

    算法设计与分析课程的时间空间复杂度: 总结 算法 时间复杂度 空间复杂度 说明 Hanoi $ O(2^n) $ $ O(n) $ 递归使用 会场安排问题 \(O(nlogn)\) \(O(n)\) ...

  3. 排序算法 之四 分类、时间/空间复杂度、如何选择

    写在前面   现在网上关于排序算法的文档不计其数,为什么要写这篇文章呢?主要是因为一些算法虽然在平时有用到,但是从来没有细细整理过,没有个统一.整体的认识.写这篇文章一来是进行一下总结,二来趁机再系统 ...

  4. 浅淡数据结构时间复杂度和空间复杂度

    文章目录 前言 1.时间复杂度和空间复杂度的相关介绍 1.为什么要引入时间复杂度和空间复杂度的概念 2.什么是时间复杂度和空间复杂度 2.具体示例分析 1.大O法只保留高阶项 2.一般情况关注的是算法 ...

  5. Algorithm Master Road:算法的时间/空间复杂度

    很多同学都觉得算法很难,难以入门,难以理解,更难以掌握和运用,其实归根溯源,我们可以把所有的问题都通过枚举法来解决,但是受困于「时间」和「空间」的因素,有的时候并不能枚举所有的情况,所以需要通过精妙的 ...

  6. (二) 时间/空间复杂度计算

    时间/空间复杂度计算 时间复杂度是什么? O(1) O(n) O(1)+O(n)=O(n) O(n)*O(n)=O(n^2) O(logN) 空间复杂度是什么? O(1) O(n) O(n^2) 思考 ...

  7. 初阶数据结构 初识二叉树

    初阶数据结构 初识二叉树 一. 树 1. 基本概念 2. 常用术语 3. 代码表示 4. 实际运用 二. 二叉树 1. 基本概念 2. 特殊的二叉树 3. .二叉树的顺序结构及实现 (1)顺序结构 ( ...

  8. 简单排序算法时间空间复杂度分析及应用(4)-二分插入排序

    简单排序算法时间空间复杂度分析及应用(4)-二分插入排序 背景: 顾名思义,这个二分插入排序是直接插入排序的进化版,主要变化的地方就是在内循环部分,即外循环的循环节点在确定区域的位置查询方式由原来的直 ...

  9. 二叉树中序遍历习题引发的时间空间复杂度思考:内存角度

    今天做了一道简单的二叉树遍历. 首先我们需要了解什么是二叉树的中序遍历:按照访问左子树--根节点--右子树的方式遍历这棵树,而在访问左子树或者右子树的时候我们按照同样的方式遍历,直到遍历完整棵树.因此 ...

最新文章

  1. decode函数python在哪里_Python基础知识——encode和decode函数
  2. 曹大带我学 Go(7)—— 如何优雅地指定配置项
  3. pb公共变量怎么找_阿迪达斯的4D怎么就火不起来呢?
  4. python vlookup 模糊_如何用python写excel中的vlookup函数?
  5. 字典添加数据_MATLAB自动化——EXCEL与数据字典管理(一)
  6. Phaser3让超级玛丽实现轻跳、高跳及加上对应的跳跃声音
  7. python金融数据分析电子版_python 金融大数据分析 pdf
  8. gallery3d 代码分析
  9. 阿里云DataV—多字段取满足某一个字段的行,多字段取不满足某一个字段的行(3)
  10. oracle的音标,oracle的意思在线翻译,解释oracle中文英文含义,短语词组,音标读音,词源【澳典网ODict.Net】...
  11. Flask 框架 网页跳转详解。
  12. iphone屏幕自定义排版_如何使用小部件和图标自定义iPhone主屏幕
  13. vue如何制作自定义表单校验样式
  14. 根据word模板(书签)创建导出word
  15. c语言寄存器头文件共用重复定义,C语言头文件的使用
  16. 为什么小型软件外包公司很难盈利(一)
  17. STM32F4设置NVIC中断优先级分组
  18. 刚刚开通,感受一下此地气氛
  19. java 三维全景_三维全景技术是什么?
  20. Python获取用电情况数据-AHPU校园网

热门文章

  1. Bochs 调试指令
  2. Python入门——语言基础
  3. 前端培训的机构哪个好,这五类人最适合转Web前端
  4. 【科研分享】Matplotlib 绘制多子图(subplot)进行实验结果分析
  5. 【天眼数聚】微信小程序 活体识别提示“照片质量低”
  6. RRDTools相关
  7. hdu 4210 Su-domino-ku
  8. sql视图  view 和 MATERIALIZED VIEW
  9. Converting Phase Noise to Time Jitter
  10. Python爬取起点中文网月票榜前500名网络小说介绍