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

存儲半個矩陣

發布時間: 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所能正確解析的行序的了。

行序和列序的轉換其實就是一個矩陣的轉置關系,雖然這個變換很簡單,但是在使用不同的框架時,要記得先注意一下這個系統式採用哪種方式存儲矩陣的,才不會犯錯。

熱點內容
車載安卓導航usb介面在哪裡 發布:2025-07-13 23:39:54 瀏覽:931
保定少兒編程培訓班 發布:2025-07-13 23:30:04 瀏覽:81
親緣關系演算法 發布:2025-07-13 23:21:59 瀏覽:579
明明輸對了密碼為什麼充值不了 發布:2025-07-13 23:20:34 瀏覽:330
手機視頻直播視頻源碼 發布:2025-07-13 23:19:07 瀏覽:837
進制編程圖 發布:2025-07-13 23:17:31 瀏覽:269
javadao 發布:2025-07-13 23:11:56 瀏覽:990
u盤安卓系統卡在哪裡 發布:2025-07-13 23:11:54 瀏覽:96
怎麼設置密碼oppo 發布:2025-07-13 23:07:25 瀏覽:994
五鋪編程 發布:2025-07-13 23:06:35 瀏覽:531