我想为许多牧师制定时间表。条件是:
我不能使用random(1到12),因为牧师有可能去同一个教堂(他去同一个教堂的机会为8.3%)。
我想使他去同一个教堂的机会很小(大约3%或更少)。
最佳答案
您的条件不要求随机选择给定牧师的下一个教堂。您不能只遍历教会名单吗?
也就是说,为每个牧师分配一个数字0-12。给每个教堂分配一个数字0-12。第一个月:
第0个月:
牧师0->教堂0
牧师1->教堂1
牧师2->教堂2
...
牧师n->教堂n
下个月,只需增加其中一个计数器(可环绕)
第1个月:
牧师0->教堂1
牧师1->教堂2
牧师2->教堂3
...
牧师n->教堂-0
然后重复剩余的几个月:
第三个月:
牧师0->教堂2
牧师1->教堂3
牧师2->教堂4
...
牧师-(n-1)->教堂-0
牧师n->教堂1
所有这些(O(n))都有一个非常简单的循环。如果您感到困惑,我建议您在纸上尝试使用n = 3进行循环。
如果需要随机性,请更新您的问题。
通过PAX编辑
我正在删除我的答案,并对其进行投票表决,因为它是O(n),而我的扩展名至少可以满足O(n ^ 2),以进行编辑。
您仍然可以通过将牧师0到牧师N的值索引放入经过随机排序的牧师数组中来保持随机性,从而使此解决方案至少与我的一样好。
通过PAX结束编辑