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.