这是一个比较长的问题,请先深呼吸再开始阅读。
我想了解将一维数组的索引转换为多维数组向量索引的最快算法是什么。
我们来举个例子,以便理解为什么需要它:
我有一个二维数组:Array[i1] [i2]
i1从i1_b=0到i1_e=2运行,
i2从i2_b=0到i2_e=1运行,
所以这个数组会逐行输出到文件中:
Array[0][0]
Array[0][1]
Array[0][2]
Array[1][0]
Array[1][1]
Array[1][2]
现在我逐行读取文件,k是上次读取的行号。
可以注意到k将从k_b=0到k_e=5运行,并且
k = 0将对应于 i1 = 0, i2 = 0
k = 1将对应于 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:相关问题是模等分、整数除法、整数加法和整数乘法的延迟是多少? 如果这些数字取决于架构,请也让我知道。
提前谢谢!
我想了解将一维数组的索引转换为多维数组向量索引的最快算法是什么。
我们来举个例子,以便理解为什么需要它:
我有一个二维数组:Array[i1] [i2]
i1从i1_b=0到i1_e=2运行,
i2从i2_b=0到i2_e=1运行,
所以这个数组会逐行输出到文件中:
Array[0][0]
Array[0][1]
Array[0][2]
Array[1][0]
Array[1][1]
Array[1][2]
现在我逐行读取文件,k是上次读取的行号。
可以注意到k将从k_b=0到k_e=5运行,并且
k = 0将对应于 i1 = 0, i2 = 0
k = 1将对应于 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:相关问题是模等分、整数除法、整数加法和整数乘法的延迟是多少? 如果这些数字取决于架构,请也让我知道。
提前谢谢!
P.S. 对于某些人来说,将秒转换为天-小时-分钟-秒的最快算法可能更容易理解。