Objective-C算法找到最大的数组公共子集?

时间:2013-08-29 01:48:02

标签: objective-c arrays algorithm

我目前需要一种有效的解决方案来找到多个数组的最大公共子集。

例如: 假设用户Chris想要找到具有共同兴趣的其他用户(从最常见到最不常见);我们必须将他的兴趣数组与其他用户的数组进行比较,并找到最小公共子集的最大公共子集。

  

克里斯{保龄球,游戏,滑冰,跑步}

数据库中的其他用户。

  

布拉德{保龄球,跳跃,走路,坐着}
  约翰{保龄球,游戏,滑冰,吃饭}
  莎拉{保龄球,游戏,绘画,编码}

因此,克里斯最感兴趣的是约翰,然后是莎拉,然后是布拉德。

在Objective-C中,我如何才能做到这一点?任何指针都会很棒。

1 个答案:

答案 0 :(得分:5)

您正在寻找一种算法来查找集合交集的基数。

根据您的设置表示,您可以选择不同的方式。对此最高效的表示是使用整数中的位,但如果可能的兴趣数超过64,则可能不容易实现。

实现它的一种简单方法是使用NSMutableSet,如下所示:

// Prepare the individual lists
NSArray *chris = @[@"bowling", @"gaming", @"skating", @"running"];
NSArray *brad =  @[@"bowling", @"jumping", @"walking", @"sitting"];
// Obtain the intersection
NSMutableSet *common = [NSMutableSet setWitArray:chris];
[common intersectSet:[NSSet setWithArray:brad]];
NSLog(@"Common interest count: %i", common.count);