疲倦的時候,有個人會陪你;
孤單的時候,有個人會想你。
我的小寶貝啊,
好想捏捏你的笑臉,
讓你知道你是最美的。
——暢寶寶的傻逼哥哥
上篇博文中,我們將算法看成點到點的映射,對任意點
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