※ 引述《liu23829 (做人別太跩)》之銘言:
: 我解釋一下,並不是向對角線靠攏,我強調的非0元素的移動,基本上是向左上方移動
: 透過基本兩列與兩行的互換,為何一開始要定義J=1,這個意思是從一個矩陣的第一行
: 開始來做非0元素的移動,所以要鎖定第一行,在第一行裡有非0元素就透過兩列的互換
: 使非0元素往上移,0元素往下移
: 上述的例子,在第一次的列移動後(R5→R2),第一行變成[0.5,1,0,0,0],此時
: 第一行中,非0元素所在的列為1、2列,
: 定義Ib1(這個意思是第一次移動後非0元素所在的列個數為2,故Ib1=2)
: 再針對這2列(也就是1、2列,做非0元素的行移動,第一次的行移動為C2→C4)
: 非0往左靠,0往右靠,
: 移動後定義Jb1(針對第1、2列行移動後,含一非0元素以上所在的行個數為2,Jb1=2)
: 再針對此2行(也就是1、2行)做列的移動,非0往上,0往下,所以會有Ib2之後Jb2
: 所以它是有迴圈關係的,在移動的過程,非0元素會慢慢形成區塊
: 這種移動方式才有辦法使某區塊形成右下和下方皆為0元素,當然如果不能,就停止
做一個假想,假想你寫了一個函數可以求任兩行或任兩列的黏合度,
只要兩列或兩行有相同位置都存在非0元素,黏合度就高上一級.
因此,考慮以下的各行,
: 0.5000 0 0 0 0 0
: 0 2.0000 0 0 3.0000 2.0000
: 0 0 2.0000 0 1.0000 0
: 0 0.3333 0 0 0 0
: 1.0000 0 0 2.0000 0 0
(1,4)黏合度1,(2,5)黏合度1,(2,6)黏合度1,(3,5)黏合度1,
黏合度可以排順序,但在此沒什麼好排. 將可黏合的行貼在一起:(1,4,2,6,5,3).
如果黏合度較高,應該排比較左邊吧.
再稍微參考0元素少的排左邊的因素,各行重新調整如下:
: 0.5000 0 0 0 0 0
: 0 0 0 3.0000 2.0000 2.0000
: 0 0 2.0000 1.0000 0 0
: 0 0 0 0 0.3333 0
: 1.0000 2.0000 0 0 0 0
再考慮各列黏合度:
(1,5)黏合度1,(2,3)黏合度1,(2,4)黏合度1.
重新黏合各列,並稍微參考0元素少的排上面的因素,調整如下:
: 1.0000 2.0000 0 0 0 0
: 0.5000 0 0 0 0 0
: 0 0 2.0000 1.0000 0 0
: 0 0 0 3.0000 2.0000 2.0000
: 0 0 0 0 0.3333 0
此時就調不動了,大概是完成.
這樣程式會比較好寫吧...
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.160.111.200
※ 編輯: yauhh 來自: 218.160.111.200 (06/21 00:01)