如何在Python中散列行?

时间:2015-05-29 19:26:31

标签: python hash

我正在尝试在Python [1]中实现以下算法:

  

问题 :(行压缩)让A成为有界度d的n x m数组(即A的每个元素都是整数, a0<a<d。{},kA的不同行数。找到k x m数组A',以便A中的每一行都显示在A'中。

           

方法 :(哈希)将A行散列到表格中,跳过重复项并将其余部分添加到A'

我不明白如何在Python中散列一行?

好吧,我想了解“将A行散列到表格中”是什么意思。我的理解如下。假设我有一个这样的矩阵:

A = [[1, 2, 3, 4], 
     [1, 2, 3, 4],
     [6, 7, 5, 4]]

所以,我哈希它的行(不知何故),我得到:

B = [x1, x2, x3]

其中xi是行i的哈希值。这里我将x1=x2,因为第1行和第2行相等。因为我得到x1=x2,我会保留一个,我终于得到了:

A' = [[1, 2, 3, 4], 
      [6, 7, 5, 4]]

我是对的吗?如果是这样,我如何在Python中实现这样的算法?

感谢。

[1] D. Comer,“使用尝试去除有界度数列的重复行”,普渡大学,1977年。

1 个答案:

答案 0 :(得分:1)

首先,您需要删除重复的行。为此目的,您可以使用set,但首先需要将所有行转换为不可变对象类型。

您可以将它们转换为tuple

>>> A = [[1, 2, 3, 4], 
...      [1, 2, 3, 4],
...      [6, 7, 5, 4]]
>>> 
>>> map(tuple,A)
[(1, 2, 3, 4), (1, 2, 3, 4), (6, 7, 5, 4)]

然后您可以使用set。并且当set使用散列函数时,结果将自动散列:

>>> set(map(tuple,A))
set([(1, 2, 3, 4), (6, 7, 5, 4)])