线性查找分为顺序查找、折半查找。
顺序查找:
折半查找:
第一: 数组必须有序,不是有序就必须让其有序。
第二: 这种查找只限于线性的顺序存储结构。
- 线性查找时间复杂度: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
- index,也就是索引指向主表的关键字。
- start, 也就是index在主表中的位置。
- length, 也就是子表的区间长度。
索引查找时间复杂度O(n)+O(length)
二叉排序树:
- 若根节点有左子树,则左子树的所有节点都比根节点小。
- 若根节点有右子树,则右子树的所有节点都比根节点大小。
插入操作:O(LogN)。
删除操作:O(LogN)。
查找操作:O(LogN)。
时间: 2024-10-07 05:57:04