當前位置:首頁 » 文件管理 » 可壓縮矩陣

可壓縮矩陣

發布時間: 2022-04-22 02:29:30

① 高分求c++實現矩陣壓縮,答對有加分!速度

給你寫好了,運行成功了。
注意有兩個文件。
//array2d.h
#ifndef _ARRAY2D_H
#define _ARRAY2D_H

#include <xutility>

template<typename T>
class array2d
{
// Data
protected:
T **m_ppData;

public:
long m_lRows, m_lCols;

// Constructor
public:
array2d()
{
Init(0, 0);
}

array2d(long lRows, long lCols)
{
Init(lRows, lCols);
}

array2d(const array2d& other)
{
Init(other.GetRows(), other.GetCols());
T **pTmp = other.GetData();

if (m_lRows && m_lCols)
{
(pTmp[0], pTmp[0]+m_lRows*m_lCols, m_ppData[0]);
}
}

array2d<T> operator= (const array2d& other)
{
Destroy();
Init(other.GetRows(), other.GetCols());

T **pTmp = other.GetData();
(pTmp[0], pTmp[0]+m_lRows*m_lCols, m_ppData[0]);
return *this;
}

virtual ~array2d()
{
Destroy();
}

// Attribute
// 重載()對數組元素進行存取
T& operator()(long lRows, long lCols)
{
return m_ppData[lRows][lCols];
}

long GetRows() const
{
return m_lRows;
}

void SetRows(long lRows)
{
m_lRows = lRows;
}

long GetCols() const
{
return m_lCols;
}

void SetCols(long lCols)
{
m_lCols = lCols;
}

void GetSize(long *plRows, long *plCols) const
{
*plRows = m_lRows;
*plCols = m_lCols;
}

void SetSize(long lRows, long lCols)
{
m_lRows = lRows;
m_lCols = lCols;
}

T** GetData() const
{
return m_ppData;
}

private:
void Init(long lRows, long lCols)
{
m_lRows = lRows;
m_lCols = lCols;

if (lRows <= 0 || lCols <= 0)
{
m_ppData = NULL;
return;
}

T *pTmp = new T[lRows*lCols];
m_ppData = new T*[lRows];

for (long i=0; i<lRows; ++i)
{
m_ppData[i] = &pTmp[i*lCols];
}
}

void Destroy()
{
if (m_ppData)
{
delete []m_ppData[0];
}

delete []m_ppData;
m_ppData = NULL;
}
};

#endif

//Matrix.cpp,你的主文件

#include "stdafx.h"
#include "array2d.h"
#include <vector>
using namespace std;

typedef array2d<int> CMatrix;
typedef vector<CMatrix> MatVec;

bool ReadFile(char * filename, MatVec &matvec)
{
if (!filename) return false;

FILE * fp = fopen(filename, "r");
if (!fp) return false;

int num;
fscanf(fp, "%d", &num);
matvec = MatVec(num);

for (int k=0; k<num; ++k)
{

int row, col;
fscanf(fp, "%d", &row);
fscanf(fp, "%d", &col);
matvec[k] = CMatrix(row, col);

int i, j;
int n;
for (i=0; i<row; ++i)
{
for (j=0; j<col; ++j)
{
fscanf(fp, "%d", &n);
matvec[k](i, j) = n;
}
}
}
fclose(fp);

return true;
}

bool WriteFile(char * filename, MatVec &matvec)
{
if (!filename) return false;

FILE * fp = fopen(filename, "w");
if (!fp) return false;

for (int k=0; k<matvec.size(); ++k)
{
fprintf(fp, "Matrix #%d\n", k+1);

int i, j;

for (i=0; i<matvec[k].GetRows(); ++i)
{
for (j=0; j<matvec[k].GetRows(); ++j)
{
if ( matvec[k](i, j) != 0 )
{
fprintf(fp, "%d, %d\n", i+1, j+1);
}
}
}

fprintf(fp, "\n");
}

fclose(fp);
return true;
}

int main(int argc, char* argv[])
{
MatVec matvec;
char * inputfilename = "f:\\SampleInput.txt";
if (!ReadFile(inputfilename, matvec)) return 1;

char * outputfilename = "f:\\Output.txt";
if (!WriteFile(outputfilename, matvec)) return 1;

printf("Hello World!\n");
return 0;
}

② 怎樣壓縮矩陣元素的存儲空間

AC
稀疏矩陣(SparseMatrix):是矩陣中的一種特殊情況,其非零元素的個數遠小於零元素的個數.
壓縮存儲:為多個值相同的元素只分配一個存儲空間;對0元素不分配空間.目的是節省大量存儲空間.
當使用三元組順序表(又稱有序的雙下標法)壓縮存儲稀疏矩陣時,對矩陣中的每個非零元素用三個域分別表示其所在的行號,列號和元素值.它的特點是,非零元在表中按行序有序存儲,因此便於進行依行順序處理的矩陣運算.當矩陣中的非0元素少於1/3時即可節省存儲空間.

③ 矩陣的壓縮存儲例子

稀疏矩陣壓縮存儲

