我正在尝试在Python [1]中实现以下算法:
问题 :(行压缩)让
A
成为有界度d的n x m
数组(即A
的每个元素都是整数,a
,0<a<d
。{},k
为A
的不同行数。找到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年。
答案 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)])