【发布时间】:2019-11-21 06:02:32
【问题描述】:
在 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 性能问题。有什么通用的方法来改进这个吗?
【问题讨论】:
-
我不会发布答案,因为您没有显示自己的代码(需要作为起点),但您可以使用
collections.Counter在(摊销的)O(1)中执行邻居搜索,以Ω(n)内存使用为代价。 -
另外,你有两次 8,但邻居数不同,这似乎不太可能。
-
我会首先计算列中的所有数字并创建字典。接下来,我将使用这本字典创建一个新的字典,其中包含每个数字的邻居数。最后我会使用这本字典来创建新列表
标签: python python-3.x algorithm performance