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

Algorithm 计算排名数据的估计数学期望值?,algorithm,math,sorting,Algorithm,Math,Sorting,我必须按应用程序下载数量对“最受欢迎的应用程序RSS”进行排序。问题是: 假设有1000个应用程序 RSS数据列出了每个应用类别的前100个应用 RSS数据还提供了前100个应用程序列表,而不考虑类别 RSS是按每个应用程序的下载计数排序的,但确切的下载计数是未知的 每个应用程序都有两个已知属性:类别和它在RSS排名中的位置 现在,我想根据1000个应用程序的估计下载量对其进行排序 排序不需要非常精确,只是从统计角度来说,尽可能多的排序是可以的 我如何实现这个排序算法?TIA.您可以这样处理:(

我必须按应用程序下载数量对“最受欢迎的应用程序RSS”进行排序。问题是:

假设有1000个应用程序

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

RSS数据还提供了前100个应用程序列表,而不考虑类别

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

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

现在,我想根据1000个应用程序的估计下载量对其进行排序

排序不需要非常精确,只是从统计角度来说,尽可能多的排序是可以的


我如何实现这个排序算法?TIA.

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

假设每个类别C1..C10的排名如下

C1             C2    ...             C10

app1-1       app2-1

app1-2       &pp2-2

..           ...

app1-100     app2-100              app10-100

总共100个顶级应用类别(例如):

现在使用这两个表,首先您需要按照列表C中app1-1到app10-1的顺序对C1到C10进行排序,这样您就“知道”(更像是猜测)就排名而言,哪个类别更重要

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


现在我想用一个更简单的例子来说明如何对其余元素进行排序。

让我们看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中的所有信息。

一个简单的方法是使用总体排名前100名来确定从哪个类别获得下一个应用程序

比苏多代码:

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

在总排名前100名中没有条目的任何类别都将添加到最后。

按如下方式构建一个有向图:

  • 每个应用程序都是一个节点
  • 如果应用程序X在任何列表中的排名高于应用程序Y,请放置一条从X指向Y的边。注意:如果X在任何列表中的排名比Y高一级,则只需添加一条边
  • 类别列表中的某些排名第一的项目可能不会出现在总排名列表中。在本例中,我将添加从总列表中排名最低的项指向这些项的边,以使图形连接起来
  • 然后,在构造的图上进行一次分析。由此产生的订单将保证与每个前100名名单兼容

    即使一个应用出现在多个类别列表中,这种方法也会起作用——假设类别列表是相互一致的(例如:根据总下载量而不是类别下载量进行排名)。例如,如果您曾经遇到过这样一种情况:在一个列表中X的排名高于Y,但在另一个列表中Y的排名高于X,那么这将不会真正起作用(我不确定会发生什么)


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

    一个应用程序可以包含多个类别吗?@amit,让我们简单一点,一个应用程序只能包含一个类别。谢谢,但是你如何确定C1、C2、C3等的迭代顺序。?在你的例子中,只是以任意顺序?@λq_,顺序将取决于app1 app21和app31在主类中的出现顺序:见我帖子中的这句话:“现在使用这两个表,首先你需要C1到C10的顺序,app1-1到app10-1在C中出现的顺序相同,所以你“知道”(这更像是一个猜测)就排名而言,哪一类更重要。”@λq_,这是我在示例的第一部分所做的。(我只是按正确的顺序选择了C1、C2、C3,但如果C是app21 app11 app31 app22,我会订购C2 C1 C3)谢谢,伙计,这看起来太棒了!你能给我一些伪代码让我更好地理解吗?维基百科页面上有伪代码。至于实现,有一个名为“tsort”的Unix命令可以执行此操作。
    While (not finished) 
      i++
      category = Overall_list(i).getCategory()
      Overall_list.add(get next app from list for category)
    end while