Алгоритм переупорядочения последовательности весов

У меня есть несколько элементов в массиве, каждый из которых связан с определенным весом. Существует бизнес-правило, согласно которому никакие два смежных элемента не могут иметь общий вес больше определенного значения, скажем для простоты 100.

Например, следующее нормально:

[40,60,40,50]

Но не этот (поскольку 50 + 60 = 110)

[50,60,40] 

Я пытаюсь реализовать алгоритм, который переупорядочит элементы (если возможно), чтобы бизнес-правило выполнялось. Например, второй можно переставить на [60,40,50] или [50,40,60]

Алгоритм также должен стараться минимизировать количество перемещаемых элементов, то есть первое решение выше является наиболее подходящим, поскольку «подстановка» [60 , 40] поддерживается.

Я не ищу полного ответа или примеров кода, но был бы рад, если бы кто-нибудь мог указать на некоторые алгоритмы или категории алгоритмов для этой цели. Было бы гораздо лучше полагаться на существующий и проверенный алгоритм, чем на какие-то самодельные вещи.

Примечание: на самом деле количество элементов очень велико, поэтому тестирование всех различных перестановок НЕ является вариантом.

8
задан double-beep 20 May 2019 в 16:01
поделиться