我无法想出解决以下问题的更好方法......? 想象一下,我有一个大表,其中行和列是某种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之间的值。
答案 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)时,你只需要确保你以正确的顺序使用参数。