在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个性能问题。有什么通用的方法可以改善这一点吗?
答案 0 :(得分:3)
因此,带有“ 8”的行所具有的邻居数是以下各项的总和:
简单的解决方案是:
创建一个按count索引的字典,该值是具有该count的行数。
仔细检查您的餐桌。对于每一行,将一个添加到相应的字典计数值。因此,当您看到“ A”行时,将键8的计数加1。当您看到“ B”行时,将键6的计数加1。完成后,该计数键8将为2。键6将具有1,依此类推。
再次浏览您的桌子。对于每一项,输出键,键的计数以及三个字典值的和:dictionary[count] + dictionary[count-1] + dictionary[count+1]
。
该算法为O(n),其中O(n)个额外的空间(用于字典)。