# Steiner tree

Solution for three points; the Steiner point is in the middle—note there are no direct connections between A, B, C
Solution for four points—note that there are two Steiner points, S1 and S2

The Steiner tree problem, named after Jakob Steiner, is a problem in combinatorial optimization.

The Steiner tree problem is superficially similar to the minimum spanning tree problem: given a set V of points (vertices), interconnect them by a network (graph) of shortest length, where the length is the sum of the lengths of all edges. The difference between the Steiner tree problem and the minimum spanning tree problem is that, in the Steiner tree problem, extra intermediate vertices and edges may be added to the graph in order to reduce the length of the spanning tree. These new vertices introduced to decrease the total length of connection are known as Steiner points or Steiner vertices. It has been proved that the resulting connection is a tree, known as the Steiner tree. There may be several Steiner trees for a given set of initial vertices.

The original problem was stated in the form that has become known as the Euclidean Steiner tree problem: Given N points in the plane, it is required to connect them by lines of minimum total length in such a way that any two points may be interconnected by line segments either directly or via other points and line segments.

For the Euclidean Steiner problem, points added to the graph (Steiner points) must have a degree of three, and the three edges incident to such a point must form three 120 degree angles. It follows that the maximum number of Steiner points that a Steiner tree can have is N-2, where N is the initial number of given points.

It may be further generalized to the metric Steiner tree problem. Given a weighted graph G(S,E,w) whose vertices correspond to points in a metric space, with edge weights being the distances in the space, it is required to find a tree of minimum total length whose vertices are a superset of set S of the vertices in G.

The most general version is Steiner tree in graphs: Given a weighted graph G(V,E,w) and a subset of its vertices $S\subseteq V$, find a tree of minimal weight which includes all vertices in S.

The Steiner tree problem has applications in circuit layout or network design. Most versions of the Steiner tree problem are NP-complete, i.e., thought to be computationally hard. In fact, one of these was among Karp's original 21 NP-complete problems. Some restricted cases can be solved in polynomial time. In practice, heuristics are used.

One common approximation to the Euclidean Steiner tree problem is to compute the Euclidean minimum spanning tree.

## Outside the plane

The Steiner tree problem has also been investigated in multiple dimensions and on various surfaces. Algorithms to find the Steiner minimal tree have been found on the sphere, torus, projected plane, wide and narrow cones, and others.