C# 最常见的组合来自组合牌组

C# 最常见的组合来自组合牌组,c#,data-structures,C#,Data Structures,我有关于组合的卡片组(52)的历史记录,现在我想从历史记录中找出最常见的组合 我可以迭代每个卡片/号码,并检查历史记录中的组合,但这不是有效的算法,因此我正在寻找从历史记录中查找组合的最常用方法 假设我在一张表格中有历史记录: AKJ 井开区 AKK AJJ A123 AKJ AkQ A234 AKQ AKQ 阿克 类似于所有卡片 现在我想在上面的AKQ-4曲调中得到A-最常见的组合 同样适用于所有卡片 我曾尝试使用foreach卡在历史上迭代,并将组合放入列表并获取计数,但这是低效的 我想知道

我有关于组合的卡片组(52)的历史记录,现在我想从历史记录中找出最常见的组合

我可以迭代每个卡片/号码,并检查历史记录中的组合,但这不是有效的算法,因此我正在寻找从历史记录中查找组合的最常用方法

假设我在一张表格中有历史记录:

AKJ

井开区

AKK

AJJ

A123

AKJ

AkQ

A234

AKQ

AKQ

阿克

类似于所有卡片

现在我想在上面的AKQ-4曲调中得到A-最常见的组合

同样适用于所有卡片

我曾尝试使用foreach卡在历史上迭代,并将组合放入列表并获取计数,但这是低效的


我想知道什么是最好的模式匹配,我需要使用集合吗?如何使用?

如果我建议你的问题是正确的,那么你想获得历史记录中每张卡的使用次数。 您可以做的是:

  • 反复浏览可能的卡片,找出所有历史记录 或
  • 循环浏览历史记录并计算每张卡的最大值
要在这里赢得性能,可以查看实际最大数量,并查看历史上还有多少张牌。 如果你只是想知道你完成了什么样的卡。
如果您想知道计数,您必须遍历所有卡。

据我所知,您正在尝试获取特定卡/号码最频繁的组合计数。 如果数字出现在组合中的任何位置,则组合将与数字匹配

我认为,为了有效地回答不断增长的历史中的此类问题,您可以使用一个图表来建模历史。 该图将是二部图(两种类型的节点)。一种类型的节点是每个单独的编号(其中13个),另一种类型的节点是历史中存在的唯一组合

每个组合节点将连接到组合中存在的所有号码。每个组合节点还将具有其频率的计数

在您的示例中,节点A将连接到AKJ(2次)、AKK(1次)、AJJ(1次)、A123(1次)、A234(1次)和AKQ(4次)

无论何时发生组合,都可以检查它是否已经存在于图中(使用哈希表)。如果存在,则增加其计数。否则,为其添加一个新的组合节点,并将其连接到其中的数字


使用此图,您可以通过迭代其邻居来查询与任何数字匹配的组合,并找到频率最高的邻居(组合)。因此,对于A来说,从它的邻居列表中,最常见的是AKQ。

你是说成对组合吗?你的问题目前非常抽象-我们不知道历史是什么样子的,等等。这使得很难回答。我为Clarity编辑的问题那么每个组合中总是有三张卡,所以你只是在寻找两张卡加上指定一张卡的组合?订购重要吗?你只是有字符串,还是有卡片的枚举等?(如果你能给出示例代码,那么在回答中提供代码就更容易了…)我已经编辑了你的标题。请参阅“”,其中的共识是“不,他们不应该”。