Esempio n. 1
0
        public void Demo(int x, int n, int k, bool print = true)
        {
            /**
             * Print search output iff k <= 100 */

            Console.WriteLine("Starting Fractional Cascading Matrix Search Demo\n");
            System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch();

            FCMatrixQuery fcmq = new FCMatrixQuery(n, k, insertData: x, print: print,
                                                   randNodeAttrOrders: false);

            Console.WriteLine("\nPerfroming binary search...");
            watch.Start();
            if (k <= 100 && print)
            {
                u.PrintDataLocationDict(fcmq.TrivialSolution(x), x.ToString());
            }
            else
            {
                fcmq.TrivialSolution(x);
            }
            watch.Stop();
            int trivialMS = (int)watch.ElapsedMilliseconds;

            Console.WriteLine("\nPerforming Fractional Cascading search...");
            watch.Reset();
            watch.Start();
            if (k <= 100)
            {
                u.PrintDataLocationDict(fcmq.FractionalCascadingSearch(x), x.ToString());
            }
            else
            {
                fcmq.FractionalCascadingSearch(x);
            }
            watch.Stop();
            int fcMS = (int)watch.ElapsedMilliseconds;

            Console.WriteLine(u.Separator(12, newLinesBelow: 0));
            Console.WriteLine("n: " + n + ", " + "\tk: " + k + "\tx: " + x);
            Console.WriteLine($"Execution Time of trivial solution: {trivialMS} ms");
            Console.WriteLine(
                $"Execution Time of fractional cascading solution: {fcMS} ms");
            Console.WriteLine(
                "Ratio of duration of FC solution vs trivial: " +
                $"{(float)fcMS / trivialMS}\n\n");
        }
Esempio n. 2
0
        public void CSV_Loop(String CSVFileName,
                             int kMin, int kMax, int kIncr,
                             int nMin, int nMax, int nIncr)
        {
            List <Record> fractionalCascadingStats = new List <Record>();

            System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch();
            Random random = new Random();
            int    x;

            for (int k = kMin; k <= kMax; k += kIncr)
            {
                Console.WriteLine("K: " + k);
                for (int n = nMin; n <= nMax; n += nIncr)
                {
                    x = random.Next(0, nMin * kMin);
                    FCMatrixQuery fcmq =
                        new FCMatrixQuery(n, k, insertData: x, print: false,
                                          randNodeAttrOrders: false);

                    // Trivial solution
                    watch.Start();
                    fcmq.TrivialSolution(x);
                    watch.Stop();
                    float trivialTime = watch.ElapsedMilliseconds;

                    // Fractional Cascading solution
                    watch.Reset();
                    watch.Start();
                    fcmq.FractionalCascadingSearch(x);
                    watch.Stop();
                    float FCTime = watch.ElapsedMilliseconds;
                    float ratio  = FCTime / trivialTime;

                    Record rec = new Record(n, k, x, trivialTime, FCTime, ratio);
                    Console.WriteLine(
                        $"\n\nn: {n}\tk: {k}\tx: {x}\nTrivial: {trivialTime} ms\t " +
                        $"FC: {FCTime} ms\tFC:Trivial Ratio: {ratio}");
                    fractionalCascadingStats.Add(rec);
                }
            }

            new CSVHelper(CSVFileName).WriteCSV(fractionalCascadingStats);
            Console.WriteLine("\n\nAll done :)\n\n");
        }