說明如何僅用表c中的
2·min(m,n)
項以及o(1)
的額外空間來計算乙個
lcs的長度。然後說明如何用
min(m,n)
項以及o(1)
的額外空間來做到這一點。
1、兩行陣列,第乙個儲存上一行的
c[i,
j],第二個儲存當前行的
c[i,
j]。最開始第一行陣列初始化為
0. c
表最左側一列 全為
0,不需要用儲存空間,當做已知條件就好。
2、只用一行陣列
+1的儲存空間。
a[0.....n] 。
利用a[0]儲存同一行的前乙個即
c[i,j-1]。
最開始陣列a初始化為全0.
計算完一行之後,a[0] 置
0,代表
c表最左側一列。此時,計算
c[i,j]
,例如,先計算
c[2,1]
,只用到
3個資料,
c[1,1](
同列上乙個
,a[1]
中就存著該值
), c[1,0](
左上,此刻左上為
c表左側第一列,為
0), c[2,0](
同行左乙個,此刻
a[0]
中存著該值
)。由此
c[2,1]
可以計算得到
,用求得的
c[2,1]
更新a[0]
。但不要更新
a[1] (
除a[0],a[j]
中存著c[i,j]) 。
此刻需要計算 c[2,2] , ,還是用到
3個資料,
c[1,2](
同列上乙個
,a[2]
中就存著該值
), c[1,1](
左上,此刻左上不再為
c表左側第一列,而是同列上一行的左側乙個,那麼由於剛才並沒有更新
a[1] ,
所以a[1]
中存著上一行的
c[1,1]), c[2,1](
同行左乙個,此刻
a[0]
中存著該值
)。由此
c[2,1]
可以計算得到。
依次類推,求得本行最後乙個資料時,直接賦值給c[本行最後乙個
],然後
a[0]置0
,計算下一行。
演算法導論 練習題 3 2 4
首先證明f n 多項式有界的充分必要條件是lgf n o lgn 1 若存在常數c和n0,當n n0時,f n 則lg f n 根據上式容易證明,lg f n o lgn 2 若lg fn o lgn 則存在常數c和n0,當n n0,lg f n 所以f n 根據上面證明出來的公式,來證明兩個小題。...
演算法導論 練習題 7 4 5
快速排序遞迴樹到每個葉子為k個元素就結束了,所以高度h lg n k 每層代價cn,所以快速排序時間上限o nlgn 快速排序結束後,陣列變成 k個元素,a1,k個元素,a2.的形式 即每k個元素之後,都有乙個已經在正確位置上的元素,這些元素為a1,a2,其中ai之前的k個元素小於ai,ai之後的k...
演算法導論 第15章
動態規劃,就是一種求解最優解問題的。這麼說,估計大家也覺得太空泛了。想看詳細的說明,請點這裡 那麼我就講我的理解了。首先,演算法是一種策略,方法,思想,其中,有一種非常常見的常用思想 動態思想。你要做一件事情,然後,到最後完成。而你沒做一件事情都影響後面,而且你每次有很多的選擇 那麼如何每次遇到岔路...