Exemplo n.º 1
0
        public MultsAndOptimalCosts MatrixChainOrder()
        {
            int n = dimensions.Length - 1;
            MultsAndOptimalCosts result =
                new MultsAndOptimalCosts()
            {
                Mults        = new int[n, n],
                OptimalCosts = new int[n, n]
            };

            for (int l = 1; l < n; l++)
            {
                for (int i = 0; i < n - l; i++)
                {
                    int j = i + l;
                    result.Mults[i, j] = int.MaxValue;
                    for (int k = i; k < j; k++)
                    {
                        int candidateMin = result.Mults[i, k] + result.Mults[k + 1, j]
                                           + dimensions[i] * dimensions[k + 1] * dimensions[j + 1];
                        if (candidateMin < result.Mults[i, j])
                        {
                            result.Mults[i, j]        = candidateMin;
                            result.OptimalCosts[i, j] = k;
                        }
                    }
                }
            }

            //for (int l = 2; l <= n; l++)
            //{
            //    for (int i = 1; i <= n - l + 1; i++)
            //    {
            //        int j = i + l - 1;
            //        result.Mults[i, j] = int.MaxValue;
            //        for (int k = i; k <= j - 1; k++)
            //        {
            //            int minMult = result.Mults[i, k] + result.Mults[k + 1, j]
            //                + dimensions[i - 1] * dimensions[k] * dimensions[j];
            //            if (minMult < result.Mults[i, j])
            //            {
            //                result.Mults[i, j] = minMult;
            //                result.OptimalCosts[i, j] = k;
            //            }
            //        }
            //    }
            //}
            return(result);
        }
Exemplo n.º 2
0
        public MultsAndOptimalCosts MatrixChainOrder()
        {
            int n = dimensions.Length - 1;
            MultsAndOptimalCosts result =
                new MultsAndOptimalCosts()
                {
                    Mults = new int[n, n],
                    OptimalCosts = new int[n, n]
                };
            for (int l = 1; l < n; l++)
            {
                for (int i = 0; i < n - l; i++)
                {
                    int j = i + l;
                    result.Mults[i, j] = int.MaxValue;
                    for (int k = i; k < j; k++)
                    {
                        int candidateMin = result.Mults[i, k] + result.Mults[k + 1, j]
                            + dimensions[i] * dimensions[k + 1] * dimensions[j + 1];
                        if (candidateMin < result.Mults[i, j])
                        {
                            result.Mults[i, j] = candidateMin;
                            result.OptimalCosts[i, j] = k;
                        }
                    }
                }
            }

            //for (int l = 2; l <= n; l++)
            //{
            //    for (int i = 1; i <= n - l + 1; i++)
            //    {
            //        int j = i + l - 1;
            //        result.Mults[i, j] = int.MaxValue;
            //        for (int k = i; k <= j - 1; k++)
            //        {
            //            int minMult = result.Mults[i, k] + result.Mults[k + 1, j]
            //                + dimensions[i - 1] * dimensions[k] * dimensions[j];
            //            if (minMult < result.Mults[i, j])
            //            {
            //                result.Mults[i, j] = minMult;
            //                result.OptimalCosts[i, j] = k;
            //            }
            //        }
            //    }
            //}
            return result;
        }