Exemple #1
0
        /// <summary>
        /// Constructs a new <see cref="Heap{T}"/> from an <see cref="IEnumerable{T}"/>
        /// </summary>
        public static Heap <T> ToHeap <T>(this IEnumerable <T> items, Comparison <T> comparison, HeapType type = HeapType.Min) where T : IComparable <T>
        {
            var heap = new Heap <T>(comparison, type);

            heap.AddRange(items);
            return(heap);
        }
Exemple #2
0
        public void ContainedMutated()
        {
            var rnd = new Random(223);

            for (var i = 0; i < 10; i++) // 10 attempts
            {
                var sortables = CreateRandomSortableArray(10);

                // Create heap with sortable objects
                var heap = new Heap <SortableObject>();
                heap.AddRange(sortables);

                // Mark a random item with a new value, changing its comparable state
                for (var q = 0; q < 5; q++)
                {
                    var _i = rnd.Next(0, sortables.Length);
                    var _r = rnd.Next(0, sortables.Length);
                    sortables[_i].Number = _r;

                    // Update the items position within the heap
                    heap.Update(sortables[_i]);
                }

                // Assert heap extraction is indeed in order
                var list = ExtractElements(heap);
                Assert.IsTrue(list.IsAscendingOrder(), "Items were not in ascending order after heap mutate");
            }
        }
Exemple #3
0
        private Graph Prim()
        {
            if (!IsConnected())
            {
                throw new InvalidOperationException("Graph is not connected");
            }
            ResetStats();
            Verticle v = verticles.First().Value;

            v.Visited = true;
            Edge[] treeEdges = new Edge[NumOfVerticles - 1];
            int    teIndex   = 0;
            var    edges     = new Heap <Edge>(v.EdgesOut);
            Edge   e;

            while (teIndex < numOfVerticles - 1)
            {
                e = GetMinUnvisitedEdge(edges);
                treeEdges[teIndex++] = e;
                v         = e.To;
                v.Visited = true;
                edges.AddRange(v.EdgesOut);
            }
            return(GetSubGraph(treeEdges));
        }
        public static void HeapSort(this List <int> elements)
        {
            var heap = new Heap <int>();

            heap.AddRange(elements);
            for (var i = 0; i < elements.Count; i++)
            {
                elements[i] = heap.Pop();
            }
        }
Exemple #5
0
        public void ToArray()
        {
            // Create heap with 16 elements
            var heap = new Heap <int>();

            heap.AddRange(CreateRandomIntegerArray(16));

            //
            var array = heap.ToArray();

            Assert.IsTrue(array.IsAscendingOrder(), "Items were not in ascending order from enumerate");
        }