Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 使两个直方图成比例的算法,最小化删除的单位_Performance_Algorithm_Sorting_Optimization_Histogram - Fatal编程技术网

Performance 使两个直方图成比例的算法,最小化删除的单位

Performance 使两个直方图成比例的算法,最小化删除的单位,performance,algorithm,sorting,optimization,histogram,Performance,Algorithm,Sorting,Optimization,Histogram,假设你有两个相同数量的柱状图。N观测值分布在箱子之间。每个箱子现在有0到N个观测值 什么算法适合于确定从两个直方图中删除的最小观察数,以使它们成比例?它们不需要绝对数相等,只需要彼此成比例。也就是说,必须有一个公因数,通过该公因数,一个直方图中的所有箱子都可以相乘,以使其与另一个直方图相等 例如,想象以下两个直方图,其中每个直方图中的项目i指的是各个直方图在bin i中的观察数 直方图1:4,7,4,9 直方图2:2,0,2,1 对于这些直方图,解决方案是从直方图1中删除bin 2中的所有7个观

假设你有两个相同数量的柱状图。N观测值分布在箱子之间。每个箱子现在有0到N个观测值

什么算法适合于确定从两个直方图中删除的最小观察数,以使它们成比例?它们不需要绝对数相等,只需要彼此成比例。也就是说,必须有一个公因数,通过该公因数,一个直方图中的所有箱子都可以相乘,以使其与另一个直方图相等

例如,想象以下两个直方图,其中每个直方图中的项目i指的是各个直方图在bin i中的观察数

直方图1:4,7,4,9
直方图2:2,0,2,1

对于这些直方图,解决方案是从直方图1中删除bin 2中的所有7个观察值和bin 4中的另外7个观察值,这样(直方图1)*2=直方图2

但是,可以使用什么通用算法来找到两个直方图的子集,使它们之间的总观察数最大化,同时使它们成比例?您可以从两个直方图中删除观察值,也可以仅从一个直方图中删除观察值


谢谢

>P>在我看来,这个问题是等价的(如果你把每个直方图看作是n维向量),为了最小化曼哈顿长度r,其中R=X-B,A和B是你的“向量”,X是你的比例标度。p> |R |有一个最小值(不一定是整数),因此可以使用简单的二分法(或类似于牛顿法的方法)快速找到它

然后,假设您想要一个比例为整数的解决方案,测试ceil(x)和floor(x)两种情况,以找出哪种情况的曼哈顿长度最小(这是您需要删除的观察数)

证明问题不是NP难的:

考虑一个低效的“解决方案”,即从所有容器中删除所有N个观察值。现在AB都等于“零”直方图0=(0,0,0,…)。两个柱状图相等,因此对于所有比例值s,成比例为0=s*0,因此要删除的观测数的硬最大值为N

现在假设存在一个更有效的解决方案,分配/删除2*N(即在删除一些观察值后a=N*BB=N*a)。如果A=0B=0,我们得到了之前的具有N次清除的解决方案(这与清除少于N次的假设相矛盾)。如果A=0B0那么就没有s 0这样0=s*B也没有s这样的s*0=B(对于B=0s0)。因此必须是这样的情况,A0B0。假设a是要缩放的柱状图(因此a*s=B),a必须至少有一个非零条目a[i],最小值为1(在移除额外观察值后),因此缩放时它将具有最小值≥. 因此,等效条目B[i]也必须至少有2*N个观测值。但观察总数最初为N,因此我们需要在B[i]中添加至少N个观察值,这与改进溶液的添加/删除量少于N的假设相矛盾。因此,没有“有效”的解决方案需要大于N的比例标度

因此,要找到一个有效的解决方案,在最坏的情况下,需要测试0-N范围内的缩放因子的“最佳拟合”解决方案

A=s*B中比例因子s的“最佳拟合”解决方案,其中AB各需要M个料仓

增加/删除{Abs(A[i]-s*B[i])mods+Abs(A[i]-s*B[i])div的总和

这是一个M阶运算,因此,要测试0-N范围内的每个比例因子,将采用顺序O(M*N)的算法


我相当肯定(但还没有正式的证据),比例因子不能超过最填充的容器中的观察数。实际上,它通常要小得多。对于具有200个箱的两个直方图和随机选择的每个箱30-300个观察值:如果在AB的所有箱中分别存在Na>Nb总观察值,则比例因子几乎总是在Na/Nb-4>Nb,则s=0)

“在所有箱子之间分配N个观测值”与“在箱子之间分配N个观测值”的含义不同。如果最初允许您按自己喜欢的方式分发它们,则不存在需要删除任何观察值的N。(将1个观察结果放在histo 1的单元格1中,将N-1放在histo 2的单元格1中。)好的观点-它被改写以反映问题的意图。听起来像一个NP难问题。您通常要处理的箱子大约有多少个?N有多大?另外,两个直方图之间的样本数N是否相等?在您的示例中,这两个直方图的样本数不同。@user2566092肯定不是强NP难的——在每个直方图中的项目数增加后,事情会变得容易得多(proporti)