2

我想要实现两件事:1)从乐透结果中找出配对号并存储到哈希表。2)以有效的方式循环乐透结果,计算频率并将频率结果添加到对数哈希表中。

我想构建一个能够告诉我对数频率的程序。

For a list / array of number , example :
    4, 12, 20 , 32, 48, 50
    2, 22, 20 , 32, 38, 40
    4, 12, 20 , 25, 33, 44
    1, 11, 20 , 31, 48, 50
    1, 12, 20 , 36, 47, 51

我想要的结果:

    Pair Number     |      Repeat Times
    4, 12                          2
    4, 20                          2
    12, 20                         3
      .                            .
      .                            .

列出所有可能的对数自动
列表/数组中不需要的数据。存储数据以便于分组的任何其他建议?地图 ?

除了循环之外,还有什么有效的方法可以对重复次数进行分组和计数?

感谢任何建议和建议。

4

1 回答 1

0

为了清楚起见,假设您从由元素(或数字,在本例中)n组成的集合开始。c您的问题是找到所有集合中大小为 2 的所有唯一子集的聚合频率(即跨越所有集合)。

为此,请遍历每个集合并考虑该集合中的每一对元素并在哈希表中维护其频率。当您考虑一对时,如果它已经存在于哈希表中,则将其值加 1;否则,将其添加到值为 1 的哈希表中。您的代码将类似于下面的伪代码。

hashtable h
for s in sets:
   for i in s.size():
       for j > i in s.size():
            pair p = (s[i],s[j])
            if h.exists(p):
                h[p]++
            else:
                h.put(p,1)

由于这种方法具有限制为nc和的三重嵌套循环c,因此该算法可以O(nc^2)及时执行。

考虑一个极端情况,其中每个可能的大小为 2 的子集都是唯一的。在这种情况下,您的频率表将由n × c choose 2元素组成。在大 O 表示法中,这个值减少到O(nc^2). 因此,最好的解决方案并不优于O(nc^2),这正是上述算法的速度。

于 2012-06-30T07:37:25.557 回答