【问题标题】:Ruby#index Method VS Binary SearchRuby#index 方法 VS 二分查找
【发布时间】:2011-11-18 03:59:58
【问题描述】:

给定一个元素和一个数组,Ruby#index 方法返回元素在数组中的位置。我使用二进制搜索实现了自己的索引方法,期望我的索引方法会优于内置索引方法。令我惊讶的是,在一项实验中,内置的运行速度大约是我的三倍。

任何 Rubyist 知道原因吗?

【问题讨论】:

  • 谁说 Ruby #index 方法还没有通过二分搜索实现?而且,谁说这个方法是用 Ruby 实现的? :-)
  • @Platinum Azure 哦,我明白了,它可能在 C 中通过二分搜索实现。非常感谢!

标签: ruby indexing binary-search


【解决方案1】:

内置#index is not a binary search,只是简单的迭代搜索。但是,它是用 C 而不是 Ruby 实现的,所以自然会快几个数量级。

【讨论】:

  • 谢谢。不过,这真的很奇怪。他们没有采用二分搜索方法有什么原因吗?
  • 二进制搜索涉及能够比较两个元素,而不是仅仅能够查看两个元素是否相等。另请注意,文档说它返回与参数相等的 first 对象——二分搜索并不总是返回该元素。此外,我的#bsearch 版本(假设数组已排序)似乎并不比#index 慢:gist.github.com/1220440
  • 我假设您的#bsearch 实现能够通过二分搜索和顺序搜索之间的差异来击败 Ruby 和 C 之间的差异?
  • 二分搜索还需要一个排序数组,即 O(n log n) - 所以如果 #index "knew" 它会被调用足够多的次数,那将是值得的,但不是一般情况。
  • @jkebinger 是的。我忘了提到我的数组是一个排序的。感谢您的意见!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-08
  • 1970-01-01
  • 1970-01-01
  • 2018-07-15
  • 1970-01-01
  • 2011-10-21
相关资源
最近更新 更多