/// <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); }
/// <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); }
/// <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); }
/// <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); }