解釋一下藍書上的做法
按照數學歸納法證明這個貪心,假設當前在第\(i\)行,前面已經選出\(i-1\)個線性無關的向量了(非零行),那麼對於這一行,如果最終的結果不選\(z[k]\),而是選了另一個\(z[l]\),那麼最終的向量組加入\(z[k]\)後就線性相關了,\(z[k]\)可以被這個向量組唯一表示;如果這個向量組去除了\(z[l]\),那麼剩下的向量還是線性無關的,如果加入\(z[k]\)變成了線性相關,那麼\(z[k]\)也可以被這個向量組唯一表示,而且這種表示方法不含\(z[l]\),也就是說前面那種表示方法也不含\(z[l]\)(因為表示方法唯一);然而對行向量組進行初等行變換,每一個時刻任何一個行向量\(α\)都可以看做最開始的所有行向量的線性組合(而且\(α\)的係數一定不為\(0\)),而我們選取了\(z[l]\)後,會對\(z[k]\)進行消元,所以\(z[k]\)的線性表示包含\(z[l]\),矛盾,也就是說刪除\(z[l]\)加入\(z[k]\)的向量組仍然線性無關,是一個花費更低的極大無關組
然後講一下我的做法,不按照行向量考慮而是按照列向量考慮,將所有的\(z\)全部變成列向量然後進行初等行變換
我們先不管\(z\)的順序,直接進行初等行變換,最後化出來一個行簡化梯形矩陣,很顯然的一個極大無關組就是每個非零行的第一個非零元所在的列(也就是非自由元所在的列)
於是一個很自然的想法就是我們先將所有\(z\)按照花費從小到大排序,然後進行初等行變換,最後按照上述的方法選擇就是最優的方案
證明:最終的向量組一定包含花費最低的向量,否則的話花費最低的向量可以被極大無關組表出,而且係數不全為\(0\),於是極大無關組的某個向量就可以被替換為這個花費最低的向量;然後利用數學歸納法,假設我們現在的行簡化梯形矩陣長成這個樣子
現在在考慮第\(j\)列
如果第\(j\)列元素全為\(0\)了(指梯形下面的元素),那麼這個列向量肯定不選,因為已經可以被前面選擇的向量表出了(注意初等行變換不改變列向量之間的線性關係);否則的話,這個向量一定要選,可以利用上面類似的反證法證明