中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

對稱矩陣及對稱矩陣的壓縮存儲

發布時間:2020-07-21 23:32:59 來源:網絡 閱讀:413 作者:清幽寧 欄目:編程語言

設一個N*N的方陣A,A中任意元素Aij,當且僅當Aij == Aji(0 <= i <= N-1 && 0 <= j <= N-1),則矩陣A是對稱矩陣。以矩陣的對角線為分隔,分為上三角和下三角。


壓縮存儲稱矩陣存儲時只需要存儲上三角/下三角的數據,所以最多存儲n(n+1)/2個數據。

對稱矩陣和壓縮存儲的對應關系:下三角存儲i>=j,  SymmetricMatrix[i][j] == Array[i*(i+1)/2+j]

對稱矩陣及對稱矩陣的壓縮存儲

        0  1  2  3  4

        1  0  1  2  3

        2  1  0  1  2

        3  2  1  0  1

        4  3  2  1  0

Symmetry.h中
template < class T>
class Symmetry
{
public:
	//構造函數
	Symmetry(T* arr, size_t size)
		:_arr(new T[size*(size+1)/2])
		, _size(size*(size + 1)/2)
	{
		for (int i = 0; i < size; i++)
		{
			for (int j = 0; j < size; j++)
			{
				if (i >= j)
				{
					_arr[i*(i + 1) / 2 + j] = arr[i*size + j];//把對稱矩陣壓縮
				}
			}
		}
	}
	//打印
	void Print(size_t size)
	{
		for (int i = 0; i < size; i++)
		{
			for (int j = 0; j < size; j++)
			{
				int row = i;
				int col = j;
				if (row < col)
				{
					swap(row, col);
				}
					cout << _arr[row*(row+ 1) / 2 + col] << " ";
			}
			cout << endl;
		}
		cout << endl;
	}
protected:
	T *_arr;
	size_t _size;
};
test.cpp中
#include <iostream>
using namespace std;
#include "Symmetry.h"
void Test()
{
	int arr[5][5] = {
		{0,1,2,3,4},
		{1,0,1,2,3},
		{2,1,0,1,2},
		{3,2,1,0,1},
		{4,3,2,1,0}
	};
	Symmetry<int>s((int*)arr, 5);
	s.Print(5);
}
int main()
{
	Test();
	system("pause");
	return 0;
}


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

康马县| 盐亭县| 三原县| 平湖市| 仲巴县| 柘城县| 镇宁| 阳山县| 江津市| 黔西县| 铁力市| 蓝山县| 阜康市| 盖州市| 芜湖县| 梅州市| 开阳县| 延安市| 文昌市| 长乐市| 鹤峰县| 大田县| 遂川县| 富阳市| 科技| 成安县| 永善县| 双流县| 崇仁县| 天祝| 金溪县| 元朗区| 晴隆县| 苏尼特左旗| 桦南县| 筠连县| 靖州| 武陟县| 攀枝花市| 景泰县| 五华县|