ll_abc

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

本章内容主要为查找。

我们学习了顺序查找、二分查找、二叉排序树、平衡二叉树、B树、B+树。

一、顺序查找。

当查找成功的时候

ASL=(p1 x c1 +p2 x c2 +p3 x c3 +......+pn x cn )/n

当查找概率相同时,且顺序查找时,成功时

ASL = (C1+C2+C3+...+Cn) /n

优点:简单。

缺点:平均查找长度较大、查找效率低。当数据规模较大的时候,不宜。

 

二、折半查找

可以用链式存储、但是不能在对数时间内完成,因为不能做到随机存取

在一个数组里进行二分的查找时间复杂度不一定是log2 n ,因为还需要进行排序,使用冒泡、选择、插入的复杂度为n的平方,用快速排序为nlog(n)

复杂度:O(nlogn)+O(log2(n))

 

静态查找:二分查找

动态查找:因为要保持顺序表的有序性,对有序表进行插入和删除时,平均比较和移动表中其中一半的元素,比较费时。不宜。

 

缺点:当数据量太大时,不能进行二分查找,因为找一片连续的空间会超出内存,数据量很小且操作不耗时时,不需要二分。

 

三、二叉排序树

//二叉排序树的二叉链表表示
typedef struct
{
    keytype key;  //关键字项
    infotype otherinfo;  //其他数据项
}Elemtype;  //每个结点的数据类型

typedef struct BSTnode
{
    Elemtype data;
    struct BSTnode *lchild,*rchild;
}BSTnode,*BSTree;

定义:左子树都小于根结点的,右子树的都大于根结点

 

如果删除的结点左右不为空,则找左子树的最大值后删除找到的结点,而又转化成右子树为空的情况,或找右子树的最小值。

 

缺点:不采用二叉排序树时因为它的深度与输入的顺序密切相关,变成单叉树O(n) 会增加时间复杂度。

四、平衡二叉树

要判断左右子树的高度差。

左右子树的深度之差的绝对值不

访问该平衡二叉树的次数为深度log2 n

该查找方式解决了内存访问外存的次数。

 

五、B树、B+树

https://www.cnblogs.com/vincently/p/4526560.html

里面很详细,收获挺多。

 

散列表的查找

主要讲的时造表、查表 发生冲突如何解决

一、线性探测法

二、二次探测法

三、伪随机探测法

 

posted on 2019-06-02 23:38  ll_abc  阅读(141)  评论(0编辑  收藏  举报