首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在多个集合上创建均匀分布?

如何在多个集合上创建均匀分布?
EN

Stack Overflow用户
提问于 2016-11-15 21:43:40
回答 2查看 93关注 0票数 2

这是一个业余项目,将用Python实现,但这并不重要。我主要是在寻找一个好的算法。

我想举办一个有2到30名车手(num_drivers)的赛车比赛。该赛事有2至12场比赛(num_races),我希望每个车手都有一个公平的机会,根据他们的位置,在开始使用有点随机的定位。问题是,在每一场比赛中,我分配给每个车手的起始位置是什么?

例如:对于具有num_races=3num_drivers=4 (名为"A“到"D")的事件,一个很好的设置应该是

代码语言:javascript
复制
Race 1: A B C D
Race 2: C D B A
Race 3: D B A C

极位值为1,第二位为2,以此类推。因此,这个设置为每个驱动程序提供了相当相等的值:

代码语言:javascript
复制
A: 1+4+3 = 8
B: 2+3+2 = 7
C: 3+1+4 = 8
D: 4+2+1 = 7

最后,每个司机的位置之和理想上应该与其他每个司机相同。什么是一个好的通用算法(在伪代码中)对我的问题,当驱动程序的数目和种族的数目可以改变?有什么算法可以看吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-30 08:00:45

我在github上找到了一个工作良好的PHP脚本,为我解决了这个问题。所以如果有人对我的问题有兴趣的话:https://github.com/FriendlyBaron/GridCreator

票数 0
EN

Stack Overflow用户

发布于 2016-11-15 21:59:11

我首先要说的是:

代码语言:javascript
复制
Race 1: A B C D
Race 2: A B C D
Race 3: A B C D

然后按比赛号旋转每一行,

代码语言:javascript
复制
Race 1: A B C D 
Race 2: D A B C
Race 3: C D A B

给予:

代码语言:javascript
复制
A = 1 + 2 + 3  = 6
B = 2  + 3 + 4 = 8
C = 3 + 4 + 1  = 8
D = 4 + 1 + 2  = 7

这是一个不错的发行,而且和你能得到的一样好(我想!)有这么大的游泳池。

如果你有很多司机的话,随机就行了。

你可以这样做,找到你的低点和高点,并纠正闭环.所以,在上面的例子中,我注意到A是<< B和C,所以我可以将高C(4)与下一个高A(3)交换,最后得到7,8,7,7。

对于这个集合的大小来说很小,但是对于较大的网格来说可能就不那么简单了。

如果你有4场比赛,你会得到DC (每个车手10分),但我怀疑你想要64场64车手(例如)。

另一种方法是为每个驱动程序确定您想要的分数,然后向后工作以生成网格。使用加权队列--给予得分最低的驱动程序最高优先级--并且在填充网格时,只需抓取得分最低的驱动程序,将其置于当前最高位置。这有点像垃圾箱的包装问题,但应该工作得相当好。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40620218

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档