【问题标题】:Optimal data structure for streaming data流数据的最优数据结构
【发布时间】:2019-09-17 20:15:32
【问题描述】:

我有一个[id, name, act, value, type] 形式的数据流。

id 是整数,name 是字符串,act 可以是“添加”、“更新”或“删除”,value 是整数,typeL 或@ 987654328@。我们只能添加一次id,执行多次更新然后删除id。我显然在寻找一种数据结构,可以让我有效地插入这些数据。

我还需要能够以最快的方式在每个时刻通过name 获得最高的L 值和通过name 获得最低的R 值。

我相信我需要使用堆来获取恒定时间 minmax name 的值。我的问题是我无法找到一种方法来同时删除和更新现有数据。

【问题讨论】:

  • 每个节点的 BST 和字典?或者只是尝试熊猫数据框。
  • 请分享一些可测试的数据样本及其生命周期变化的案例
  • @YongkangZhao 我很难找到实现这种数据结构的方法。这就是我首先想到的,但是您如何比较 BST 中的两个词典?
  • 我认为您不想比较任何东西,只需使用字典直接查找您要查找的内容。如果您正在更新,只需从 bst 中删除该节点并插入一个新节点

标签: python containers


【解决方案1】:

这里的措辞有点不清楚。让我试着换个说法:你正在寻找一个好的数据结构,这样,给定上面给出的形式的操作流,你可以添加、删除或更新项目(使用它们的 ID 号找到)。而且您还想维护一些关于整个数据结构的汇总统计信息,例如最高 L 和最低 R 值。

这听起来正确吗?

如果您的 id 编号不在特定范围内,字典字典听起来可能是正确答案,如果是字典列表,则它可能是正确的答案。

【讨论】:

  • dict 的 dict 是否足以维持值之间的顺序?
  • 您按哪个项目排序值?
  • 按他们各自的名字。
【解决方案2】:

排序使这是一个不同的问题。因此,您正在寻找一种方法来添加和减去数据条目到按字符串名称按字母顺序排序的数据结构中?一种常见的方法是使用二叉搜索树。 BST 将为您提供 O(log(n)) 的插入时间复杂度,树中有 n 个元素。在每个元素上,您都可以存储其他数据。然后,您可以分别维护最高 L 和最低 R 值,并在每次添加超过这些值的值时更新这些值。如果删除等于这些限制之一的值,则必须遍历整个数据结构以获取新的限制值。

【讨论】:

  • 如果我解释得不好,那就太糟糕了。我希望能够为每个名称获得最高的 L 值和最低的 R 值。在我获取流数据的环境中,我认为这意味着在插入新值后立即为每个名称从最低到最高(反之亦然)排序值。无需订购字符串。
猜你喜欢
  • 2016-11-24
  • 1970-01-01
  • 1970-01-01
  • 2013-04-21
  • 1970-01-01
  • 2011-11-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多