查找汇总(更新中......)

一、查找的定义

  查找(Searching)就是根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素(或记录)。

二、关于查找表

  查找表按照操作方式分有两种:静态查找表,动态查找表

  静态查找表(Static search Table):只作查找操作的查找表,主要操作有

    (一)查询某个特定的数据元素是否在查找表中

    (二)检索某个特定的数据元素和其对应的属性

  动态查找表(Dynamic Search Table):在查找过程中同时插入查找表中部存在的数据元素,或者从查找表中删除已经存在的某个数据元素。其主要操作有

    (一)查找时插入数据元素

    (二)查找时删除数据元素

三、顺序查找(Sequential Search)  【 针对无序序列的一种为简单的查找方式】

  又叫线性查找,是最基本的查找技术,查找过程是:

  从表中第一个(或最后一个)记录开始,逐个进行记录的关键字和给定值比较,若某个记录的关键字和给定值相等,则查找成功,找到所查的记录;如果直到最后一个(或第一个)记录,其关键字和给定值不相等,则表中没有所查的记录,查找失败。

  时间复杂度分析:

  最好情况:在第一个或最后一个就查找到了,算法的时间复杂度为O(1)

  最坏情况:在最后一个位置才找到,需要进行n次比较,时间复杂度为O(n)

  当查找不成功时,需要n+1次比较,时间复杂度为O(n)

  平均查找次数为(n+1)/2,所谓总的时间复杂度为O(n)

四、折半查找(Binary Search)

  针对已排序序列的一种查找方式,线性表必须采用顺序存储,要求序列中的元素基本不变,在需要做删除和插入操作的时候,会影响检索效率。

  折半查找的基本思想:在有序表中,取中间记录作为比较对象,若给定值与中间记录的关键字相等,则查找成功;若给定值比中间记录的关键值的字小,则在中间记录的左半区域继续查找;若大,则在中间记录的右半区域查找。不断重复其过程,直到查找成功,若所查找的区域无记录,则查找失败。

  时间复杂度:O(logn)

 

五、B树(二叉排序树 Binary Sort Tree)

  其要么是一颗空树,要么具有下列性质的二叉树

  (一)若左子树不为空,则左子树上所有节点的值均小于它的根节点的值

  (二)若右子树不为空,则右子树上所有节点的值都大于其根节点的值

  (三)它的左右子树也分别为二叉排序树

 

  二叉树的查找:

    时间复杂度与树的深度有关

    若根节点的关键字等于查找的关键字,则查找成功;若小于根节点的关键字值,递归查左子树,若大于根节点的关键字值,递归查右子树。若子树为空,查找失败

  二叉树的插入:

    首先执行查找算法,找出被插节点的父亲节点

    判断被插节点是其父节点的左儿子还是右儿子,将被插节点作为叶子节点插入,若二叉树为空。则首先单独生成根节点

  注意:新插入的节点总是叶子节点,所以算法复杂度是O(h)

  二叉树的删除:

    如果删除的节点没有孩子,则删除后算法结束;若只有一个孩子,则删除后该孩子取代被删除节点的位置

    如果删除的节点有两个孩子,则选择该节点的后继节点作为新的根,同时在该后继节点开始,执行前两种删除算法,删除算法结束。

六、B+树

 

七、散列表

 

 

posted @ 2015-10-24 18:11  SamSarah  阅读(138)  评论(0编辑  收藏  举报