我正在尝试实现部分摘要问题,该算法在此 pdf https://cise.ufl.edu/class/cap5515sp10/Ch04_DNA_mapping.pdf第 35-36 页中给出。后面几页有一个例子。
我无法得到正确答案。
我得到的 X 值为 [0, 10, 8, 3, 6] ,然后递归以“Not ok”停止。
可能是我不了解算法还是其他什么?
width = 0
def partialDigest(L):
print "partialDigest"
global width
width = max(L)
L.remove(width)
X = [0, width]
if place(L, X):
print "Ok"
else:
print "Not ok"
def place(L, X):
print "place"
print "Width is", width
print "L is ", L
print "X is ", X
if len(L) == 0:
print "Output is: ", X
return True
y = max(L)
print "Y is", y
#L.remove(y)
d = D(y, X)
print "d is ", d
if set(d).issubset(set(L)):
print "First if"
print "D is", d
print "X before is ", X
X.append(y)
print "X after is ", X
print "L before is", L
L = removeElements(d, L)
print "L after is ", L
place(L, X)
X.remove(y)
L.extend(d)
d1 = D(abs(width-y), X)
print "d1 is ", d1
if set(d1).issubset(set(L)):
print "Second if"
print "D is", d1
print "X before is ", X
X.append(abs(width-y))
print "X after is ", X
print "L before is", L
L = removeElements(d1, L)
print "L after is ", L
place(L, X)
X.remove(abs(width-y))
L.extend(d1)
return False
def D(y, X):
diff = []
for xi in X:
diff.append(abs(y-xi))
return diff
def removeElements(d, L):
for i in L:
for j in d:
if i == j:
L.remove(i)
d.remove(i)
return L
if __name__ == "__main__":
print "Python implementation of partial digetive problem PDP on page 90."
partialDigest([2, 2, 3, 3, 4, 5, 6, 7, 8, 10])