如何找出上升的单词(或列表中越来越流行的单词)

时间:2018-12-31 09:40:40

标签: algorithm sorting

我想知道如何找出上升的单词(类似于reddit的上升线程排序选项)。我所说的上升是成为流行。上升最快的是什么。示例:

PS:-^v就是单词移动的方式。 (a)(b)也不是单词的一部分。我只是以这种方式展示他们的独特性

上午10:00,我有此列表,处于此级别

1. Cool    (a)  -
2. Best         -
3. Cool    (b)  -
4. Radical (a)  -
5. Sweet   (a)  -
6. Sweet   (b)  -
7. Radical (b)  -

然后在上午10:15(15分钟后),列表顺序更改。

1. Best         ^
2. Cool    (a)  v
3. Radical (a)  ^
4. Sweet   (a)  ^
5. Cool    (b)  v
6. Radical (b)  ^
7. Sweet   (b)  v

然后在上午10:30(15分钟后),列表顺序再次更改。

1. Best         -
2. Radical (a)  ^
3. Sweet   (a)  ^
4. Cool    (a)  v
5. Radical (b)  ^
6. Sweet   (b)  ^
7. Cool    (b)  v

如您所见,Cool一词显然是受欢迎程度的下降。目前,我的算法(我觉得这很愚蠢,但我想不出其他任何方式)。

我现在的操作方式是:

  1. 对于列表中的每个单词,我计算其上移(+ num)或下移(- num)或不移动0的排名。从技术上讲,这给了我一个评价。 Ranks moved per 15 minutes
  2. 然后,如果同一个单词重复出现两次(例如单词Cool),那么我将得出平均汇率。
  3. 然后我将其从最高到最低排序,然后说出我正在上升的话。

尽管我觉得这不是很好(甚至没有任何意义)。当然,它也不会考虑任何历史数据,而只会考虑每15分钟收到的新数据。

我的问题是,我该如何找出最上面的单词,最下面的单词以及它们之间的所有单词。

1 个答案:

答案 0 :(得分:0)

如果要考虑历史数据,可以使用某些功能来减少较旧更改的数据权重。该函数可能是指数,它衰减很快:

mobility_contribution <- ifelse(combined_data$mobility==1,0,ifelse(combined_data$mobility==2,0.058,ifelse(combined_data$mobility==3,0.076,ifelse(combined_data$mobility==4,0.207,0.274))))

此代码使用risingRate = 0 for i = 0:n risingRate += e^(-i) * RankChange(curr - i) end return risingRate 个单词的最后记录来计算其上升率。

每一步的系数为:

n + 1

这些系数为最新系数分配更大的权重。您可能想要的是什么。

您可以使用 0: 1 1: 0.367879 2: 0.135335 3: 0.0497871 4: 0.0183156 5: 0.00673795 6: 0.00247875 7: 0.000911882 8: 0.000335463 9: 0.00012341 10: 4.53999e-05 调整衰减率。