数据结构(陈越)

一、数据结构(计算运行时间)

#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∑N​j=i∑N​k=i∑j​A[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)相关推荐

  1. PostgreSQL学习笔记(更新ing)+c# 使用ef连接数据库postgreSQL

    目录 PostgreSQL学习笔记 一.PostgreSQL创建.删除数据库(表).架构 1.创建数据库 CREATE DATABASE 2.查看数据库 3.删除数据库 4.创建表 5.删除表 6.架 ...

  2. 1算法分析——数据结构与算法Python版学习笔记

    什么是算法分析? 计算资源指标:一种是算法解决问题过程中需要的储存空间或内存,另一种是算法的执行时间 运行时间检测 time模块,获取计算机系统当前时间 例如: 方法一:累计求和程序的运行时间检测 i ...

  3. 数据结构与算法之美学习笔记:哈希算法-哈希算法在分布式系统中有哪些应用(第22讲)...

    上一节,我讲了哈希算法的四个应⽤,它们分别是:安全加密.数据校验.唯⼀标识.散列函数.今天,我们再来看剩余三种应用: 负载均衡.数据分片.分布式存储 你可能已经发现,这三个应用都跟分布式系统有关.没错 ...

  4. html学习笔记(更新ing)

    目录 一.标题标签 二.分段标签和换行标签 三.文本格式化标签 四.图像标签 五.外部链接 六.内部链接 七.下载链接 八.空链接 九.锚点链接 十.表格标签 十一.合并单元格 十二.三个列表 十三. ...

  5. CSS学习笔记(更新ing)

    目录 一.标签选择器 二.类选择器 三.id选择器 四.通配符选择器 五.设置字体 六.文本属性 七.CSS引入样式 案例1--新闻页面 八.后代选择器 九.子选择器 十.并集选择器 十一.链接伪类选 ...

  6. 《算法图解》学习笔记(十一):十种经典的算法与数据结构

    python学习之路 - 从入门到精通到大师 文章目录 [python学习之路 - 从入门到精通到大师](https://blog.csdn.net/TeFuirnever/article/detai ...

  7. cart算法_决策树学习笔记(三):CART算法,决策树总结

    点击上方"Python数据科学",选择"星标公众号" 关键时刻,第一时间送达! 作者:xiaoyu 介绍:一个半路转行的数据挖掘工程师 推荐导读:本篇为树模型系 ...

  8. 分水岭算法java,OpenCV 学习笔记 04 深度估计与分割——GrabCut算法与分水岭算法...

    1 使用普通摄像头进行深度估计 1.1 深度估计原理 这里会用到几何学中的极几何(Epipolar Geometry),它属于立体视觉(stereo vision)几何学,立体视觉是计算机视觉的一个分 ...

  9. 《算法图解》学习笔记(七):狄克斯特拉算法(附代码)

    欢迎关注WX公众号:[程序员管小亮] python学习之路 - 从入门到精通到大师 文章目录 欢迎关注WX公众号:[程序员管小亮] [python学习之路 - 从入门到精通到大师](https://b ...

  10. 嵌入式算法移植优化学习笔记5——CPU,GPU,TPU,NPU都是什么

    嵌入式算法移植优化学习笔记5--CPU,GPU,TPU,NPU都是什么 一.什么是CPU? 二.什么是GPU? 三.什么是NPU? 四.什么是TPU? 附: 随着AI的广泛应用,深度学习已成为当前AI ...

最新文章

  1. CF140C-New Year Snowmen【优先队列】
  2. js 对象数组常用操作 我用到的
  3. 网络篇:朋友面试之TCP/IP,回去等通知吧
  4. 回望之六:太阳山与红寺堡
  5. 使用sklearn预测走势_Prophet: 时间序列预测库
  6. 程序员崩溃了,想拿的年终奖怎么说黄就黄?!
  7. 财务有必要学python吗-python在财务里面有用吗
  8. ST-LINK官方驱动下载方法
  9. word文档怎么压缩大小?
  10. 项目管理必备的软件,实用方便
  11. HBase2.0中的Benchmark工具 — PerformanceEvaluation
  12. android 豁免的广播及广播白名单,浅谈BLE地址、隐私机制、白名单、定向广播
  13. 天下武功,唯快不破 - O'Reilly Velocity China 2011 PPT汇总
  14. 做不到想做的,真难受~
  15. 家政预约系统开发作用和步骤
  16. python数据模型和算法_万字案例 | 用Python建立客户流失预测模型(含源数据+代码)...
  17. Vue.js中props的使用
  18. php将数字转换人民币显示,php数字转化为人民币大写
  19. 设备树学习(二、设备树dts/dtsi格式)
  20. 【实战演练】快速获取容器VIPs,解决集群自动化测试难题

热门文章

  1. screen投屏怎么用_教大家Screen怎么投屏电脑的方法
  2. 如何在M1 Mac上安装iPhone或iPad应用程序
  3. 邮政系统方案 邮政财务清算中心系统
  4. 华华给月月出题——牛客小白月赛12
  5. python无法打开 firefox浏览器_python – 无法使用Selenium打开Firefox浏览器
  6. 强生中国宣布助力“共同富裕”目标愿景;Novavax和SII宣布疫苗纳入世卫EUL | 医药健闻...
  7. html5video拼接屏一部分黑屏,LCD拼接屏几种常见的故障及解决方案
  8. 机器学习项目实战——06KNN算法之水果分类
  9. python解析markdown_一个纯python、快速、可扩展的Markdown解释器
  10. 最小-最大计划(Min-Max Planning)概览【转】