Благодаря пользователю3125280, D.W. и Евгений Клюев вопрос обновляется.
У меня есть список веб-страниц, и я должен их часто скачивать, каждая веб-страница имеет другую частоту загрузки. Основываясь на этой частоте, мы группируем веб-страницы в 5 группах:
Items in group 1 are downloaded once per 1 hour
items in group 2 once per 2 hours
items in group 3 once per 4 hours
items in group 4 once per 12 hours
items in group 5 once per 24 hours
Это означает, что мы должны загрузить все веб-страницы группы 1 за 1 час, всю группу 2 через 2 часа и т.д.
Я пытаюсь сделать алгоритм. В качестве ввода у меня есть:
a) DATA_ARR
= один массив с 5 номерами. Каждое число представляет количество элементов в этой группе.
b) TIME_ARR
= один массив с 5 номерами (1, 2, 4, 12, 24), представляющий, как часто будут загружаться элементы.
b) X
= общее количество загружаемых веб-страниц в час. Это вычисляется с помощью items_in_group/download_frequently и округляется вверх. If we have 15 items in group 5, and 3 items in group 4, this will be 15/24 + 3/12 = 0.875 and rounded is 1.
Каждый час моя программа должна загружаться на сайтах max X
. Я ожидаю, что алгоритм выдаст что-то вроде:
Hour 1: A1 B0 C4 D5
Hour 2: A2 B1 C2 D2
...
A1 = второй элемент 1-й группы
C0 = 1-й элемент 3-й группы
Мой алгоритм должен быть максимально эффективным. Это означает:
a) шаблон должен быть расширяемым, по крайней мере, до 200 + часов
b) не нужно создавать повторяемый шаблон
c) места, где это возможно, , чтобы использовать абсолютную минимальную пропускную способность
d) никогда не загружайте элемент чаще, чем частота обновления, никаких исключений
Пример:
group 1: 0 items | once per 1 hour
group 2: 3 items | once per 2 hours
group 3: 4 items | once per 4 hours
group 4: 0 items | once per 12 hours
group 5: 0 items | once per 24 hours
Мы вычисляем количество предметов, которые мы можем взять за час: 3/2+4/4 = 2.5. We round this upwards and it 3.
Используя карандаш и бумагу, мы можем найти следующее решение:
Hour 1: B0 C0 B1
Hour 2: B2 C1 c2
Hour 3: B0 C3 B1
Hour 4: B2
Hour 5: B0 C0 B1
Hour 6: B2 C1 c2
Hour 7: B0 C3 B1
Hour 8: B2
Hour 9: B0 C0 B1
Hour 10: B2 C1 c2
Hour 11: B0 C3 B1
Hour 12: B2
Hour 13: B0 C0 B1
Hour 14: B2 C1 c2
and continue the above.
Возьмем C0
, C1
C2
и C3
один раз каждые 4 часа. Мы также принимаем B0
, B1
и B2
один раз каждые 2 часа.
Вопрос: Пожалуйста, объясните мне, как разработать алгоритм, способный загружать элементы, при использовании абсолютного минимального количества загрузок? Грубая сила НЕ a решение, и алгоритм должен быть эффективным процессором, потому что количество элементов может быть огромным.
Вы можете прочитать ответ, размещенный здесь: https://cs.stackexchange.com/a/19422/12497, а также ответ, отправленный ниже пользователем3125280.