syn*_*ack 6 python algorithm numpy
我正在寻找一种有效的方法将数组拆分成具有类似直方图的块.
例如,给定数组:
l = np.array([1, 2, 3, 4, 1, 1, 1, 2, 3, 4, 55, 5, 5, 5, 5, 5, 3, 2, 2, 21, 2])
Run Code Online (Sandbox Code Playgroud)
我想获得:
c1 = np.array([1, 4, 1, 5, 5, 3, 2])
c2 = np.array([2, 1, 3, 4, 5, 5, 2])
c3 = np.array([3, 1, 2, 55, 5, 2, 21])
Run Code Online (Sandbox Code Playgroud)
不仅如此,每个块在给定函数f上应具有相似的大小和类似的总和:
1. |sum(ci, f) - sum(cj, f)| < e, for i != j
2. |len(ci) - len(cj)| < e, for i != j
Run Code Online (Sandbox Code Playgroud)
哪里
sum(c, f) = f(c[0]) + ... + f(c[len(c)])
Run Code Online (Sandbox Code Playgroud)
编辑:
澄清这个意图.我希望将列表上的流程并行化为n子流程,但必须在每个子流程之间均匀分配成本.处理此列表中元素的成本是f数组中相同位置的整数的函数l,其中f是过程的计算复杂度.例如,f(i)=i^2.因此,我希望所有流程都具有相同的计算成本,而不是让流程过早完成而其他流程永远持续.
让我们从一个非常弱的假设开始,即相似的直方图以以下基本方式定义:对于一组整数S1 ,如果,则直方图与集合S2H(S1)的直方图相似。H(S2)sum(S1) = sum(S2)
通常,您会在找到数组A的子集S1、S2、...、SN后,使得、 以及 在我们的假设下。不幸的是,你遇到了一个k-Partition 问题,这是 NP 困难的,如果你让某人找到一种有效的方法(即多时间)来做到这一点,正如你所要求的,结果将是首先在stackoverflow上被证明是正确的!f(S1) = f(S2) = ... = f(SN)f=sumP=NP
| 归档时间: |
|
| 查看次数: |
732 次 |
| 最近记录: |