У меня есть список потоков n
с плавающей запятой, каждый из которых имеет разный размер.
Потоки могут быть составлены вместе, используя следующие правила:
Вы можете поместить поток, начинающийся в любой момент времени (ноль до его начала). Вы можете использовать один и тот же поток несколько раз (он может перекрываться и даже находиться в одной позиции несколько раз), и вам разрешено вообще не использовать определенный поток.
например.:
входные потоки:
1 2 3 4
2 4 5 6 7
1 5 6
Может быть составлен как:
1 2 3 4
1 5 6
1 5 6
После мест размещения выходной поток состоит из правила, согласно которому каждый выходной float равен квадратному корню из суммы квадрата каждого члена.
например.:
Если потоки в позиции:
1
2
3
Вывод:
sqrt(1*1 + 2*2 + 3*3) = sqrt(14) = 3.74...
Итак, для примера композиции:
1 2 3 4
1 5 6
1 5 6
Вывод:
1 5.09 6.32 3 4.12 5 6
У меня есть выходной поток и входные потоки. Мне нужно вычислить композицию, которая приведет к этой работе. точная композиция не должна существовать - мне нужна композиция как можно ближе к выходу (наименьшая накопленная разница).
например.:
Вход:
Поток для имитации:
1 5.09 6.32 3 4.12 5 6
и список:
1 2 3 4
2 4 5 6 7
1 5 6
Ожидаемый результат:
Stream 0 starting at 1,
Stream 2 starting at 0,
Stream 2 starting at 4.
Это похоже на проблему NP, есть ли какой-нибудь быстрый способ решить эту проблему? это может быть несколько грубой силой (но не полностью, ее не теоретической проблемой), и она может дать не лучший ответ, пока его достаточно близко.
Алгоритм будет обычно использоваться с потоком, чтобы имитировать с очень большой длиной (может быть несколько мегабайт), в то время как у него будет около 20 потоков, из которых каждый будет составлять около килобайта.