【发布时间】:2011-02-15 09:46:45
【问题描述】:
这是this post 的新版本,以便将编程问题与概率问题隔离开来。
我想存储一些例如数组中 25 个随机生成的 1 到 365 之间的数字。但我需要跟踪重复项。以下是我的想法:
创建 4 个数组:一个主数组,一个用于 2 个副本的数组,一个用于 3 个副本的数组和一个用于 3 个以上副本的数组
将每个生成的数字一一添加到主数组中。但在这样做之前,请遍历数组以查看它是否已经存在。如果是这样,将其添加到第二个数组中,但在此之前重复上述过程,依此类推
在过程结束时,我可以计算每个数组中的非空值,以了解我有多少个唯一数字,有多少个出现两次等
这似乎不是一个非常有效的算法。有什么改进的建议吗?
我建议的方法可以被认为是大 O(n),即线性吗?
【问题讨论】:
-
您能否详细说明“跟踪重复项”?您想从这些数据中提取什么信息?
-
例如。您是否在估计两个随机的人共享同一生日的概率?
-
@Blorgbeard,我已经改写了这篇文章。我将在 1 和 365 之间生成 25 个随机数。我需要跟踪生成的任何数字的两倍或三倍或更多。当然,我不会总是得到重复,甚至更不可能重复三次,但我可能......所以我想捕获/计算此类事件
-
您需要保留生成数字的顺序吗?
-
我也相信你的算法在技术上是 O(1),但效率很低。由于最多有 365/6 个不同的生日,因此每个数组的最大大小为 365 个元素。遍历一个恒定大小的数组是 O(1),因为它不依赖于生成的生日数。但这并不意味着它很快。如果你知道你总是会生成