コード例 #1
0
ファイル: Program.cs プロジェクト: john-echelon/dotnet-dsa
        static void RunEditDistance(TestCaseOptions opt)
        {
            Console.Write("Run using defaults? (Y/N):");
            var    runDefaults = Console.ReadLine().Trim();
            string a, b;

            a = "editing";
            b = "distance";
            if (runDefaults.ToLower().Equals("n"))
            {
                Console.Write("\nEnter first string:");
                a = Console.ReadLine();
                Console.Write("\nEnter second string:");
                b = Console.ReadLine();
            }
            var editDistResult = DynamicProgramming.EditDistance(a, b);

            Console.WriteLine("Editing Distance of {0}, {1}: {2}", a, b, editDistResult[a.Length, b.Length]);

            var sb = new StringBuilder();
            var backtrackResult = DynamicProgramming.EditDistanceBacktrack(editDistResult, a, b);

            foreach (var alignment in backtrackResult)
            {
                sb.AppendFormat("[{0}:{1}] ", alignment.Item1, alignment.Item2);
            }
            Console.WriteLine("Outputting Alignment {0}", sb.ToString());
        }
コード例 #2
0
        public void NumberSolitaireTest()
        {
            var dp = new DynamicProgramming();

            Assert.Equal(8, dp.NumberSolitaire(new int[] { 1, -2, 0, 9, -1, -2 }));
            Assert.Equal(4, dp.NumberSolitaire(new int[] { -2, 5, 1 }));
        }
コード例 #3
0
    public static void Test()
    {
        //BigRational test = new BigRational();
        //test = 2;
        //Debug.Log(test.ToString());
        //Debug.Log(((Double)test).ToString());
        //Debug.Log(((int)test).ToString());


        BigRational result = CalculatePi_BBP_BigFraction();

        Debug.Log(result.ToString());
        Debug.Log(((float)result).ToString());
        Debug.Log(((double)result).ToString());
        Debug.Log(((decimal)result).ToString());
        string piStr = result.ToDecimalString(1000);

        Debug.Log(piStr);
        string lcsPi = DynamicProgramming.LCS(piStr, PI);

        Debug.Log(lcsPi.Length.ToString());
        Debug.Log("阶乘" + CalculateFactorial(100).ToString());
        Debug.Log("斐波那契" + CalculateFibonacci(100).ToString());

        Debug.Log("pow(2,64)" + BigInteger.Pow(2, 64).ToString());
    }
コード例 #4
0
        public void TestTripleStep()
        {
            // Arrange
            int n = 5;

            // Act
            int result         = DynamicProgramming.TripleStep(n);
            int bottomUpResult = DynamicProgramming.TripleStepBottomUp(n);

            // Assert
            Assert.AreEqual(11, result);
            Assert.AreEqual(11, bottomUpResult);
        }
コード例 #5
0
ファイル: Program.cs プロジェクト: john-echelon/dotnet-dsa
        static void RunKnapsackWithoutRepetitions(TestCaseOptions opt)
        {
            Console.Write("Run using defaults? (Y/N):");
            var runDefaults = Console.ReadLine().Trim();

            Tuple <int, int>[] items;
            int[] knapsackWeights;
            if (runDefaults.ToLower().Equals("y") || runDefaults == string.Empty)
            {
                items = new Tuple <int, int>[] {
                    new Tuple <int, int>(10, 60),
                    new Tuple <int, int>(20, 100),
                    new Tuple <int, int>(30, 120),
                };
                knapsackWeights = new int[] { 10, 20, 30, 40, 50, 60 };
            }
            else
            {
                Console.Write("Enter num knapsack items:");
                var numItems = Convert.ToInt32(Console.ReadLine().Trim());
                items = new Tuple <int, int> [numItems];
                for (var i = 0; i < numItems; i++)
                {
                    Console.Write("\nEnter weight and value for item {0}:", i + 1);
                    var knapItem = ReadLineParseInts();
                    items[i] = new Tuple <int, int>(Convert.ToInt32(knapItem[0]), Convert.ToInt32(knapItem[1]));
                }
                Console.Write("\nEnter optimal knapsack weights to test:");
                var weights = ReadLineParseInts();
                knapsackWeights = new int[weights.Length];
                for (var i = 0; i < weights.Length; i++)
                {
                    knapsackWeights[i] = Convert.ToInt32(weights[i]);
                }
            }
            foreach (var capacity in knapsackWeights)
            {
                var result = DynamicProgramming.KnapsackWithoutRepetitions(capacity, items);
                Console.WriteLine("Knapsack without Repetitions, knapsack capacity {0}, max total value {1}", capacity, result[capacity, items.Length]);
                var backtrack = DynamicProgramming.KnapsackWithoutRepetitionsBacktrack(capacity, items);
                var output    = Helper.Display(backtrack);
                Console.WriteLine("{0}", output);
            }
        }
