Я знаю, что, вероятно, не существует «идеального» решения для моего вопроса (это звучит как вариация проблемы с рюкзаком или корзиной), но вот мой сценарий :Разделение списка чисел на абсолютно равные суммы
Я хочу разделить список таблиц базы данных SQL на n (допустим, 7) груды одинакового размера (чтобы я мог распределить некоторые задачи обслуживания примерно одинаково на протяжении всей недели).
Предположим, что у меня есть 100 таблиц (это может быть выше или ниже, но не вероятно выше 5000), от размера 1 до размера 10 000 000 (конечно, большие таблицы гораздо реже).
Моя первоначальная идея состояла в том, чтобы сортировать таблицы в алфавитном порядке (псевдослучайно), а затем пройтись от начала, перейдя к следующей группе, когда сумма превышает сумму (размер)/7. Для некоторых баз данных это, вероятно, будет работать нормально, но если две гигантские таблицы находятся рядом друг с другом, это приводит к очень неравным группам. (Это не так маловероятно, как кажется, рассмотрите две огромные таблицы: Account_History и Account_History_Archive).
Существуют ли общепринятые для этого методы, которые дают «хорошие» результаты с различными исходными данными? Я бы склонялся к более простой технике, а не к более точной группировке (если в течение нескольких дней обслуживание проходит немного дольше, чем у других, это не , что большая сделка).
Звучит как работоспособная стратегия. Даже когда у меня будет одна массивная таблица, она будет сама по себе в одном ковше, в то время как остальные 6 ведер должны быть примерно равны по размеру. – BradC