Graph 通过匹配N个顶点构建无向加权图
问题:Graph 通过匹配N个顶点构建无向加权图,graph,matching,graph-algorithm,bigdata,Graph,Matching,Graph Algorithm,Bigdata,问题: 我想通过将某个用户的“兴趣”与所有其他用户的兴趣进行比较,为其推荐十大最适合的匹配项。我正在用户之间构建一个无向加权图,其中权重=两个用户之间的匹配分数。 我已经有一组N个用户:S。对于S中的任何用户U,我都有一组兴趣I。经过很长一段时间(一周?)后,我创建了一个新用户U,其中包含一组兴趣,并将其添加到S中。要为这个新用户生成一个图,我将迭代地将新用户的兴趣集I与S中所有用户的兴趣集进行比较。问题在于“所有用户”部分。 让我们谈谈比较兴趣的功能。一组兴趣中的一个兴趣I是一个字符串。我正在
我想通过将某个用户的“兴趣”与所有其他用户的兴趣进行比较,为其推荐十大最适合的匹配项。我正在用户之间构建一个无向加权图,其中权重=两个用户之间的匹配分数。
我已经有一组N个用户:S。对于S中的任何用户U,我都有一组兴趣I。经过很长一段时间(一周?)后,我创建了一个新用户U,其中包含一组兴趣,并将其添加到S中。要为这个新用户生成一个图,我将迭代地将新用户的兴趣集I与S中所有用户的兴趣集进行比较。问题在于“所有用户”部分。
让我们谈谈比较兴趣的功能。一组兴趣中的一个兴趣I是一个字符串。我正在使用WikipediaMiner比较两个字符串/兴趣(它使用Wikipedia链接来推断两个字符串的关系有多密切。例如Billy Jean&Thriller==>high match,Brad Pitt&牙买加===>low match等等)。我也问了一个问题,看看是否有比我目前使用的更好的解决方案。
因此,上面的功能需要花费不可忽略的时间,总的来说,当我们比较数千(也许数百万?)用户及其数百个兴趣时,这将花费大量时间。对于100000个用户,我无法在短时间内进行100000个用户的比较(一个缺陷是,你将算法复杂性建立在错误的基础上。真正的问题是,你必须将每个独特的兴趣与每个其他独特的兴趣(以及该兴趣与自身)进行比较 如果所有的兴趣都是唯一的,那么你可能什么也做不了。然而,如果你有很多重复的兴趣,你也许可以通过下面的方法来加速算法
如果您确保集群的数量和每个集群的用户数始终非常接近sqrt(用户数),那么您将获得O(sqrt(N))的公平近似值只检查集群内的点。您可以通过在其他集群中包括用户并检查每个集群的代表用户来改进近似值。您检查的集群越多,越接近O(N)一个精确的解决方案。虽然,可能无法确定当前的解决方案与精确的解决方案有多接近。在检查了超过总数的log(sqrt(N))集群之后,很有可能会出现递减回报。这将使您处于O(sqrt(N)log(sqrt(N))).一个缺陷是,您将算法的复杂性建立在错误的基础上。真正的问题是,您必须将每个独特的兴趣与每个其他独特的兴趣(以及该兴趣与自身)进行比较 如果所有的兴趣都是唯一的,那么你可能什么也做不了。然而,如果你有很多重复的兴趣,你也许可以通过下面的方法来加速算法