最优二叉搜索树自底向上非递归的动态规划算法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_32175379/article/details/73484758

写出最优二叉搜索树的自底向上非递归的动态规划算法。
输入: 首先输入 结点的个数 n , 再依次输入 搜索成功的概率 bi , 最后依次输入 搜
索失败的概率 aj。 。 注意: 所有值都不能随机生成 , 且只输入整数 (概率×100) ) ! ! ! !
输出: 最优二叉树的结构。
示例: 输入:5 15 10 5 10 20 5 10 5 5 5 10 , 输出:
S2 是根
S2 的左孩子是S1
S2 的右孩子是S5
S5 是根
S5 的左孩子是S4
S4 是根
S4 的左孩子是 S3

//这个和矩阵连乘有很大的相似情况
public static void main(String[] args) {
        Scanner scan=new Scanner(System.in);
        int n=scan.nextInt();
        int s[][]=new int [n+2][n+1];
        int w[][]=new int [n+2][n+1];
        int m[][]=new int [n+2][n+1];
        int p[]=new int [n+1];
        int q[]=new int [n+1];
        for (int i = 1; i <=n; i++) {
            p[i]=scan.nextInt();
        }
        for (int i = 0; i <=n; i++) {
            q[i]=scan.nextInt();
        }
        aaa(s, w, m, p, q, n);
        bbb(s, 1, n);
    }
    public static void aaa(int s[][],int w[][],int m[][],int p[],int q[],int n) {
        for (int i = 0; i <=n; i++) {
            w[i+1][i]=q[i];
            m[i+1][i]=q[i];
        }
        for (int r = 0; r < n; r++) {
            for (int i = 1; i <=n-r; i++) {
                int j =i+r;
                w[i][j]=w[i][j-1]+p[j]+q[j];
                m[i][j]=m[i][i-1]+m[i+1][j];
                s[i][j]=i;
                for (int k = i+1; k <=j; k++) {
                    int t=m[i][k-1]+m[k+1][j];
                    if (t<m[i][j]) {
                        m[i][j]=t;
                        s[i][j]=k;
                    }
                }
                m[i][j]+=w[i][j];
            }
        }
    }
    public static void bbb(int s[][],int i,int j) {
        if (i<j) {
            int root=s[i][j];
            System.out.println("S"+root+"是根");
            if (s[i][root-1]>0) {
                System.out.println("S"+root+"的左孩子是S"+s[i][root-1]);
            }
            if (s[root+1][j]>0) {
                System.out.println("S"+root+"的左孩子是S"+s[root+1][j]);
            }
            bbb(s, i, root-1);
            bbb(s, root+1, j);
        }
    }

猜你喜欢

转载自blog.csdn.net/qq_32175379/article/details/73484758