c語言解決 分治法在數值問題中的應用 矩陣相乘問題

2021-08-10 23:11:35 字數 2213 閱讀 6651

實驗題目

設m1和m2是兩個n×n的矩陣,設計演算法計算m1×m2 的乘積。

2.實驗目的

1)提高應用蠻力法設計演算法的技能;

2)深刻理解並掌握分治法的設計思想;

3)理解這樣乙個觀點:用蠻力法設計的演算法,一般來說,經過適度的努力後,都可以對其進行改進,以提高演算法的效率。

實驗要求

1)設計並實現用bf方法求解矩陣相乘問題的演算法;

2)設計並實現用dac方法求解矩陣相乘問題的演算法;

3)以上兩種演算法的輸入既可以手動輸入,也可以自動生成;

4)對上述兩個演算法進行時間複雜性分析,並設計實驗程式驗證

分析結果;

5)設計可供使用者選擇演算法的互動式選單(放在相應的主選單下)。

**塊語法遵循標準markdown**,例如:

#define _crt_secure_no_warnings

#include

#include

#include

#include

#define mymalloc malloc

#define myfree free

#define maxrand 10

#define matrix_num 2

#define bf 1

#define adc 2

struct matrix;

void

init_matrix(struct matrix* m, int is_assign_value)

if (is_assign_value)

}//設定兩個矩陣的行和列

int

set_row_col(struct matrix* m, void(*callback)(struct matrix* m,int p))

//改為方陣

m->row_and_col = 1

<< (rand() % 3 + 1);

(m + 1)->row_and_col = m->row_and_col;

callback(m,1);

callback(m + 1,1);

return1;}

void

bf_multiply(struct matrix *m)

printf("%d\t", sum_temp);

}printf("\n");

}}//將矩陣分塊

void

dac_form_matrix(int(*dac_matrix)[2], struct matrix* matrix_array, int current_row, int current_col)

}void

iteration_add_matrix(int(*result_add)[2],int(*add_a)[2],int(*add_b)[2])

//將結果分塊給結果矩陣

void

dac_result_give(struct matrix* result_matrix, int (*dac_result_matrix)[2],int current_row,int current_col )

void

adc_mulyiply(struct matrix* matrix_array)

//將結果給結果矩陣result_matrix

c語言分治法求眾數重數 分治法之眾數問題

實驗總結 剛開始我沒有想到可以用分治法來做,用的是陣列來做。做完以後發現演算法太過複雜,而且處理較大的n時,時間複雜度和空間複雜度都比較大。於是我參考了演算法答案那本書,學到了分治法來解決這道題。但是在完成了用分治法的 以後,我發現了問題 輸出應該為 分治法解決這道題有乙個大前提 多重集中的元素是有...

C 用蠻力法與分治法解決最近對問題

設 p1 x1,y1 p2 x2,y2 pn xn,yn 是平面上n個點構成的集合s,最近對問題就是找出集合s中距離最近的點對。嚴格地講,最接近點對可能多於一對,簡單起見,只找出其中的一對即可。簡單起見,只考慮二維的情況並假設所討論的點以標準笛卡爾座標形式給出。因此,兩個點pi xi,yi 和pj ...

回溯法解決N皇后問題 C語言

問題描述 八皇后問題是乙個以西洋棋為背景的問題 如何能夠在 8 8 的西洋棋棋盤上放置八個皇后,使得任何乙個皇后都無法直接吃掉其他的皇后?為了達到此目的,任兩個皇后都不能處於同一條橫行 縱行或斜線上。回溯法 回溯法又稱試探法。回溯法的基本做法是深度優先搜尋。即從一條路往前走,能進則進,不能進則退回來...