软件开发者面试百问-----在散列表和排序后的列表中找一个元素,哪个查找速度最快?

 在散列表和排序后的列表中找一个元素,哪个查找速度最快?

 

关于这个问题我感觉平均情况下散列表会比排序后的列表要快。
1.原理
  a.散列表的查找的原理依赖散列函数,而查找次数则有负载因子决定。
    与整个容量没有关系,也就是说与长度没有关系。
  b.排序后的列表查找跟列表的长度有直接关系。

 

2.查找时间复杂度
  a.散列表
  散列表所花费的时间主要在计算地址和发生冲突时再次散列所花费的时间。
  假设一个常见的情况:
  散列函数用开放式寻址法,
  负载因子是a=0.75(Java的HashMap的默认负载因子就是0.75)
  那么期望的探查次数最多是:1/a * ln(1/(1-a))  其中ln是自然对数
  也就是 1.8次左右。


  b.排序后的列表
  假设常见的二分查找法,时间复杂度是O(log(2)n) 其中log(2)表示以2为底的对数
  也就是n越大的时候,需要的查找次数越多。
 (其他的查找算法,比如费氏查找时间也快 不了多少)
 
  如果散列表每次查找的时间常数是T1, 排序后的列表的每次查找的时间常数是T2,
  很显然T1会比T2大很多,但是从上面的结果可以看出来,当列表的大小n逐渐增大,
  二分查找法所花费的时间也就会越多,而且会比散列表的时间要多。
 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值