生活随笔
收集整理的這篇文章主要介紹了
对称矩阵的压缩存储
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
實驗目的:熟練掌握對稱矩陣壓縮存儲的方法,并能運用此方法進行實際應用。 實驗內容:對于n×n階的對稱矩陣,其元素分布的特點是a[i][j]=a[j][i],在存儲時,只需壓縮存儲對稱矩陣的上三角或下三角元素,但兩個對稱矩陣相乘的結果不一定是對稱矩陣。 實驗要求: (1)創建名為kcsj14.cpp的文件,在其中編寫兩個對稱矩陣相乘的程序。 (2)分別輸入對稱矩陣的元素。 (3)將這兩個矩陣相乘,所得結果存入一個n×n階的矩陣中,輸出存放結果的矩陣。 (4)若輸出為上三角或下三角矩陣,則需對其進行壓縮存儲。
import java.util.Scanner;class Matrix {// 定義矩陣大小int N;// 這里用一維數組存儲對稱矩陣壓縮后的下上角int[] m;// 帶參數的構造函數public Matrix(int N, int[] M) {this.N = N;this.m = M;}// 做矩陣乘法int[][] mul(Matrix M) {// 聲明N * N的二維數組存放計算結果int[][] ans = new int[N][N];for(int i = 0; i < N; i++) {for(int j = 0; j < N; j++) {ans[i][j] = 0;for(int k = 0; k < N; k++) {// 矩陣乘法ans[i][j] = ans[i][j] + M1[i][k] * M2[k][j];// 這里將上式中的M1[i][k]和M2[k][j]分開計算int temp = 1;if(i >= k) temp = temp * m[i*(i+1)/2 + k];else temp = temp * m[k*(k+1)/2 + i];if(k >= j) temp = temp * M.m[k*(k+1)/2 + j];else temp = temp * M.m[j*(j+1)/2 + k];ans[i][j] = ans[i][j] + temp;}}}return ans;}// 判斷矩陣是上三角、下三角、對稱矩陣或者常規矩陣static int judge(int[][] M, int N) {// flag[0]為真表示是上三角,flag[1]表示下三角,flag[2]表示對稱矩陣boolean[] flag = new boolean[3];// 初始化為全真flag[0] = flag[1] = flag[2] = true;for(int i = 0; i < N; i++) {for(int j = 0; j < N; j++) {// 當下三角部分不全為0時,該矩陣不是上三角矩陣if(i > j && M[i][j] != 0) flag[0] = false;// 當上三角部分不全為0時,該矩陣不是下三角矩陣if(i < j && M[i][j] != 0) flag[1] = false;// 當M[i][j] != M[j][i]時,該矩陣不是對稱矩陣if(M[i][j] != M[j][i]) flag[2] = false;}}// 返回判斷結果1表示上三角、2表示下三角、3表示對稱矩陣、4表示常規矩陣if(flag[0]) return 1;else if(flag[1]) return 2;else if(flag[2]) return 3;else return 4;}// 按類型輸出矩陣static void printMatrix(int[][] M, int status, int N) {switch(status) {case 1:{ // 壓縮輸出上三角矩陣System.out.println("(此矩陣為上三角矩陣,壓縮后如下)");int[] out = new int[N*(N+1)/2];for(int i = 0; i < N; i++) {for(int j = i; j < N; j++) {// 上三角與原矩陣的對應關系為M[i][j] = m[i*(2*N-i+1)/2 + j - i];out[i*(2*N-i+1)/2 + j - i] = M[i][j];}}for(int i = 0; i < N; i++) {for(int j = 0; j < N; j++) {if(i <= j) System.out.printf("%10d", out[i*(2*N-i+1)/2 + j - i]);else System.out.printf(" ");}System.out.println();}break;}case 2:{ // 壓縮輸出下三角矩陣System.out.println("(此矩陣為下三角矩陣,壓縮后如下)");int[] out = new int[N*(N+1)/2];for(int i = 0; i < N; i++) {for(int j = 0; j <= i; j++) {// 下三角矩陣與原矩陣的對應關系為M[i][j] = m[i*(i+1)/2 + j];,下同。out[i*(i+1)/2 + j] = M[i][j];}}for(int i = 0; i < N; i++) {for(int j = 0; j <= i; j++) {System.out.printf("%10d", out[i*(i+1)/2 + j]);}System.out.println();}break;}case 3:{ // 壓縮輸出對稱矩陣System.out.println("(該矩陣為對稱矩陣,壓縮后的下三角部分如下)");int[] out = new int[N*(N+1)/2];for(int i = 0; i < N; i++) {for(int j = 0; j <= i; j++) {// 將矩陣壓縮,同上out[i*(i+1)/2 + j] = M[i][j];}}for(int i = 0; i < N; i++) {for(int j = 0; j <= i; j++) {System.out.printf("%10d", out[i*(i+1)/2 + j]);}System.out.println();}break;}case 4:{ // 輸出常規矩陣System.out.println("(該矩陣為常規矩陣)");for(int i = 0; i < N; i++) {for(int j = 0; j < N; j++) {System.out.printf("%10d", M[i][j]);}System.out.println();}break;}default:{System.out.println("錯誤: 傳入的狀態碼有誤!!");}}}
}public class kcsj14 {public static void main (String args[]) {Scanner sc = new Scanner(System.in);int N;System.out.print("需要計算的矩陣階數: ");N = sc.nextInt();int[] M1 = new int[N*(N+1)/2];int[] M2 = new int[N*(N+1)/2];System.out.println("輸入A矩陣的下三角部分:");for(int i = 0; i < N; i++) {for(int j = 0; j <= i; j++) {// 下三角矩陣的對應關系為M[i][j] = m[i*(i+1)/2 + j];M1[i*(i+1)/2 + j] = sc.nextInt();}}// 聲明A矩陣Matrix A = new Matrix(N, M1);System.out.println("輸入B矩陣的下三角部分:");for(int i = 0; i < N; i++) {for(int j = 0; j <= i; j++) {// 下三角矩陣的對應關系為M[i][j] = m[i*(i+1)/2 + j];M2[i*(i+1)/2 + j] = sc.nextInt();}}// 聲明B矩陣Matrix B = new Matrix(N, M2);// 存放結果int[][] ans = A.mul(B);System.out.print("A * B的計算結果為: ");Matrix.printMatrix(ans, Matrix.judge(ans, A.N), A.N);}
}
歡迎使用Markdown編輯器
你好! 這是你第一次使用 Markdown編輯器 所展示的歡迎頁。如果你想學習如何使用Markdown編輯器, 可以仔細閱讀這篇文章,了解一下Markdown的基本語法知識。
新的改變
我們對Markdown編輯器進行了一些功能拓展與語法支持,除了標準的Markdown編輯器功能,我們增加了如下幾點新功能,幫助你用它寫博客:
全新的界面設計 ,將會帶來全新的寫作體驗;在創作中心設置你喜愛的代碼高亮樣式,Markdown 將代碼片顯示選擇的高亮樣式 進行展示; 增加了 圖片拖拽 功能,你可以將本地的圖片直接拖拽到編輯區域直接展示; 全新的 KaTeX數學公式 語法; 增加了支持甘特圖的mermaid語法 功能; 增加了 多屏幕編輯 Markdown文章功能; 增加了 焦點寫作模式、預覽模式、簡潔寫作模式、左右區域同步滾輪設置 等功能,功能按鈕位于編輯區域與預覽區域中間; 增加了 檢查列表 功能。
功能快捷鍵
撤銷:Ctrl/Command + Z 重做:Ctrl/Command + Y 加粗:Ctrl/Command + B 斜體:Ctrl/Command + I 標題:Ctrl/Command + Shift + H 無序列表:Ctrl/Command + Shift + U 有序列表:Ctrl/Command + Shift + O 檢查列表:Ctrl/Command + Shift + C 插入代碼:Ctrl/Command + Shift + K 插入鏈接:Ctrl/Command + Shift + L 插入圖片:Ctrl/Command + Shift + G 查找:Ctrl/Command + F 替換:Ctrl/Command + G
合理的創建標題,有助于目錄的生成
直接輸入1次#,并按下space后,將生成1級標題。 輸入2次#,并按下space后,將生成2級標題。 以此類推,我們支持6級標題。有助于使用TOC語法后生成一個完美的目錄。
如何改變文本的樣式
強調文本 強調文本
加粗文本 加粗文本
標記文本
刪除文本
引用文本
H2 O is是液體。
210 運算結果是 1024.
插入鏈接與圖片
鏈接: link.
圖片:
帶尺寸的圖片:
居中的圖片:
居中并且帶尺寸的圖片:
當然,我們為了讓用戶更加便捷,我們增加了圖片拖拽功能。
如何插入一段漂亮的代碼片
去博客設置頁面,選擇一款你喜歡的代碼片高亮樣式,下面展示同樣高亮的 代碼片.
var foo
= 'bar' ;
生成一個適合你的列表
項目1 項目2 項目3
創建一個表格
一個簡單的表格是這么創建的:
設定內容居中、居左、居右
使用:---------:居中 使用:----------居左 使用----------:居右
第一列第二列第三列 第一列文本居中 第二列文本居右 第三列文本居左
SmartyPants
SmartyPants將ASCII標點字符轉換為“智能”印刷標點HTML實體。例如:
TYPEASCIIHTML Single backticks 'Isn't this fun?' ‘Isn’t this fun?’ Quotes "Isn't this fun?" “Isn’t this fun?” Dashes -- is en-dash, --- is em-dash – is en-dash, — is em-dash
創建一個自定義列表
Markdown
Text-to-HTML conversion tool Authors
John Luke
如何創建一個注腳
一個具有注腳的文本。
注釋也是必不可少的
Markdown將文本轉換為 HTML。
KaTeX數學公式
您可以使用渲染LaTeX數學表達式 KaTeX:
Gamma公式展示 Γ(n)=(n?1)!?n∈N\Gamma(n) = (n-1)!\quad\forall n\in\mathbb N Γ ( n ) = ( n ? 1 ) ! ? n ∈ N 是通過歐拉積分
Γ(z)=∫0∞tz?1e?tdt.\Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ ( z ) = ∫ 0 ∞ ? t z ? 1 e ? t d t .
你可以找到更多關于的信息 LaTeX 數學表達式here.
新的甘特圖功能,豐富你的文章
Mon 06Mon 13Mon 20已完成 進行中 計劃一 計劃二 現有任務Adding GANTT diagram functionality to mermaid
UML 圖表
可以使用UML圖表進行渲染。 Mermaid. 例如下面產生的一個序列圖:
張三李四王五你好!李四, 最近怎么樣?你最近怎么樣,王五?我很好,謝謝!我很好,謝謝!李四想了很長時間,文字太長了不適合放在一行.打量著王五...很好... 王五, 你怎么樣?張三李四王五
這將產生一個流程圖。:
鏈接 長方形圓圓角長方形菱形
FLowchart流程圖
我們依舊會支持flowchart的流程圖:
Created with Rapha?l 2.2.0開始我的操作確認?結束yesno
關于 Flowchart流程圖 語法,參考 這兒.
導出與導入
導出
如果你想嘗試使用此編輯器, 你可以在此篇文章任意編輯。當你完成了一篇文章的寫作, 在上方工具欄找到 文章導出 ,生成一個.md文件或者.html文件進行本地保存。
導入
如果你想加載一篇你寫過的.md文件,在上方工具欄可以選擇導入功能進行對應擴展名的文件導入, 繼續你的創作。
總結
以上是生活随笔 為你收集整理的对称矩阵的压缩存储 的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網站內容還不錯,歡迎將生活随笔 推薦給好友。