一般來講,零元素多到了一定程度並且沒有規律分布的矩陣叫做稀疏矩陣。對稀疏矩陣的壓縮存儲必須充分考慮以下三個問題:
① 盡可能減少或者不存儲零元素以節省空間,降低空間復雜度。
② 盡可能快地實現數據元素的存儲位置與原有位置之間的轉換。
③ 盡可能不與零元素進行運算,以降低時間復雜度。
稀疏矩陣的壓縮存儲有三種最常見的方法,分別是三元組順序表、行邏輯鏈接順序表和十字鏈表。

④ 矩陣的壓縮存儲是什麼

二維數組在形式上是矩陣,因此一般用二維數組來存儲矩陣。在不壓縮存儲的情況下,矩陣採用按行優先或按列優先方式存儲,佔用的存儲單元數等於矩陣的元素個數。在實際應用中,經常出現一些階數很高的矩陣,同時在矩陣中非零元素呈某種規律分布或者矩陣中有大量的零元素,若仍然用常規方法存儲,可能存儲重復的非零元素或零元素,這將造成存儲空間的大量浪費。因此對這類矩陣進行壓縮存儲,從而合理地利用存儲空間。

為了節省存儲空間,可以利用特殊矩陣的規律,對它們進行壓縮存儲,也就是說為多個值相同的元素只分配一個存儲單元,對零元素不分配空間。適合壓縮存儲的矩陣一般是值相同的元素或者零元素在矩陣中分布有一定規律的特殊矩陣和稀疏矩陣。常見的特殊矩陣有對稱矩陣、三角矩陣和對角矩陣。

⑤ 特殊矩陣的壓縮存儲演算法的實現

還不簡單。就這樣那樣這樣那樣的。我以為你以為的、

⑥ 用C語言編寫:特殊矩陣的壓縮存儲演算法的實現(對稱矩陣、三角矩陣、對角矩陣)

可以用十字鏈表 三元組表 或者其他 都可以對特殊矩陣進行壓縮存儲

⑦ n階對稱矩陣可壓縮存儲到多少個元的空間中

只要存對角線(含)以上的部分就行了,所以是1+2+...+n=n(n+1)/2

⑧ 對特殊矩陣的壓縮可以降低運算的時間復雜度嗎

1.k=n*(n+1)/2的原因是:對於三角矩陣,從1到N的總和是這么多,也就是說整個矩陣有這么多元素。另外正三角陣對應正方形。
對稱矩陣滿足A的轉置也就是自身的特點,元素上,a[i,j] = a[j,i]。實際上的存儲可以利用三角陣。所以老實說我對於他對稱陣演算法為什麼少一個元素也有疑惑。
可能是三角陣可以對應不等長的矩陣,所以造成了k值不一樣。
2.上三角陣,存在的元素是滿足[1<= j <=n, i >= j]的關系[這里用i表橫坐標j表縱坐標],如果是長3寬4的當然不能和長4寬3的相提並論,試著畫畫就明白了。
3.對稱陣不會出現像三角陣那樣有一小角還是其他數字的情況。這個其他數字就是(6+1)-1=6。
4.壓縮存儲,只是將部分符合條件的矩陣減少一部分的存儲空間。老實說我也感覺不很有用,除非他處理的數據本身必然具備此類特點。
5.固定的,多試幾次自己記下來然後找找就好。如果沒記錯的話,在矩陣上畫畫就可以看出來。
6.stdlib.h是標準的輸入輸出庫,最為常用,至少裡麵包括了scanf等函數,只要你需要printf你就不能扔掉它。否則會出現函數未定義的問題。畢竟語言本身不提供函數類庫,類庫需要另行引用。

⑨ 什麼是壓縮矩陣

在這里分開來給你解釋
矩陣是許多科學計算、工程數學尤其是數值分析中經常研究的對象,矩陣也就是二維數組,所以它可以採用順
序存儲是來存儲其中的元素。但有時矩陣的階數很高,同時在矩陣中游很多值相同的元素,或大多數元素的值為
零,這時再採用嚴格的順序存儲顯然是很浪費空間的,因為存儲零元素或許多值相同的元素是沒有意義的,因此為
了節省存儲空間,對這類矩陣通常採用壓縮存儲。
壓縮存儲:為多個值相同的元素值分配一個存儲空間,對零元素不分配存儲空間。
特殊矩陣:各個元素的分布有一定規律
系數矩陣:矩陣中多數元素值為零。

熱點內容
劍擊腳本 發布:2024-11-07 13:39:12 瀏覽:204
python強轉 發布:2024-11-07 13:32:35 瀏覽:1000
方塊方舟如何架設伺服器 發布:2024-11-07 13:08:37 瀏覽:366
什麼5v5安卓和蘋果都可以聯機 發布:2024-11-07 13:03:03 瀏覽:772
數字證書連接不上伺服器地址 發布:2024-11-07 13:00:50 瀏覽:915
mysql導出資料庫結構 發布:2024-11-07 13:00:49 瀏覽:467
360如何清除緩存 發布:2024-11-07 12:59:38 瀏覽:497
ftp伺服器c語言 發布:2024-11-07 12:45:15 瀏覽:97
delphijava 發布:2024-11-07 12:40:35 瀏覽:465
sqlserver查詢數據 發布:2024-11-07 12:40:28 瀏覽:7