【问题标题】:python - data structure for fast add, remove, and random choice [duplicate]python - 用于快速添加、删除和随机选择的数据结构
【发布时间】:2019-03-09 19:50:54
【问题描述】:

我需要一个用于添加项目、删除项目和选择随机项目的数据结构。

根据我的阅读,我认为从带有random.choice 的列表中选择一个随机项目需要恒定的时间。但是,从列表中删除一个项目需要 O(n) 时间。

另一方面,从/到集合中删除和添加项目需要 O(1) 时间,但从具有 random.sample 的集合中选择随机元素需要 O(n) 时间。

有没有办法在 O(1) 时间内支持这三个操作?

【问题讨论】:

  • 洗牌,弹出项目。洗牌是 O(n) ,弹出是 O(1)

标签: python python-3.x data-structures


【解决方案1】:

为什么不使用字典? 我知道这有点奇怪,但平均而言 dict 查找和插入是 O(1)。而且你可以在它上面使用 random.choice 因为它支持索引!

这是一个图表,显示了在 dict 上使用 random.choice 所需的时间。 x轴是dict的大小,y轴是时间。

【讨论】:

  • 从源代码中,random.choice(d) 从 0 到 len(d) 的整数 i 中选择一个随机整数并返回 d[i]。如果您建议使用项目作为键并且项目不是整数,那么这将导致 KeyError。
  • 您可以为每个元素使用唯一的整数。例如插入的时间。
  • 假设d[0] = item0d[2] = item2。如果调用 d[1] 并且永远不会选择 d[2],这可能会导致 KeyError。同样,数据结构也需要支持快速添加和删除。
  • 你是对的..
  • 另一种方法是使用计数器,并将其用作每个元素的键。这不是最漂亮的解决方案,但它很有效。
猜你喜欢
  • 2014-03-04
  • 2013-04-06
  • 2010-10-27
  • 1970-01-01
  • 2014-02-06
  • 1970-01-01
  • 1970-01-01
  • 2011-07-09
  • 2014-03-06
相关资源
最近更新 更多