查找算法

顺序查找

顺序查找(Sequential Search)又称线性查找。从表中第一个(或最后一个)记录开始,逐个进行记录的关键字和给定值比较,若某个记录的关键字和给定值相等,则查找成功,如果查找到表中最后一个元素,还没有找到,则查找不成功。

二分查找

二分查找(Binary Search)又称折半查找。它的前提是线性表中的记录必须是关键码有序,线性表必须采用顺序存储。折半查找的基本思想是:在有序表中,取中间记录作为比较对象,若给定值与中间记录的关键字相等,则查找成功;若给定值小于中间记录的关键字,则在中间记录的左半区继续查找;若给定值大于中间记录的关键字,则在中间记录的右半区继续查找。不断重复上述过程,直到查找成功,或所有查找区域无记录,查找失败为止。

基于二分查找算法,将查找点的选择改进为自适应选择,可以提高查找效率。即根据要查找的关键字key与查找表中最大最小记录的关键字比较后的查找方法,其核心就在于插值的计算公式mid=low+(key-a[low])/(a[high]-a[low])(high-low),替换了二分查找的计算公式mid=low+1/2(high-low)。

这样的好处在于,对表长较长,且关键字分布比较均匀,插值查找算法的平均性能要比折半查找要好的多。但是如果表中关键字分布极端不均匀,那么插值查找还不如折半查找呢。

也是一种改进的二分查找,通过运用黄金比例的概念在数列中选择查找点进行查找,提高查找效率。

Read More

红黑树

定义

红黑树是一种自平衡二叉查找树,它可以在 O($\log(n)$ ) 时间内完成查找、插入和删除,这里的n是树中元素的数目。

红黑树是每个节点都带有颜色属性的二叉查找树,颜色为红色或黑色。在二叉查找树强制一般要求以外,对于任何有效的红黑树我们增加了如下的额外要求:

Read More

稀疏矩阵和广义表

定义

矩阵

矩阵是一个具有m行 x n列的数表,共包含m x n个数(元素),每个元素处在确定行和列的交点位置上,都与一对行号和列号唯一对应。
当一个矩阵中的行数和列数相同时,即m = n时则称为n阶矩阵或方阵。

稀疏矩阵(SparseMatrix)是矩阵中的一种特殊情况,其非零元素的个数小于零元素的个数。

对于稀疏矩阵中的每个非零元素,可用它所在的行号、列号以及元素这三元组(i,j,aij)来表示。若把所有的三元组按照行号为主序(即主关键字)、
列号为辅序(次关键字)进行排序,就构成一个表示稀疏矩阵的三元组线性表。

((1,1,3),(1,4,5),(2,3,-2),(3,1,1),(3,3,4),(3,5,6),(5,3,-1))

Read More

栈和队列

栈

栈(Stack),也叫后进先出表(Last In First Out),是一种运算受限的线性表,其限制是仅允许在表的一端进行插入和删除运算。这一端称为栈顶,栈顶的第一个元素被称为栈顶元素,
相对的,另一端称为栈底。向一个栈插入新元素称为进栈或入栈,从一个栈删除元素又称为出栈或退栈。

存储结构

栈分为顺序栈和链式栈,可以使用数组或链表(单向链表、双向链表或循环链表)作为底层数据结构。

顺序存储

链式存储

队列

队列(Queue),也叫先进先出表(First In First Out)仅允许在表的一端(队尾rear)进行插入,在表的另一端(队首front)进行删除。