2015年7月3日,也就是研一快要结束的时候,我开始学习数据结构与算法,之前也是稍微接触了一些这方面的东西,由于是跨专业,所以需要狂补专业课的知识,因此,我计划用暑假时间系统的学习一下,由于下学期初要确定研究方向,初步决定,先学习一下数据结构与算法,然后是算法导论,接着就系统的学习Java。后边再根据学习情况做相应的调整。
今天,我第一次学习数据结构与算法,总结一下今天所学的。
一、数据结构
1,数据结构是一门研究费数值计算的程序设计问题中的操作对象以及它们的关系和操作等相关问题的学科。
程序设计=数据结构+算法
分为逻辑结构与物理结构
1.1 逻辑结构-数据对象中数据元素之间的相互关系
主要有集合结构、线性结构、树形结构、图形结构
1.2物理结构--如何把数据元素存储到计算机的存储器中,主要是存储问题
存储形式有顺序结构、链式结构(用指针存放数据元素的地址)
二、算法(与数据结构是好基友,一辈子的关系)
计算1+2+3+4+……+100
C语言
int i,sum=0,n=100;
for(i=1;i<=n;i++)
{
sum=sum+i;
}
printf("%d",sum);
高斯算法:
int i=0,sum=0,n=100;
sum=(1+n)*n/2;
printf("%d",sum);
算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。
一个问题可以由多个算法解决,但一个算法不可能具有同届所有问题的能力。
五个特征:输入、输出、有穷性、确定性和可行性
1输入
零个或多个输入;输入参数是必要的
2 输出
一个或多个输出;输出的形式可以是打印输出,也可以是返回一个或多个值
3 有穷性
算法在执行有限的步骤之后,自动结束而不会出现无限循环,且每一步骤在可接受的时间内完成
4 确定性
具有确定的含义,不会出现二义性;在一定条件下,只有一条执行路径,相同的输入只能有唯一的输出结果;每个步骤都应该被精确定义而无歧义
5 可行性
每一步都必须是可行的,即每一步都能够通过执行有限次数完成。
算法设计的要求
正确性--算法至少应该具有输入,输出和加工处理无歧义性,能正确反映问题的需求,能够得到问题的正确答案。
4个层次:1)不能够有语法错误;2)对于合法输入能够产生满足要求的输出;3)对于非法输入,能够产生满足规格的说明;4)对于故意刁难的测试输入都有满足要求的输出结果。
可读性--便于阅读,理解,交流
健壮性--当输入数据不合法时,能做出相关处理而不是产生异常、崩溃或莫名其妙的结果
时间效率高和存储量低
事后统计方法:需要边测试程序,测试环境不同
事前分析估算方法:在计算机程序编写前,一句统计方法对算法进行估算。
因素:1)算法采用的策略、方案;2)编译产生的代码质量;3)问题的输入规模;4)机器执行指令的速度
在分析程序运行时间时,最重要的是把程序看成独立于程序设计语言的算法或一系列步骤。
函数渐近增长
判断规律总结:与最高次项相乘的常数可以忽略;常熟可以忽略;最高次项的指数越大,增长越快;常数和其他次要项常熟可以忽略,而应该关注最高项的阶数