如何确定两个名单之间的对应关系?

时间:2011-03-03 02:58:00

标签: algorithm

我有: 100万大学生姓名和 300万银行客户名称

我设法根据散列将字符串转换为数值(类似的字符串具有类似的散列值)。我想知道如何确定这两组之间的相关性,以确定值是否配对至少60%?

我可以使用ICC实现这一目标吗? ICC双向随机工作如何?

请尽快回答,因为我迫切需要这个。

1 个答案:

答案 0 :(得分:0)

这种实体解析等通常很容易,但我对这里的散列方法感到惊讶。哈希丢失了对实体解析至关重要的信息。因此,如果可能,您不应该使用哈希,而应使用原始字符串。

假设使用原始字符串是一个选项,那么您可能希望执行以下操作:

列出A(1M),列表B(3M)

// First, match the entities that match very well, and REMOVE them.
for a in List A
  for b in List B
    if compare(a,b) >= MATCH_THRESHOLD   // This may be 90% etc
       add (a,b) to matchedList
       remove a from List A
       remove b from List B

// Now, match the entities that match well, and run bipartite matching
// Bipartite matching is required because each entity can match "acceptably well"
// with more than one entity on the other side
for a in List A
  for b in List B
    compute compare(a,b)
    set edge(a,b) = compare(a,b)
    If compare(a,b) < THRESHOLD // This seems to be 60%
       set edge(a,b) = 0

// Now, run bipartite matcher and take results

该算法的时间复杂度为O(n1 * n2),这不是很好。有一些方法可以避免这种成本,但它们取决于您的特定实体解析功能。例如,如果姓氏必须匹配(削减60%),那么您可以简单地创建A和B中的子列表,这些子列表由姓氏的前几个字符分区,并且只需在相应的位置之间运行此算法名单。但很可能是姓氏“Nuth”应该匹配“Knuth”等等。因此,一些关于你的名字比较功能的本地知识可以帮助你更好地分裂和克服这个问题。