我有长度为n的点列表(在下面的示例中n = 6)之后我根据这些默认点做了一些其他点,例如点7是由"和#34;点5和点4等现在我的问题是基于我的数据结构,我如何检索公式链?例如,对于第10点(递归或非递归),我怎么能说这一点从哪里开始?。
如果我想知道10号是如何制作的,那么它必须返回如下内容:
(((5 & 4) | 3) | 2) & (5 & 4)
答案 0 :(得分:2)
在开始之前,你需要代表你所拥有的东西。我建议像这样:
points = [ None, # dummy value to fill index 0 (we want to start at 1)
None, None, None, None, None, None, # for the first six atoms
(5, 4, '&'), # for point 7
(7, 3, '|'), # for point 8
(8, 2, '|'), # for point 9
(9, 7, '&') ] # for point 10
然后将公式创建为字符串只是递归的:
def formula(points, n):
if points[n] is None:
return str(n)
a, b, operator = points[n]
return '(%s %s %s)' % (formula(points, a), operator, formula(points, b))
print formula(points, 10)
这将打印
((((5 & 4) | 3) | 2) & (5 & 4))
要将公式中使用的所有点都作为一个集合,只需使用:
def used(points, n):
if points[n] is None:
return { n }
a, b, operator = points[n]
return used(points, a) | used(points, b)
print used(points, 10)
将打印:
set([2, 3, 4, 5])