C# 双消括号算法

C# 双消括号算法,c#,asp.net-mvc,algorithm,math,C#,Asp.net Mvc,Algorithm,Math,我想知道如何最好地处理双消括号。当我完成我的单次淘汰赛时,我就是这样做的 double rounds = Math.Round(Math.Log(totalfighters, 2)); double bye = Math.Pow(2, rounds) - totalfighters; 我基本上必须计算出需要多少轮和多少个“是”,然后编码如何分配比赛。在我的匹配模型上,我有以下内容: Match { int fighter1 int fighter2 int winner }

我想知道如何最好地处理双消括号。当我完成我的单次淘汰赛时,我就是这样做的

double rounds = Math.Round(Math.Log(totalfighters, 2));
double bye = Math.Pow(2, rounds) - totalfighters;
我基本上必须计算出需要多少轮和多少个“是”,然后编码如何分配比赛。在我的匹配模型上,我有以下内容:

Match {
   int fighter1
   int fighter2
   int winner
}
我一直在绞尽脑汁想如何使用上面的代码(如果可能的话)生成一个双消括号。我对双重eimination的主要问题是正确地生成失败者的括号。正在尝试使用以下格式:

但我一直在努力创造失败者


有什么想法吗?或者我应该强制忽略我的单次消去算法吗?

在更复杂的双次消去情况下,可能更容易一轮一轮地计算括号,并因此减少轮数。使用可在添加轮次时扩展的数据结构


确切的规则很重要。例如,假设赢家组中的一名拳手继续进入赢家组中的下一轮,而输家组中没有添加相应的拳手。

您的单一淘汰算法似乎假设参与者的数量是2的幂。这是故意的吗?或者,我认为你的代码中有一个关于战斗机数量略大于二次方的错误。老实说,我忘记了公式是从哪里得到的,但我在这两行代码中主要关心的是,在我得到轮数后,我需要多少个“是”。在计算出“是”的数量后,我还有几行代码来计算需要多少匹配项。我知道这是我基于它的一个来源,我认为它可以通过使用天花板而不是四舍五入来修复-问题是四舍五入log2(17)得到四舍五入,而-1是。从来没有想过,我可能会改变它,当我找到时间,因为,现在它的工作很好,单消除高达256。我更关心的是双重消去法,我不确定这个公式是否能起作用。它可以用于生成赢家等级,但不确定输家等级。