散列+映射或索引+映射以压缩字符串的使用

时间:2010-11-02 10:33:13

标签: python data-structures hash set

我有~200K命名属性和~25K文件。我使用Python作为一组保存的属性来提取每个文件的属性是否成立,每个文件都有一个集合。

要进行此提取,我可能会在计算服务器场上并行运行数百个单独的python提取脚本。每个都留下了每个文件中集合提取的一些表示。

进一步处理涉及读取这些20K集并处理累积数据。生成关于这组文件/属性的报告。

我遇到的一个问题是,如果我将提取的集存储为文本,那么长属性名称字符串和文件名字符串将重复浪费磁盘空间并增加解析时间。

我正在考虑创建已排序属性名称的中心索引,只保存索引 - 文件名相同,可能要导入.py文件。

使用索引到已排序的名称列表中的替代方法是使用str。 hash ()值作为索引,这意味着可能更快处理,但我担心这种可能性两个不相等的字符串以相同的哈希()值结尾。这会发生吗?

我会在所有机器上使用相同的Python可执行文件和操作系统版本。

2 个答案:

答案 0 :(得分:2)

您是否提前知道这些物业?如果您这样做,您可能需要考虑Perfect hashing(即您可以分发哈希的设置而不是完整的属性/文件列表)。

非常粗略(但可能有效)的方法是使用一些不同的哈希函数(h1,h2 ......);例如开始使用str.hash()并计算哈希值。如果存在冲突,请尝试使用元组(h1(property),h2(property))作为哈希。如果仍有碰撞,请使用(h1(属性),h2(属性),h3(属性)) - 等,直到没有碰撞。 h_x函数实际上可以是一些可配置的函数,推荐的方法是尝试一些随机散列函数。

然而,在我看来它可能有点过分,只是分发文件/属性列表可能会容易得多......

答案 1 :(得分:0)

哈希可能会发生碰撞。你将不得不考虑这一点。