|
|
| Line 1: |
Line 1: |
| In [[combinatorics|combinatorial]] [[mathematics]], the '''Prüfer sequence''' (also '''Prüfer code''' or '''Prüfer numbers''') of a [[labeled tree]] is a unique [[sequence]] associated with the tree. The sequence for a tree on ''n'' vertices has length ''n'' − 2, and can be generated by a simple iterative algorithm. Prüfer sequences were first used by [[Heinz Prüfer]] to prove [[Cayley's formula]] in 1918.<ref>{{cite journal | author=Prüfer, H. | title=Neuer Beweis eines Satzes über Permutationen | journal=Arch. Math. Phys. | year=1918 | volume=27 | pages=742–744}}</ref>
| | I'm Ina and I live in a seaside city in northern Germany, Templin. I'm 37 and I'm will soon finish my study at Environmental Management.<br><br>My web-site; FIFA coin generator ([http://www.tsztad.com/plus/guestbook.php click the following page]) |
| | |
| ==Algorithm to convert a tree into a Prüfer sequence==
| |
| One can generate a labeled tree's Prüfer sequence by iteratively removing vertices from the tree until only two vertices remain. Specifically, consider a labeled tree ''T'' with vertices {1, 2, ..., ''n''}. At step ''i'', remove the leaf with the smallest label and set the ''i''th element of the Prüfer sequence to be the label of this leaf's neighbour.
| |
| | |
| The Prüfer sequence of a labeled tree is unique and has length ''n'' − 2.
| |
| | |
| ===Example===
| |
| [[File:Tree graph.svg|right|frame|A labeled tree with Prüfer sequence {4,4,4,5}.]]
| |
| Consider the above algorithm run on the tree shown to the right. Initially, vertex 1 is the leaf with the smallest label, so it is removed first and 4 is put in the Prüfer sequence. Vertices 2 and 3 are removed next, so 4 is added twice more. Vertex 4 is now a leaf and has the smallest label, so it is removed and we append 5 to the sequence. We are left with only two vertices, so we stop. The tree's sequence is {4,4,4,5}.
| |
| | |
| ==Algorithm to convert a Prüfer sequence into a tree==
| |
| | |
| Let <code>{a[1], a[2], ..., a[n]}</code> be a Prüfer sequence:
| |
| | |
| The tree will have <code>n+2</code> nodes, numbered from <code>1</code> to <code>n+2</code>.
| |
| For each node set its degree to the number of times it appears in the sequence plus 1.
| |
| For instance, in pseudo-code:
| |
| | |
| '''Convert-Prüfer-to-Tree'''(''a'')
| |
| 1 ''n'' ← ''length''[''a'']
| |
| 2 ''T'' ← a graph with ''n'' + 2 isolated nodes, numbered 1 '''to''' ''n'' + 2
| |
| 3 ''degree'' ← an array of integers
| |
| 4 '''for''' each node ''i'' in ''T''
| |
| 5 '''do''' ''degree''[''i''] ← 1
| |
| 6 '''for''' each value ''i'' in ''a''
| |
| 7 '''do''' ''degree''[''i''] ← ''degree''[''i''] + 1
| |
| | |
| Next, for each number in the sequence <code>a[i]</code>, find the first (lowest-numbered) node, <code>j</code>, with degree equal to 1, add the edge <code>(j, a[i])</code> to the tree, and decrement the degrees of <code>j</code> and <code>a[i]</code>. In pseudo-code:
| |
| | |
| 8 '''for''' each value ''i'' in ''a''
| |
| 9 '''for''' each node ''j'' in ''T''
| |
| 10 '''if''' ''degree''[''j''] = 1
| |
| 11 '''then''' Insert ''edge''[''i'', ''j''] into ''T''
| |
| 12 ''degree''[''i''] ← ''degree''[''i''] - 1
| |
| 13 ''degree''[''j''] ← ''degree''[''j''] - 1
| |
| 14 '''break'''
| |
| | |
| At the end of this loop two nodes with degree 1 will remain (call them <code>u</code>, <code>v</code>). Lastly, add the edge <code>(u,v)</code> to the tree.<ref>{{cite journal | author=Jens Gottlieb, Bryant A. Julstrom, Günther R. Raidl, and Franz Rothlauf. |
| |
| title=Prüfer numbers: A poor representation of spanning trees for evolutionary search |
| |
| journal=Proceedings of the Genetic and Evolutionary Computation Conference (GECCO-2001) | year=2001 | pages=343–350 |
| |
| url=http://www.ads.tuwien.ac.at/publications/bib/pdf/gottlieb-01.pdf
| |
| }}
| |
| </ref>
| |
| | |
| 14 ''u'' ← ''v'' ← 0
| |
| 15 '''for''' each node ''i'' in ''T''
| |
| 16 '''if''' ''degree''[''i''] = 1
| |
| 17 '''then''' '''if''' ''u'' = 0
| |
| 18 '''then''' ''u'' ← ''i''
| |
| 19 '''else''' ''v'' ← ''i''
| |
| 20 '''break'''
| |
| 21 Insert ''edge''[''u'', ''v''] into ''T''
| |
| 22 ''degree''[''u''] ← ''degree''[''u''] - 1
| |
| 23 ''degree''[''v''] ← ''degree''[''v''] - 1
| |
| 24 '''return''' ''T''
| |
| | |
| ==Cayley's formula==
| |
| | |
| The Prüfer sequence of a labeled tree on ''n'' vertices is a unique sequence of length ''n'' − 2 on the labels 1 to ''n'' — this much is clear. Somewhat less obvious is the fact that for a given sequence ''S'' of length ''n''–2 on the labels 1 to ''n'', '''there is a ''unique'' labeled tree whose Prüfer sequence is ''S'''''.
| |
| | |
| The immediate consequence is that Prüfer sequences provide a [[bijection]] between the set of labeled trees on ''n'' vertices and the set of sequences of length ''n''–2 on the labels 1 to ''n''. The latter set has size ''n''<sup>''n''−2</sup>, so the existence of this bijection proves [[Cayley's formula]], i.e. that there are
| |
| ''n''<sup>''n''−2</sup> labeled trees on ''n'' vertices.
| |
| | |
| ==Other applications==
| |
| * Cayley's formula can be strengthened to prove the following claim:
| |
| :The number of spanning trees in a complete graph <math>K_n</math> with degrees <math>d_1, d_2, ..., d_n</math> is equal to the [[multinomial coefficient]]
| |
| ::<math>\binom{n-2}{d_1-1,\,d_2-1,\,\dots,\,d_n-1}=\frac{(n-2)!}{(d_{1}-1)!(d_{2}-1)!\cdots(d_{n}-1)!}.</math>
| |
| :The proof follows by observing that in the Prüfer sequence number <math>i</math> appears exactly <math>(d_{i}-1)</math> times.
| |
| | |
| * Cayley's formula can be generalized: a labeled tree is in fact a [[spanning tree (mathematics)|spanning tree]] of the labeled [[complete graph]]. By placing restrictions on the enumerated Prüfer sequences, similar methods can give the number of spanning trees of a complete [[bipartite graph]]. If ''G'' is the complete bipartite graph with vertices 1 to ''n''<sub>1</sub> in one partition and vertices ''n''<sub>1</sub> + 1 to ''n'' in the other partition, the number of labeled spanning trees of ''G'' is <math>n_{1}^{n_2-1} n_{2}^{n_1-1}</math>, where ''n''<sub>2</sub> = ''n'' − ''n''<sub>1</sub>.
| |
| | |
| * Generating uniformly distributed random Prüfer sequences and converting them into the corresponding trees is a straightforward method of generating uniformly distributed random labelled trees.
| |
| | |
| ==References==
| |
| {{reflist}}
| |
| | |
| ==External links==
| |
| * [http://mathworld.wolfram.com/PrueferCode.html Prüfer code] – from [[MathWorld]]
| |
| | |
| {{DEFAULTSORT:Prufer Sequence}}
| |
| [[Category:Enumerative combinatorics]]
| |
| [[Category:Trees (graph theory)]]
| |
I'm Ina and I live in a seaside city in northern Germany, Templin. I'm 37 and I'm will soon finish my study at Environmental Management.
My web-site; FIFA coin generator (click the following page)