2012-05-29 42 views
1

任何人都可以提供/引用多維行 - 主要順序的'索引 - >偏移量'*變換的逆函數。此外,(僞)代碼將不勝感激。逆(列)行 - 主要順序變換

舉個例子,這促使我的問題的特定問題的一個簡化: 我有一個3維數據層次結構中,表示在由(A,B,C所跨越的空間)其中a,b和c是大於或等於0且小於N_a,N_b和N_c的整數。我想將數據表示爲一維數組。該「偏移」,以行優先順序,然後給出如下:

int offset(a, b, c){ 
     return a*N_b*N_c + b*N_c + c; 
} 

那麼什麼是逆轉變,即:

int a(int offset); 
int b(int offset); 
int c(int offset); 

此外,如何我概括這N」第三維索引?引發這個問題的問題是第五維。

萬一它很重要,我寫在c/c + +。

+0

你能也許澄清你的問題一點點?我想我可以幫忙,但我不太清楚你在問什麼。 – pg1989

+0

是的,我會的,謝謝。 – qonf

回答

3

如果索引作爲

offset = row + column*NUMROWS 

計算然後逆將是

row = offset % NUMROWS 
column = offset/NUMROWS 

其中%是模量,以及/是整數除法。

這假定第一個元素位於偏移量0,行0和列0.如果它們從1開始,則必須在適當的位置添加或減去1。


對於更高維度,您將不得不爲每個度量重複此操作。

offset = x + WIDTH*(y + HEIGHT*(z + DEPTH*time)); 

和逆

x = offset % WIDTH 
offset = offset/WIDTH 

y = offset % HEIGHT 
offset = offset/HEIGHT 

z = offset % DEPTH 
offset = offset/DEPTH 

time = offset 

你也可以提取特定座標:

z = (offset/(WIDTH * HEIGHT)) % DEPTH 
+0

嗨,感謝您的回覆。我其實是問,因爲我有一個5維索引案例。我很抱歉沒有說清楚。我很快就會在OP中這樣做。 – qonf