массив: преобразовать индекс одномерного массива в векторный индекс многомерного массива

Это будет долгий вопрос, пожалуйста, сделайте глубокий вдох, прежде чем читать.

Я хочу понять, что будет самым быстрым алгоритмом для преобразования индекса одномерного массива в векторный индекс многомерного массива.

Давайте рассмотрим пример, чтобы понять, зачем он мне нужен:

I have a 2 dimensional array: Array[i1][i2]

i1 runs from i1_b=0 to i1_e=2

i2 runs from i2_b=0 to i2_e=1

Таким образом, этот массив выводится в файл строка за строкой:

Array[0][0]

Array[0][1]

Array[0][2]

Array[1][0]

Array[1][1]

Array[1][2]

Теперь я читаю файл построчно, а индекс k - номер последней прочитанной строки.

I read the first line which is Array[0][0] and k=0

I read the second line which is Array[0][1] and k=1

...

Можно заметить, что k будет работать от k_b = 0 до k_e = 5 и

k=0 will correspond to i1=0, i2=0

k=1 will correspond to i1=0, i2=1

...

Проблема: Итак, моя проблема в том, как преобразовать k в i1 и i2 самым быстрым способом? (Мне это не нужно при чтении файла, но позже в моей программе)

В этом примере одним из решений будет

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

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

Вопрос 1: Это самое быстрое решение с точки зрения циклов и компьютерного времени?

ХОРОШО. Вопрос 2: Как мы можем обобщить этот алгоритм для многомерных массивов?

Array[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);

Вопрос 3: это самый быстрый способ сделать это?

Вопрос 4: связанный с этим вопрос: какова задержка для модульного деления, целочисленного деления, сложения целых и умножения целых чисел? Если эти цифры зависят от архитектуры, пожалуйста, дайте мне знать.

Заранее спасибо!

Постскриптум Для кого-то может быть проще думать об этой проблеме как о самом быстром алгоритме преобразования секунд в дни-часы-минуты-секунды.

Ответы на вопрос(2)

Ваш ответ на вопрос