插入和删除 ----- 查找 是一对矛盾体。 对于无序数据结构,插入和删除的效率高,查找的效率可能就低。为了平衡插入和删除以及查找的效率,可以使用二叉排序树。
按照中序遍历的方法遍历二叉排序树,可以获得一个由小到大的排序数列。
二叉排序树首先是查找,插入的时候,是要先查找,找不到的时候才插入,根据大小插入左右子树。
二叉排序树的删除,这个比插入更复杂
如果删除的是叶子节点,可以直接删除;如果是只有左子树或者右子树,删除这个双亲节点的时候,把左子树接上上一个节点就好。
如果删除的这个节点,是双亲节点,而且具有左子树与右子树。这个情况比较复杂。这个时候删除不是删除存储空间,而是对数据进行替换,双亲节点需要被左子树的最大值或者右子树的最小值进行替换
二叉排序树的查找效率取决于生成的二叉树的数据的排列(树的形状),这个使二叉排序树的查找效率受到了限制,所以有了平衡二叉排序树。可以避免查找的复杂度由O(log2N)退化为O(n)
由于内存和磁盘的速率关系,当数据量较大的时候,内存的容量不足以存储所有的数据,所以需要从磁盘里面读入读出,而磁盘的速率是远小于内存的速率的,所以为了提高访问的数速率,所以需要减少对磁盘的访问,尽可能的使用对内存的访问,能够明显提高效率,也就是使每一次访问的数据量更多,所以有了多路查找树。
由于二叉树存储结构只有两个孩子,每个节点只能存储一个数据,所以应该在内存里应该设计一种存储结构,让每个节点可以存储多个元素,并且可以有多个孩子。
23树由2节点和3节点构成,是高度平衡的二叉排序树
顺序表查找,有序表查找,散列表(哈希表)查找
散列技术中有对应关系,而顺序查找和有序查找中,虽然也有key以及存储位置,因为没有这个对应关系,所以要一个一个比较,而哈希表中有这种关系,可以根据关键字直接对应到存储位置。
散列表一对一查找,效率高,而且这个关键字必须唯一
所以其中最关键的是散列函数