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); } } } } }
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 }
public BinomialHeap(BinomialHeap binomialHeap) { binHeaps = new List <BinHeapNode>(binomialHeap.binHeaps); }