我目前需要一种有效的解决方案来找到多个数组的最大公共子集。
例如: 假设用户Chris想要找到具有共同兴趣的其他用户(从最常见到最不常见);我们必须将他的兴趣数组与其他用户的数组进行比较,并找到最小公共子集的最大公共子集。
克里斯{保龄球,游戏,滑冰,跑步}
数据库中的其他用户。
布拉德{保龄球,跳跃,走路,坐着}
约翰{保龄球,游戏,滑冰,吃饭}
莎拉{保龄球,游戏,绘画,编码}
因此,克里斯最感兴趣的是约翰,然后是莎拉,然后是布拉德。
在Objective-C中,我如何才能做到这一点?任何指针都会很棒。
答案 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);