【发布时间】:2015-11-28 18:26:40
【问题描述】:
只是试图找到一个好的算法来使用典型的 RPS 规则找到最佳解决方案。我还没有开始编写问题。
给定两个有序数组,每个数组包含 N 个元素,通过重新排序第一个数组来优化获胜次数。
例如:
a[0] = rock
a[1] = paper
a[2] = paper
a[3] = rock
b[0] = paper
b[1] = rock
b[2] = scissors
b[3] = rock
// currently
a[0] vs b[0] = -1 // (rock losses to paper)
a[1] vs b[1] = +1 // (paper beats rock)
a[2] vs b[2] = -1 // (paper losses to scissors)
a[3] vs b[3] = 0 // (rock ties to rock)
应该返回的最优顺序是 { 1, 0, 3, 2 }
paper ties paper
rock ties rock
rock beats scissors
paper beats rock
问题是,我如何得出这个结果?一些约束。
平局比输赢相互抵消更可取。这可能是通过权衡损失而不是胜利来实现的。即
a[0] = rock
a[1] = paper
b[0] = paper
b[1] = rock
{0, 1} vs b[..] = -1, +.95 = -.05
{1, 0} vs b[..] = 0, 0 = 0 // preferred order
此外,最好在数组底部获胜。
关于如何完成此任务的任何建议?谢谢。
【问题讨论】:
-
每个 RPS 匹配都是相互独立的,所以除了检查每个组合之外,我没有看到其他解决方案。
-
您是在寻找算法、实现(请指定语言)还是两者兼而有之?
-
我现在正在用 lua 编码。也就是说,我只是在寻找一种我可以实现的算法。