随机使用一组索引从 1 到 N 的元素



在这个问题中,我有一组从 1 到 n 索引的元素。每个元素实际上对应于一个图形节点,我正在尝试计算节点之间的随机一对一匹配。为了简单起见,我忽略了实际问题的进一步细节。我需要编写一个快速算法来随机消耗这些元素(节点(并多次执行此操作以计算不同的匹配。这里的目的是为另一种算法创建随机输入,并且此算法结束时的每个计算匹配将成为该算法的另一个输入。

我能想到的最基本的算法是以数组的形式创建元素的副本,生成随机整数,并将它们用作数组索引来应用交换操作。这样,每个随机副本都可以在 O(n( 中创建,但实际上,它使用大量的复制和交换操作。性能非常重要,我正在寻找实现这一目标的更快方法(算法和数据结构(。它只需要满足两个条件

  1. 它应该能够消耗随机元素。
  2. 它应该能够使用给定索引上的元素。

我试图写得尽可能清楚。如果您有任何问题,请随时提问,我很乐意澄清。提前谢谢。

注:匹配是一种操作,如果图形上的顶点之间存在边,则可以将它们配对。

Shuffle 索引数组(例如,使用 Fisher-Yates shuffling(

ia = [3,1,4,2]

遍历索引数组并使用当前索引"消耗"设置元素

for x in ia:
consume(Set[indexed by x])

因此,对于此示例,您将获得订单Set[3], Set[1], Set[4], Set[2]

没有元素交换,只更改整数数组

最新更新