【问题标题】:Most efficient data structure to use for distributions用于分发的最有效的数据结构
【发布时间】:2015-02-12 01:59:04
【问题描述】:

用例:

  • 元素的值介于 0 和 Infinity 之间
  • 用户可以进行如下查询:“给我前 30% 的元素中的最低值”

  • 我们可以存储 1000 个顶部元素,并且可以随时添加更多元素。

你可以使用什么数据结构来完成这项工作?


我认为向量可以在哪里工作,但对于插入和检索可能不是最有效的。

设想:保持数组排序。如果用户要求满足 30% 分布的最低元素,则执行 array.length * 0.7,并返回该元素。


【问题讨论】:

  • 有取舍。例如,数组在读取性能方面非常出色,但在添加和删除方面却很糟糕。二叉树非常适合以检索为代价进行修改。 B树介于两者之间
  • hmm 这让我想起了我读过的一篇关于体素引擎数据存储的文章。显然,最好的方法是将数据存储为换行字符串,并且每个运行长度都是间隔树的良好表示。 "0fps.net/2012/01/14/an-analysis-of-minecraft-like-engines"
  • 我们需要更多可能的查询和大小限制的示例。鉴于该示例,每个元素的排序数组,并选择长度 * 0.7 个元素,似乎是最好的。

标签: data-structures


【解决方案1】:

我肯定会选择二叉树,它可以很好地对数据进行分类,并且可以让您相对快速地获得想要的结果。

数组适用于插入或特定索引,但无论何时搜索键,都会遇到 O(n) 的最坏情况,这并不好。

二叉树的搜索算法为 O(log(n)),速度明显更快。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-09
    • 2013-03-05
    • 2022-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-03
    相关资源
    最近更新 更多