代码之家  ›  专栏  ›  技术社区  ›  Paddy3118

哈希+映射或索引+映射以压缩字符串的使用

  •  0
  • Paddy3118  · 技术社区  · 14 年前

    我有~200k个命名属性和~25k个文件。我提取每个文件的属性是否保留,使用python作为一组保留的属性,每个文件一组。

    要执行这个提取,我可能会在计算场上并行运行数百个单独的Python提取脚本。每个文件都留下了从每个文件中提取的集合的一些表示。

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

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

    我正在考虑创建一个已排序属性名的中心索引,并只保存该索引—文件名的索引与要导入的.py文件的索引相同。

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

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

    2 回复  |  直到 14 年前
        1
  •  2
  •   ondra    14 年前

    你事先知道房子吗?如果你做的比你想考虑的要多 Perfect hashing (即,您可以分发哈希的设置,而不是属性/文件的完整列表)。

    一个非常粗糙(但可能是工作方式)的哈希函数(h1,h2…);从str.hash()开始计算哈希。如果存在冲突,请尝试使用元组(h1(property),h2(property))作为哈希。如果仍然存在碰撞,请使用(h1(属性)、h2(属性)、h3(属性))-等,直到没有碰撞为止。H_x函数实际上可以是一些可配置的函数,建议的方法是尝试一些随机散列函数。

    然而,在我看来,这可能是杀伤力过大,只是分发文件/属性列表可能会容易得多…

        2
  •  0
  •   Björn Pollex    14 年前

    哈希值可能会发生冲突。你得考虑一下。