【发布时间】:2013-02-12 10:18:40
【问题描述】:
我有一个对象数组 A,每个对象都有公共字段 Value (double),其具有介于 0 和 1 之间的随机双精度值。A 按此字段排序。我创建双随机 = 0.25。现在我想用 A[index].Value >= random 从 A 中找到第一个对象。我可以用 int index = Array.BinarySearch() 以某种方式做到这一点吗?
【问题讨论】:
-
听起来,因为您想要 不精确 匹配的 first 项,二分查找算法所能做的最多就是隔离“足够小”范围供您迭代,但我可能弄错了。
-
@AnthonyPegram 你错了,二分搜索正是他想要的,问题是他没有与数组相同类型的对象,他只有他想要比较的值在。从逻辑上讲,二分搜索可以工作,只是他可能无法使用二分搜索的
Array实现。 -
@Servy,你可能是对的,我在脑子里想通了。他必须在找到初始匹配后继续搜索(即使是精确的),直到他满意是否找到了匹配的连续第一次出现。我在想,一旦找到任何匹配项,典型的二分搜索就会很高兴地返回。 (我注意到我在算法领域非常无能,没有学过 CS 专业,也没有填补这些空白。)
-
@AnthonyPegram
Array.BinarySearch如果找到完全匹配,将返回一个索引,如果没有匹配,则返回给定项目所属索引的按位补码,因此从结果中您已经知道是否它是否找到了完全匹配。如果存在完全匹配,您可能确实需要添加一些特殊处理来支持数组中的重复项。
标签: c# search binary custom-type