数据结构与算法学习笔记(一)基本认识

算法的定义:模型分析的一组可行的、确定的和有穷的规则。
通俗讲,算法代表了用系统的方法来描述解决问题的一种策略机制。
算法的基本任务,就是对一个具体的问题找到一个高效的处理方法,从而获得最佳的结果。

1、一个典型的算法,包含5个基本的特征:有穷性、确切性、输入、输出和可行性。

  1. 有穷性:指令或者步骤的执行次数必须是有限的,执行时间也是有限的;
  2. 确切性:每个指令或者步骤都必须有明确的定义和描述;
  3. 输入:有相应的输入条件;
  4. 输出:有明确的输出结果;
  5. 可行性:执行步骤是可行的,且在有限的时间内完成;

2、算法的分类:

  1. 按照应用分类:基本算法、数据结构相关的算法、几何算法、图论算法、规划算法、数值分析算法、加密/解密算法、排序算法、查找算法、并行算法和数论算法;
  2. 按照确定性分类:确定性(结果唯一)、非确定性(结果不唯一);
  3. 按照算法的思路分类:递归算法、递推算法、穷举算法、贪婪算法、分支算法、动态规划算法、迭代算法等;

3、算法的评价指标:

  1. 时间复杂度(程序运行花费的时间,只能预估);
  2. 空间复杂度(执行过程中,消耗的内存空间的多少);

4、常用的基本算法:串行计算(单线程)、并行计算(多线程)(多核心处理器、多台计算机的分布式并行计算)(目前常用的并行算法:划分法、分治法、平衡树法、倍增法/指针跳跃法、流水线法、破对称法等;遗传和进化算法等);

5、数据结构是计算机对数据的存储和组织形式;数据结构 + 算法 = 程序;数据结构是抽象数据类型ADT的物理实现;数据结构不同,计算的复杂程度也不同,故数据结构是算法的基础;

6、数据结构包含三个方面,数据的逻辑结构、存储结构、数据的运算:

1)一个数据结构是由数据元素依据某种逻辑联系组织起来的,对数据元素间逻辑关系的描述称为数据的逻辑结构。数据结构的逻辑结构大致分为:

  • 线性结构(所有节点最多只有一个直接前趋节点、一个直接后继节点;典型的线性结构:线性表、栈、队列、串) ;
  • 非线性结构(所有节点可能有多个直接前趋节点、多个直接后继节点;典型的线性结构:数组、广义表、树、图);

2)数据的存储结构是其在计算机中的表示,也就是数据结构的实现形式;

  • 数据的存储结构:顺序存储(内存单元是连续的)、链接存储(内存单元不一定连续,数据项包含了数据和下一个节点的地址)、索引存储方式、散列存储方式(按照节点的关键字计算出该节点的存储地址)

3)同一个逻辑结构可以有不同的存储结构,例如线性表,采用顺序方式存储,这种数据结构就是顺序表; 采用链式方式存储,就是链表;采用散列方式存储,就是散列表;

4)同一种逻辑结构也可以有不同的数据运算集合,例如线性表,如果只在一端进行插入运算,另一端进行删除运算,则就是队列; 如果在同一端口进行插入和删除运算,则就是栈;

7、常用的数据结构:

  • 数组(array):可以有多维的表现形式;
  • 栈(stack):只能在表固定的一端进行数据的插入和删除操作(汇编语言中,常用来及逆行重要数据的现场保护);
  • 队列(queue):只能在一端(队尾)进行插入,另一端(队头)进行删除操作;
  • 链表(linked list):每个数据点包含:数据域和指针域(指向下一个数据的存放的地址);链表结构中的逻辑顺序,是通过链表中的指针链接次序来实现的;
  • 树(tree):非线性结构;
  • 图(graph):非线性结构;数据结点一般称为顶点,边是顶点的有序偶对;
  • 堆(heap):堆是一种特殊的树形结构,一般讨论的都是二叉堆;堆的特点:根节点的值是所有节点中最大或者最小的,并且根节点的两个子树也是一个堆结构;
  • 散列表/哈希表(hash):,是根据关键码值(Key value)而直接进行访问的数据结构;用散列函数把关键码值映射到表中一个位置来访问记录,以加快查找的速度,存放记录的数组叫做散列表;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白要努力sgy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值