• 数据结构_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)。

  • 相关阅读:
    14.3 Go iris
    14.2 Go性能优化
    14.1 Go数据结构
    13.3 Go章节练习题
    13.2 Go练习题答案
    13.1 Go练习题
    12.1 Go nsq
    11.3 Go 开发博客
    11.2Go gin
    11.1 Go Http
  • 原文地址:https://www.cnblogs.com/bingxin/p/7271400.html
Copyright © 2020-2023  润新知