SemiringFactorizations.jl
Semirings
A semiring is an algebraic structure that generalizes rings, omitting the requirement that each element have an additive inverse. Examples include
- $(\mathbb{R}, +, \times, 0, 1)$
- $(\mathbb{R}, \mathrm{max}, +, -\infty, 0)$
- $(\mathbb{R}, \mathrm{max}, \mathrm{min}, -\infty, +\infty)$
Kleene Star
Let $A \in \mathbb{S}^{n \times n}$ be a square matrix with elements in a semiring $\mathbb{S}$. The Kleene star of $A$ is the infinite sum
\[ I + A + A^2 + A^3 + \cdots\]
With SemiringFactorizations.jl, we can compute the Kleene star of a matrix with the function star.
Examples
Shortest Paths
A weighted graph is a directed graph with a weight assigned to each edge. Weighted graphs can be represented by adjacency matrices with entries in the min-plus semiring.
The Kleene star of this matrix contains the weight of the shortest path between every pair of vertices.
julia> using SemiringFactorizations
julia> A = MinPlus{Float64}[
Inf 9.0 1.0 Inf Inf Inf
Inf Inf Inf Inf Inf 4.0
Inf Inf Inf 2.0 6.0 Inf
Inf Inf Inf Inf 3.0 Inf
Inf Inf Inf Inf Inf 5.0
Inf Inf Inf Inf Inf Inf
];
julia> star(A)
6×6 Matrix{MinPlus{Float64}}:
0.0 9.0 1.0 3.0 6.0 11.0
Inf 0.0 Inf Inf Inf 4.0
Inf Inf 0.0 2.0 5.0 10.0
Inf Inf Inf 0.0 3.0 8.0
Inf Inf Inf Inf 0.0 5.0
Inf Inf Inf Inf Inf 0.0