满二叉树的结点
- 某层的:第K层——2^{k-1}2k−1
- 总共的:深度为m——2^{m}2m
- 满二叉树中,最后一层的结点个数就是叶子结点的个数
算法空间复杂度 / 有穷性
- 算法的空间复杂度:算法在运行过程中需辅助存储空间的大小。
- 算法的有穷性:一个算法必须在执行有限的步骤以后结束。
线性结构
线性表、栈和队列等数据结构所表达和处理的数据以线性结构为组织形式。
- 栈又称后进先出表
- 队列又称先进先出表
中序遍历
- “左根右”
首先遍历左子树,然后访问根结点,最后遍历右子树;
并且在遍历左、右子树时,仍然先遍历左子树,然后访问根结点,最后遍历右子树。
- 例题:
答案是:DBEAFC
后序遍历
- “左右根”
首先遍历左子树,然后访问右子树,最后遍历根结点;
并且遍历左、右子树时,仍然先遍历左子树,然后遍历右子树,最后访问根结点。
- 例题:
答案是:DEBFCA
算法基本特征
1、可行性
2、确定性
3、有穷性
4、拥有足够的情报
希尔排序法(插入类排序)
- 希尔排序法的基本思想是:将整个无序序列分割成若干小的子序列分别进行插入排序。所以希尔排序法属于插入类排序
算法是啥
- 是解题方案的准确而完整的描述
几个排序方法
- 快速排序的基本思想是,通过一趟排序将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,再分别对这两部分记录继续进行排序,以达到整个序列有序;
- 插入排序的基本操作是指将无序序列中的各元素依次插入到已经有序的线性表中,从而得到一个新的序列;
- 选择排序的基本思想是:扫描整个线性表,从中选出最小的元素,将它交换到表的最前面(这是它应有的位置),然后对剩下的子表采用同样的方法,直到表空为止;
- 归并排序是将两个或两个以上的有序表组合成一个新的有序表。
- 以上几个排序方法中,要求内存量最大的是归并排序。
顺序存储结构 / 链式存储结构
- 顺序存储结构中,数据元素存放在一组地址连续的存储单元中,每个数据元素地址可通过公式LOC(ai)=LOC(a1)+(i-1)L计算得到,从而实现了随机存取。
- 链式存储结构,要对某结点进行存取,都得从链的头指针指向的结点开始,这是一种顺序存取的存储结构。
在单链表中,增加头结点的目的
头结点不仅标识表中首结点的位置,而且根据单链表(包含头结点)的结构,只要掌握表头,就能够访问整个链表,因此增加头结点目的是为了便于运算的实现。
算法分析的目的
- 算法分析是指对一个算法的运行时间和占用空间做定量的分析,一般计算出相应的数量级,常用时间复杂度和空间复杂度表示。
- 分析算法的目的就是要降低算法的时间复杂度和空间复杂度,提高算法的执行效率。简单的说就是分析算法效率以求改进。
强连通图
在有向图中,若任意两个顶点都连通,则称该图是强连通图,这样的有向图的形状是环状,因而至少应有n条边。
线性表——栈
- 线性表可以顺序存储,也可以链式存储,而栈是一种线性表,也可以采用链式存储结构。
- 栈是后进先出表,当然栈是有记忆作用的。
基本排序算法的比较次数
假设线性表的长度为n,则在最坏情况下:
- 冒泡排序需要经过n/2遍的从前往后扫描和n/2遍的从后往前扫描,需要比较次数为n(n-1)/2
- 快速排序法的最坏情况比较次数也是n(n-1)/2
逻辑结构——存储结构——效率
- 一种数据的逻辑结构根据需要可以表示成多种存储结构。
- 常用的存储结构有顺序、链接、索引等存储结构。
- 采用不同的存储结构,其数据处理的效率是不同的。
所以一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理的效率。
线性结构 / 非线性结构
- 根据各数据元素之间前后关系的复杂程度,一般将数据结构分为两大类型:线性结构与非线性结构。
- 如果一个非空的数据结构满足下列两个条件,则称该数据结构为线性结构,又称线性表.
- 有且只有一个根结点;
- 每个结点最多有一个前件,也最多有一个后件。
- 线性表、栈与队列、线性链表都是线性结构,而二又树是非线性结构