浙大 数据结构 陈越 第一讲:基本概念
第一讲 基本概念
什么是数据结构
数据结构和算法
例子1.书架摆书
图书的摆放要使得2个相关操作方便实现:
1.新书怎么插入(随便放,按拼音放,按类别放+拼音排序)
2.怎么找到某本指定的书(累死,二分查找)
总结:当问一个数据怎么组织的时候,其实跟这个数据的规模有关系
不一样规模的问题,处理起来的难度不一样,解决方法的效率,跟数据的组织方式有。关
例子2.写一个函数,输入正整数N,顺序打印1-N的全部正整数。
第一种方法for循环
第二种递归
总结:虽然递归简洁,但是递归对空间的占用很恐怖,当N为100000时,递归写法把能用的空间都占了,还不够,然后就爆掉了,导致非正常的终止。解决问题方法的效率也跟空间的利用效率有关。
例子3.写一计算给定多项式在给定点x的值
第一种方法直接翻译多项式(简单粗暴直接)
第二种利用规律简化多项式再翻译
如何测试程序的运行时间
clock()函数:捕捉程序从开始运行到clock()被调用时所花费的时间,时间单位为colock tick,即时间打点
常数CLK_TCK:机器时钟每秒所走的时钟打点数
#include<stdio.h>
#include<time.h>//调用clock函数需要的头文件clock_t start,stop;//clock_t是clock函数返回的变量类型
double duration;
int mian()
{start=clock();//开始计时myfuncation();//把被测函数加在这里stop=clock();//停止计时duration=((douboe)(stop-star))/CLK_TCK;//得出运行时间}
当运行时间太短小于1单位时,我们采取多次重复,最后除以多次,得出单词的运行时间
总结:第一种方法的运行时间比第二种慢了一个数量级解决问题方法的效率,跟算法的巧妙程度有关。
到底什么是数据结构?
- 数据对象在计算机中的组织方式
- 逻辑结构(一对一:线性结构 一对多:树 多对多:图)
- 物理存储结构(链表,数组等)
- 数据对象必定与一系列加在其上的操作相关联
- 完成这些操作所用的方法是算法
- 抽象 数据类型
- 数据类型
- 数据对象集
- 数据集合相关联的操作集
- 抽象:描述数据类型的方法不依赖具体实现
- 与存放数据的机器无关
- 与数据存储的物理结构无关
- 与实现操作的算法和编程均无关
只描述数据对象集和相关操作集是什么并不涉及如何做到的问题
总结:抽象就是,比较清晰明了的知道你这个数据类型是干什么的,有什么用处,不用纠结是用什么语言实现的,也不用纠结数据类型,能让你更加清晰的了解这个数据结构,比如函数max(),你使用它的时候你知道它是找出两个数的最大值,你没有纠结它的数据类型,也没有纠结用哪种语言实现,最简单的说法也是最重要的理由:接口和实现分离!复用性更强!
什么是算法
- 算法
- 一个有限指令集
- 接受一些输入(有些情况不需要输入)
- 产生输出
- 一定在有限步骤之后终止
- 每一条指令必须
- 有充分明确的目标。不可以有歧义
- 计算机能处理的范围之内
- 描述应不依赖任何一种计算机语言以及具体的实现手段
什么是好算法
- 空间复杂度S(n)
- 时间复杂度T(n)
例:递归PRINT N
当n足够大时,空间会被沾满
for循环的空间占用始终是一个常量
- 在分析一般算法的效率时,我们经常关注两种复杂度
- 最坏情况复杂度
- 平均复杂度
复杂度的渐进表示法
不对算法做非常精细的分析
粗略估计增长趋势
复杂度分析小窍门
- 复杂度取最大
- for循环时间的复杂度等于循环次数*循环体代码的复杂度
- if else结构的复杂度取决于if的条件判断复杂度和两个分支部分的复杂度,总体复杂度取三者中最大
应用示例:最大子列和问题
在线处理 ,灵活巧妙,简化问题+找规律
#include<bits/stdc++.h>//最大数据10的5次方时21ms
using namespace std;
int num[100000];
int maxn=0;
int main()
{int n=0,sum=0;scanf("%d",&n);for(int i=0;i<n;i++){scanf("%d",&num[i]);maxn=maxn+num[i];if(maxn<0){maxn=0;}if(maxn>sum){sum=maxn;}//printf("%d",sum);}if(sum<0){printf("0");} elseprintf("%d",sum);return 0;}
#include<bits/stdc++.h>//最大数据10的5次方时3700ms 爆力法
using namespace std;
int num[100000];
int maxn=0;
int main()
{int n=0,sum=0;scanf("%d",&n);for(int i=0;i<n;i++){scanf("%d",&num[i]);}for(int i=0;i<n;i++){maxn=0;for(int j=i;j<n;j++){maxn=maxn+num[j];if(maxn>sum){sum=maxn;}}}if(sum<0){printf("0");} elseprintf("%d",sum);return 0;
}
#include<bits/stdc++.h>//最大数据10的5次方时3700ms .分而治之
略
浙大 数据结构 陈越 第一讲:基本概念相关推荐
- 陈越《数据结构》第一讲 基本概念
陈越<数据结构>第一讲 基本概念 1什么是数据结构 1.1 引子 例子:如何在书架上摆放图书? 随便放: 按照书名的拼音字母顺序排放: 把书架划分成几块区域,每块区域指定摆放某种类别的图书 ...
- 数据结构-第一讲 基本概念-学习笔记(MOOC 浙江大学 陈越 何钦铭)
目录 第一讲 基本概念 1.1 什么是数据结构 1.1.1 关于数据组织 - 例:图书摆放 1.1.2 关于空间使用 - 例:PrintN函数实现 1.1.3 关于算法效率 - 例:计算多项式值 计算 ...
- 陈越、何钦铭《数据结构》第一讲基本概念 笔记
<数据结构>第一讲基本概念 1.1什么是数据结构 1.1.1关于数据组织-例:图书摆放 "数据结构是数据对象,以及存在于该对象的实例和组成实例的数据元素之间的各种联系.这些联系 ...
- 浙江大学MOOC数据结构-陈越、何钦铭 编程练习题(第一讲)
浙江大学MOOC数据结构-陈越.何钦铭 编程练习题(第一讲) 编程题目 编程说明 编程环境:Code::Blocks 编程语言:C 注:第一题未在程序平台运行,仅在编程环境运行 第一题代码 #incl ...
- 并行算法第一讲:概念及目标
文章目录 第一讲:概念及目标 并行算法的意义 提高性能的主要手段 现状 并行计算分类 并行计算互联网络 并行计算存储组织 Brent定理(work-time) PRAM上并行求和算法 并行算法设计与分 ...
- 浙江大学 数据结构 陈越姥姥 百度网盘
浙江大学 数据结构 陈越姥姥 百度网盘 mark 不用再费力找了,这套教程刷了好几遍. 数据结构的重要性,怎么说都不为过 我去,csdn抽什么风,不允许发链接, 链接: https://pan.bai ...
- 数据结构(陈越、何钦铭)学习笔记
本系列文章为浙江大学陈越.何钦铭数据结构学习笔记,系列文章链接如下: 文章目录 一.基本概念 二.线性结构 三.树 四.图 五.排序 六.散列查找 一.基本概念 数据结构基础:P1-基本概念 数据结构 ...
- 数据结构与算法代码(浙大版本陈越、何钦铭老师mooc课程)
第一章:基本概念 给定N个整数的序列{A1,A2,...,AN},求最大的子列和 . 算法一:暴力法找出所有子列和,时间复杂度O(N^3) #include<stdio.h> #inclu ...
- [数据结构] 第一讲 基本概念
目录 一.概念 二.分类 一.概念 数据:是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符合集合. 数据元素:是组成数据的.有一定意义的基本单位,在计算机中通常 ...
最新文章
- 中兴c600olt数据配置_中兴上架Blade 20smart孝心版
- Verilog的数据流、行为、结构化与RTL级描述
- initrd.img相关
- cocos2dx--cocos2dx3.1.1执行报无法解析的外部符号
- UI component html code 查看工具
- 计算机应用基础教程作业脑图 车辆工程学院 冯大昕
- C语言之结构体和共用体
- 为什么单独循环中的元素加法比组合循环中的要快得多?
- Public Key Retrieval is not allowed(已解决)
- 示波器1m和50欧姆示阻抗匹配_为什么示波器阻抗一般是1M欧或者50欧
- CentOS6.5搭建MySQL5.1主从复制
- 监听 oracle执行sql语句,oracle SQL语句的监控 - 数据库相关 - 7点测试网
- idea jar包重新依赖_分布式架构系列:jar包依赖管理
- 结果导向的前提是过程控制
- 淘宝/天猫/1688拍立淘API接口(以图搜商品API接口,图片搜索API接口,图片搜索商品API接口)代码对接教程
- ffmpeg+nginx+dash调用摄像头直播
- 我跟OpenStack 1-8年,从ABC到HI、到KO
- TLS/SSL如何使用公钥加密
- 从“顶点小说”下载完整小说——python爬虫
- 关于Linux中使用USE(使用率/饱和度/错误)方法分析系统性能的一些笔记
热门文章
- 武汉大学和华中科技大学计算机,武汉大学和华中科技大学谁的实力更强?你根本猜不到...
- 2014-12-20 如果不加班我们就一起去联想玩敏捷吧!!!!
- 简单说说NODE_ENV
- c.小明今年12岁,他母亲比他大24岁。编写一个程序计算小明的母亲在几年后比小明的年龄大一倍,那时他们两人的年龄各是多少?
- 玩转数码之黑白魅力没法挡
- ubuntu忘记旧密码怎么修改密码?系统关机关不掉?
- Java-斗地主洗牌发牌
- github项目团队协作开发流程
- 如何查看java项目的路径_java如何获取项目路径?
- 敖丙大佬面试视屏学习(一)