我正在Android中开发一个匹配的应用程序,其中每个用户输入关于他自己的自由文本,并根据他写的单词生成标签。
然后,用户可以看到与其自己的标签具有最佳匹配百分比的用户列表。
现在我使用以下天真算法:
{{1}}
这种天真的算法在O(n ^ 3)运行,显然非常慢。
(我想知道约会应用程序如何快速生成这些匹配项,它们必须有一些非常好的算法)。
有更好的方法吗?
答案 0 :(得分:0)
答案 1 :(得分:0)
首先,你的算法不是O(n ^ 3),因为你在计算不同的东西:你应该将用户数量标记为u,将每个用户的标签上的最大数量标记为l。您的算法的复杂性为O(u * l ^ 2) - 每个用户,或 O(u ^ 2 * l ^ 2) all < / em>用户。
如果您要为每个用户预先排序标签(O(u * l * log(l))),您可以在O(l)中的两个排序列表中找到相同标签的数量:< / p>
现在需要O(u ^ 2 * l) - 所有用户。
所有用户的总复杂度为 O(max(u ^ 2 * l,u * l * log(l)))。
另请注意,该算法并不完整,因为您应该考虑报告结果的复杂性。
答案 2 :(得分:0)
复杂度应为LU * log(L) + SU * LU * log(SU * LU)
,其中LU是新用户的标签数量,L是系统中不同标签的数量,SU是与新用户共享至少一个标签的用户数量用户。