美文网首页
多维数组的行列优先

多维数组的行列优先

作者: pujess | 来源:发表于2019-08-13 16:44 被阅读0次

背景:

首先来看一个矩阵:

图1
一般用行列坐标[a,b]的形式表示矩阵中元素的位置:
前面的表示行(a),后面的表示列(b),也就是[1,2]表示第1行,第2列

根据行优先的原则,其排序方式为


图2

根据列优先的原则,其排序方式为


图3

列优先和行优先在实际应用中有什么意义?

行优先或者列优先没有好坏,但其直接涉及到对内存中数据的最佳存储访问方式。因为在内存使用上,程序访问的内存地址之间连续性越好,程序的访问效率就越高;相应地,程序访问的内存地址之间连续性越差。所以,行/列优先对取数据有影响,如果程序取数据时地址内存时连续的那么就会快,因此当编译器取数组的值时是从列优先取的话,尽量取的时候也是按列优先取(根据编译器)——

(因为对于一个程序来说,数据必须一个个取,如果想缩短取这些数据的时间,那么就可以缩短数据存的距离,换句话说,我取完这一个,下一个数据最好就在它的隔壁,指针就不用跳来跳去)

  • 举个很简单的例子:

    我需要对二维数组 [[1,2,3,4,5],[6,7,8,9,10]] 进行遍历, 二维数组
    有两种方法:
//第一种
for(int i = 0;i < 5;i++){
  for(int j = 0;j < 2;j++){
    System.out.print(array[i,j]);
  }
}
//第二种
for(int i = 0;i < 2;i++){
  for(int j = 0;j < 5;j++){
    System.out.print(array[i,j]);
  }
}

第一种列是内循环,行是外循环,那么读取的时候就是,1,6,2,7,3,8,4,9,5,10,这就叫按列优先读取,如果编译器是按列存的话,那么速度会比第二种快。
第二种行是内循环,列是外循环,那么读取的时候顺序就是,1,2,3,4,5,6,7,8,9,10,这就叫按行优先读取,如果编译器是按行存的话,速度比第一种读取快。

也就是谁是内循环就是先读谁。

关于多维数组行列优先的题目

图4
(题目中的数组A也可以写成A[m][n])
记住这点!!所有的数组后跟两个字母的,都是前面的代表行,后面的代表列
m代表m行
n代表n列
i代表i+1行(因为数组下标是从0开始)
j代表j+1列
图5
记住这个矩阵!!但是!!要注意一点!计算的时候要把当前行去掉!
最后结果也就是i*n+j(如果是按行存储的话)

总结:记住两点就可以应付这些题目了

相关文章

  • 多维数组的行列优先

    背景: 首先来看一个矩阵: 根据行优先的原则,其排序方式为 根据列优先的原则,其排序方式为 列优先和行优先在实际应...

  • 多维数组

    创建多维数组 多维数组可以看成是数组的数组,二维数组是最基本的多维数组。 要创建多维数组,请将每个数组放在其自己的...

  • TS学习笔记(5)-多维数组

    多维数组的使用 ========= 知识点 多维数组的定义方法 多维数组的使用方法 代码

  • 4.3~1多维数组

    多维数组可以看作是数组的数组,如果将多维数组看作是比较特殊的一维数组,那数组的元素本身就是数组。在学习多维数组之前...

  • 2019-07-27

    多维数组: int [][]; 多维数组的声明 ; int [] [] a = new [2][3] new [...

  • 数组

    Arrays工具类的使用 多维数组 多维数组存储表格数据

  • 学习Java第五天

    数组是多个数据的集合 数组的语法 数组元素类型【】 数组名; 多维数组: 数组元素类型【】【】 数组名; 多维数组...

  • PHP Day4:基础回顾与加强

    多维数组 多维数组指的是包含一个或多个数组的数组。 PHP 能理解两、三、四或五级甚至更多级的多维数组。不过,超过...

  • Java学习day-13:多维数组和冒泡排序

    一、多维数组: 多维数组可以看成以数组为元素的数组。可以有二维、三维、甚至更多维数组。 1.二维数组: (1)二维...

  • Julia快速入门(五)多维数组 字典

    本篇代码在Julia1.0.2中测试通过 多维数组 多维数组定义 多维数组生成 字典 Julia使用Dict(字典...

网友评论

      本文标题:多维数组的行列优先

      本文链接:https://www.haomeiwen.com/subject/rgxbjctx.html