monge array是一个矩阵,满足第j行的最小值的列号C(j)大于等于第i行的最小值的列号C(i),当j>=i的时候,有如下特性
-- 对于任何行列,正对角线的和<=反对角线的和
#!/usr/bin/python
'''file name: monge.py
--P111
--input one m*n monge array, find leftmost minimum value, O(m + nlgm)
--author: zevolo, 2012.05.16
proof:
first to guees the result:
T(m,n) = T(m/2, n) + theta(m + n)
use the recurrence tree:
T(m, n) = c(m + n) + c(m/2 + n) + c(m/4 + n) + ... + c(m/(2^(lgm-1)) + n)
= cm (1+1/2+1/4+...+1/(2^(lgm-1))) + cnlgm
= cm 2(1 - 1/(2^lgm)) + cnlgm
then
assume T(m, n) <= am + bnlgm (a, b are constant)
T(m,n) = T(m/2, n) + c(m+n)
<= (am/2 + bnlg(m/2)) + c(m+n)
= am + bnlgm - am/2 - bn + cm + cn
= am +