你说什么?

“其他人必须说出每个人都清楚的东西 这样

的题词,Google / Yandex找不到作者。



这是文章“每个人都清楚的东西”的第二部分

为了更好地理解其中概述的Z算法,我将在此处添加前面讨论/评论中给出的一个很好的示例



想象一下,任务是在给定的(允许)值间隔上构造一些函数T(X)的曲线。希望尽可能详细地执行此操作,但是您不事先知道何时会“被手抓住”。您想要生成X值,以便在曲线的绘制中断的任何时候(在间隔上生成X参数并计算T(X)),结果图都尽可能准确地反映此功能。这将花费更多时间-图形将更准确,但是-始终会出现当前任意函数所能达到的最大值



当然,对于已知功能,区间划分算法可以考虑其行为,但是在这里,我们讨论的是一种通用方法,该方法可以以最小的“损失”给出所需的结果。对于二维情况,您可以举一个显示特定浮雕/曲面的示例,并要确保尽可能多地显示其最大特征。



一般情况下,建模的任务和对象(从第一部分开始)可能会大不相同:存在理论/物理模型或近似模型(黑匣子)-到处都有构建模型的细微差别。但是,对于每个人来说,生成参数(包括Z算法)的需求是一个共同的组成部分。在某些情况下(例如,诸如此类),获得T的时间太长(几天和几周),那么选择新步骤的算法会以其他标准停止,这不是因为并行过程中完成了主要计算周期。如果预期的改进明显比模型误差和/或测量误差T差,则进一步减少改善对下一个预测T的搜索的步骤就没有意义。



我将再给出Z算法的二维情况(在字段64 * 64中K = 3)的可允许间隔的划分的说明:







图中突出显示的点(9个)是边缘和间隔中间的起点,如有必要,将其视为Z算法之外的部分,您可以看到水平和垂直方向/“路径” Z值缺失。此处的附加点很容易分别计算,但是随着这些方向/“轨迹”上点的数量增加,该函数的表示将有所改善(“轨迹”变窄),并且需要对算法本身进行补充(需要7行,其中n个主循环中有4个运算符,参见下文),否则我看不到创建单独的计算。而且,在这种情况下,算法的平均效率会降低,并且模型的表示形式也不会得到特别的改进(即使对于n> 8,参数的阶跃也小于1/1000,请参见下表)。



Z算法的第二个特征是(对于二维情况)加点顺序的不对称性-它们在Y轴/参数上更频繁,图片在每个循环的末尾对齐n。



算法Z,一维情况,以VBA语言表示:



Xmax = 
Xmin = 
Dx = (Xmax - Xmin) / 2
L = 2
Sx = 0
For n = 1 To K
      Dx = Dx / 2
      D = Dx
      For j = 1 To L Step 2
            X = Xmin + D
				  Cells(5, X) = "O" '   - /   T(X)
            X = Xmax - D
				  Cells(5, X) = "O"
            D = D + Sx
       Next j
       Sx = Dx
       L = L + L
Next n


算法Z,二维情况,VBA语言:



Xmax = 		'	65 -    , GIF
Xmin = 		'	1
Ymax = 		'	65
Ymin = 		'	1
Dx = (Xmax - Xmin) / 2
Dy = (Ymax - Ymin) / 2
L = 2
Sx = 0
Sy = 0
For n = 1 To K		'	K = 3	  GIF
      Dx = Dx / 2
      Dy = Dy / 2
      Tx = Dx
      For j = 1 To L Step 2
	X1 = Xmin + Tx
        X2 = Xmax - Tx
	Ty = Dy
        For i = 1 To L Step 2
	   Y = Ymin + Ty
	   Cells(Y, X1) = "O" '   - /   T(Y,X)
	   Cells(Y, X2) = "O"
	   Y = Ymax - Ty
	   Cells(Y, X1) = "O"
	   Cells(Y, X2) = "O"
	   Ty = Ty + Sy
         Next i
       Tx = Tx + Sx
       Next j
       Sx = Dx
       Sy = Dy
       L = L + L
Next n


计算成本:







方括号中显示了计算中使用的主要操作(不考虑组织周期的成本)。



在此应注意,在这种情况下,除法[÷]相当“繁重”,并不昂贵,因为整数除以2就是移位一位。随着K的增加,除法和赋值运算的相对成本([=],第二项)迅速趋于零。



总积分:







平均成本:







对于K的第一个值,我们将使用这些公式进行计算并填写表格:





这里的``区间分数''是循环结束时各点之间的相对步长n。

最后一行(“平均值”)显示每点的相对成本-加/减的比例。极限趋向于加法运算的0.5625或1 / 1.77777。



回到本文第一部分,这里显示“提出的用于讨论的算法展示了极低的计算成本,并且没有任何缺点或困难”,并且在突然中断计算的情况下还具有其他优势。在所有合适的应用程序中使用它是明智的。



我要求在软件和硬件的分发和实施方面寻求帮助。



All Articles