其实大家都使用过这些这些查找,只不过是没有留意到。
当你想找一个很久没联系的朋友聊天,可是你没给他备注,只记得他的微信名而且还不全:
比如,你只记得这人叫 …芳菲尽 前面给忘了。
那你该怎么办呢》
那么此时你可能会打开微信通信录,从第一个好友开始,顺序去找这个人,这就叫顺序查找,时间复杂度是
O
(
n
)
O(n)
O(n)。
换一种情况,而如果你知道他的昵称的前几个字,比如 人间…,那么你就可以直接滑到首拼为R的分组,然后在那一组里去查找这个人,因为在通信录中,微信已经把所有的人按照昵称首字母的顺序排列好了,相同首字母的人分成一组,每组顺序排列,此时你的查找方式就叫做索引顺序查找,根据
O
(
r
)
O(r)
O(r)的复杂度找到组,再用
O
(
d
)
O(d)
O(d)的复杂度找到那个人。这里面,r是分组的个数,而d是组内的人数。当然我们在组外和组内使用的是都是顺序查找,在组外也可以使用二分查找 这样的话 总的时间复杂度就是
O
(
l
o
g
2
r
)
+
O
(
d
)
O(log_2r)+O(d)
O(log2r)+O(d).
07-02
10-15
1115
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
09-05
745
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)