标签:
p = [0, 10, 12, 15, 255, 1, 2]
def store_bit_number(n):
k = 1
n = n//2
while n != 0:
k = k+1
n = n//2
return k
s = [0, 0, 0, 0, 0, 0, 0, 0, 0]
pos = [0, 0, 0, 0, 0, 0, 0, 0, 0]
# s[i] = min(s[i-k] + max(len(p[i]))*k)+11)
def split(p, n):
for i in range(1, n+1):
min_val = s[i-1] + store_bit_number(p[i])
pos[i] = 1
print "begin", i, min_val
for k in range(1, i+1):
max_bit_number = get_bit_number(p, i-k+1, i)
cur_val = s[i - k] + max_bit_number*k
if min_val > cur_val:
min_val = cur_val
pos[i] = k
s[i] = min_val+11
print "end", i, s[i]
def get_bit_number(p, k, i):
max_bit_number = 0
for j in range(k, i+1):
cur_bit_number = store_bit_number(p[j])
if cur_bit_number > max_bit_number:
max_bit_number = cur_bit_number
return max_bit_number
def get_segments(pos, n, segment):
if n == 0:
return
get_segments(pos, n-pos[n], segment)
print n, n-pos[n]
segment.append([n-pos[n], pos[n]])
split(p, 6)
print pos
segment = []
get_segments(pos, 6, segment)
print segment
Dynamic Programming--Picture compress
标签:
原文地址:http://www.cnblogs.com/zhaodonglin/p/5466871.html