小甲鱼数据结构学习笔记——绪论

绪论

程序设计=数据结构+算法
数据结构就是数据元素相互间一种或多种关系的集合。

逻辑结构和物理结构

传统上,我们把数据结构分为逻辑结构和物理结构,主要研究逻辑结构,而物理结构是次要的。
逻辑结构:指数据对象中数据元素之间的相互关系。
物理结构:指数据的逻辑结构在计算机中的存储形式。

四大逻辑结构

集合结构:集合结构中数据元素之间的相互关系。
线性结构:线性结构中的数据元素之间是一对一的关系,有点像人体蜈蚣。。
树形结构:数据元素之间存在一种一对多的层次关系。
图形结构:数据元素是多对多的关系。按小甲鱼的说法就是杂交,emmmm(疑惑.jpg)

物理结构

研究物理结构就是研究如何把数据元素存储到计算机的存储器中。存储器主要针对内存而言,通常用文件结构来描述。
两种存储形式:顺序存储和链式存储
顺序存储结构:把数据元素存放在地址连续的存储单元里,其数据间的逻辑关系和物理关系是一致的。(不常用)例如数组结构。
链式存储结构:把数据元素存放在任意的存储单元里,这组存储单元可以是连续的,也可以是不连续的。
显然链式结构的数据元素存储关系并不能反映其逻辑关系,因此需要用一个指针存放数据元素的地址,这样来通过地址找到相关联数据元素的位置。

算法时间复杂度

定义:在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。算法的时间复杂度,也就是算法的时间量度。记作:T(n)=O(f(n))。它表示随问题n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐进时间复杂度,简称为时间复杂度。其中,f(n)是问题规模n的某个函数。
这样用大写O()来体现算法时间复杂度的记法,我们称之为大0记法。
一般情况下,随着输入规模n的增大,T(n)增长最慢的算法为最优算法;
推导大O阶的一般步骤
1.用常数1取代运行时间中的所有加法常数;
2.在修改后的运行次数中,只保留最高阶项;
3.如果最高阶项存在且不为1,则去除与这个项相乘的常数;
我个人的理解是对于一般算法,随着输入规模的无限增大,常数项以及非最高阶项都是可以忽略不计的,只需要研究最高阶项的项数,甚至最高阶项的系数都可以忽略。计算时间复杂度也就是计算循环代码块的循环次数
常见时间复杂度所消耗的时间从小到大:
O(1)2)3)n)n)
对于O(n3)之后的这些,由于n值的增大会使结果大到难以想象,因此没必要去讨论它们,也不会用这些复杂度的算法,因为很蠢。
通常除非特定指定,我们提到的运行时间都是最坏情况的运行时间。

算法空间复杂度

相比较于时间复杂度,算法的空间复杂度显得没有那么的重要
因为我们在写代码时,完全可以用空间去换时间
定义:空间复杂度(Space Complexity)是对一个算法在运行过程中临时占用存储空间大小的量度,记做S(n)=O(f(n))。比如直接插入排序的时间复杂度是O(n2),空间复杂度是O(1) 。而一般的递归算法就要有O(n)的空间复杂度了,因为每次递归都要存储返回信息。一个算法的优劣主要从算法的执行时间和所需要占用的存储空间两个方面衡量。
通常用时间复杂度来指运行时间的需求,用空间复杂度指空间需求(废话。。。)
当直接让我们求复杂度时,通常指的是时间复杂度。

本博客是用于自己学习小甲鱼数据结构的学习总结
B站地址为小甲鱼数据结构学习

你可能感兴趣的:(小甲鱼数据结构学习笔记——绪论)