【发布时间】:2011-09-26 18:04:12
【问题描述】:
我有一个 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 个流组成,而每个流的长度约为千字节。
【问题讨论】:
-
您说“每个项的 cube 之和的平方根”,但您的等式显示“square 之和的平方根每个术语”——它是什么?
-
这件事让我想到“在频域中解决它”,尽管没有想到具体的解决方案。您正在处理的是这些音频数据吗?
-
@j_random_hacker: 这是正方形,我的错
-
@AShelly:是的。我需要用非常有限的一组声音组成一个音乐文件。
-
此外,当您同时播放两个声音时,振幅会加在一起,因此您应该寻找一种声音的排列方式,使它们 总和 到(几乎)所需的每个点的振幅,而不是你此刻正在做的事情,这看起来像是欧几里得距离的奇怪变体。
标签: algorithm