根据民意调查回答确定用户“唯一性”的重要原因是什么?

时间:2012-04-26 14:13:26

标签: mysql database algorithm big-o time-complexity

我有一个MySQL表,用户对是/否投票问题的回答。看起来有点像这样:

| user_id    | poll_id    | response
| 111        | 1         | 'yes'
| 111        | 2         | 'no'
| 111        | 3         | 'no'
| 222        | 1         | 'yes'
| 222        | 2         | 'yes'
| 222        | 3         | 'yes'
| 333        | 1         | 'no'
| 333        | 2         | 'no'
| 333        | 3         | 'no'

对于给定的user_id,我想计算其响应与每个其他用户的响应之间的相似性。因此,用户111和用户222是相似的0.333(因为它们具有3个相同的响应中的1个),并且用户111和用户333是0.666相似的(因为它们具有3个相同响应中的2个)。

然后,我想确定给定用户的中位数相似度值,并将其与所有其他用户的中位数相似度进行排名,以得出该用户“唯一性”的度量。

这种操作的时间复杂度是多少?

*(注意:目前,我在响应表中有大约25,000个user_id,400个poll_id和大约500,000行。显然,并非所有用户都对每个轮询问题做出响应。这是否会影响时间复杂度计算?)*

2 个答案:

答案 0 :(得分:2)

对于每个用户,您必须计算与所有其他用户的相似度;那是 n 2 - n ,或者是 n 2 。但是你还必须对这些结果进行排序才能找到中位数。因此,假设您的排序为 n log n ,则主导项将为 n 2 log n

如果你使用平均值而不是中位数,你可以摆脱排序;然后时间复杂度 O(n 2

答案 1 :(得分:0)

让我们让n =用户数,p =投票问题的数量,以及r =响应表中的总行数。 (根据您的情况n = 25,000p = 400r = 500,000。)

对于单个用户,数据库将遍历所有响应,每个响应都进行哈希查找,以确定它是否与此用户的响应之一匹配。如果确实如此,则需要O(1)时间来跟踪正在运行的计数。然后它接受用户的民意调查问题,并做一个简单的总和。只要响应的数量远远大于轮询问题的数量(在您的情况下),这主要取决于运行响应的时间。因此每个用户都需要时间O(r)。您有n个用户,因此总时间为O(n*r)