Skip to contents

Constructs a tree structure capturing the hierarchical relationships between spurious extrema through their basins of attraction. The tree alternates between minima and maxima, terminating at non-spurious extrema.

Usage

build.se.tree(
  adj.list,
  weight.list,
  y,
  root.vertex,
  spurious.min,
  spurious.max,
  basins,
  compute.hr.support = TRUE,
  verbose = TRUE
)

Arguments

adj.list

Graph adjacency list (1-based indexing).

weight.list

Edge weight list.

y

Numeric vector of function values.

root.vertex

Vertex index of the spurious extremum to use as root (1-based).

spurious.min

Integer vector of spurious minimum vertices (1-based).

spurious.max

Integer vector of spurious maximum vertices (1-based).

basins

A gfc_basins object from compute.gfc.basins().

compute.hr.support

Logical; if TRUE, compute the harmonic repair support region.

verbose

Logical; print progress information.

Value

An object of class "se_tree" containing:

root.vertex

Root vertex index (1-based)

root.is.maximum

Logical; TRUE if root is a maximum

classification

One of "both_types", "only_min", "only_max", "no_terminals"

nodes

Named list of node structures

ns.min.terminals

Non-spurious minimum terminal vertices

ns.max.terminals

Non-spurious maximum terminal vertices

hr.support.vertices

Vertices in HR support region (if computed)

hr.support.boundary

Boundary of HR support region (if computed)

Details

The SE tree is built by breadth-first search starting from the root:

  1. Find opposite-polarity extrema within the root's basin

  2. Add them as children, mark as discovered

  3. For each child, recursively find opposite-polarity extrema in its basin

  4. Terminate branches at non-spurious extrema

The tree classification determines the HR support strategy:

  • both_types: Use branches to both NSMIN and NSMAX terminals

  • only_min/only_max: Use branch to nearest NS terminal

  • no_terminals: Use all nodes (isolated SE cluster)

Examples

if (FALSE) { # \dontrun{
# First compute basins
basins <- compute.gfc.basins(adj.list, weight.list, fitted.values)

# Identify spurious extrema (e.g., from hop index analysis)
spurious.min <- c(725, 809, 1806)
spurious.max <- c(718, 815)

# Build SE tree from a spurious minimum
se.tree <- build.se.tree(
    adj.list, weight.list, fitted.values,
    root.vertex = 725,
    spurious.min = spurious.min,
    spurious.max = spurious.max,
    basins = basins,
    compute.hr.support = TRUE
)

print(se.tree)
} # }