コード例 #6
0
ファイル: Program.cs プロジェクト: john-echelon/dotnet-dsa
        static void RunEditDistanceOnGeneSequence(TestCaseOptions opt)
        {
            Console.Write("Run using defaults? (Y/N):");
            var runDefaults = Console.ReadLine().Trim();
            int count = 10, length = 15;

            if (runDefaults.ToLower().Equals("n"))
            {
                Console.Write("\nEnter sequence count and length:");
                var inputs = ReadLineParseInts();
                count  = inputs[0];
                length = inputs[1];
            }
            var sequencePairs = GenerateNucleotideSequencePairs(count, length);

            foreach (var pair in sequencePairs)
            {
                var editDistResult = DynamicProgramming.EditDistance(pair.Item1, pair.Item2);
                Console.WriteLine("Editing Distance of {0}, {1}: {2}", pair.Item1, pair.Item2, editDistResult[pair.Item1.Length, pair.Item2.Length]);
            }
        }
コード例 #7
0
ファイル: Program.cs プロジェクト: john-echelon/dotnet-dsa
        static void RunLongestCommonSubsequence(TestCaseOptions opt)
        {
            Console.Write("Run using defaults? (Y/N):");
            var    runDefaults = Console.ReadLine().Trim();
            string a, b;

            a = "editing";
            b = "distance";
            if (runDefaults.ToLower().Equals("n"))
            {
                Console.Write("\nEnter first string:");
                a = Console.ReadLine();
                Console.Write("\nEnter second string:");
                b = Console.ReadLine();
            }
            var result = DynamicProgramming.LongestCommonSubsequence(a, b);

            Console.WriteLine("LCS for input sequences {0}, {1}: {2}", a, b, result[a.Length, b.Length]);
            var backtrackResult = DynamicProgramming.LCSBacktrack(result, a, b);

            Console.WriteLine("Outputting Alignment {0}", new string(backtrackResult));
        }
コード例 #8
0
 public DPSearchSpectrumCID(double tol = 20, double min = 400, double size = 0.01, int distance = 3)
 {
     parameter = new DPSpectrumCIDParameter(tol, min, size, distance);
     dp        = new DynamicProgramming();
 }
コード例 #9
0
 public DPSearchSpectrumCID(DPSpectrumCIDParameter parameter)
 {
     this.parameter = parameter;
     dp             = new DynamicProgramming();
 }
コード例 #10
0
        static void Test_KnapsackProblem()
        {
            DynamicProgramming.KnapsackProblem(new int[] { 1, 3, 4, 5 }, new int[] { 1, 4, 5, 7 }, 7);

            Console.ReadLine();
        }
コード例 #11
0
 public void Test_LongestPalindromeSubseq()
 {
     Assert.AreEqual(4, DynamicProgramming.LongestPalindromeSubseq("bbbab"));
 }
コード例 #12
0
        public void Test_SubSetSum()
        {
            var ret = DynamicProgramming.subsetSum(new int[] { 1, 5, 5, 11 }, 11);

            ret = DynamicProgramming.subsetSum(new int[] { 4, 3, 2, 3, 5, 2, 1 }, 5);
        }
コード例 #13
0
 public void Test_CanPartition()
 {
     Assert.AreEqual(true, DynamicProgramming.CanPartition(new int[] { 1, 5, 11, 5 }));
 }
コード例 #14
0
 public void Test_CoinChange()
 {
     Assert.AreEqual(3, DynamicProgramming.CoinChange(new int[] { 2, 3, 5 }, 11));
     Assert.AreEqual(3, DynamicProgramming.CoinChange(new int[] { 2 }, 3));
     Assert.AreEqual(3, DynamicProgramming.CoinChange(new int[] { 1 }, 0));
 }
コード例 #15
0
 public void Test_NumTrees()
 {
     Assert.AreEqual(5, DynamicProgramming.NumTrees(3));
 }
