【发布时间】:2014-04-21 12:36:15
【问题描述】:
我在 python 中有一个布尔矩阵,需要找出哪些是重复的行。表示也可以是位数组列表,因为无论如何我都将其用于其他目的。将所有行与所有行进行比较不是一种选择,因为这将产生 12500^2 次比较,而我每秒只能进行约 500 次比较。由于每行大约有 5000 位长,因此也无法将每一行转换为整数。在我看来,最好的方法仍然是对位数组列表进行排序,然后只比较连续的行。任何人都知道如何将位数组映射到可排序的值或如何首先对位数组列表进行排序?还是有其他更有希望的方法?另外,由于我只需要这样做一次,因此我更喜欢更少的代码而不是效率。
【问题讨论】:
-
数组的大小是多少?
-
12500 个长度为 5000 的位串
-
我目前正在检查 sort() 是否真的能够完成这项工作,所以请稍候......
-
解决此类问题的两个好主意是 (1) 散列值和 (2) 对它们进行排序。对于 (1),您需要一个位数组的散列函数。对于(2),您需要订购功能。如果
bitarray模块不提供任何这些(通过分别放入 dict 和比较两个位数组进行测试),您可能必须实现其中一个。
标签: python sorting duplicates row bitarray