我需要一本专门的词典。我的用例是这样的:用户想要指定值的范围(该范围也可以是单个点)并将值分配给特定范围。然后我们希望使用单个值作为键来执行查找。如果该单个值出现在某个范围内,那么我们将返回与该范围关联的值。
例如:
// represents the keyed value
struct Interval
{
public int Min;
public int Max;
}
// some code elsewhere in the program
var dictionary = new Dictionary<Interval, double>();
dictionary.Add(new Interval { Min = 0, Max = 10 }, 9.0);
var result = dictionary[1];
if (result == 9.0) JumpForJoy();
这显然只是一些代码来说明我正在寻找的内容。有谁知道实现这样的事情的算法?如果可以的话,他们能帮我指点一下吗?
我已经尝试实现自定义 IEqualityComparer 对象并在 Interval 上重载 Equals() 和 GetHashCode() 但到目前为止无济于事。但可能我做错了什么。
字典不是您所描述的操作的适当数据结构。
如果要求间隔永远不重叠,那么您可以构建一个间隔排序列表,然后二分查找它.
如果间隔可以重叠,那么你就有一个更难解决的问题。为了有效地解决这个问题,你需要构建一个区间树:
http://en.wikipedia.org/wiki/Interval_tree
这是一个众所周知的数据结构。请参阅“算法导论”或任何其他有关数据结构的像样的本科教材。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)