4

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

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

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

和数据库中的其他用户。

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

所以 Chris 与 John 有着最共同的兴趣,然后是 Sarah,然后是 Brad。

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

4

1 回答 1

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);
于 2013-08-29T02:04:10.417 回答