2012-04-25 77 views
4

我在尋找允許高效的行和列交換的稀疏矩陣表示。經典的表現形式(通過壓縮行,壓縮列或三元組)似乎只允許執行一個或另一個,但從不展臺。 任何人都知道一個好的數據結構呢?用於列和行交換的最佳稀疏矩陣表示

- 編輯 - 爲了澄清,我希望能夠換行,就像換行5和第7行,也交換柱像交換柱6和列8

+4

你是什麼意思的'經典表示'?我知道存儲稀疏矩陣的六種方法,每種方法都適用於某些操作,每種方法都不適合某些操作。 – 2012-04-25 13:20:31

+4

「高效的行和列交換」是什麼意思?例如,您是否想要將第1行與第3列交換;或者你想轉置整個矩陣? – 2012-04-25 13:21:23

+0

@HighPerformanceMark:我認爲它能夠有效地將第1行與第5行進行交換,並有效地將第4列與第9列進行交換,但不會混合行和列......猜猜這意味着問題確實很難得到:x – 2012-04-25 13:41:40

回答

1

你可能只是想只是添加另一個間接級別來處理交換,無論哪個效率不高。例如,如果您有一個可以有效交換行但不是列的稀疏表示,則可以有一個從真正列映射到有效列的數組。當你訪問一個元素時,使用該數組來找到合適的底層元素。

class SparseMatrix { 
    public: 
    Element& operator()(Index row,Index col) 
    { 
     return matrix(row,col_map[col]); 
    } 

    void swapRows(Index row1,Index row2) 
    { 
     matrix.swapRows(row1,row2); 
    } 

    void swapCols(Index col1,Index col2) 
    { 
     swap(col_map[col1],col_map[col2]); 
    } 

    private: 
    FastRowSwapSparseMatrix matrix; 
    vector<Index> col_map; 
};