双计数循环(n * n代码性能)

时间:2019-07-11 13:36:32

标签: python python-3.x algorithm performance

在Python中,我有一个这样的表,以列表列表的形式

A: 8
B: 6
C: 8
D: 3
E: 4
F: 5
G: 7

我正在尝试获取每一行的“邻居”数,例如数字等于-1或+1的行数。在这里是:

A: 3: 8
B: 3: 6
C: 3: 8
D: 2: 3
E: 3: 5
F: 3: 5
G: 4: 7

我有一个有效的代码,它包含一个双循环:对于每一行,循环遍历所有行并计算所有符合条件的行

这行得通,但是对于数千行而言,我最终遇到了n * n个性能问题。有什么通用的方法可以改善这一点吗?

1 个答案:

答案 0 :(得分:3)

因此,带有“ 8”的行所具有的邻居数是以下各项的总和:

  • 7位数
  • 8位数字
  • 9位数

简单的解决方案是:

创建一个按count索引的字典,该值是具有该count的行数。

仔细检查您的餐桌。对于每一行,将一个添加到相应的字典计数值。因此,当您看到“ A”行时,将键8的计数加1。当您看到“ B”行时,将键6的计数加1。完成后,该计数键8将为2。键6将具有1,依此类推。

再次浏览您的桌子。对于每一项,输出键,键的计数以及三个字典值的和:dictionary[count] + dictionary[count-1] + dictionary[count+1]

该算法为O(n),其中O(n)个额外的空间(用于字典)。