大多数发生的组合从卡组卡

时间:2015-03-26 15:57:18

标签: c# data-structures

我有组合卡片组(52)的记录历史,现在我想找到历史记录中最常出现的组合。

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

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

AKJ

JKQ

AKK

AJJ

A123

AKJ

AKQ

A234

AKQ

AKQ

AKQ

类似于所有卡

现在我想在上面的AKQ -4曲调中获得大多数A组合 -

同样适用于所有卡

我已尝试使用foreach卡迭代历史记录并将组合合并到列表中并获得计数但这样效率很低

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

2 个答案:

答案 0 :(得分:0)

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

  • 遍历可能的卡片并查找历史记录中的所有内容 或
  • 遍历历史并计算每张卡的最大值。

为了在这里赢得表现,可以查看实际最大数量并查看历史记录中仍有多少张牌。 如果你只是想知道你完成的那种卡。 如果你想知道计数,你必须遍历所有的牌。

答案 1 :(得分:0)

根据我的理解,您正在尝试获取特定卡/号码最常见的组合计数。 如果数字存在于组合中的任何位置,则组合将与数字匹配。

我认为为了不断发展的历史有效地回答这类问题,您可以使用图表来模拟历史。 该图将是二分(2种类型的节点)。一种类型的节点是每个单独的数字(其中13个),另一种类型的节点将是历史中存在的唯一组合。

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

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

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

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