【发布时间】:2020-09-19 00:03:32
【问题描述】:
我正在 coursera 中学习算法课程。其中一项作业如下:
随机队列。随机队列类似于堆栈或队列, 除了删除的项目是在项目中均匀随机选择的 在数据结构中。
我正在尝试找到一种在恒定时间内实现出队(随机删除项目)的方法。我想到了一个想法来做这个需要一个双端队列(它支持在恒定时间内从前面和后面删除和添加一个项目)。我的想法如下:
- 使用双端队列作为随机队列中的底层数据结构
- Enqueue - 使用库函数生成介于 0 和 1 之间的整数。如果整数为 0,则将该项目添加到双端队列的前面。否则,将其添加到后面。
- 出队 - 任何方向都可以。
随机性发生在入队而不是出队中的原因是因为我发现它不是完全随机的(例如,对入队的 n 次调用将使出队仅返回第一个或第 n 个项目)。因此,为了确保这些项目被随机删除,我决定将它们随机排入队列。
这个想法对我来说似乎不错,因为我找不到其中的漏洞,但问题是我无法证明我的想法真的可行。我对随机性了解不多。事实上,这只是我第 5 次使用随机数据结构。
我的想法正确吗?它会生成一个随机删除项目的数据结构吗?
【问题讨论】:
标签: algorithm random data-structures queue deque