Разбиение на группы множества чисел (на самом деле столбца в таблице sql). Как разбить на равные группы?
Всем привет! Ребята, подскажите, пжлста, возможно кто-то сталкивался с задачей подобной. Есть столбец с числами (условно, 50 строк, значения рандомные). Требуется раскидать эти числа по группам так, чтобы сумма в каждой группе была примерно одинаковая. То есть фактически добавить столбец с номером группы для каждой строки. Разбить на 6-8 групп (конкретное число неважно). Я хотел решить это с помощью алгоритма Кармаркара-Карпа, он же LDM, но внезапно понял, что не до конца представляю как этот алгоритм работает для множества групп и как на втором этапе происходит восстановление партиций после первого этапа, где числа последовательно заменяются разностью. Буду раз людям подсказкам! P.S. задачу пытаюсь решить либо на SQL, либо pl/sql.
Update. Вот условно данные.
with t as (
select trunc(10000 * dbms_random.value) val, ' ' as grp from dual union all
select trunc(10000 * dbms_random.value) val, ' ' as grp from dual union all
select trunc(10000 * dbms_random.value) val, ' ' as grp from dual union all
select trunc(10000 * dbms_random.value) val, ' ' as grp from dual union all
select trunc(10000 * dbms_random.value) val, ' ' as grp from dual union all
select trunc(10000 * dbms_random.value) val, ' ' as grp from dual union all
select trunc(10000 * dbms_random.value) val, ' ' as grp from dual union all
select trunc(10000 * dbms_random.value) val, ' ' as grp from dual union all
select trunc(10000 * dbms_random.value) val, ' ' as grp from dual union all
select trunc(10000 * dbms_random.value) val, ' ' as grp from dual union all
select trunc(10000 * dbms_random.value) val, ' ' as grp from dual union all
select trunc(10000 * dbms_random.value) val, ' ' as grp from dual
)
select * from t;
Задача - требуется расставить всем значениям val номер группы в столбец grp (от 1 до 8). При этом требование такое - суммы по всем группам должны быть максимально равны. То есть нужно максимально равномерно распределить данные по группам.