设计相似性表

时间:2012-04-15 05:10:46

标签: algorithm data-structures machine-learning information-retrieval

我无法想出解决以下问题的更好方法......? 想象一下,我有一个大表,其中行和列是某种ID ..让我们说书ID

book_id-->1    2     3     .....
  1       1   0.92    0.33
  2
  3

此表中的条目告诉您每本书的相似程度。 所以从上表...书1和书2有0.92相似性指数。

所以,我已经在bankend中计算了这个...让我们说“n”条目。

从n + 1开始,数据实时显示..

所以我要做的第一步就是填写这一新行。这是一种非常天真的方法。

 i = 0; i < total_books ; i++
    sim(book(n+1),book(i)) 

让我们说计算任何书籍相似度的计算速度非常快。 但是因为这必须发生“n”次,所以这加起来......

如果有“m”新书那么它是一个n ^ 2操作(我认为)。 是否有更好的算法/数据结构可以使这个计算可以接受。

另外,只是为了填补一些背景知识。 这种相似性只不过是两个向量之间的点积。 (谷歌搜索余弦相似性会给出一个想法)。但它没什么特别的..只是在两个向量之间取点数产品..它将返回0到1之间的值。

1 个答案:

答案 0 :(得分:0)

当您将1本书添加到n本书的集合中时,它会执行n次操作 当您将m本书添加到n本书的集合中时,它执行(n)+(n + 1)+ ...(n + m-1)次操作(待验证):n * m +(1+) 2 + ...(m-1))因此它应该是O(n * m + m * m)。

如果您以一种天真的方式实现了解决方案,那么只有当id(book_i)&lt;时才能通过计算和存储sim(book_i,book_j)来节省一半的计算时间。 id(book_j)(这不会改变复杂性)。 然后,当你想要检索sim(i,j)时,你只需要确保你以正确的顺序使用参数。