前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++经典算法题-多维矩阵转一维矩阵

C++经典算法题-多维矩阵转一维矩阵

作者头像
cwl_java
发布2020-02-13 23:18:08
8980
发布2020-02-13 23:18:08
举报
文章被收录于专栏:cwl_Javacwl_Java

47.Algorithm Gossip: 多维矩阵转一维矩阵

说明

有的时候,为了运算方便或资料储存的空间问题,使用一维阵列会比二维或多维阵列来得方便 , 例如上三角矩阵、下三角矩阵或对角矩阵,使用一维阵列会比使用二维阵列来得节省空间。

解法

以二维阵列转一维阵列为例,索引值由0开始,在由二维阵列转一维阵列时,我们有两种方式: 「以列(Row)为主」或「以行(Column)为主」。由于 C/C++、Java等的记忆体配置方式都是以列为主,所以您可能会比较熟悉前者(Fortran的记忆体配置方式是以行为主)。

以列为主的二维阵列要转为一维阵列时,是将二维阵列由上往下一列一列读入一维阵列,此时索引的对应公式如下所示,其中row与column是二维阵列索引,loc表示对应的一维阵列索引: loc = column + row* 行 数

以行为主的二维阵列要转为一维阵列时,是将二维阵列由左往右一行一行读入一维阵列,此时索引的对应公式如下所示:

loc = row + column* 列 数

公式的推导您画图看看就知道了,如果是三维阵列,则公式如下所示,其中i(个数u1)、 j(个数u2)、 k(个数u3)分别表示三维阵列的三个索引:

以列为主:loc = i*u2*u3 + j*u3 + k
以行为主:loc = k*u1*u2 + j*u1 + i

更高维度的可以自行依此类推,但通常更高维度的建议使用其它资料结构(例如物件包装)会比较具体,也不易搞错。

在C/C++中若使用到指标时,会遇到指标运算与记忆体空间位址的处理问题,此时也是用到这边的公式,不过必须在每一个项上乘上资料型态的记忆体大小。

代码示例

#include <stdio.h> 
#include <stdlib.h>
    int main(void) {
        int arr1[3][4] = {{1, 2, 3, 4},
            {5, 6, 7, 8},
            {9, 10, 11, 12}};
        int arr2[12] = {0}; int row, column, i;

        printf("原二维资料:\n"); for(row = 0; row < 3; row++) {
            for(column = 0; column < 4; column++) { printf("%4d", arr1[row][column]);
            }
            printf("\n");
        }

        printf("\n 以 列 为 主 :"); for(row = 0; row < 3; row++) {
            for(column = 0; column < 4; column++) { i = column + row * 4;
                arr2[i] = arr1[row][column];
            }
        }
        for(i = 0; i < 12; i++) printf("%d ", arr2[i]);

        printf("\n 以 行 为 主 :"); for(row = 0; row < 3; row++) {
            for(column = 0; column < 4; column++) { i = row + column * 3;
                arr2[i] = arr1[row][column];
            }
        }
        for(i = 0; i < 12; i++) printf("%d ", arr2[i]);


        printf("\n");

        return 0;
    }
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-01-17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 47.Algorithm Gossip: 多维矩阵转一维矩阵
    • 说明
      • 解法
        • 代码示例
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档