本系列是算法通关手册LeeCode的学习笔记
算法通关手册(LeetCode) | 算法通关手册(LeetCode) (itcharge.cn)
本系列为自用笔记,如有版权问题,请私聊我删除。
目录
一,数据结构
数据结构即数据的组织结构,用于组织,存储数据。
研究的是数据的逻辑结构,物理结构以及他们之间的相互关系,并对这种结构定义相应的运算,设计出相应的算法,并确保,经过这些运算后得到的新结构仍然保持原来的结构类型。
而对于数据的结构,可分为逻辑结构和物理结构。
1.1 数据的逻辑结构
逻辑结构(Logical Structure):数据元素之间的相互关系
有四种逻辑结构
1,集合结构 :数据元素同属于一个集合,彼此之前没有联系。集合中的数据是无序的,且每个元素是唯一的,没有重复元素
2,线性结构:数据元素之间是一对一的关系。线性结构的类型包括数组,链表,以及由他们衍生出来的栈,队列,哈希表。
3,树形结构:数据元素之间是一对多的层次关系。如多叉树,字典树等。
4,图形结构:数据元素之间是多对多的关系。是一种比树形结构更复杂的非线性结构,用于表示物件与物件之间的关系。在图形结构中,任意两个节点之间都可能相关,即节点之间的邻接关系可以是任意的。图形结构包括无向图,有向图,连通图等。
1.2 数据的物理结构
物理结构(Physical Structure):数据的逻辑结构在计算机中的存储方式。
计算机内有多种存储结构,采用最多的是 顺序存储结构 和 链式存储结构。
1,顺序存储结构:将数据元素放在一片地址连续的存放单元里,数据元素之间的逻辑关系通过数据元素的存储地址来直接反应。
在顺序存储结构中,逻辑上相邻的数据元素在物理地址上也必然相邻。
优点是简单,易理解,且实际占用最少的存储空间。
缺点是需要占用一片地址连续的存储单元,并且存储分配要事先进行,另外对于一些操作的时间效率较低(移动,删除元素等)。
2,链式存储结构:将数据元素放在任意的存储单元里,存储单元可以连续也可以不连续。
链式存储结构中,一般将每个数据元素占用的若干单元的组合称为一个链接点。每个链接点不仅要存放一个数据元素的数据信息,还要存放一个指出这个数据元素在逻辑关系的直接后继元素所在的链接点的地址,即指针。
数据元素之间的逻辑关系是通过指针来间接反映的。
优点是存储空间不必事先分配,需要时可以临时申请,不会造成空间浪费;一些操作的时间效率远比顺序存储结构高(插入,移动,删除等)。
缺点是指针需要占用存储空间,空间开销大。
二,算法
算法(Algorithm):解决特定问题 求解步骤的准确而完整的描述;
在计算机中表现为一系列指令的集合。
简单而言,算法指的就是解决问题的方法。
2.1 算法的基本特性
算法就是一系列运算步骤,这些运算步骤可以解决特定的问题。
算法的特性有:
1,输入:对于待解决的问题,都要以某种方式交给待解决的算法;
2,输出:算法是为了解决问题存在的,最终总需要返回一个结果;
3,有穷性:算法必须在有限的步骤内结束,并且应该在一个可接受的时间内完成;
4,确定性:组成算法的每条指令每个步骤都必须精确定义而无歧义;
5,可行性:算法的每一步都必须具有可知执性,在当前环境条件下可以通过有限次运算实现。
总的来说,为某个问题设计算法时,要考虑到一般情况与各种特殊情况,在保证输入符合要求的情况下,算法能顺利解决。
2.2 算法追求的目标
一个算法的基本标准有三个
1,正确性:算法能够满足具体问题的需求;
2,可读性:算法遵循标识符命名规则,简洁易懂,注释语句恰当;
3,健壮性:算法对非法数据以及操作有较好的反应和处理。
而对于给定的问题,往往有多种算法解决,而不同的算法成本是不同的。一个优秀的算法,至少应该追求两个目标。
1,所需运行时间更少(时间复杂度更低);
2,占用内存空间更小(空间复杂度更低)。
三,总结
本篇是对数据结构和算法的概括部分
数据结构有逻辑结构和物理结构
逻辑结构指的是数据元素之间的关系,物理结构指的是这种关系在计算机中的表现形式。
算法就是解决问题的方法,对于某种特定问题,按照算法步骤执行,一定能够解决。
算法有五个特性与五个目标。
原文内容在这里,如有侵权,请联系我删除。