看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《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)