二维数组用一维数组的方式表示
二维数组a[i][j]表示为一维数组:
-
行优先原则:a[i*M+j] i是行下标,M是一行的元素个数,j是列下标 列优先原则:a[i*M+j] i是列下标,M是一列的元素个数,j是行下标
扩展:
问题:若二维数组元素按行优先存储,则有以下两种方式访问数组,
a. 按行访问数组,即一行一行访问数组
b. 按列访问数组,即一列一列访问数组
那么请问a和b两种方式哪种访问的速度快?
先说答案,第一种。
原因分析:
先说说程序访问的局部性原理,包括时间局部性和空间局部性。
-
时间局部性是指在最近的未来要用到的信息,很可能是现在正在使用的信息,因为程序中存在循环。 空间局部性是指在最近的未来要用到的信息,很可能与现在正在使用的信息在存储空间上是邻近的,因为指令通常是顺序存放,顺序执行的,数据一般也是以向量、数组等形式聚集地存储在一起的。
了解了上面的原理,相信你应该也知道了答案。a之所以比b快的原因便是a的空间局部性比b好。(因为a的访问顺序与存放顺序是一致的,按行存储,按行访问)。从而导致执行的时间不同。数据越大,时间相差越明显,大家也可以自行编写代码运行一下!!
下一篇:
树的学习与应用(从基础学起)