计算排名数据的估计数学期望?

时间:2011-08-26 09:53:07

标签: algorithm math sorting

我必须按应用下载次数排序“最受欢迎的应用RSS”。这是问题所在:

假设有1,000个应用程序。

RSS数据列出了每个应用类别的前100个应用。

RSS数据还提供前100名应用列表,无论其类别如何。

RSS按每个应用的下载次数排序,但确切的下载次数是未知的。

每个应用程序都有两个已知属性:类别,以及它在RSS排名中的位置。

现在我想根据估计的下载次数对所有1,000个应用进行排序。

排序不需要非常准确,只是从统计学上讲,大多数情况都可以。

我怎样才能实现这种排序算法? TIA。

3 个答案:

答案 0 :(得分:3)

你可以这样处理:(我假设每个应用只属于一个类别)

假设您对每个类别C1 ..C10

有以下排名
C1             C2    ...             C10

app1-1       app2-1

app1-2       &pp2-2

..           ...

app1-100     app2-100              app10-100

整体100个顶级应用程序分类(例如):

C  app1-1  app1-2  app2 -1  ... app2-10  

现在使用这两个表,首先你需要以与app1-1到app10-1相同的顺序命令C1到C10出现在列表C中,这样你就“知道”(这更像是猜测)什么类别是在排名方面更重要。

然后使用此信息对其余信息进行排序。


现在我使用一个更简单的例子来展示如何订购剩余的元素。

让我们分3个类别和12个应用程序。

C1      C2      C3

app1    app21   app31   

app2    app22   app32

app3    app23   app33

app4    app24   app34

C = app1 app2 app21 app31

1.首先在表格中标记C中的所有元素:

app1    app21 ->app31   
 |   /
app2    app22   app32

app3    app23   app33

app4    app24   app34

2.秒,对剩余元素进行排序

由于你没有更多的信息,一个很好的近似是从左到右(从较大的排名顶部列表到较小排名的顶部列表)查看每一行,这给出了:

app3 app22 app32 app4 app23 app33 app24 app34

然后整体分裂将是:

app1 app2 app21 app31 app3 app22 app32 app4 app23 app33 app24 app34

我希望这个例子能让我的想法变得清晰,并且有所帮助。

我认为这种方法使用了C1 ... C10和C中的所有信息。

答案 1 :(得分:1)

一种简单的方法是使用整体top-100来确定从哪个类别获取下一个应用程序。

在pesudo-code中:

While (not finished) 
  i++
  category = Overall_list(i).getCategory()
  Overall_list.add(get next app from list for category)
end while

在最后100位中没有任何条目的任何类别都会被添加。

答案 2 :(得分:1)

按如下方式构建有向图:

  1. 每个应用都是一个节点。
  2. 如果app X在任何列表上排名高于app Y,则将一条边指向X到Y.注意:如果X在任何列表中的排名高于Y,则实际上只需要添加一条边。
  3. 类别列表中某些排名第一的项目可能不会出现在总排名列表中。在这种情况下,我会将总列表中排名最低的项目的边缘添加到每个项目中以使图形连接。
  4. 然后,在构造的图上做topological sort。最终的订购将保证与每个前100名列表兼容。

    即使应用程序出现在多个类别列表中,此方法也会起作用 - 假设类别列表是相互一致的(例如:根据总下载排名,而不是按类别下载排名)。例如,如果您有一个案例,其中X在一个列表中排名高于Y但是Y在另一个列表上排名高于X,那么这将无法正常工作(我不确定会是什么)。

    如果没有更多的信息(例如:某种概率模型),我无法真正解释“从统计学上说最可能”的含义。