0

我必须使用限制之间的随机数分配资源,比如 1 到 9。所以首先,我运行一个函数来获取 1 到 9 之间的随机数。然后我检查是否分配了任何资源,其索引等于随机数已生成的编号。如果它没有被分配资源,我分配它,否则我返回计算另一个随机数。它工作正常,但在某一点之后,效率会降低。当我达到分配 9 个资源中的 5 个或 6 个资源的程度时,我必须等待很长时间才能获得剩余的分配。我该如何优化呢?

这是算法:

  1. 获取资源。
  2. 生成一个随机数。
  3. 如果索引等于随机数的位置没有被分配资源,执行步骤4,否则执行5。
  4. 将资源分配到索引等于随机数的位置。
  5. 转到第 2 步。
4

1 回答 1

3

与其在循环中生成随机数,不如预先分配一个包含索引的数组并随机播放

indices = [0, 1, 2, ..., n)
shuffle(indices)
for i := 0; i < n; i++ {
    allocate(resource[i], indices[i])
}
于 2013-03-11T10:46:51.377 回答