疲倦的时候,有个人会陪你;
孤单的时候,有个人会想你。
我的小宝贝啊,
好想捏捏你的笑脸,
让你知道你是最美的。
——畅宝宝的傻逼哥哥
上篇博文中,我们将算法看成点到点的映射,对任意点
xk,对应唯一的点
xk+1。实际上,如果在某台电脑上实现某个算法,会存在问题。因为不同的人实现的方式不同,由于计算机四舍五入的误差,可能结果会不一样,因此将算法看成点到集合的映射是比较合适的。如果能够推导出算法的通用性质,那么对算法所有可能的实现都能满足。出于这个原因,后面的文章我们会用下面更加通用的算法定义。
定义1:对空间X上的每个点x∈X都分配一个X的子集,这样的算法是点到集合的映射。
根据这个定义,算法A产生序列{xk}∞k的方式是给任意初始点x0∈X分配一个X的子集X1,然后任意选择x1∈X1,给它分配集合X2⊂X,如此进行下去,如图1所示。xk+1,xk之间的对应规则形式为
xk+1∈A(xk)
其中如果xk是输入,那么A(xk)是所有可能输出构成的集合。
显然,上面的定义包含了算法所有可能的实现,它是基于相同数学结构的一类算法,我们可以用
xk+1=A(xk)+εq
来可视化点对集合算法的概念,其中εq是随机向量。因为定量误差取决于使用的算数运算以及所用计算机的精度,所以xk+1的精确位置是未知的,但不管怎样,xk+1是X某个小集合的元素。

图1