Составление среднего потока по частям

У меня есть список из n потоков с плавающей запятой, каждый из которых имеет разный размер.
Потоки можно составлять вместе, используя следующие правила:
Вы можете запустить поток в любой момент времени (его ноль перед запуском).Вы можете использовать один и тот же поток несколько раз (он может перекрывать себя и даже несколько раз находиться в одной и той же позиции), и вам разрешено вообще не использовать определенный поток.
например:
входные потоки:

1 2 3 4
2 4 5 6 7
1 5 6

Могут быть составлены следующим образом:

  1 2 3 4
1 5 6
        1 5 6

После размещения выходной поток составляется по правилу, согласно которому каждое выходное число с плавающей запятой равно квадратный корень из суммы квадратов каждого члена.
например:
Если потоки в позиции:

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 потоков, из которых будет скомпоновано, в то время как каждый поток будет иметь длину около килобайта.

12
задан Dani 26 September 2011 в 19:10
поделиться