對於矩陣 a[1..n] 的連乘問題中,使用動態規劃時,生命了乙個m[n][n] 的矩陣來暫存子問題的最優解,但是注意到, 求解過程中,僅涉及m【i】【j】(j>=i),也就是說,只有(n^2+n)/2個元素會被使用,浪費了將近一半的空間,下面對矩陣宣告進行優化:
假設 n=10
#define n 10
#define m(k,j) (2*n-k+1)*k/2+j-k // 模擬二維矩陣 m【k】【j】
int *space=(int *)malloc((n*n+n)/2); //宣告儲存空間
for(i=0;i
space[i]=i;
for(k=0;k<10;k++)
for(j=k;j<10;j++)
printf("二維:%d\n",space[m(k,j)]);
原始分配:
相應二維元素:
最小空間複雜度 矩陣旋轉
一,問題描述 今天碰到乙個簡單的面試題,矩陣旋轉。給定乙個n n的矩陣,要求逆時針旋轉90度,要求兩個角要同時旋轉。只能使用o 1 的輔助空間。例如,乙個4 4的矩陣,旋轉前後圖1所示。圖1 4 4的矩陣,旋轉前後對比圖。二,解決思路 這個問題,關鍵就是座標之間的轉換關係,其實弄明白這個就很簡單了。...
演算法的複雜度 時間複雜度與空間複雜度
通常,對於乙個給定的演算法,我們要做 兩項分析。第一是從數學上證明演算法的正確性,這一步主要用到形式化證明的方法及相關推理模式,如迴圈不變式 數學歸納法等。而在證明演算法是正確的基礎上,第二步就是分析演算法的時間複雜度。演算法的時間複雜度反映了程式執行時間隨輸入規模增長而增長的量級,在很大程度上能很...
演算法的時間複雜度 空間複雜度
時間複雜度和空間複雜度是度量演算法效率的常用指標 事後統計,不常用 事前統計影響因素 演算法策略 問題規模 程式語言 質量 機器執行指令的速度 撇開軟硬體的影響,演算法執行工作量的大小只依賴於問題的規模 通常用整數n表示 乙個演算法是由控制結構 順序,分支,迴圈三種 和原操作 指固有資料型別的操作 ...