2014-12-18 2 views
0

Итак, у меня есть эта проблема, что мне нужно работать на работу, но я не могу найти хороший алгоритм. Мне дают среднее количество отзывов и количество отзывов. Из этих двух частей информации мне нужно произвольно генерировать, сколько было сделано 5 звезд, 4 звезды, 3 звезды, 2 звезды и 1 звезда. Вот две формулы, которые могли бы лучше объяснить, в чем проблема.Как найти количество каждого обзора в зависимости от среднего и общего количества отзывов

Given Review Average (x) 
Given Total Number of Reviews (y) 

Find: 
a = # of 5 star reviews 
b = # of 4 star reviews 
c = # of 3 star reviews 
d = # of 2 star reviews 
e = # of 1 star reviews 

a + b + c + d + e = total # of reviews (KNOWN: y) 
(5*a + 4*b + 3*c + 2*d + 1*e) = total number of stars = average(x) * total reviews(y) 

Это больше типа математических задач, чем программирования, но мне нужно, чтобы иметь возможность написать некоторый тип алгоритма для получения а, б, в, г и е в JavaScript программно. Кто-нибудь знает какие-либо хорошие алгоритмы для чего-то вроде этого? Благодаря!

+0

См. Мой ответ ниже, но я могу быть недоразумением. Вы пытаетесь найти все перестановки 'a',' b', 'c',' d', 'e', которые могут дать вам ответ? –

+0

Не все перестановки, только одна. Имейте в виду, что может быть более миллиона отзывов, но, очевидно, средний показатель будет от 1 до 5. Алгоритм должен быть достаточно прочным, чтобы обрабатывать большое количество обзоров. – jas7457

+0

"только один"? Который из? Кто угодно? Или вы предполагаете, что можно найти правильный? –

ответ

0

Вы можете получить максимально возможное количество очков, сделав все 5-звездочным обзором. Вы можете уменьшить эту сумму на единицу, сделав один из 5-звездочных обзоров 4-звездочным обзором. Вы можете продолжать сокращать это на единицу, пока все не просмотрят 4 звезды. Опять же, уменьшите на один, сделав 4-звездочный обзор 3-звездочного обзора ...

Итак, есть способ получить все возможные точки всего от всех 5 звезд до всех 1-звезд, и вы можете получить какой-то ответ за все возможное.

Конечно, вам не нужно вычислять эту точку за точкой. Вы можете начать поиск, сравнив количество очков со всеми 5-звездочными, все 4-звездочные .. все 1-звездочные и найдите наименьшую сумму, большую, чем ваша цель. Затем измените достаточно того, какую звезду вы определили, чтобы достичь следующей наименьшей ценности, чтобы достичь вашей точной цели.

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

Смежные вопросы