Рассчитать расчетное математическое ожидание данных рейтинга? - PullRequest
3 голосов
/ 26 августа 2011

Мне нужно отсортировать "самые популярные приложения RSS" по количеству загрузок приложений. Вот проблема:

Предположим, есть 1000 приложений.

В данных RSS перечислены 100 лучших приложений для каждой категории приложений.

Данные RSS также предоставляют список 100 лучших приложений независимо от категории.

RSS сортируется по количеству загрузок каждого приложения, но точное количество загрузок неизвестно.

У каждого приложения есть два известных свойства: категория и позиция в рейтинге RSS.

Теперь я хочу отсортировать все 1000 приложений по приблизительному количеству загрузок.

Сортировка не должна быть очень точной, просто по статистике можно было бы сделать все возможное.

Как я могу реализовать этот алгоритм сортировки? ТИА.

Ответы [ 3 ]

3 голосов
/ 26 августа 2011

вы можете обработать следующим образом: (я предполагаю, что каждое приложение относится только к одной категории)

Допустим, у вас есть следующий рейтинг для каждой категории 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  

Теперь, используя эти 2 таблицы, сначала вам нужно упорядочить C1-C10 в том же порядке, что и app1-1 - app10-1, появиться в списке 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 голос
/ 26 августа 2011

Построить ориентированный граф следующим образом:

  1. Каждое приложение является узлом.
  2. Если приложение X стоит выше приложения Y в любом из списков, поместите ребро, указывающее от X до Y. Примечание: вам действительно нужно добавить ребро, только если X на один ранг выше Y в любом списке.
  3. Возможно, что некоторые из элементов, занявших первое место в списках категорий, не появятся в общем списке рейтинга.В этом случае я бы добавил ребра, указывающие на элемент с самым низким рейтингом в общем списке, к каждому из этих элементов, чтобы связать граф.

Затем выполните топологию сортировать на построенном графе.Полученный заказ будет гарантированно совместим с каждым отдельным списком топ-100.

Этот подход будет работать, даже если приложение появляется в нескольких списках категорий - при условии, что списки категорий взаимно согласованы (например, ранжируются по общему количеству загрузок, а не, скажем, по категориям загрузок).Например, если у вас когда-либо был случай, когда X ранжируется выше Y в одном списке, а Y ранжируется выше X в другом списке, то это не будет действительно работать (и я не уверен, что будет).

Без дополнительной информации (например, какой-то модели вероятности) я не могу по-настоящему истолковать, что на самом деле означает «статистически говоря наиболее вероятный».

1 голос
/ 26 августа 2011

Простой способ - использовать общий топ-100, чтобы определить, из какой категории получить следующее приложение.

В псевдокоде:

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

Любая категория (категории), не имеющие записи в общем топ-100, будут добавлены последними.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...