Beispiel #1
0
        static void Main(string[] args)
        {
            int n = int.Parse(Console.ReadLine());

            var items = Enumerable.Range(0, n)
                        .Select(_ => ReadArray())
                        .Select(arr => new Item {
                Value = arr[1], Weight = arr[2]
            })
                        .ToArray();

            double capacity = double.Parse(Console.ReadLine());

            var stopwatch = new Stopwatch();

            stopwatch.Start();
            double seqResult = new DynamicProgrammingSolver().Solve(items, capacity);

            Console.WriteLine($"Result DP: {seqResult}. Elapsed: {stopwatch.ElapsedMilliseconds}");

            stopwatch.Restart();

            double bruteSeqResult = new BruteForceSovler().KnapsackRecursiveBrute(items, capacity, items.Length - 1);

            Console.WriteLine($"Result Sequential Brute Force: {bruteSeqResult}. Elapsed: {stopwatch.ElapsedMilliseconds}");
            foreach (int threadCount in new[] { 1, 2, 4, 8 })
            {
                stopwatch.Restart();

                double bruteForceResult = GetBruteForceResult(items, capacity, threadCount);

                Console.WriteLine($"Result Brute Force: {bruteForceResult}. Thread Count: {threadCount}. Elapsed: {stopwatch.ElapsedMilliseconds}");
            }
        }
Beispiel #2
0
        private static double GetBruteForceResult(Item[] items, double capacity, int threadCount)
        {
            var tasks = new BruteForceSovler().ParallelizeKnapsack(items, capacity, items.Length - 1, threadCount).Select((func, i) => Task.Run(func));

            var allTask = Task.WhenAll(tasks.Select((t, i) => t.ContinueWith((result) => {
                Console.WriteLine($"Task {i + 1} finished");
                return(result.Result);
            })));

            return(allTask.Result.Max());
        }