数据结构与算法(陈越)(学习笔记)(更新ing)
数据结构(陈越)
一、数据结构(计算运行时间)
#include<stdio.h>
#include<time.h>
#include<math.h>
clock_t start,stop;//clock_t是clock()函数返回的变量类型
double duration;//纪录被测试函数运行时间,以秒为单位
double formal_function(int n,double a[],double x);
double qin_function(int n,double a[],double x);
#define MAXN 10
#define MAXK 1e7
int main()
{//不在测试范围内的准备工作写在clock()调用之前 int i;double a[MAXN];for(i=0;i<MAXN;i++) a[i]=(double)i;start=clock();//开始计时for(i=0;i<MAXK;i++)formal_function(MAXN-1,a,1.1);//MyFunction();//把被测函数加在这里 stop=clock();//停止计时 duration=(((double)(stop-start))/CLK_TCK)/MAXK;printf("ticks1=%f\n",(double)(stop-start));printf("%6.2ef\n",duration); //其他不在测试范围的处理写在后面。例如duration的值 start=clock();//开始计时for(i=0;i<MAXK;i++)qin_function(MAXN-1,a,1.1); stop=clock();//停止计时 duration=(((double)(stop-start))/CLK_TCK)/MAXK;printf("ticks2=%f\n",(double)(stop-start));printf("%6.2ef\n",duration); return 0;
}
double formal_function(int n,double a[],double x)//普通(顺序表)
{int i;double p=a[0];for(i=1;i<=n;i++)p+=(a[i]*pow(x,i));return p;
}
double qin_function(int n,double a[],double x)//秦九韶
{int i;double p=a[n];for(i=n;i>0;i--)p=a[i-1]+x*p;return p;}
运行速度太快可能不够一个tick时结构会为零,所以可以重复多运行几次
解决问题的方法的效率,跟算法的巧妙程度有关
二、什么是数据结构
一、数据对象在计算机中的组织方式
1.逻辑结构
1.线性结构
2.树形结构
3.图(多对多)
2.存储结构(物理)
二、数据对象必定与一系列加在其上的操作相关联
三、完成这些操作所用的方法就是算法
三、描述数据结构:抽象数据类型
数据类型
数据对象集
数据集合相关联的操作集
抽象:描述数据类型的方法不依赖于具体实现
与存放数据的机器无关
与数据存储的物理结构无关
与实现操作的算法和编程语言均无关
只描述数据对象集和相关操作“是什么”,并不涉及“如何做到”的问题
四、什么是算法
一、算法
1.一个有限的指令集
2.接受一些输入(有些情况下不需要输入)
3.产生输出
4.一定在有限步骤之后终止
5.每一条指令必须
1.有充分明确的目标,不可以有歧义
2.计算机能处理的范围之内
3.描述应不依赖于任何一种计算机语言以及具体的实现手段
选择排序算法的伪代码描述
```c
voide SelectionSort(int List[], int N)
{//将N个整数List[0]...List[N-1]进行非递减排序for(i=0;i<N.i++){MinPosition = ScanForMin(List,i,N-1);//从List[i]到List[N-1]中找最小元,并将其位置赋给MinPositionSwap(List[i],List[MinPosition]);//将未排序部分的最小元换到有序部分的最后位置}
}
```
**List到底是数组还是链表不确定(虽然看上去像数组)**
**Swap用函数还是宏去实现不确定**
五、什么是好的算法
一、空间复杂度S(n)——占用储存单元的长度
例子:递归
···
void PrintN(int N)
{
if(N){
PrintN(N-1);
printf(“%d\n”,N);
}
return 0;
}
因为占用的空间太大多以导致空间不够用而无法运行->非正常退出
二、时间复杂度T(n)——耗费时间的长度
程序中加减法的速度比乘除快的多,所以计算运行时间的时候一般只记乘除的数量
在分析一般算法的效率时,我们经常关注下面两种复杂度
**1.最坏情况复杂度
Tworst(n)T_{worst}(n) Tworst(n)
**//一般更关注
2.平均复杂度
Tavg(n)T_{avg}(n) Tavg(n)
六、复杂度的渐进表示法
ps:上界、下界、上界和下界相同
七、最大子列和问题
给定N个整数的序列{A_1,A_2,…,A_N},求函数
f(i,j)=max0,∑k=ijf(i,j)=max{0,\sum_{k=i}^{j}} f(i,j)=max0,k=i∑j
的最大值
算法1
int MaxSubseqSun1(int A[],int N)
{int ThisSun,MaxSun=0;int i,j,j;for(i=0;i<N;i++){ //i是子列左端位置for(j=i;j<N;j++){ //j是子列右端位置ThisSum=0; //ThisSum是从A[i]到A[j]的子列和for(k=i;k<j;k++){ThisSum+=A[k];if(ThisSum>MaxSum)MaxSum=ThisSum;}}}
}
时间复杂度T(n)=o(n3)T(n)=o(∑i=0N∑j=iN∑k=ijA[k])=o(n3)时间复杂度T(n)=o(n^3) T(n)=o(\sum_{i=0}^{N}{\sum_{j=i}^{N}{\sum_{k=i}^{j}A[k]}})=o(n^3) 时间复杂度T(n)=o(n3)T(n)=o(i=0∑Nj=i∑Nk=i∑jA[k])=o(n3)
算法2
int MaxSum(int A[],int N)
{int ThisSum,MaxSum=0;for(i=0;i<N;i++){ThisSum=0;for(j=i;j<N;j++){ThisSum+=A[j];if(ThisSum<MaxSum)MaxSum=ThisSum;}}
}
时间复杂度T(n)=o(n2)<<o(n3)时间复杂度T(n)=o(n^2)<<o(n^3) 时间复杂度T(n)=o(n2)<<o(n3)
数据结构与算法(陈越)(学习笔记)(更新ing)相关推荐
- PostgreSQL学习笔记(更新ing)+c# 使用ef连接数据库postgreSQL
目录 PostgreSQL学习笔记 一.PostgreSQL创建.删除数据库(表).架构 1.创建数据库 CREATE DATABASE 2.查看数据库 3.删除数据库 4.创建表 5.删除表 6.架 ...
- 1算法分析——数据结构与算法Python版学习笔记
什么是算法分析? 计算资源指标:一种是算法解决问题过程中需要的储存空间或内存,另一种是算法的执行时间 运行时间检测 time模块,获取计算机系统当前时间 例如: 方法一:累计求和程序的运行时间检测 i ...
- 数据结构与算法之美学习笔记:哈希算法-哈希算法在分布式系统中有哪些应用(第22讲)...
上一节,我讲了哈希算法的四个应⽤,它们分别是:安全加密.数据校验.唯⼀标识.散列函数.今天,我们再来看剩余三种应用: 负载均衡.数据分片.分布式存储 你可能已经发现,这三个应用都跟分布式系统有关.没错 ...
- html学习笔记(更新ing)
目录 一.标题标签 二.分段标签和换行标签 三.文本格式化标签 四.图像标签 五.外部链接 六.内部链接 七.下载链接 八.空链接 九.锚点链接 十.表格标签 十一.合并单元格 十二.三个列表 十三. ...
- CSS学习笔记(更新ing)
目录 一.标签选择器 二.类选择器 三.id选择器 四.通配符选择器 五.设置字体 六.文本属性 七.CSS引入样式 案例1--新闻页面 八.后代选择器 九.子选择器 十.并集选择器 十一.链接伪类选 ...
- 《算法图解》学习笔记(十一):十种经典的算法与数据结构
python学习之路 - 从入门到精通到大师 文章目录 [python学习之路 - 从入门到精通到大师](https://blog.csdn.net/TeFuirnever/article/detai ...
- cart算法_决策树学习笔记(三):CART算法,决策树总结
点击上方"Python数据科学",选择"星标公众号" 关键时刻,第一时间送达! 作者:xiaoyu 介绍:一个半路转行的数据挖掘工程师 推荐导读:本篇为树模型系 ...
- 分水岭算法java,OpenCV 学习笔记 04 深度估计与分割——GrabCut算法与分水岭算法...
1 使用普通摄像头进行深度估计 1.1 深度估计原理 这里会用到几何学中的极几何(Epipolar Geometry),它属于立体视觉(stereo vision)几何学,立体视觉是计算机视觉的一个分 ...
- 《算法图解》学习笔记(七):狄克斯特拉算法(附代码)
欢迎关注WX公众号:[程序员管小亮] python学习之路 - 从入门到精通到大师 文章目录 欢迎关注WX公众号:[程序员管小亮] [python学习之路 - 从入门到精通到大师](https://b ...
- 嵌入式算法移植优化学习笔记5——CPU,GPU,TPU,NPU都是什么
嵌入式算法移植优化学习笔记5--CPU,GPU,TPU,NPU都是什么 一.什么是CPU? 二.什么是GPU? 三.什么是NPU? 四.什么是TPU? 附: 随着AI的广泛应用,深度学习已成为当前AI ...
最新文章
- CF140C-New Year Snowmen【优先队列】
- js 对象数组常用操作 我用到的
- 网络篇:朋友面试之TCP/IP,回去等通知吧
- 回望之六:太阳山与红寺堡
- 使用sklearn预测走势_Prophet: 时间序列预测库
- 程序员崩溃了,想拿的年终奖怎么说黄就黄?!
- 财务有必要学python吗-python在财务里面有用吗
- ST-LINK官方驱动下载方法
- word文档怎么压缩大小?
- 项目管理必备的软件,实用方便
- HBase2.0中的Benchmark工具 — PerformanceEvaluation
- android 豁免的广播及广播白名单,浅谈BLE地址、隐私机制、白名单、定向广播
- 天下武功,唯快不破 - O'Reilly Velocity China 2011 PPT汇总
- 做不到想做的,真难受~
- 家政预约系统开发作用和步骤
- python数据模型和算法_万字案例 | 用Python建立客户流失预测模型(含源数据+代码)...
- Vue.js中props的使用
- php将数字转换人民币显示,php数字转化为人民币大写
- 设备树学习(二、设备树dts/dtsi格式)
- 【实战演练】快速获取容器VIPs,解决集群自动化测试难题
热门文章
- screen投屏怎么用_教大家Screen怎么投屏电脑的方法
- 如何在M1 Mac上安装iPhone或iPad应用程序
- 邮政系统方案 邮政财务清算中心系统
- 华华给月月出题——牛客小白月赛12
- python无法打开 firefox浏览器_python – 无法使用Selenium打开Firefox浏览器
- 强生中国宣布助力“共同富裕”目标愿景;Novavax和SII宣布疫苗纳入世卫EUL | 医药健闻...
- html5video拼接屏一部分黑屏,LCD拼接屏几种常见的故障及解决方案
- 机器学习项目实战——06KNN算法之水果分类
- python解析markdown_一个纯python、快速、可扩展的Markdown解释器
- 最小-最大计划(Min-Max Planning)概览【转】