如何将范围映射到单个值?

时间:2015-07-09 15:43:20

标签: node.js language-agnostic

将范围映射到单个值的数据结构是什么?例如。 a的值为1-1000,b的值为1001-20000,这是回答“11234的关键是什么?”这一问题的有效方法。 (回答:b)。最直接的方法是查看所有键并检查范围是否包含搜索值,但似乎每个新键的性能会变差。

在我的特定情况下,我更喜欢node.js解决方案,但我想它应该没关系。

1 个答案:

答案 0 :(得分:1)

你可以使用任何平衡的树。按下限排序范围,但在节点中保留有关上限的信息,当然也包括映射值。

   1001 (20000, a)
  /
1 (1000, b)

然后当您查找密钥x时,请始终返回不超过x的最大密钥。它是标准的二叉树查找O(log n)。在节点中,您可以获得有关范围的信息,以便检查x是否在范围内。

当您查找11234时,您将获得节点1001 (20000 b)。 11234在1001-20000之内,因此您的值为b。如果你找0,你会得到null / none,所以你的密钥没有映射。如果您寻找1000,5,您将获得1 (1000 a)。 1000,5超出了该范围,因此您的密钥未映射。

当然你的范围不能重叠