合并联系人的算法

时间:2016-10-11 19:29:51

标签: algorithm maps graph-algorithm

我正在开展一个需要找到类似联系人的项目。

I / P:它的形式为

C1 -> abc@gmail.com,xyz@gmail.com ... (could be any size)
C2 -> asdas@gmail.com
C2 -> friedzie@gmail.com,myfriend@yahoo.com
C4 -> brothers@yahoo.com,asdas@gmail.com

我想将C2,C4等联系人分组并将它们合并在一起,因为它们共享相同的电子邮件。

2 个答案:

答案 0 :(得分:2)

将地址散列到联系人,当您遇到已存在于散列映射中的地址时,该地址就是共享联系人。

大致为O(N)

编辑:

如果有两个以上具有匹配电子邮件的候选人,则他们都会被分组。

e.g。

C1 A@gmail.com
C1 B@gmail.com
C2 A@gmail.com
C2 C@gmail.com
C3 B@gmail.com
C3 D@gmail.com

第一遍:
A@gmail.com => C1
B@gmail.com => C1
+ A@gmail.com => C2(ALREADY C1)=>合并C1 - > C2
C@gmail.com => C2 B@gmail.com => C3(已经是C1)=>合并C1 - > C3 D@gmail.com => C3

现在你知道你需要合并:C2进入C1,C3进入C1。

答案 1 :(得分:0)

我会尝试应用 Union Find 算法。

只要有共同的电子邮件地址,就可以合并容器(即工会)。

请参阅:https://www.cs.princeton.edu/~rs/AlgsDS07/01UnionFind.pdf