前言
技术学得再多,再好还不如将基础学扎实。欠下的迟早是要还的。与其在以后后悔当初不好好学,还不如在大学期间将该学的知识学透。《数据结构与算法》确实不好学,但大学四年下来,还怕啃不下一本书??正是基于这样的目的,我又重新拿起了数据结构,但盲目的自学只会毁了你(效果不大)。老规矩,学习方式还是通过视频+编程+书籍三管齐下,最后通过博客输出实现实时回顾。希望每天能按质按量的学习吧!!!
数据元素的基本概念
1.数据
数据(data)是信息的载体,
2.数据元素
数据元素是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。而构成数据元素的不可分割的最小单位称为数据项。
3.数据结构
数据结构是指相互之间存在一定关系的数据元素的集合。数据元素是讨论数据结构时涉及的最小数据单位,其中的数据项一般不考虑。按照视点的不同,数据元素是讨论数据结构分为逻辑结构和存储结构。
逻辑结构
根据元素逻辑关系的不同分类:
①集合:数据元素之间就是"属于同一集合"
②线性结构:数据元素之间存在一对一的线性关系。
③树结构:数据元素之间存在一对多的层次关系。
④图结构:数据元素之间存在多对多的层次关系。
存储结构
数据的存储结构又成为物理结构,是数据及逻辑结构在计算机中的表示。
通常又两种存储结构:顺序存储结构和链式存储结构。
顺序存储结构是用一组连续的存储单位依次存储数据元素,数据元素之间的逻辑关系由元素的存储位置来表示。链式存储是用一组任意的存储单位存储数据元素,数据元素之间的 逻辑关系用指针表示。
算法的基本概念
1.什么是算法?
算法是对特定问题求解步骤的一种描述,是指令的有限序列。
2.什么是“好”算法
好算法满足算法的五个特性:
① 正确性 ②健壮性 ③可理解性 ④高效性
算法的描述方式
①自然语言 ✎优点:容易理解。缺点:冗长。
②流程图 ✎优点:直观易懂。缺点:灵活性差。
③程序设计语言 ✎优点:能由计算机直接执行。缺点:抽象性差。
④伪代码 ✎优点:介意自然语言和设计语言之间,比较适合描述算法。被称为“算法语言”或第一语言。
3.算法分析
如何去度量一个算法的效率呢?通常有两种方法:一种方法是事后统计法,先将算法实现,然后输入适当的数据运行,测算时间和空间开销。通常我们采用事前分析估计的方法——渐进复杂度
4.算法的时间复杂度
为了客观反映一个算法的执行时间,可以用算法中基本语句的执行次数来度量算法的工作量。基本语句是执行次数与整个算法的执行次数成正比的语句,基本语句对算法的运行时间贡献最大,是算法中最重要的操作。
算法分析举例
++x;
++x是基本语句,执行次数为1,时间复杂度为o(1),称为常量阶。
for(i=1;i<=n;i++)
{
x+=5;
}
x+=5是基本语句,执行次数为n,时间复杂度为O(n),称为线性阶。
for(j=1;j<=n;j++)
for(i=1;i<=n;i++)
{
++x;
}
++x是基本语句,执行次数为,时间复杂读为O(),称为平方阶。
for(i=1;i<=n;++i)
for(j=1;j<=i-1;++j)
++x;
解:++x是基本语句,执行次数为:,所以时间复杂度为O(n2)。分析的策略是从内部(或最深层部分)向外展开。
for(i=1;i<=n;i=2*i)
++x;
解:++x是基本语句,设其执行次数为T(n),则有2T(n)≤n,即T(n)≤log2n,所以时间复杂度为O(log2n),称为对数阶