public IMaxTree <ElementType> BuildMaxTree(ElementType[] element_array, IComparer <ElementType> element_value_comparer, ITopologyElement topology, int real_element_count, IProgressReporter reporter)
        {
            this.d_element_array        = element_array;
            this.element_value_comparer = element_value_comparer;
            this.element_index_comparer = new ComparerArrayIndex <ElementType>(element_value_comparer, element_array);

            this.d_topology = topology;
            this.d_reporter = reporter;

            this.d_done = 0;
            this.d_elements_to_queued    = new bool[d_element_array.Length];
            this.d_neigbor_element_array = new int[d_topology.MaximumConnectivity];
            this.d_fringe          = new PriorityQueueC5 <int>(element_index_comparer);
            this.d_component_stack = new Stack <Tuple <ElementType, IList <int>, IList <MaxTreeNode <ElementType> > > >();



            d_fringe.Enqueue(0);
            d_elements_to_queued[0] = true;
            // Build tree
            while (d_fringe.Count != 0)
            {
                Process(d_fringe.PeekLast());
            }
            Tuple <ElementType, IList <int>, IList <MaxTreeNode <ElementType> > > component = d_component_stack.Pop();
            MaxTreeNode <ElementType> bottom_level_node = new MaxTreeNode <ElementType>(component.Item1, component.Item2, component.Item3, element_value_comparer);

            return(new MaxTree <ElementType>(bottom_level_node, d_element_array.Length, real_element_count, element_value_comparer));
        }
Exemple #2
0
        public void TestPriorityQueue()
        {
            IComparer <int> comparer_value = new ComparerNatural <int>();

            Assert.AreEqual(1, comparer_value.Compare(5, -1));
            IComparer <int> comparer_index = new ComparerArrayIndex <int>(new ComparerNatural <int>(), new int[] { 5, -1 });

            Assert.AreEqual(1, comparer_index.Compare(0, 1));

            int[] values = new int[] { 0, 1, 1, 2, -5, 6, 7, 7, 19, -20 };
            PriorityQueueC5 <int> queue = new PriorityQueueC5 <int>(new ComparerArrayIndex <int>(new ComparerNatural <int>(), values));

            queue.Enqueue(0);
            queue.Enqueue(4);
            queue.Enqueue(8);
            Assert.AreEqual(8, queue.DequeueLast());
            Assert.AreEqual(0, queue.DequeueLast());
            Assert.AreEqual(4, queue.DequeueLast());
            queue.Enqueue(4);
            queue.Enqueue(4);
            queue.Enqueue(8);
            queue.Enqueue(4);
            queue.Enqueue(9);
            Assert.AreEqual(8, queue.DequeueLast());
            Assert.AreEqual(4, queue.DequeueLast());
            Assert.AreEqual(4, queue.DequeueLast());
            Assert.AreEqual(4, queue.DequeueLast());
            Assert.AreEqual(9, queue.DequeueLast());
        }