Example #1
0
 //метод, который непосредственно выполняет перемножение в правильном порядке
 //первоначально вызывается таким образом
 //dataStore.result = matrixChainMultiply(0, dataStore.sizes.Count - 2);
 private List <List <int> > matrixChainMultiply(int i, int j, Datatstore dataStore)
 {
     if (j > i)
     {
         List <List <int> > x = matrixChainMultiply(i, dataStore.s[i][j], dataStore);
         List <List <int> > y = matrixChainMultiply(dataStore.s[i][j] + 1, j, dataStore);
         return(matrixMultiply(x, y));
     }
     else
     {
         return(dataStore.source[i]);
     }
 }
Example #2
0
        //метод печатающий строку с правильной расстановкой скобок

        private void printOrder(int i, int j, string order, Datatstore dataStore)
        {
            if (i == j)
            {
                order += "A" + i.ToString();
            }
            else
            {
                order += "(";
                printOrder(i, dataStore.s[i][j], order, dataStore);
                order += "*";
                printOrder(dataStore.s[i][j] + 1, j, order, dataStore);
                order += ")";
            }
        }
Example #3
0
        private void matrixChainOrder(Datatstore dataStore)
        {
            int n = dataStore.sizes.Count - 1;

            //выделяем память под матрицы m и s
            dataStore.m = new List <List <int> >();
            dataStore.s = new List <List <int> >();
            for (int i = 0; i < n; i++)
            {
                dataStore.m.Add(new List <int>());
                dataStore.s.Add(new List <int>());
                //заполняем нулевыми элементами
                for (int a = 0; a < n; a++)
                {
                    dataStore.m[i].Add(0);
                    dataStore.s[i].Add(0);
                }
            }
            //выполняем итерационный алгоритм
            int j;

            for (int l = 1; l < n; l++)
            {
                for (int i = 0; i < n - l; i++)
                {
                    j = i + l;
                    dataStore.m[i][j] = int.MaxValue;
                    for (int k = i; k < j; k++)
                    {
                        int q = dataStore.m[i][k] + dataStore.m[k + 1][j] +
                                dataStore.sizes[i] * dataStore.sizes[k + 1] * dataStore.sizes[j + 1];
                        if (q < dataStore.m[i][j])
                        {
                            dataStore.m[i][j] = q;
                            dataStore.s[i][j] = k;
                        }
                    }
                }
            }
        }
Example #4
0
 static void Main(string[] args)
 {
     Console.WriteLine("Hello World!");
     Datatstore dataStore = new Datatstore();
 }