zoukankan      html  css  js  c++  java
  • 数据结构_2 查找

    线性查找分为顺序查找、折半查找。

    顺序查找:

    折半查找: 

                第一: 数组必须有序,不是有序就必须让其有序。

                第二: 这种查找只限于线性的顺序存储结构。  

    •     线性查找时间复杂度:O(n);
    •          折半无序(用快排或堆排)的时间复杂度:O(NlogN)+O(logN);
    •          折半有序的时间复杂度:O(logN);

    哈希查找:

              ①:  key尽可能的分散,也就是我丢一个“6”和“5”给你,你都返回一个“2”,那么这样的哈希函数不尽完美。

              ②: 哈希函数尽可能的简单,也就是说丢一个“6”给你,你哈希函数要搞1小时才能给我,这样也是不好的。第一种:”直接定址法“。

    常用的做哈希的手法有“五种”: 

           第一种:”直接定址法“。

                      key=Value+C; 这个“C"是常量。

      第二种:“除法取余法”。

                      很容易理解, key=value%C;解释同上。

      第三种:“数字分析法”。 

      第四种:“平方取中法”。

      第五种:“折叠法”。

    解决冲突常用的手法也就2种:

      第一种: “开放地址法“。

                     所谓”开放地址“,其实就是数组中未使用的地址。也就是说,在发生冲突的地方,后到的那个元素(可采用两种方式:①线性探测,②函数探测)向数组后寻找"开放地址“然后把自己插进入。

      第二种:”链接法“。

                    在每个元素上放一个”指针域“,在发生冲突的地方,后到的那个元素将自己的数据域抛给冲突中的元素,此时冲突的地方就形成了一个链表。

    哈希查找时间复杂度O(1)。

    索引查找:

      第一:主表

      第二:索引项,一般我们会用函数将一个主表划分成几个子表,每个子表建立一个索引,这个索引叫做索引项。

      第三:索引表,索引项的集合也就是索引表。

      一般“索引项”包含三种内容:index,start,length

    1.      index,也就是索引指向主表的关键字。
    2.   start, 也就是index在主表中的位置。
    3.   length, 也就是子表的区间长度。

    索引查找时间复杂度O(n)+O(length)

    二叉排序树:

    1.   若根节点有左子树,则左子树的所有节点都比根节点小。
    2.        若根节点有右子树,则右子树的所有节点都比根节点大小。

      插入操作:O(LogN)。

           删除操作:O(LogN)。

           查找操作:O(LogN)。

  • 相关阅读:
    poj3669 广搜
    检索所有课程都选修的的学生的学号与姓名
    UVA10160 Servicing Stations
    uva11205 The broken pedometer 子集生成
    poj1101 the game 广搜
    poj3009 Curling 2.0 深搜
    poj 1564 Sum It Up 搜索
    HDU 2268 How To Use The Car (数学题)
    codeforces 467C George and Job(简单dp,看了题解抄一遍)
    HDU 2267 How Many People Can Survive(广搜,简单)
  • 原文地址:https://www.cnblogs.com/bingxin/p/7271400.html
Copyright © 2011-2022 走看看