Esempio n. 1
0
        /// <summary>
        /// Sorts the vertices in the given graph based on a hilbert curve using the default step count.
        /// </summary>
        /// <typeparam name="TEdgeData"></typeparam>
        public static HugeArrayBase <uint> BuildHilbertRank <TEdgeData>(this GraphBase <TEdgeData> graph)
            where TEdgeData : struct, IGraphEdgeData
        {
            var ranks = new HugeArray <uint>(graph.VertexCount + 1);

            graph.BuildHilbertRank(GraphExtensions.DefaultHilbertSteps, ranks);
            return(ranks);
        }
Esempio n. 2
0
        /// <summary>
        /// Sorts the vertices in the given graph based on a hilbert curve using the default step count.
        /// </summary>
        /// <typeparam name="TEdgeData"></typeparam>
        public static HugeArrayBase <uint> BuildHilbertRank <TEdgeData>(this GraphBase <TEdgeData> graph, int n)
            where TEdgeData : struct, IGraphEdgeData
        {
            var ranks = new HugeArray <uint>(graph.VertexCount + 1);

            graph.BuildHilbertRank(n, ranks);
            return(ranks);
        }
Esempio n. 3
0
        /// <summary>
        /// Copies all data from the given graph.
        /// </summary>
        /// <typeparam name="TEdgeData"></typeparam>
        public static void SortHilbert <TEdgeData>(this GraphBase <TEdgeData> graph, int n, Action <uint, uint> transform)
            where TEdgeData : struct, IGraphEdgeData
        {
            // build ranks.
            var ranks = graph.BuildHilbertRank(n);

            // invert ranks.
            var transformations = new HugeArray <uint>(ranks.Length);

            for (uint i = 0; i < ranks.Length; i++)
            {
                if (transform != null)
                {
                    transform(ranks[i], i);
                }
                transformations[ranks[i]] = i;
            }

            // copy from the given graph but with sorted vertices.
            graph.Sort(transformations);
        }
Esempio n. 4
0
 /// <summary>
 /// Sorts the vertices in the given graph based on a hilbert curve using the default step count.
 /// </summary>
 /// <typeparam name="TEdgeData"></typeparam>
 public static void BuildHilbertRank <TEdgeData>(this GraphBase <TEdgeData> graph,
                                                 HugeArrayBase <uint> ranks)
     where TEdgeData : struct, IGraphEdgeData
 {
     graph.BuildHilbertRank(GraphExtensions.DefaultHilbertSteps, ranks);
 }