Python 3.X:更有效:列表与DICES的列表



成像您在网格上进行BFS(例如两个单元格之间的最短距离(。可以使用两个数据结构来托管visited信息:

1(列表列表,即data = [[False for _ in range(cols)] for _ in range(rows)]。稍后,我们可以通过data[r][c]访问某个单元格中的数据。

2(dict,即data = dict()。稍后,我们可以通过data[(r, c)]访问某个单元格中的数据。

我的问题是:在这样的BFS方案中哪个计算更有效?

编码方面的编码似乎可以保存更多字符/行。记忆明智的方法可能会为未接触的单元节省一些空间,但也可以浪费一些空间来供射击的额外空间。

编辑

@peteris提到的numpy数组。优于列表的优势很明显:Numpy数组在连续的内存块上操作,这允许更快地寻址和更多的缓存命中。但是,我不确定它们与Hashtables的比较(即dict(。如果算法触及相对较少的元素,则标准可能会提供更多的缓存命中,因为它可能较小的内存足迹。

另外,事实是,Numpy阵列对我来说是不可用的。因此,我确实需要比较列表与DICE的列表。

一个2D数组

存储2D数据的有效答案是分配给连续内存区域的2D数组/矩阵(不像列表的列表(。这避免了否则所需的多个内存查找,以及在dict所需的每个查找时计算哈希值。

在python中执行此操作的标准方法是在numpy库中,这是一个简单的示例

import numpy as np
data = np.zeros( (100, 200) ) # create a 100x200 array and initialize it with zeroes
data[10,20] = 1  # set element at coordinates 10,20 to 1

相关内容

  • 没有找到相关文章

最新更新