微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

哈希不可哈希 设置问题解决方法

如何解决哈希不可哈希 设置问题解决方法

设置

假设我们有一个 xml 产品lxml 元素),由一个唯一代码(字符串)或一个列表标识唯一代码(更多关于后者)。产品开始标记位于一个xml提要中的S1字节索引(开始),产品结束标记位于E1字节索引(结束)处.然后,第二个 xml 提要中有一个匹配产品Feed 具有相同的格式,但产品物理位置不同 - 第二个产品在第二个 Feed 中具有位置 S2E2 字节索引。

任务是将这两种匹配的产品放到一个地方(同时,同时)。此任务的一部分是获取两个提要(两组产品)的差异。目标是在处理大型 xml 提要时找到最适合 RAM 的解决方(每个最多 20,000 个产品,大约 200MB,可能会有很大差异)。一次性内存为2-3Gb。

为了实现目标,我们使用了 SAX 解析器,并将产品替换为它在提要中的位置,在大多数没有问题的情况下,我们得到:

products_from_first_Feed = { 'code': [S1,E1],... }
products_from_second_Feed = { 'code': [S2,E2],... }

# 'code' == 'code' so [S1,E1] match [S2,the products are common,great!  

问题

当产品由唯一代码列表描述时,问题就开始了,就像这样:

products_from_first_Feed = { ['sub_a','sub_b']: [S1,... }
products_from_second_Feed = { ['sub_a','sub_b']: [S2,... }

# ['sub_a','sub_b'] == ['sub_a','sub_b'] so [S1,great...?

这显然是不可能的。为了解决这种情况,代码被分解,每个子代码都与原始产品的位置相关联。

products_from_first_Feed = { 'sub_a': [S1,'sub_b': [S1,... }
products_from_second_Feed = { 'sub_a': [S2,'sub_b': [S2,E2] ... }

# 'sub_a' == 'sub_a' or 'sub_b' == 'sub_b' so [S1,great! 

然后,要找到通用代码,对键使用集合操作就足够了。

但是有一些问题

  1. 在这种情况下,产品将被同时解析为普通和差异(一个代码一个普通

     products_from_first_Feed = { 'sub_a': [S1,... }
     products_from_second_Feed = { 'sub_a': [S2,E2] ... }
    
  2. 信息重复——位置信息将乘以产品变体的数量(每个子代码实际上就是一个产品变体)。

是否有可能找到更好的解决方?我试图将产品表示为其位置和所有子代码的多维矩阵,但总是无法有效地从给定的单个子代码中检索所有子代码...

解决方法

现在通过对任何子代码的重复过滤器解决了第一个问题。

通过减少冗余信息量部分解决的第二个问题

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?