【问题标题】:Reasonable size of a Tree and Dictionary树和字典的合理大小
【发布时间】:2009-06-29 10:38:17
【问题描述】:

我目前正在实现一个非常复杂的树结构,以允许近乎即时的数据访问,而不是对每个请求进行重新处理。

我只是想知道是否存在理论或实际限制树的大小变得太大,或者字典变得过于冲突填充而无法正确/快速运行的点?

一般的答案将不胜感激,但 C# 特定的信息会更好!

【问题讨论】:

    标签: c# dictionary tree size


    【解决方案1】:

    在 .NET 中,树或字典中的最大值为 2^31 - 1(可能会减少一些开销)。

    实际上,您可能早就用完了内存!

    如果树保持平衡,则搜索将保持大约。 O(log N)。

    字典对使用的底层算法更敏感,例如有许多具有不同特征的哈希方案。

    【讨论】:

    • 在字典中实际上没有这样的搜索,因为它的形状像一个倒楔形,每个新项目都被添加为每个其他项目的子项(如果您有非常了解网站的随机需求!=D)
    【解决方案2】:

    取决于你认为的大量。数百或数千应该没问题,但数百万可能值得寻找专门的东西。

    随着你的成长,一棵树会变慢,这取决于你的存储技术和重新平衡。

    字典应该是相当一致的,但请确保使用适合您可能存储的数据量的大小来构建它(也许 x2 是安全的)。

    【讨论】:

      【解决方案3】:

      this question - 这是我在 So 上回答的第一个 :)

      问题是构建包含大约 900,000 个项目的字典时性能缓慢。我将时间从 10 多分钟缩短到 0.34 秒。

      教训是,字典只和你的散列函数一样好,如果你能快速生成一个唯一的散列,它会像闪电一样运行。

      希望这会有所帮助,

      编辑:

      比较类并不重要,.net 字符串具有非常强大的哈希函数,因此 - 在字典中具有出色的性能。如果他一直使用单个字符串而不是字符串对,那家伙的问题就会“消失”。

      【讨论】:

      • 是的,我知道字典只有在使用强大的散列函数时才有用,但是我试图避免实现我自己的!当我在字符串上键入字典时,您的比较类没有那么有用,真可惜!
      猜你喜欢
      • 1970-01-01
      • 2016-05-22
      • 2011-11-24
      • 1970-01-01
      • 2016-10-01
      • 2014-03-30
      • 2020-02-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多