當前位置:首頁 » 存儲配置 » 存儲半個矩陣

存儲半個矩陣

發布時間: 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-13 15:43:22 瀏覽:642
安卓哪個娃娃 發布:2025-07-13 15:35:52 瀏覽:141
伺服器列表格式錯誤什麼意思 發布:2025-07-13 15:33:05 瀏覽:169
lol腳本有哪些 發布:2025-07-13 15:10:28 瀏覽:164
lol怎麼上傳囧圖 發布:2025-07-13 15:09:40 瀏覽:89
c語言火車售票系統 發布:2025-07-13 15:06:55 瀏覽:390
用什麼緩存視頻 發布:2025-07-13 14:52:27 瀏覽:360
GTA5mods文件夾 發布:2025-07-13 14:52:27 瀏覽:53
如何在本地搭建svn伺服器地址 發布:2025-07-13 14:52:26 瀏覽:964
手動編程教程 發布:2025-07-13 14:52:17 瀏覽:378