构造算法决策树

时间:2011-11-15 00:13:49

标签: algorithm design-patterns graph tree

我今晚在接受采访时被要求做这个问题:

为此算法中的任意三个输入构建决策树:

For i = 1 to n - 1 do
    If L[i] > L[i+1] 
       swap(L[i],L[i+1])
For i = n-1 downto 2 do
    If L[i] < L[i-1] 
       swap(L[i],L[i-1])

我相信我的解决方案不正确,因为我出了16片叶子。我做了以下事情:

                                    Root : 
                                  {a, b, c}
                                    /   \
                       (i>i+1)     /     \  (i<i+1)
                                  /       \
                              {b,a,c}        {a,b,c}
                               /   \          /   \
                              /     \        /     \
                             /       \      /       \
                       {b,c,a}   {b,a,c}   {a,c,b}   {a,b,c}

这完成了第一个循环,然后我以相同的方式将输入扩展到第二个循环,在每个节点处假设一个决定去了&lt;一个人去了>,每次从每个节点得到两个答案,最终给你16个叶子。

这是对的吗?如果没有,应该怎么做?

1 个答案:

答案 0 :(得分:1)

对于n = 3,第二个循环仅运行一次i = 2。因此,每个节点有两个答案,你得到2 * 4 = 8个叶子。