隨機數矩陣乘法

2021-05-21 10:39:07 字數 1681 閱讀 3978

最近有同事在討論矩陣儲存和乘法問題,一時興起就寫了演算法.

要求: 矩陣a * 矩陣b ,要求a 和 b是由隨機數組成,並且a是按行優先儲存的,而b是按列優先儲存的, 並輸出a * b的結果,可重複計算.

考慮了一下, 矩陣儲存可以用二維陣列來儲存, 但是根據要求矩陣需動態儲存,所以採用指標的指標來儲存和操作矩陣.

以下為實現**:

//程式在vs.net2003 控制台下通過

#include "stdafx.h"

#include

/********釋放空間*********/

void freespace(int **p, int& num)

if(!p) return;

int i;

for (i=0; ifree(p[i]);   

free(p); 

p = null;

/**********輸出陣列*******/ 

void prt(int** p, int& h, int& l) 

int i,j; 

for(i=0;i 

/************輸入陣列*********/ 

int** inp(int ** p, int& h, int& l,bool column) 

int i,j;

if(p)

srand(time(null));

if(column)

else

return p;

/*******矩陣乘,結果儲存於m******/ 

void mmul(int** a,int** b ,int &ah, int &al, int& bh, int& bl, int ** m) 

int i,j,k; 

if(m)

freespace(m, ah);

a = inp(a,ah, al, false); 

b = inp(b,bh, bl, true); 

m = (int**)malloc(sizeof(int*)*ah);   

for (i=0; i

m[i] = (int*)malloc(sizeof(int)*bl);

for(i=0;ifor(j=0;j

m[i][j]=0; 

for(i=0;ifor(j=0;jfor(k=0;km[i][j]+=a[i][k]*b[k][j];/***矩陣乘****/ 

prt(m, ah, bl); 

//程式入口

int main(int argc, char* argv)

int agn=1,cpt=1; 

int ah, al, bh,bl;

int i;

int **a, **b, **m;

a = null;

b = null;

m = null;

while(agn==1) 

while (cpt==1) 

printf("是否重新輸入矩陣?[1]是 [0]否"); 

scanf("%d",&agn); 

cpt = 1;

getchar();

//釋放空間  

freespace(a, ah);

freespace(b, bl);

freespace(m, ah);

return 0;

NOI2012 隨機數生成器 矩陣乘法

棟棟最近迷上了隨機演算法,而隨機數是生成隨機演算法的基礎。棟棟準備使用線性同餘法 linear congruential method 來生成乙個隨機數列,這種方法需要設定四個非負整數引數m,a,c,x 0 按照下面的公式生成出一系列隨機數 x n 1 ax n c mod m用這種方法生成的序列具...

matlab產生隨機數或隨機矩陣

matlab中隨機數生成器主要有 betarnd 貝塔分布的隨機數生成器 binornd 二項分布的隨機數生成器 chi2rnd 卡方分布的隨機數生成器 exprnd 指數分布的隨機數生成器 frnd f分布的隨機數生成器 gamrnd 伽瑪分布的隨機數生成器 geornd 幾何分布的隨機數生成器 ...

隨機數 偽隨機數

隨機數 偽隨機數 rand函式在產生隨機數前,需要系統提供的生成偽隨機數序列的種子,rand根據這個種子的值產生一系列隨機數。如果系統提供的種子沒有變化,每次呼叫rand函式生成的偽隨機數序列都是一樣的。srand unsigned seed 通過引數seed改變系統提供的種子值,從而可以使得每次呼...