![]() |
1
1
将标准搜索转换为概率选择的有趣想法:
它将在O(n2)+O(历史大小)中运行,并在所有概率用尽时很好地检测到这种情况。 |
![]() |
2
1
根据您的需求,我认为您真正需要的是准随机数,最终使您的数据得到统一的覆盖(即每个人一次与其他人配对)。与简单随机配对相比,准随机配对给你的“聚集”结果要少得多,其附加好处是,你对结果数据的控制要大得多,因此你可以控制唯一配对规则,而不必检测新随机配对是否重复历史随机配对。
http://en.wikipedia.org/wiki/Low-discrepancy_sequence 更好的阅读: 我试图找到一个C库,它可以帮助你生成你想要的那种准随机排列,但是我能找到的库只有C/C++。但我还是建议下载源代码,因为它的全部逻辑是准随机算法(查找 准蒙特卡罗 )是否有: |
![]() |
3
0
在启动时,建立所有可能配对的列表。 在添加个人时将所有可能的新配对添加到此列表中,并在从池中移除个人时删除任何过期的配对。 从列表中随机选择新配对,并在选择配对后将其从列表中删除。 |
![]() |
4
0
如果已形成对,则每个空白元素将包含True,否则将包含False。 每个配对会话包括循环每行的列,直到找到一个False,形成对并将矩阵元素设置为true。 删除个人时,请删除行和列。
添加个人时,添加最后一行和列。 |
![]() |
5
0
你最好的选择可能是:
请注意,如果您需要高效地创建大量新的唯一对,则步骤1可以一次性完成,并在创建新对时进行更新。
|
![]() |
6
0
我把它看作是一个图问题,其中个体是节点,顶点连接个体还没有关联。通过这种重新定义,创建新的对只是为了找到一组独立的顶点(没有任何公共节点)。 这还不是一个答案,但有可能这是一个常见的图问题,有众所周知的解决方案。 在这一点上,我们可以说,在某些情况下,可能没有解决方案(您将不得不重做一些以前的对)。 考虑对偶图也可能更简单(顶点和节点的交换角色:节点是成对的,并且是成对顶点之间的公共个体)。 |
![]() |
7
0
然后我要做的是:
|
![]() |
8
0
怎么样:
然后:
|