字符串金字塔转换矩阵

时间:2017-04-16 01:01:24

标签: algorithm

您刚刚看到与NFA相关的问题与DFA

问题:给出金字塔中的叶节点列表,以及指示给定左右节点的可能父节点是什么的映射。如果叶节点之一可以变为根节点,则返回true,否则返回false。

示例:

     root
     / \
    X   X
   /\  /\
   X  X  X
  / \/ \/ \
 A   B  C  D

地图:

        left: A |  B   |   C | D
right---------------------------------
A             B |A or C|   D | A
B             D |B or C|   A |
C                              B
D

注:1。如果左子项为B,则右子项为A,父节点可以为B或C

1 个答案:

答案 0 :(得分:0)

def generate_status(all_status, matrix):
#  print all_status
if len(all_status) == 1:
    return all_status[0]

next_all_status = []
for i in xrange(len(all_status) - 1): 
    cur_status = set()
    for first_status in all_status: 
        for second_status in all_status[i+1]:
            cur_status |= set(list(matrix[first_status][second_status])) 
    next_all_status.append(cur_status) 

return generate_status(next_all_status, matrix)


def is_legal_status(expression, status, matrix):
    all_status = [set(s) for s in expression]

return status in generate_status(all_status, matrix)