用于将标签列表与许多其他标签列表匹配的算法方法

时间:2016-06-29 23:49:21

标签: algorithm match matching string-matching

我正在Android中开发一个匹配的应用程序,其中每个用户输入关于他自己的自由文本,并根据他写的单词生成标签。

然后,用户可以看到与其自己的标签具有最佳匹配百分比的用户列表。

现在我使用以下天真算法:

{{1}}

这种天真的算法在O(n ^ 3)运行,显然非常慢。

(我想知道约会应用程序如何快速生成这些匹配项,它们必须有一些非常好的算法)。

有更好的方法吗?

3 个答案:

答案 0 :(得分:0)

  

有更好的方法吗?

带索引的数据库表。

如果你坚持自己做,那么第一个重大改进是hash table

答案 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>

  • 对于每个用户u1
    • 对于每个用户u2
      • Calc相同标签的数量

现在需要O(u ^ 2 * l) - 所有用户。

所有用户的总复杂度为 O(max(u ^ 2 * l,u * l * log(l)))

另请注意,该算法并不完整,因为您应该考虑报告结果的复杂性。

答案 2 :(得分:0)

  1. 将系统中的标签映射到具有标签的用户列表。
  2. 为新用户生成标签列表。
  3. 查找与这些标签匹配的用户列表。
  4. 生成最常出现在找到的列表中的用户列表。
  5. 复杂度应为LU * log(L) + SU * LU * log(SU * LU),其中LU是新用户的标签数量,L是系统中不同标签的数量,SU是与新用户共享至少一个标签的用户数量用户。