【发布时间】:2017-06-07 10:23:35
【问题描述】:
对于这个冗长的问题,我提前道歉,我试图尽可能地总结它。
我正在开发一个武术联盟的应用程序。
应用程序的第一个模块 需要开发一个复杂的算法来安排比赛,即将n 参与者安排在@987654322 大小的括号中@(例如每个括号中有 4 位参与者)。
必须针对多种条件以最优化的方式排列括号。
每个参与者都有几个参数:
- 腰带(武术中可以翻译成 数)
- 体重类别(例如 60-70 公斤、80-90 公斤……)
- 年龄类别(例如 16-18、18-25、26-36…)
- 学院名称(该参数的目标是使最大 括号内的差异)
- 被允许与具有一个等级的其他参与者进行对抗 他上方的腰带(真,假)
- 被允许参加对一个体重的参与者 他上面的类别(真,假)
- 允许针对一岁的参与者参加 他上面的类别(真,假)
条件:
每个“最佳”括号都有x 参与者共享相同的腰带、体重类别、年龄类别,并且所有参与者都必须具有学院名称参数的最大方差。
如果有参与者不能满足上述条件并且他们没有括号,或者他们只能适应x-y大小的括号,那么算法必须做出最好的(“最好”将稍后描述)根据最后 3 个布尔参数决定并替换“完美”括号内的参与者。
同样在所有替换之后,学院名称之间必须发生差异。
我的问题是解决该问题的最佳方法是什么? 我会感谢一些里程碑或参考一些讨论此类问题的数学文献(我不希望任何人为我解决它,只是指导)。
我对如何解决的一般看法:
用一个等级对所有括号进行排序,然后与所有括号的总等级相关。
例如,4 名参与者的“完美”括号将被评为Z,缺少学院名称差异的权重将被评为(更多解释请参见黄色标记段落)–(17X<Z) 所以如果 2 位参与者共享相同的学院名称,则成绩将为 Z-(17X<Z),如果 3 位参与者共享相同的学院名称 Z-2(17X<Z),依此类推……
如果括号将或/也与他们的腰带、体重类别或年龄类别不匹配,则等级将被另一个–(17X<Z)降低。
重要的规则是等级最“差”的房子比没有括号更可取
(它的 17X 因为与学院条件的最大差异在括号中 4 是 4X,年龄类别的最大差异是另一个 4X 和 参与者之间的其余“不良联系”是 16,我加 1 以产生大于 0 或小于
Z的等级。
这是简单的部分,但我得出的结论是,如果我想要“最佳”或最佳成绩,我将需要递归地重复大量且不可能的次数,以便在所有括号中达到更高的一般成绩最终达到最优综合等级。
我完全不确定,也许需要换一种思维方式。
它不是那么重要,但对于一般知识来说,开发语言是 C#。
非常感谢您的时间和考虑。
【问题讨论】:
-
你几乎可以肯定这个问题过于复杂了。我建议您可以注入不同的算法并从一个简单的算法开始。
-
N可能有多大?我问是因为一旦你应用了选择限制(与腰带、体重、年龄有关),这个问题可能会受到蛮力的影响。如果是这样,您只需要一个评分函数来为任何给定的括号集分配一个数字。然后遍历每个合法集合并选择最好的。 -
@FMc tnx 给您的评论,N 平均约为 400,我明白您的意思,但任务是找到最佳的通用组合
-
解决此问题的一种简单方法是找到给定竞争者的所有可能匹配项,然后在为每个人完成此操作后,对竞争者进行优先排序,以便那些潜力最少的竞争者对手首先匹配。
-
@ mVChr 但是如果一个竞争者有 5 个相同的最佳匹配,但我将选择的每场比赛都会对其他竞争者之间的其他比赛产生不同的影响,我将如何获得最佳的综合成绩所有括号?
标签: java c# c++ algorithm computer-science