二维数组用一维数组的方式表示

二维数组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的访问顺序与存放顺序是一致的,按行存储,按行访问)。从而导致执行的时间不同。数据越大,时间相差越明显,大家也可以自行编写代码运行一下!!

经验分享 程序员 微信小程序 职场和发展