2009-10-08 118 views
0

我有一些矩陣,我想循環塊,矩陣可能有很多不同的大小,但我可以知道大小,有沒有辦法快速循環塊?如何通過矩陣塊循環?

即:快速輸出的塊的索引,假設的4×4我應該有一個矩陣:1(0,0),(0,1)(1,0)(:

塊1 ,1)
Block2:(0,2),(0,3)(1,2)(1,3)
Block3:(2,0),(2,1)(3,0)(3) ,1)
塊4:(2,2),(2,3)(3,2)(3,3)
其中索引是(row,col)。

對於塊,我的意思是大小爲sqrt(matrixSize)* sqrt(matrixSize)的子矩陣,其中矩陣是matrixSize * matrixSize的矩陣。例如,一個4×4的矩陣有4 * 2 * 2的塊,一個9 * 9有9 *塊的3 * 3 ...

我在C工作,但我認爲僞代碼也是有用的,我只需要索引上的循環。

+0

請說明你想,當你說「循環」到底該怎麼做加工和迭代。此外,您還需要進一步闡明「塊」的含義;矩陣sqrt(4)* sqrt(4)= 4的2x2矩陣的唯一子矩陣是原始矩陣。以上兩個例子都是理想的。 – p00ya 2009-10-08 09:06:41

回答

0

我設法做到了,它用c編碼...
變量'matrix_size'包含矩陣的行數(或列數)。
變量'block'包含矩陣的一個塊的預先計算大小,即:matrix_size的sqrt。


for(int i = 0; i< matrix_size; i++) 
{ 
    fprintf(stdout, "Block %u: ", i); 
    for(int k= ((i/block)*block) ; k < (((i/block)*block) + block) ;k++) 
    { 
    for(int j = ((i%block)*block) ; j< (((i%block)*block) + block); j++) 
    { 
     fprintf(stdout,"(%u,%u)",k,j); 
    } 
    } 
    fprintf(stdout, "\n"); 

}