查找2

103 阅读2分钟

「这是我参与2022首次更文挑战的第27天,活动详情查看:2022首次更文挑战」。

分块索引

要使得分块有序,就必须得把数据集的记录分成若干块,并且要满足:

块内无序,即每一块内的记录不要求有序。
块间有序,即块和块之间得标记,使其有序排列。
这就好比书籍的目录就像索引表,每篇文章相当于一个块,排版根据其顺序得有序排列,而每篇文章内的内容由书写者自己排列。
最大关键码,它存储每一块中的最大关键字,其优点为下一块的最小关键字也比上一块最大关键字大,使得其能有序排列。
存储了块中的记录个数,方便循环使用。
用于指向块首元素的指针,方便对其进行遍历。

倒排索引

索引项的通用结构是:次关键码,记录号表,记录号表存储具有相同次关键字的所有记录的记录号。

二叉排序树

又叫二叉查找树。 性质:

若其左子树不为空,则左子树上所有结点的值均小于它的根结点的值;
若其右子树不为空,则右子树上所有结点的值均大于它的根结点的值;
其左右子树也是二叉排序树。

结构定义:

typedef struct BiTNode
{
    int data;
    struct BiTNode *lchild,*rchild;
}BiTNode, *BiTNode;

二叉排序树是以链接的方式存储,保持了链接存储结构在执行插入或删除操作时不用移动元素的优点,只要找到合适的插入和删除位置后,修改链接指针。其还有可能存在不平衡的情况。

平衡二叉树(AVL树)

继二叉排序树后,我们为了降低其时间复杂度,继续延伸出平衡二叉树。 平衡二叉树首先是一种二叉排序树,其每一个结点的左子树和右子树的高度至多差1,它是一种高度平衡的二叉树。左子树深度减去右子树深度的值为平衡因子BF。

距离插入结点最近的,且|BF|大于1的结点为根的子树,我们称为最小不平衡子树。

平衡二叉树结构:

typedef struct BiTNode
{
    int data;
    int bf;
    struct BiTNode *lchild ,*rchild;
}BiTNode,*BiTree;

多路查找树(B树)

每一个结点的孩子可以多于两个,且每一个结点可以存储多个元素。这是一种平衡的多路查找树。