コード例 #16
0
        // Measure algorithms time
        private static TestResult RunAlgorithms(Dataset dataSet, int measurementCount)
        {
            Console.WriteLine("{0}: starting calculating dateset {1}", DateTime.Now, dataSet.GetFilePath());

            var csvBuilder = new StringBuilder();

            csvBuilder.AppendLine(TestResultHelper.GetInstanceResultHeader());

            var stopwatch = new Stopwatch();

            double BFTotal    = 0;
            double BandBTotal = 0;
            double dpTotal    = 0;

            double reduxTotal  = 0;
            double reduxErrSum = 0;
            double reduxMaxErr = 0;

            double greedyTotal  = 0;
            double greedyErrSum = 0;
            double greedyMaxErr = 0;

            double ftpasTotal = 0;

            for (int i = 1; i <= dataSet.LastInstanceId; i++)
            {
                Console.WriteLine($"{DateTime.Now}::{dataSet.Name}::{dataSet.InstanceItemsCount}::{i}");

                // Load instance and solution
                var instance = InstanceLoader.LoadInstanceAsync(dataSet, i);
                if (instance == null)
                {
                    continue;
                }

                int optimalResult = InstanceLoader.LoadSolution(dataSet, i);

                double bruteForceTimeAvg     = 0;
                double branchAndBoundTimeAvg = 0;
                double dynamicProgrammingAvg = 0;
                double greedyAvg             = 0;
                double reduxAvg = 0;

                int[] greedyHeuristicResult = null;
                int[] reduxHeuristicResult  = null;
                for (int j = 0; j < measurementCount; j++)
                {
                    stopwatch.Reset();

                    // Start Brute Force
                    stopwatch.Start();
                    var bruteForceResult = BruteForce.Solve(0, instance.Weights, instance.Prices, 0, 0, instance.MaxWeight, instance.MinPrice, new int[instance.N + 1], new int[instance.N + 1]);
                    stopwatch.Stop();

                    CheckResult(instance, bruteForceResult[instance.N], optimalResult, dataSet.Name, nameof(BruteForce));
                    bruteForceTimeAvg += stopwatch.Elapsed.TotalMilliseconds;

                    stopwatch.Reset();

                    // Start Branch and Bound
                    stopwatch.Start();
                    var branchAndBoundResult = BranchAndBound.Solve(0, instance.Weights, instance.Prices, 0, 0, instance.MaxWeight, new int[instance.N + 1], new int[instance.N + 1]);
                    //BranchAndBound.Decide(0, instance.Weights, instance.Prices, 0, 0, instance.MaxWeight, 324);
                    stopwatch.Stop();

                    CheckResult(instance, branchAndBoundResult[instance.N], optimalResult, dataSet.Name, nameof(BranchAndBound));
                    branchAndBoundTimeAvg += stopwatch.Elapsed.TotalMilliseconds;

                    stopwatch.Reset();

                    // Start Dynamic programming
                    stopwatch.Start();
                    var dynamicProgrammingResult = DynamicProgramming.Solve(instance.Items, instance.MaxWeight);
                    stopwatch.Stop();

                    CheckResult(instance, dynamicProgrammingResult[instance.N], optimalResult, dataSet.Name, nameof(DynamicProgramming));
                    dynamicProgrammingAvg += stopwatch.Elapsed.TotalMilliseconds;

                    stopwatch.Reset();

                    // Start Greedy heuristic
                    stopwatch.Start();
                    greedyHeuristicResult = GreedyHeuristic.Solve(instance.Items.ToList(), instance.MaxWeight);
                    stopwatch.Stop();

                    //CheckResult(instance, greedyHeuristicResult[instance.N], optimalPrice, dataSet.Name, nameof(GreedyHeuristic));
                    greedyAvg += stopwatch.Elapsed.TotalMilliseconds;

                    stopwatch.Reset();

                    // Start Redux heuristic
                    stopwatch.Start();
                    reduxHeuristicResult = ReduxHeuristic.Solve(instance.Items.ToList(), instance.MaxWeight);
                    stopwatch.Stop();

                    reduxAvg += stopwatch.Elapsed.TotalMilliseconds;

                    stopwatch.Reset();
                }

                BFTotal     += Avg(bruteForceTimeAvg, measurementCount);
                BandBTotal  += Avg(branchAndBoundTimeAvg, measurementCount);
                dpTotal     += Avg(dynamicProgrammingAvg, measurementCount);
                greedyTotal += Avg(greedyAvg, measurementCount);
                reduxTotal  += Avg(reduxAvg, measurementCount);

                csvBuilder.AppendLine(TestResultHelper.FormatInstanceResultRow(
                                          instance.Id,
                                          instance.N,
                                          Avg(bruteForceTimeAvg, measurementCount),
                                          Avg(branchAndBoundTimeAvg, measurementCount),
                                          Avg(dynamicProgrammingAvg, measurementCount),
                                          Avg(greedyAvg, measurementCount),
                                          Avg(reduxAvg, measurementCount),
                                          0
                                          ));
            }

            Console.WriteLine("{0}: calculating dataset {1} ended", DateTime.Now, dataSet.GetFilePath());

            return(new TestResult
            {
                InstanceSize = dataSet.InstanceItemsCount,
                InstancesResults = csvBuilder.ToString(),
                BFTime = Avg(BFTotal, dataSet.InstancesCount),
                BandBTime = Avg(BandBTotal, dataSet.InstancesCount),
                GreedyHeuristicTime = Avg(greedyTotal, dataSet.InstancesCount),
                ReduxHeuristicTime = Avg(reduxTotal, dataSet.InstancesCount),
                DPTime = Avg(dpTotal, dataSet.InstancesCount),
                FTPASTime = Avg(ftpasTotal, dataSet.InstancesCount),

                GreedyRelErr = Avg(greedyErrSum, dataSet.InstancesCount),
                GreedyMaxErr = greedyMaxErr,
                ReduxRelErr = Avg(reduxErrSum, dataSet.InstancesCount),
                ReduxMaxErr = reduxMaxErr
            });
        }