array: converte índice de matriz unidimensional para um índice vetorial de um array multidimensional

Será uma pergunta longa, por favor, respire fundo antes de ler.

Eu quero entender o que seria o algoritmo mais rápido para converter o índice de matriz unidimensional para um índice vetorial de um array multidimensional.

Vamos prosseguir com um exemplo para entender por que preciso disso:

Eu tenho uma matriz bidimensional: Array [i1] [i2]

i1 é executado de i1_b = 0 a i1_e = 2

i2 corre de i2_b = 0 para i2_e = 1

Portanto, esse array é enviado ao arquivo linha por linha:

Matriz [0] [0]

Matriz [0] [1]

Matriz [0] [2]

Matriz [1] [0]

Matriz [1] [1]

Matriz [1] [2]

Agora eu leio o arquivo linha por linha e o índice k é o número da linha que está sendo lida por último.

Eu li a primeira linha que é Array [0] [0] ek = 0

Eu li a segunda linha que é Array [0] [1] ek = 1

...

Pode-se notar que k irá correr de k_b = 0 para k_e = 5 e

k = 0 corresponderá a i1 = 0, i2 = 0

k = 1 corresponderá a i1 = 0, i2 = 1

...

Problema: Então, meu problema é como converter o k em i1 e i2 da maneira mais rápida possível? (Eu não preciso disso enquanto leio o arquivo, mas depois no meu programa)

Neste exemplo, uma das soluções seria

i1 = k / (i1_e - i1_b + 1);

i2 = k% (i1_e - i1_b + 1);

Pergunta 1: É a solução mais rápida possível em termos de ciclos e tempo de computador?

ESTÁ BEM. Pergunta 2: Como podemos generalizar esse algoritmo para matrizes multidimensionais?

Matriz [i1] [i2] [i3] [i4]

i1 = k / (i1_e - i1_b + 1);

i2 = k% (i1_e - i1_b + 1);

i3 = i2 / (i1_e - i1_b + 1);

i4 = i2% (i1_e - i1_b + 1);

Pergunta 3: É a maneira mais rápida de fazer isso?

Pergunta 4: questão relacionada seria qual é a latência para divisão modular, divisão de inteiros, adição de inteiros e multiplicação de inteiros? Se esses números dependerem da arquitetura, por favor, também me avise.

Desde já, obrigado!

P.S. Pode ser mais fácil para alguém pensar sobre esse problema como o algoritmo mais rápido para converter segundos em dias-horas-minutos-segundos.

questionAnswers(2)

yourAnswerToTheQuestion