首页 > 代码库 > 数据结构_2 查找

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

数据结构_2 查找