嵌入式团队培训_数据结构与算法概述

  • 要求:理解并记忆即可,会求解算法的时间复杂度
    • 一:数据结构
      • 1.逻辑结构:
      • 2.物理结构
      • 3.抽象数据类型
    • 二:算法
      • 1.算法的五个基本特征:
      • 2.算法设计的要求
      • 3.时间、空间复杂度
    • 三、作业

要求:理解并记忆即可,会求解算法的时间复杂度

总结:程序设计 = 数据结构 + 算法
解释:数据结构用于解决数据存储问题,而算法用于处理和分析数据。(目录,网页前进和后退)

一:数据结构

数据:所有能输入计算机中的符号。不仅仅包括我们平时用的整型,浮点型等,还有字符,声音,图片,视频(通过编码变成字符数据)等。

直白地理解,就是研究数据的逻辑关系与存储方式的一门学科。简单的分为:数据的逻辑结构(逻辑关系)和
物理结构
。它是以某种形式将数据组织在一起的集合,它不仅存储数据,还支持访问和处理数据的操作(CRUD)。

大一下考试内容:记住即可

1.逻辑结构:

数据的逻辑结构,简单地理解,就是指的数据之间的逻辑关系。

数据之间的逻辑关系可简单的分为三类:

  • 一对一 (线性结构,串)
  • 一对多 (层次结构 树)
  • 多对多 (图)

2.物理结构

指的是数据在计算机存储器中的存放方式(例如:内存中),可以选择集中存放,还是分散存放。

具体表现:顺序存储(地址连续)和链式存储(指针表示逻辑关系)。

3.抽象数据类型

抽象数据类型ADT:一个数学模型及定义在该模型上的一组操作。(说白了,就是个说明书)
之后讲解的一系列数据结构都是抽象数据类型。

二:算法

算法是为求解一个问题需要遵循的、被清楚指定的简单指令的集合。在计算机中,算法是指解决方案的准确而完整的描述。

当解决问题时,首先心中要有解决问题的算法,围绕算法编写出程序代码。

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

大一下考试内容:记住即可

1.算法的五个基本特征:

  1. 输入
    输入的参数,个数(>=0),例如:直接打印,就无参数传入。
  2. 输出
    输出和返回值,个数(>0),必须要有输出,至少要有个打印。
  3. 有穷性
    有限的执行步骤之后,不会出现无限循环,在有限时间内完成。
  4. 确定性
    每一步都必须具有具体的含义,不会出现二义性。
  5. 可行性
    刚才讲了要在有限时间内完成,即每一步是可行的,每一步都是有限时间的。(所以整体在有限时间内完成)

2.算法设计的要求

  1. 正确性(略):得到问题正确答案(废话)
  2. 可读性:便于程序员之间阅读,理解,交流,有助于人们理解算法,易修改调试。例如:注释
  3. 健壮性:对输入数据(参数)进行合法性校验。当输入数据不合法时,算法也会进行相关的处理,而不是出现异常。
  4. 尽量满足时间效率高和存储量低的需求(时间复杂度和空间复杂度低

3.时间、空间复杂度

(1)事后统计方法:(略)
通过设计好的测试程序(test)和数据,然后进行运行时间比较,从而才确定效率。

(2)事前估计估算方法
在编程前,依据统计方法对算法进行估算。

(3)时间、空间复杂度

算法的时间复杂度,主要看算法中使用到的循环结构中代码循环的次数(称为“频度”)。次数越少,算法的时间复杂度越低。

设问题输入的数据规模为n

a) ++x; s=0;b) for (int i = 1; i <= n ; i++) { ++x; s += x; }c) for (int i = 1; i <= n; i++) {
for (int j = 1; i <= n; j++) { ++x; s += x; }
}

频度f(n) 分别为 1、n、n^2。

算法的时间复杂度,算法的时间度量,记住:T(n) = O(f(n))

a 的时间复杂度为O(1),b 的时间复杂度为O(n),c 的时间复杂度为为O(n^2)。

如果把a、b、c三个例子组成一段程序,那么算法的时间复杂度为O(n^2 + n + 1 )。
但这么表示是不对的,还需要对n^2 + n + 1进行简化。

简化的过程总结为3步:

1. 去掉运行时间中的所有加法常数。(例如 n^2+n+1,直接变为 n^2+n)
2. 只保留最高项。(例如 n^2+n 变成 n^2)
3. 如果最高项存在但是系数不是1,去掉系数。(例如 n^2 系数为 1)

所以,最终a、b和c合并而成的代码的时间复杂度为O(n^2)。

常数阶:O(1)(单纯的分支结构也是执行一次)int sum = 0,n = 100;  /* 执行一次 */
sum = (1 + n) * n/2;  /* 执行一次 */
printf("%d", sum);    /* 执行一次 */
if(sum == 0) {        /* 执行一次 */printf("%d", sum);
} else {printf("-1");
}
线性阶:O(n)(循环结构)int i;
for (i = 0; i < n; i++) {  /* 执行n次 *//* ......(里面是O(1)) */
}
对数阶:O(logn)(迭代)int count = 1;
while (count < n) {//2^x=n   x=logncount = count * 2;/* ......(里面是O(1)) */
}
平方(次方)阶:O(n^2),O(n^3)....int i,j;
for(i = 0; i < n; i++) {for(j = 0; j < n; j++) {/* ......(里面是O(1)) */}}
循环嵌套
思考:下列代码的时间复杂度是?
(1)
int i,j;
for(i = 0; i < n; i++) {for(j = i; j < n; j++) {  /* 注意这里j=i *//* ......(里面是O(1)) */}}(2)
int n;
void function (int count) {int j;for(j = count; j< n; j++) {/* ......(里面是O(1)) */}
}
---------------------------------
n++;
int i,j;
function(n);
for(i = 0; i < n; i++) {for(j = i; j < n; j++) {  /* 注意这里j=i *//* ......(里面是O(1)) */}}

