2

長さ n (以下の例では n = 6) のポイントのリストがあります。その後、これらのデフォルト ポイントに基づいて他のポイントをいくつか作成しました。私が持っているデータ構造に基づいていますが、式のチェーンを取得するにはどうすればよいですか? たとえば、ポイント 10 (再帰的または非再帰的) の場合、このポイントがどこから来ているかをどのように言えますか?.

ポイント10がどのように作られているか知りたい場合は、次のようなものを返さなければなりません:

(((5 & 4) | 3) | 2) & (5 & 4)

ここに画像の説明を入力

4

1 に答える 1

2

始める前に、持っているものの表現が必要です。私は次のようにsthを提案します:

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])
于 2014-03-18T13:47:42.157 に答える