查找/索引技术

2020-06-23  本文已影响0人  BlueFishMan
查找算法 平均时间复杂度 空间复杂度 查找条件
顺序查找 O(n) O(1) 无序/有序
二分查找 O(log2n) O(1) 有序
二叉排序树 O(log2n)~O(n)
平衡二叉树 O(log2n)
红黑树 O(log2n)
哈希查找 O(1) O(n) 无序/有序
2-3树 O(log2n-log3n)
B树/B+树 O(log2n)

查找技术(内存)

线性表的查找技术

顺序查找(sequential search)

二分查找(binary search)

lower_bound

对于给定的一个值,在一个排序后的区间中找到第一个这样的位置,使得将这个值插入到这个位置前面时,不会破坏顺序

auto i = lower_bound(a.begin(), a.end(), 1);
cout << *i << endl;

upper_bound

对于给定的一个值,在一个排序后的区间中找到最后一个这样的位置,使得将这个值插入到这个位置前面时,不会破环顺序

auto i = upper_bound(a.begin(), a.end(), 2);
cout << *i << endl;

equal_range

对于给定的一个值,在一个排序后的区间中找到一个最大的区间,使得将这个值插入其中的任何位置,都不会破坏顺序

auto j = equal_range(a.begin(), a.end(), 3);
cout << *(j.first) << ' ' << *(j.second) << endl;

binary_search

如果排序后的区间中包含了与给定的值相同的值,则返回true,否则返回false

binary_search(a.begin(), a.end(), 4);

树表的查找技术

二叉排序树(binary sort tree)

左子树<结点<右子树

平衡二叉树(balance binary tree)

AVL树 -> |左子树深度-右子树深度| <= 1

红黑树(red-black tree)

散列表的查找技术

索引技术(文件系统/数据库系统)

线性索引

树形索引

2-3树(2-3 tree)

B树(B-tree)

一种平衡的多路查找树,主要面向动态查找,通常用在文件系统中

B+树(B+tree)

上一篇 下一篇

猜你喜欢

热点阅读