复习数据结构正式开始!
数据结构是介于数学、计算机软件与计算机硬件的一门核心课程。程序=算法+数据结构(N.沃斯提出)
数据结构(Data Structure):是相互之间存在一种或多种特定关系的数据元素的集合。数据结构是带“结构”的数据元素的集合,“结构”就是指数据元素之间存在的关系。
数据结构包括 2+1(两个层次和一个操作)
逻辑结构(唯一):数据元素间抽象化的相互关系,与数据的存储无关,独立于计算机,它是从具体问题抽象出来的数学模型。(如集合、线性、树形、图形)
存储结构(物理结构)(不唯一):数据元素及其关系在计算机存储器中的存储方式。(如顺序(关键词:连续)、链式(关键词:指针)、索引(关键词:逻辑指针清单)、散列/哈希(关键词:地址 ;一般来说效率最高))
操作(运算、行为):执行不同功能的算法
欢迎关注:https://blog.csdn.net/hanhanwanghaha
这个可爱的宝藏女孩
定义:在一种程序设计语言中,变量所具有的数据种类
例如C 语言:
基本数据类型: char int float double void
构造数据类型:数组、结构体、共用体、文件
数据类型是一组性质相同的值的集合, 以及定义于这个集合上的一组运算的总称
(也称增广数据类型)
—更高层次的数据抽象
—由用户定义,用以表示应用问题的数据模型
—由基本的数据类型组成, 并包括一组相关的操作
算法定义
一个有穷的指令集,这些指令为解决某一特定任务规定了一个运算序列
(注意:提到指令集、序列集、描述集都是算法的定义)
算法的特性
输入:有 0 个或多个输入(可以不输入,系统自动生成)
输出:有一个或多个输出(处理结果)
确定性:每步定义都是确切、无歧义的
有穷性:算法应在执行有穷步后结束
有效性(可执行性):每一条运算应足够基本
算法设计的评价及要求
正确性
可读性
健壮性(不能稍微碰下就不能运行了)
高效性(时间和空间)
算法的度量
一般情况下,算法中基本操作重复执行的时间是问题规模 n 的某个函数 f(n),算法
执行的时间的增长率和 f(n)的增长率相同,称渐近时间复杂度。
时间复杂度的表示方法有两种:
方法 1:大 O 法
T(n) = O(f(n))
它表示随问题规模 n 的增大,算法执行时间的增长率和 f(n)的增长率相同,称作算
法的渐进时间复杂度,简称时间复杂度。
方法 2:语句频度法
计算该语句重复执行的次数,又叫频度统计法。
n*n阶矩阵加法
for( i = 0; i < n; i++)
for( j = 0; j < n; j++)
c[i][j] = a[i][j] + b[i][j];
语句的频度(Frequency Count ): 重复执行的次数:
n*n;
T(n)= O(n^2)
即:矩阵加法的运算量和问题的规模 n 的平方是同一个量级
分析算法时间复杂度的基本方法
找出语句频度最大的那条语句作为基本语句
计算基本语句的频度得到问题规模 n 的某个函数 f(n)
取其数量级用符号“O”表示
for ( int i = 0; i < n; i++ )
for ( int j = 0; j < n; j++ )
y ++;
f(n)=n2
T(n)= O(n2)
时间复杂度是由嵌套最深层语句的频度决定的
void exam ( float x[ ][ ],int m,int n){
float sum [ ];
for ( int i = 0; i < m; i++ ) {
sum[i] = 0.0;
for (int j = 0; j < n; j++) f(n)=m*n
sum[i] += x[i][j];
}
for ( i = 0; i < m; i++ )
cout << i << “ : ” <<sum [i] << endl;
}
T(n) = O(m*n)
O(1)
对数函数<幂函数<指数函数<阶乘
so 尽量少用指数阶的算法
关于时间复杂度的运用,记得我以前发过相关的文章:(用python写的)https://blog.csdn.net/hanhanwanghaha/article/details/107886355
三个组成部分:
原地工作:算法在执行过程中,辅助空间是不变的,叫原地工作。
https://blog.csdn.net/hanhanwanghaha宝藏女孩的成长日记 欢迎您的关注!
欢迎关注微信公众号:宝藏女孩的成长日记 让这个可爱的宝藏女孩在努力的道路上与你一起同行! 如有转载,请注明出处(如不注明,盗者必究)