【问题标题】:Best lookup data structure to store only the keys (Dictionary without value)仅存储键的最佳查找数据结构(没有值的字典)
【发布时间】:2013-12-27 06:48:53
【问题描述】:

.Net 中具有高性能查找的最佳数据结构是什么,例如二叉树实现,但只存储键(字符串键)?

我们只需要检查集合中是否存在某个键。喜欢:

Dictonary<string, object> myKeys;
myKeys.Add("key1", null);
myKeys.Add("key2", null);
// Dozens or hundreds keys

Assert.IsTrue(myKeys.Contains("key1")); 

【问题讨论】:

    标签: c# data-structures collections dictionary


    【解决方案1】:

    一个HashSet(在System.Collections.Generic):

    HashSet 是一个包含唯一元素的无序集合。它有 标准集合操作添加、删除、包含,但由于它 使用基于哈希的实现,这些操作是 O(1)。

    例如

        HashSet<int> evenNumbers = new HashSet<int>();
        HashSet<int> oddNumbers = new HashSet<int>();
    
        for (int i = 0; i < 5; i++)
        {
            // Populate numbers with just even numbers.
            evenNumbers.Add(i * 2);
    
            // Populate oddNumbers with just odd numbers.
            oddNumbers.Add((i * 2) + 1);
        }
    
        if (evenNumbers.Contains(2))
        {
            Console.WriteLine("2 is even.");
        }
    

    【讨论】:

    • HashSet 文档 (goo.gl/wu9xlh) 只是说它是“一组值”,没有更多的评论,没有关于算法的内容。虽然我们可以通过它的名字假设它的实现是“基于哈希的”,所以如果实现得当,它可能是 O(1),你为什么确定这一点?如何获得并确定这一点?拆机?
    • @Luciano:如果您查看HashSet.Add 和HashSet.Contains(以及其他方法)的文档,您会看到描述算法复杂性的注释。特别是,Contains 是 O(1),Add 是 O(1),只要内部数组不需要调整大小。
    • @JimMischel:漫不经心,但确实存在。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2013-01-14
    • 2015-02-10
    • 1970-01-01
    • 2021-01-12
    • 1970-01-01
    • 2015-09-24
    • 2012-04-18
    • 1970-01-01
    相关资源
    最近更新 更多