實驗題目
設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 的西洋棋棋盤上放置八個皇后,使得任何乙個皇后都無法直接吃掉其他的皇后?為了達到此目的,任兩個皇后都不能處於同一條橫行 縱行或斜線上。回溯法 回溯法又稱試探法。回溯法的基本做法是深度優先搜尋。即從一條路往前走,能進則進,不能進則退回來...