名词解释: LCM(least common multiple):最小公倍数 H…
分类:基础算法
无向图基础
无向图是一种最简单的图模型,在这种图模型中,边仅仅是两个顶点之间的连接。我们用v-w的记法表示连接v和w的边,而w-v是这条边的另一种表示方法。 特殊的图。 自环:即一条连接一个顶点和其自身的边; 连接同一对顶点的两条边…
基于线性探索法的散列表
请先参阅深入理解散列表 散列表的另一种实现 用大小为M的数组保存N个键值对,其中M>N。我们需要依靠数组中的空位解决碰撞冲突。基于这种策略的所有方法被统称为开放地址散列表。 开放地址散列表中最简单的方法叫做线性探测…
基于拉链法的散列表
请先参考深入了解散列表 什么是基于拉链法的散列表? 对于散列算法的碰撞处理,一种直接的办法就是将大小为M的数组中的每个元素指向一条链表,链表中的每个结点都存储了散列值为该元素的索引的键值对。 这种方法称为拉链法,因为发生…
深入了解散列表
本次介绍主要为后面的基于拉链法和基于线性探索法的两种散列表做铺垫。谢谢大家!^.^ 什么是散列表? 如果所有的键都是小整数,我们可以用一个数组来实现无序的符号表,将键作为数组的索引而数组中键i处储存的就是它对应的值。这样…
深入理解红黑树(数据结构)
红黑二叉查找树是一种数据结构,即为实现2-3树而存在。对于之前的2-3树的插入算法并不难理解,下面将介绍红黑二叉查找树的简单数据结构来表达并实现它。实现红黑二叉查找树的意义在于能够二叉查找树中简洁高效的查找方法和2-3树…
深入理解平衡查找树
本次所写的平衡查找树完全是为了后面的红黑树做铺垫。 平衡二叉树已经能够更好地用于许多应用程序中,但是在最坏的情况下的性能还是很糟糕 理想情况下我们希望能够保持二分查找树的平衡性,在一棵含有N个结点的树中,我们希望树的高度…
深入理解二叉查找树
二叉查找树是一种能够将链表插入的灵活性和有序数组查找的高效性结合起来的符号表实现。即使用每个结点含有两个链接(链表中每个结点之只含有一个链接)的二叉查找树来高效地实现符号表。 详解二叉查找树 所使用的数据结构由结点组成,…
深入理解希尔排序
希尔排序是一种基于插入排序的算法,相较于插入排序一点一点的移动元素,希尔排序实现了快速移动一大步。 对于大规模乱序数组插入排序很慢,因为它只会交换相邻的元素,因此元素只能一点一点地从数组的一端移动到另一端。假如,如果主键…
简单理解选择排序
思路: 首先,找到数组中最小的那个元素,其次,将它和数组的第一个元素交换位置(如果第一个元素就是最小的元素那么它就和自己交换)。再次,在剩下的元素中找到最小的元素,将它与数组的第二个元素交换位置。如此往复,直到整个元素有…
深入理解插入排序
在玩纸牌游戏的时候,为了使手中牌变得有顺序,我们常常需要把随机抽取到的纸牌插入到合适的位置。 在计算机中为了要给插入的元素腾出空间,需要将其后的元素在插入之前都右移一位,这种算法叫做插入排序。 插入排序所需要的时间取决于…
深入理解归并排序
声明:图片来自于《算法》第四版。 何为归并? 即将两个有序的数组归并成一个更大的有序数组。 归并排序: 要将一个数组排序,可以先(递归地)将它分成两半分别排序,然后将结果归并起来。 归并排序示意图 优点: 它能够保证将任…