当前位置:首页 » 存储配置 » 存储半个矩阵

存储半个矩阵

发布时间: 2023-09-08 16:09:41

① 对于有n个顶点的无向图,怎样存储可以省一半空间

原则上的确是n的平方,不过由于无向图的邻接矩阵是一个对称矩阵,只需要存储下三角或者上三角的元素,个数就是从1加到n,就是n(n+1)/ 2,不过题目问错了,这是压缩存储,是用一维数组存放,一般好像不叫矩阵
其实更精确地说,上面的数字个数是普通对称矩阵的,这个邻接矩阵的对角线一定为0,所以,只需要存储1 加到n-1,也就是n(n-1)/2就可以了

② 存储矩阵示意图怎么看

在图形处理中,矩阵操作时最基本的操作,但是不同的系统中对矩阵的存储是不同,比如OpenGL和Cg中就是不一样的:

比如一个4x4矩阵[m11,m12,m13,m14

m21,m22,m23,m24

m31,m32,m33,m34

m41,m42,m43,m44],

在实现中通常将其存储为一个一维的线性数组如float matrix【16】或者float* matrix。

在opengl中这个matrix中数据的顺序是先遍历列的,线性存储为{m11,m21,m31,m41,m12,m22,m32......},这被称为矩阵的列序(column-major)存储,我们使用GlGetfloatv(GL_MODELVIEW_MATRIX,...)等得到的存储矩阵的数组都是按照这样的顺序存储矩阵的。

但是在cg中这个matrix的存储顺序确实先遍历行的,也就是存储为{m11,m12,m13,m14,m21,m22,m23,m24,m31,......},称为行序(row-major)存储,可能多数人认为这种存储顺序更“自然”,(其实我也这么觉得),这种存储方式也被称为是c-style的,好像是大多数系统里是按照行序存储矩阵的。

不同的系统对矩阵的存储方式不一样,如果在程序中综合使用了不同的框架,就要注意进行统一了,比如你在opengl 中使用了CG脚本的时候,例如一个cg程序void programm(uniform float4x4 modelviewMatrix,... ...)要求你从程序中传入一个modelview矩阵,我们在程序中使用opengl的GlGetfloatv()函数得到了float* glmatrix 为这个modelview矩阵,但是这个glmatrix确不能直接赋给modelviewMatrix供cg使用,因为cg在解析这个glmatrix 会把它解析为行序的,我们可以在让modelviewMatrix得到glmatrix 后,调用transfor()将modelviewMatrix做一个转置,modelviewMatrix就变成cg所能正确解析的行序的了。

行序和列序的转换其实就是一个矩阵的转置关系,虽然这个变换很简单,但是在使用不同的框架时,要记得先注意一下这个系统式采用哪种方式存储矩阵的,才不会犯错。

热点内容
法因数控钻床编程手册 发布:2025-07-14 00:18:26 浏览:490
gcc编译怎么知道错误的行数 发布:2025-07-14 00:06:21 浏览:383
压强算法 发布:2025-07-14 00:02:52 浏览:552
dns怎么配置端口 发布:2025-07-13 23:49:16 浏览:761
苹果服务器为什么停止响应 发布:2025-07-13 23:49:15 浏览:197
车载安卓导航usb接口在哪里 发布:2025-07-13 23:39:54 浏览:932
保定少儿编程培训班 发布:2025-07-13 23:30:04 浏览:82
亲缘关系算法 发布:2025-07-13 23:21:59 浏览:580
明明输对了密码为什么充值不了 发布:2025-07-13 23:20:34 浏览:331
手机视频直播视频源码 发布:2025-07-13 23:19:07 浏览:838