⼀般来说,前四个效率⽐较⾼,中间两个差强⼈意,后三个⽐较差(只要N
⽐较⼤,这个算法就动不了了)。OK,继续前⾯的话题,应该如何选取数
据结构,我认为有以下⼏种可⾏的解决⽅案。
1、解决⽅案⼀:排序+List
我想到的第⼀种思路是:算出所有待加⼊数据结构的节点名称的Hash值放
⼊⼀个数组中,然后使⽤某种排序算法将其从⼩到⼤进⾏排序,最后将排序
后的数据放⼊List中,采⽤List⽽不是数组是为了结点的扩展考虑。
之后,待路由的结点,只需要在List中找到第⼀个Hash值⽐它⼤的服务器节
点就可以了,⽐如服务器节点的Hash值是[0,2,4,6,8,10],带路由的结点是7,
只需要找到第⼀个⽐7⼤的整数,也就是8,就是我们最终需要路由过去的服
务器节点。
如果暂时不考虑前⾯的排序,那么这种解决⽅案的时间复杂度:
(1)最好的情况是第⼀次就找到,时间复杂度为O(1)
(2)最坏的情况是最后⼀次才找到,时间复杂度为O(N)
平均下来时间复杂度为O(0.5N+0.5),忽略⾸项系数和常数,时间复杂度为
O(N)。
但是如果考虑到之前的排序,我在⽹上找了张图,提供了各种排序算法的时
间复杂度:
评论0
最新资源