三、作业

1、下面程序段的时间复杂度是( )

s = 0;
for(i=0; i<n; i++)for(j=0; j<n; j++)
s += B[i][j];
sum = s;

2、下面程序段的时间复杂度是( )

for(i=0; i<n; i++)for(j=0; j<m; j++)A[i][j] = 0;

3、下面程序段的时间复杂度是( )

i=1;
while(i<=n)i = i*3;

嵌入式团队培训_数据结构和算法概述相关推荐

  1. 数据结构和算法概述及算法分析

    一.数据结构和算法概述 B站学习视频 1.1首先我们为什么要学习数据结构? 数据结构和算法这门课程无论在哪个学校的计算机专业,都是一门必修课,因为这门课程非常重要的,是编程必备的基础,但是这门课程是一 ...

  2. 【自学笔记】尚硅谷数据结构与算法Chapter 1 数据结构与算法概述

    Chapter 1 数据结构与算法概述 文章目录 Chapter 1 数据结构与算法概述 1.1.1 数据结构和算法的关系 1.2.1 线性结构 1.2.2 非线性结构 尚硅谷数据结构B站学习视频地址 ...

  3. mooc数据结构与算法python版期末测验_中国大学MOOC(慕课)_数据结构与算法Python版_测试题及答案...

    中国大学MOOC(慕课)_数据结构与算法Python版_测试题及答案 更多相关问题 采用fopen()函数打开文件,支持文件读取的参数有: [简答题]简单阐述高分子材料热-机械特征及成型加工的关系,并 ...

  4. python数据结构与算法分析_数据结构与算法(Python版)

    为什么研究数据结构与算法 本周带大家进入Python版数据结构与算法的学习.想必大家都听过"算法"一词,算法的学习对编程者来说是至关重要的.首先我们先了解一下为什么要研究数据结构与 ...

  5. python数据结构视频百度云盘_数据结构与算法Python视频领课

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 课程简介: 本课程包含Python编程基础的基本语法及变量,基本数据结构,Code Structure,Function.让学生在学会Python基础的同 ...

  6. c++冒泡排序代码_数据结构和算法必知必会的50个代码实现

    今天在GitHub上发现了个非常不错的项目,目前star 4700+,项目主要讲数据结构和算法,有多种语言 50个代码实现. 实现语言有c++,c#,go,java,javascript,object ...

  7. 假设有搅乱顺序的一群儿童成一个队列_数据结构与算法系列之栈amp;队列(GO)...

    以下完整代码均可从这里获取 栈 栈的基本概念 「后进先出.先进后出就是典型的栈结构」.栈可以理解成一种受了限制的线性表,插入和删除都只能从一端进行 当某个数据集合只涉及在一端插入和删除数据,并且满足后 ...

  8. 树的高度从零还是一开始数_数据结构与算法之1——树与二叉树

    数据结构一直是让人头疼,面试遇到手撕算法题时真是慌得不行,从啥也不会刷题刷到游刃有余,路漫漫其修远兮~~.本人还是个算法菜鸟,而且还是想转行互联网的半吊子(好想拿大厂offer啊,幻想中..),希望能 ...

  9. python中栈的描述是_数据结构与算法:Python语言描述 栈和队列.ppt

    数据结构与算法:Python语言描述 栈和队列 迷宫问题 迷宫问题的特点: 存在一集可能位置,一些位置相互连通,一步可达 一个位置可能连通若干位置,出现向前探查的多种可能(有分支) 目标是找到一条路径 ...

最新文章

  1. 土壤微生态文献包免费领取 | 150篇近两年高影响因子土壤微生态相关文章
  2. CentOS7中设置.sh开机自启动(以后台启动geoserver为例)
  3. 如何优雅地在公众号输入数学公式?推荐几款神器
  4. GDCM:gdcm::XMLPrivateDictReader的测试程序
  5. 大数据开发初学者学习路线
  6. java udp文件_Java对文件的操作及UDP,TCP
  7. Linux硬链接和软链接
  8. Mysql整库导出导入
  9. rem适配的浏览器_[史上最全]UI相关尺寸单位详解 | px、pt、dp、sp、rem、vwvh、rpx、ppi、dpi、dppx...
  10. mysql 下载教程_MySQL下载安装详情图文教程
  11. 2019 最新计算机技能排名出炉:Python 排第三,第一名是...
  12. Javaweb 网上订餐系统
  13. 基因编辑最新研究进展(2022年4月)
  14. Spring运行时值注入分析
  15. jquery ui 主题_使用jQuery UI主题
  16. 面试题汇总 (HTML与浏览器篇)
  17. [阅读笔记]蘑菇书《Easy RL》
  18. 最新微信三级分销系统源码 分销商城搭建 含完整代码包和安装部署教程
  19. oracle rac启动ohas
  20. linux下 redis如何清空缓存

热门文章

  1. TI - MCU - MSP430使用指南14 - I2C通信(eUSCI)
  2. 【人工智能】LLM 大型语言模型发展历史
  3. SD卡与TF卡的区别
  4. 计算机网络知识总结一(计算机网络体系结构)
  5. 有趣问题——倒水问题
  6. Linux如何用查看域名解析
  7. 知乎 | 博士生应该采取什么策略读文献?
  8. 深入理解设计模式:设计模式定义、设计原则以及组织编目
  9. 4337: BJOI2015 树的同构
  10. 爬取网络视频并自动转换成文字