我有一个数组:
1 1A 2 2A 3 3A 4 4A 5 5A
我需要随机重新排列它,条件是:1a必须在1后面,2a必须在2后面…(不一定像11a)
重新排列后的预期结果如下:
1 4 2 4A 3 2A 5 1A 5A 3A
帮我找到最佳算法(速度最好)
最佳答案
你可以这样试试:
将元素分组到不同的队列中,以便具有某些“顺序”的所有元素都在同一队列中,例如[[1, 1A], [2, 2A, 2B], [3, 3A], ...]
随机选择其中一个队列,删除第一个元素并将其添加到结果中
重复此操作,直到所有队列都为空
如果部分排序更复杂,例如,如果某个元素a
必须在b
和c
之前,但在b
和c
之间没有部分排序,则可以对树或类似元素执行相同的操作。
另外,正如@vib所指出的,为了确保结果中元素的均匀分布,您应该选择不同的队列,其概率与该队列中剩余元素的数量成正比。
关于arrays - 重新排列阵列的算法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30527805/