O(1)从范围中的键中查找值

时间:2014-01-14 22:59:07

标签: data-structures language-agnostic range key-value

什么样的数据结构允许我从一组有序的类似范围的键中获取给定键的相应值,其中我的键不一定在集合中

考虑,[关键,价值]:

[3, 1]
[5, 2]
[10, 3]

查看3或4将返回1,5 - 9将返回2而10将返回3. 范围 不是恒定大小

如果可能的话,

O(1)或喜欢 -O(1)很重要。

3 个答案:

答案 0 :(得分:2)

平衡的二叉搜索树会给你O(log n)。

答案 1 :(得分:0)

关键索引数组怎么样?说,你知道你的密钥低于1000,你可以简单地用int[1000]填充值,如下所示: [0,0] [1,0] [2,0] [3,1] [4,1] [5,2] ...... 等等。这将给你o(1)性能,但巨大的内存开销。

否则,哈希表是我所知道的最接近的。希望能帮助到你。 编辑:查找red-black tree,它是一个自平衡树,最糟糕的情况是o (登录)搜索。

答案 2 :(得分:-2)

我会在这种情况下使用i Dictionary。使用其键检索值非常快,接近O(1)

        Dictionary<int, int> myDictionary = new Dictionary<int, int>();
        myDictionary.Add(3,1);
        myDictionary.Add(5,2);
        myDictionary.Add(10,3);

        //If you know the key exists, you can use
        int value = myDictionary[3];

        //If you don't know if the key is in the dictionary - use the TryGetValue method
        int value;
        if (myDictionary.TryGetValue(3, out value))
        {
            //The key was found and the corresponding value is stored in "value" 
        }

了解更多信息:http://msdn.microsoft.com/en-us/library/xfhwa508.aspx