\(purfer\) 序列,是為了證明 \(cayley\) 定理。具體來說,是將一個樹對映到一個陣列上,在陣列上可以使得很多東西更加清晰的展示。
構造 \(prufer\) 序列
\(prufer\) 是將一個大小為 \(n\) 的樹對映到長度 \(n - 2\) 的序列上。從一個無根樹開始,我們將樹入度為 \(1\) 的點找出來,及葉子節點。 將編號最小的節點的連結的點加入 \(prufer\) 序列。再將這個點刪除。重複操作直到只有兩個節點。
\(prufer\) 序列還原樹
\(prufer\) 序列中存在的樹一定不是葉子節點,由於我們是先將最小的刪除所以我們確定了當前不在 \(prufer\) 序列中的最小點的父親。再將當前點去掉,重新求最小的不在 \(prufer\) 序列樹,重複操作就可以了。
\(prufer\) 帶來了什麼
\(prufer\) 序列是最短的描述樹的方式。首先,\(prufer\) 的最小先出的思想完善了每個樹的父親。最後可以留下兩個點是因為根節點沒有父親,以及另一個非根節點的父親確定,如果有 \(3\) 個節點很容易證明無法確定。
這樣我們得到了最小的表示樹的序列。同時,以為 \(prufer\) 描述了根節點和沒節點的父親,使得樹也確定了下來。
\(prufer\) 不同,構造出來的樹也不同,也就十分顯然了。
\(cayley\) 定理
\(cayley\) 定理表達了一個完全圖的生成樹的個數有 \(n ^{n - 2}\) 個,我們很容易透過 \(prufer\) 序列的唯一性。把 \(cayley\) 定理抽象成長度為 \(n - 2\) 的序列,序列每個元素大小為正整數且小於等於 \(n\) 的序列有多少個。我們由小學學習的方式都可以得到有 \(n ^{n - 2}\) 個。這證明了cayley 定理。
\(prufer\)序列應用
筆者學習 \(prufer\) 的初衷是構造一個深度更深的樹。
我們直接隨機一個 \(prufer\) 序列進行試驗。
可以神奇的發現:構造出來的序列還原回去的樹高來到了 \(\sqrt{n}\) 的大小。比直接隨機的樹更加優秀。
但是,這還不是上線,因為 \(prufer\) 序列的一一對應,我們任意得到的序列都可以構造出一個樹。深度和 \(prufer\) 序列的元素個數有關,所有我們甚至可以欽定 \(prufer\) 元素個數,再重構。