Beispiel #1
0
        public void Insert(BinomialHeap binomialHeap2)
        {
            //Если НЕ нужно в this.binHeaps добавлять новый элементы
            if (binHeaps.Count >= binomialHeap2.binHeaps.Count)
            {
                //Мерджить только те элементы, который в binomialHeap2 имеют ращмер больше 0
                foreach (BinHeapNode binHeapNode in binomialHeap2.binHeaps)
                {
                    //TODO: работа строго регулярной системы. Пока набросок того, чтобы было всегда 2.
                    if (binHeapNode.size > 0)
                    {
                        if (binHeapNode.size == 1)
                        {
                            Merge(binHeapNode.h1);
                        }
                        else
                        {
                            Merge(binHeapNode.h1);
                            Merge(binHeapNode.h2);
                        }
                    }
                }
            }
            else
            {
                //Добавление не хватающих элементов
                int off = binHeaps.Count;
                for (int i = off; i < binomialHeap2.binHeaps.Count; i++)
                {
                    binHeaps.Add(binomialHeap2.binHeaps[i]);
                }

                //Мерджить только те элементы, который в binomialHeap2 имеют ращмер больше 0
                for (int i = 0; i < off; i++)
                {
                    //TODO: работа строго регулярной системы. Пока набросок того, чтобы было всегда 2.
                    if (binomialHeap2.binHeaps[i].size > 0)
                    {
                        if (binomialHeap2.binHeaps[i].size == 1)
                        {
                            Merge(binomialHeap2.binHeaps[i].h1);
                        }
                        else
                        {
                            Merge(binomialHeap2.binHeaps[i].h1);
                            Merge(binomialHeap2.binHeaps[i].h2);
                        }
                    }
                }
            }
        }
Beispiel #2
0
        static void Main()
        {
            //List<int> our_number = new List<int>();
            //print_list(our_number);
            //our_number.Add(1);
            //our_number.Add(2); // Сразу [1,2]
            //StrictlyRegulatedSystem.StrictlyRegulatedNumber.increment(ref our_number, 0);
            //print_list(our_number);
            //StrictlyRegulatedSystem.StrictlyRegulatedNumber.increment(ref our_number, 0);
            //print_list(our_number);
            //for(int a = 0; a < 10; a++)
            //{
            //    StrictlyRegulatedSystem.StrictlyRegulatedNumber.increment(ref our_number, 0);
            //    print_list(our_number);
            //}

            //BinomialHeap.Node a = new BinomialHeap.Node(10); // Узел "10"
            //a.AddChild(new BinomialHeap.Node(11));
            //a.AddChild(new BinomialHeap.Node(12));
            //a.AddChild(new BinomialHeap.Node(13));
            //
            //BinomialHeap.Node b = new BinomialHeap.Node(9);
            //b.AddChild(a);
            //b.AddChild(new BinomialHeap.Node(7));



            Random rnd = new Random();

            BinomialHeapPack.BinomialHeap binomialHeap = new BinomialHeapPack.BinomialHeap(10);
            Stopwatch stopWatch = new Stopwatch();

            stopWatch.Start();
            for (int i = 0; i < 1000000; i++)
            {
                binomialHeap.Insert(rnd.Next(-1000000, 1000000));
            }

            stopWatch.Stop();
            // Get the elapsed time as a TimeSpan value.
            TimeSpan ts = stopWatch.Elapsed;

            // Format and display the TimeSpan value.
            string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}",
                                               ts.Hours, ts.Minutes, ts.Seconds,
                                               ts.Milliseconds / 10);

            Debug.WriteLine("RunTime sozdanie " + elapsedTime);


            stopWatch.Restart();

            int min = binomialHeap.GetMin();

            stopWatch.Stop();

            ts          = stopWatch.Elapsed;
            elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}",
                                        ts.Hours, ts.Minutes, ts.Seconds,
                                        ts.Milliseconds / 10);
            Debug.WriteLine("RunTime min " + elapsedTime + " binomialHeap min = {0}", min);



            //Debug.WriteLine("binomialHeap min = {0}", binomialHeap.GetMin()); // 10
        }
Beispiel #3
0
 public BinomialHeap(BinomialHeap binomialHeap)
 {
     binHeaps = new List <BinHeapNode>(binomialHeap.binHeaps);
 }