Ejemplo n.º 1
0
        private static void TestMatrixMultiply(int n)
        {
            Console.WriteLine("Test matrix multiply - Loop (n^3) -> Strassen Algorithm (n^log7 or n^2.81):");
            var st      = new Stopwatch();
            var matrix2 = new BigIntegerMatrix(new System.Numerics.BigInteger[n][]);

            for (var i = 0; i < n; i++)
            {
                matrix2[i] = new System.Numerics.BigInteger[n];
                for (var j = 0; j < n; j++)
                {
                    matrix2[i][j] = new Random(i * j).Next(100);
                }
            }

            st.Restart();
            var resultMat = matrix2 * matrix2;

            st.Stop();
            Print(resultMat.AsEnumerable());
            Console.WriteLine(st.ElapsedMilliseconds);

            st.Restart();
            resultMat = BigIntegerMatrix.StrassenMultiply(matrix2, matrix2);
            st.Stop();
            Print(resultMat.AsEnumerable());
            Console.WriteLine(st.ElapsedMilliseconds);
        }
Ejemplo n.º 2
0
        public BigInteger Calculate(BigInteger n)
        {
            var basicArray = new[] { new BigInteger[] { 1, 1 }, new BigInteger[] { 1, 0 } };
            var matrix     = new BigIntegerMatrix(basicArray);
            var result     = new MatrixNPowerCalculator().Power(matrix, n);

            return(result[1][0]);
        }
Ejemplo n.º 3
0
        public BigIntegerMatrix Power(BigIntegerMatrix value, BigInteger n)
        {
            if (n <= 1)
            {
                return(value);
            }

            if (n % 2 == 0)
            {
                var halfValue = Power(value, n / 2);
                return(halfValue * halfValue);
            }
            else
            {
                var halfValue = Power(value, n / 2);
                return(halfValue * halfValue * value);
            }
        }