斐波那契查找就是在二分查找的基础上根据斐波那契数列进行分割的。在斐波那契数列找一个等于略大于查找表中元素个数的数F[n],将原查找表扩展为长度为Fn,完成后进行斐波那契分割,即F[n]个元素分割为前半部分F[n-1]个元素,后半部分F[n-2]个元素,找出要查找的元素在那一部分并递归,直到找到。
插值查找
我们很容易理解折半查找(二分查找),那么在折半查找原理的基础上我们会进一步思考,为什么一定要折半呢,而不是折四分之一,或者其他呢?比如说我们要搜索的值更接近最后一个元素,为什么还要从中间开始搜索,而不是从较后面的一部分开始搜索呢?因此研究学者们在折半查找的基础上进行了改进,以便更迅速准确的找到要搜素的目标值。
八皇后问题
八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。计算机发明后,有多种计算机语言可以解决此
LZW压缩算法
LZW压缩算法是一种压缩方法,由Lemple-Ziv-Welch 三人共同创造,用他们的名字命名。
算法概念
- LZW逐个地输入源数据,使用贪婪分析算法来形成词典的每一个条目。
- 每一次都力图从输入串中分解出已经识
哈希方法
链接法(开散列方法)
拉链法解决冲突的做法是:将所有关键字为同义词的结点链接在同一个单链表中。若选定的散列表长度为m,则可将散列表定义为一个由m个头指针组成的指针数 组T[0..m-1]。凡是散列地址为i的结点,均插入
哈希方法
直接定址法
直接定址法是以数据元素关键字k本身或它的线性函数作为它的哈希地址,即:H(k)=k或 H(k)=a×k+b ; (其中a,b为常数)例 有一个人口统计表,记录了从1岁到100岁的人口数目,其中年龄作为关
图
图的定义
图是由顶点的有穷非空集合和顶点之间边的集合组成。图可以用G = ( V , E )来表示,V表示顶点集合,E表示边集合,E中的边由A中的一对顶点连接而成。顶点总数为|V|,边的总数为|E|。
散列
通过一些计算,即散列函数(Hash function),把关键码值映射到数组中的特定位置来访问记录,这个过程称为散列。通过散列函数得到的固定长度的输出值就是散列值,一般关键码范围中的值比散列值多,有些不同关键码会被映射到相同的散列值的槽里,这种现象称为冲突(碰撞)。
散列方法
除法散列法
设hash(key)=key mod m,其中key表示被散列的关键字,而m则表示散列表的大小,mod则为取余操作。
这是一种比较简单的散列函数,但简单并不意味着高效。当待散列的元素之间存在某种模
堆
堆通是一种近似的完全二叉树,树上每一个结点对应数组中的一个元素。除最底层外,该树是完全充满的,且最底层的元素从左往右填入。
设计目的
: 在队列中,调度程序反复提取队列中第一个作业并运行,因为实际情况中某些时间较短的任务将等待很长时间才能结束,或者某些不短小,但具有重要性的作业,同样应当具有优先权。堆即为解决此类问题设计的一种数据结构。