資料結構中樹形結構簡介

banq發表於2024-04-15

電腦科學中有很多種樹,每種樹都適合特定的要求和用途。為了有效地解決問題和建立演算法,瞭解這些不同樹結構的屬性和應用案例至關重要。

基本樹概念
邊和節點
節點和邊的概念是任何樹結構的基礎。作為基本的架構元件,可以將節點視為道路網路中的交叉點。每個節點都有資料,並且有可能透過邊連線到其他節點,從而產生樹的分支。節點充當資訊的儲存空間,而邊則顯示這些儲存空間之間的連線或連結。

內部節點、葉子和根

  • 樹的根,即起源或最高節點,是它的頂峰。
  • 它是所有其他節點的主要祖先,因為它沒有父節點。

樹葉
  • 沒有子節點的節點稱為葉節點或外部節點。
  • 與自然界中樹的葉子類似,它們存在於樹枝的最末端。

內部節點
  • 至少有一個不是葉子的後代的節點稱為內部節點。
  • 這些節點連線樹的多個分支和級別以構建內部框架。

父母、孩子和兄弟姐妹
親子關係

  • 父子關係連結樹的節點。
  • 具有一個或多個子節點的節點被視為父節點。
  • 另一方面,具有父節點的節點是子節點。

兄弟姐妹
  • 兄弟節點是具有相同父節點的節點。
  • 這些連線在樹中建立了家族層次結構,使探索和理解結構化資料的表示方式變得更加容易。


二叉樹
二叉樹(本質上是一種資料結構)中的每個節點最多可以有兩個子節點,通常稱為左子節點和右子節點。對於更復雜的樹資料結構,這種層次結構就是證明。使用簡單的 Python 函式,讓我們探索二叉樹的起源。

二叉搜尋樹 (BST)
二叉樹是一種序列,其中節點的左子樹僅由鍵小於該節點鍵的節點組成,右子樹僅由鍵大於該節點鍵的節點組成。這種特定型別的二叉樹稱為二叉搜尋樹(BST)。在 BST 中,搜尋、插入和刪除節點等功能是高效的。

二叉搜尋樹中的每個節點最多可以有兩個後代,通常稱為右子節點和左子節點。 BST 的主要特徵是其左子樹中的每個成員都小於其右子樹中的每個元素,反之亦然。

BST 因其固有的排序特性而適合有效的搜尋操作。然而,樹內節點的精確配置會影響整體效能。在最壞的情況下,傾斜樹將導致退化樹,其搜尋時間與節點數量成正比。

最優二叉搜尋樹(OBST)
搜尋操作的有效性在資料結構領域至關重要。最優二叉搜尋樹(OBST)是滿足這一需求的基本思想。稱為 OBST 的二叉搜尋樹減少了給定鍵集的典型搜尋時間。這樣的樹是使用複雜的演算法和動態程式設計技術構建的,它最佳化了結構以實現快速訪問。

認識到樹的結構可能會極大地影響搜尋操作的效能,因此需要最佳二叉搜尋樹。當某些鍵比其他鍵更頻繁地使用時,必須對它們進行排列以使平均搜尋時間儘可能短。理想的二叉搜尋樹透過將經常使用的鍵定位在更靠近根的位置來利用訪問機率,從而縮短平均搜尋時間。

OBST 是使用動態規劃策略構建的。基本概念是將問題分成更小的元件,解決每個元件,然後整合這些解決方案以建立最佳的解決方案。
子問題識別

  • 透過考慮所有潛在的子樹,定義子問題。
  • 將每個鍵視為給定鍵集的根,然後將剩餘鍵分為左子樹和右子樹。

遞迴關係
  • 建立一個遞迴關係,其中最佳二叉搜尋樹的成本以其每個子樹的成本來表示。
  • 成本由左子樹成本和右子樹成本以及連線到鍵的機率總和組成。

自下而上的解決方案構建
  • 使用動態規劃表來跟蹤臨時結果。
  • 理想的二叉搜尋樹可以透過從較小的子樹逐漸構建來達到。
  • 在找到精確解之前,使用遞推關係填充表格。

使用動態規劃建立 OBST 的時間複雜度為 O(n 3 ),其中“n”是鍵的總數。這是因為有必要考慮所有潛在的子樹並評估每個子樹的所有潛在的根。搜尋操作中獲得的生產力驗證了構建理想樹的努力,儘管這在計算上可能顯得昂貴。

OBST 透過根據訪問機率智慧地組織頻繁使用的鍵,確保它們更接近根,從而減少平均搜尋時間。動態規劃方法系統地建立理想的二叉搜尋樹,將問題劃分為更小、更易於管理的困難,並構建理想的答案。儘管演算法的複雜性可能看起來令人生畏,但搜尋效率的提高證明了計算支出的合理性。

對於希望建立高效能系統的電腦科學家和軟體工程師來說,理解和使用最佳二叉搜尋樹至關重要。 OBST 的研究在更大的電腦科學領域中是一項值得努力的事情,因為隨著技術的發展,高效的演算法和資料結構對於軟體開發至關重要。


AVL 樹:自平衡二叉搜尋樹
AVL 樹是一種特殊的自平衡二叉搜尋樹。 AVL 樹的任意兩個子子樹之間的高度差限制為 1。如果在插入或刪除操作期間任何時候違反此屬性,則會進行輪換以恢復平衡。

平衡二叉搜尋樹:紅黑樹
紅黑樹是另一種具有獨特特性的自平衡二叉搜尋樹。這些特性保證了搜尋、插入和刪除操作的對數時間複雜度,同時確保樹在插入和刪除過程中保持平衡。

KD樹
KD 樹,也稱為 K 維樹,是多維空間中點組織的重要資料結構,通常當 K 表示相當高的數字時。這些結構的吸引力在於它們能夠促進多維空間領域中的多種搜尋方法,包括範圍搜尋和最近鄰搜尋。

二叉樹中的每個節點都是“KD樹”的表現形式,對應於K維空間中的一個點。空間本身透過超平面分為兩個領域,樹中的每個非葉節點都體現了超平面。對應於 K 個維度之一的所選軸將自身平行於這些超平面對齊。

軸的選擇可以透過各種方法來實現,但最傳統的方法需要在定義中點以執行空間劃分之前順序迴圈透過每個 K 維度。

解鎖 KD 樹的機制
從本質上講,KD 樹作為二叉樹執行,每個節點代表一個 k 維點,從而將空間分為兩個不同的半空間。下面是對該過程的更仔細的檢查:

  1. 維度選擇:初始步驟圍繞維度的選擇。在 2D KD 樹中,x 和 y 維度之間會發生切換過程,而在更高維度中,它會在座標之間迴圈。
  2. 發現中位數:在選定的維度內,透過評估該特定維度內的值來揭示中位數。該中點隨後將王座作為樹的根節點。
  3. 劃分割槽域:資料集被分割為兩個子集,一個是位於中線一側的點的所在地,另一個是位於另一側的點的所在地。這些子集與根節點的左子樹和右子樹建立連線。
  4. 遞迴展開:步驟 1 到 3 進入遞迴領域,因為每個子樹都會重複該過程。結果是一個樹結構,其中每個節點都體現了不同維度內的中點。

完美二叉樹
完美二叉樹,通常稱為完全二叉樹,是一個令人著迷的主題,吸引了電腦科學家、數學家和自然愛好者。由於其對稱結構和遞迴性質,它們是一個令人著迷的研究課題,並且它們在從電腦科學到語言學等領域都有廣泛的用途。

一種特殊的二叉樹表現出令人難以置信的對稱性和平衡性,被稱為完美二叉樹。要使二叉樹被認為是完美的,必須滿足兩個基本要求:

  • 樹的每一層都有帶有零個或兩個子節點的節點,這意味著它已被填充。
  • 所有葉子(沒有子節點的節點)的深度或級別都是相同的。

完美二叉樹與其他二叉樹版本的區別在於其固有的對稱性。將完美的二叉樹視為黃金比例的生動例證,即美麗而自然的和諧。這棵樹看起來是其自身的和諧反映,因為對稱結構確保每個節點都有左右子節點。

除了視覺上吸引人之外,完美二叉樹對於不同的演算法和資料結構來說,在時間和空間複雜度方面都具有相當大的優勢。這些樹的平衡結構最佳化了搜尋過程,使其準確且高效。這種對稱特徵構成了各種基本思想和應用的基礎,並且它為研究基於樹的演算法和資料儲存領域提供了獨特的機會。

完美二叉樹顯示出一些在實際應用中既有趣又有用的特徵。讓我們來看看其中一些顯著特徵:

  • 高度:完美二叉樹的一個重要組成部分是它的高度。具有“h”層的樹的最後一層(葉子)上的節點數為 2(h-1),樹中的節點總數為 2(h-1)。這種連線使得有效地平衡完美二叉樹成為可能。
  • 節點數:完美二叉樹中的節點數為 2h - 1,其中“h”表示樹的高度。這種基本技術可以快速準確地確定給定高度的完美二叉樹中有多少個節點。
  • 深度和級別:完美二叉樹中的每個節點都有兩個屬性,稱為深度和級別。深度是節點與根的距離的度量,而級別是深度乘以一。根節點的級別和深度均為 0。完美二叉樹在每個深度或級別都有葉節點。
  • 平衡設計:正如已經確定的那樣,完美的二叉樹具有良好的平衡設計。這種平衡減少了樹的最大深度,產生了對不同演算法始終有效的結構。

完美二叉樹在各個領域都有許多實際用途,因此它們的受歡迎程度不僅僅是它們的外觀和理論特徵。以下是完美二叉樹的一些值得注意的用途:

  • 二叉搜尋樹: BST 是用於有效元素繫結、插入和刪除的基本資料結構。在完美二叉樹中,其中“n”是節點數,精心構建的二叉搜尋樹可以為這些操作提供 O(log n) 時間複雜度。
  • 堆資料結構:完美二叉樹可用於有效地建立堆,這對於實現優先順序佇列和各種排序演算法是必需的。堆的基礎是完整二叉樹,它是完美二叉樹的子類,可提供快速元素插入和檢索。
  • 語言學中的語法樹:自然語言中句子和表達的結構在語言學研究中用語法樹來表示。為了使語言元件的解析和分析更簡單,這些樹經常採用完美的二進位制形式。
  • 數字的二進位制表示:計算機系統中採用完美二叉樹來有效表示和操作二進位制數。這對於計算機體系結構特別有用,因為操作和儲存資料是基於二進位制表示的。
  • 壓縮演算法:二叉樹通常具有完美的二叉樹特徵,在廣泛使用的壓縮過程霍夫曼編碼中採用,以有效地編碼和解碼資料。
  • 人工智慧中的遊戲樹:在人工智慧中,遊戲樹描述了國際象棋和井字棋等棋盤遊戲中的潛在動作和結果。為了簡化決策過程,這些樹經常被構建為完美二叉樹。
  • 檔案系統:為了維護有效的資料結構並允許快速資訊檢索,用於組織和訪問儲存裝置上的資料的 B 樹和 B+ 樹等檔案系統使用完美二叉樹的概念。
  • 資料序列化:是將資料結構或物件轉換為適合電腦科學中儲存或傳輸的格式的過程。可以有效地利用完美二叉樹來加速這個過程。

N叉樹
N 叉樹是每個節點可以有多個後代的樹結構。 “N 元”一詞表示一個節點最多可以有“N”個子節點,其中“N”是表示此限制的變數。 N 叉樹提供了比二叉樹更具適應性的結構,二叉樹只允許每個節點有兩個子節點。

應用領域

  • 檔案系統: N 叉樹經常用於對檔案系統進行建模。 N 叉樹結構非常適合目錄,因為每個目錄都可以包含任意數量的檔案或子目錄。
  • 組織結構圖: N 叉樹可以顯示商業或教育環境中的組織層次結構。節點的直接下屬由其子節點表示,可以是員工或部門。
  • 抽象語法樹(AST): AST 描述了編譯器設計中程式程式碼的層次結構。為了表示各個程式碼段之間的連線,可以使用n叉樹。
  • 家譜: N 元樹是描繪家譜或家譜的常見方式。每個個體都是一個節點,節點的後代是其後代的代表。
  • XML 和 HTML 文件結構: XML 和 HTML 頁面的文件物件模型 (DOM) 通常被描述為 N 叉樹。 XML 和 HTML 文件結構。文件的元素都是節點;巢狀元素是節點的子元素。

多路樹
在電腦科學和資訊科技中,多路樹(也稱為多叉樹或通用樹)是資料結構的基本型別。它們提供了一種靈活的方法來描述層次結構,並用於各種上下文,包括檔案系統、資料庫和解析器樹。

稱為多路樹的樹資料結構允許每個節點有多個後代。多路樹可以有多個子節點,與二叉樹相反,二叉樹的每個節點最多隻能有兩個子節點。由於其靈活性,它們非常適合對複雜的層次關係進行建模。

多路樹的主要特徵包括:

  • 節點結構:多路樹中的每個節點都有許多指向其子節點的指標。從節點到節點,指標的數量可能不同。
  • 根節點:根節點是樹的起點,可以從根節點訪問所有其他節點。
  • 葉節點:沒有子節點的節點稱為葉節點。多路樹中的葉節點可以有任意數量的子節點,甚至可以是零。
  • 高度和深度:多路樹具有高度(樹的最大深度)和深度(從根到節點的距離)。由於孩子數量的不同,樹的深度和高度可能會有很大差異。

多路樹的型別:
多路樹有多種形式,每種形式都有特定的屬性和用途。最典型的品種包括:

  • 通用多路樹:這些樹中的每個節點都可以有無限數量的後代。它們被廣泛應用於各種應用中,例如公司組織層次結構和檔案系統中的目錄結構。
  • B 樹:在檔案系統和資料庫中,B 樹是一種自平衡多路樹。它們對於插入、刪除和搜尋非常有效,因為它們是為了保持平衡的結構而設計的。
  • 三元樹:一種特殊的多路樹,其中每個節點恰好有三個子節點,稱為三元樹。它們經常被納入最佳化和語言處理方法中。
  • 四叉樹和八叉樹:這是地理資訊系統和計算機圖形學中用於空間分割和索引的專用多路樹的兩個示例。八叉樹每個節點有八個子節點,而四叉樹有四個子節點。

多路樹上的操作:
多路樹支援多種操作,允許有效的資料修改和檢索。以下是一些基本操作的示例:

  • 插入:向樹新增新節點,同時確保它保留樹的結構和特徵。
  • 刪除:從樹中刪除節點,同時仍保留其完整性。
  • 搜尋:使用搜尋在樹中查詢特定節點或值。
  • 遍歷:遍歷是按照特定順序(例如前序、中序或後序)遍歷樹中每個節點的過程。
  • 平衡(對於 B 樹):為了保持快速搜尋和檢索時間,平衡(對於 B 樹)涉及確保樹在插入和刪除後保持平衡。

多路樹的意義:
由於以下原因,多路樹在資料結構和電腦科學中非常重要。

  • 多功能性:多路樹可用於廣泛的應用程式,因為它們提供了一種描述層次關係的通用方法。
  • 效率:為了管理和組織資料庫和檔案系統中的大量資料集,某些型別的多路樹(例如 B 樹)是為了提高效率而構建的。
  • 解析和語法樹:多路樹對於編譯器和直譯器至關重要,因為它們用於程式語言的解析和語法分析。
  • 空間資料結構:多路樹,例如四叉樹和八叉樹,允許在地理資訊系統和計算機圖形中進行有效的空間索引和分割槽。

多路樹是一種靈活且重要的資料結構,具有多種應用。在電腦科學和資訊科技的許多領域,它們能夠描述每個節點具有可變數量的後代的層次關係,這使得它們非常有用。多路樹是匯出難題解決方案和最佳化資料操作的重要工具,無論它們是用於資料庫中的有效資料儲存、編譯器中的解析還是圖形中的空間分割槽。任何處理分層資料結構的電腦科學家或軟體工程師都必須對其特徵、種類和操作有深入的瞭解。

字尾樹
在資料結構領域,我們遇到稱為“字尾樹”的實體。這個複雜的構造的目的是保護字串集合。在這種情況下,合併中的獨特字尾會聚成這個複雜叢集中的單個節點或主分支。

儘管構建字尾樹有許多不同的方法,但大多數字尾樹(如果不是全部)都共享以下語義:

  • 每個子字串都新增了一個額外的特殊字元。
  • 每個葉節點所代表的字尾的索引或起始位置都包含在其中。
  • 每個字尾的字母都被壓縮為單個節點表示。

在學習字尾樹之前,瞭解 trie特里樹 和字尾樹之間的區別至關重要。

特里樹
在資料結構領域,“trie特里樹”展現了其複雜性,因為它秘密地分隔了其指定陣列中所有字串的每個字元。這種仔細的選擇,以單個節點的存在來表示,使其有別於傳統的結構。當一個公共子串開始多個單詞時,就會出現一個統一的節點鏈來封裝這個共享的語言片段。

鏈在子字串結束處優雅地解散,優雅地讓位於獨特字尾的開始。因此,這些獨特字尾的每個字元都透過構成特里樹複雜結構的離散且專門的節點找到其表示。

字尾樹的功能
如果符號源自包含從負無窮大到正無窮大的多項式範圍的整數字母表,則可以在以下方式中完成表示為“S”的字串的字尾樹的構造,該字串表示為“S”,長度表示為“n”時間複雜度為 Theta (n)。在處理固定尺寸的字母表時尤其如此。然而,對於更廣泛的字母表,相當一部分時間資源被分配給將符號組織成大小為 O(n) 的範圍的任務,該過程通常需要 O(nlog n) 時間。
假設存在在字串“S”上建立的長度為“n”的字尾樹,可以執行以下操作:
1. 搜尋字元序列:-

  • 在 O(m) 的時間範圍內,可以確定長度為“m”、標記為“P”的字元序列是否符合子串的條件。
  • 在 O(m) 的時間範圍內,可以識別累積長度為“m”的序列“P1...PQ”的初始出現作為子串。
  • 在 O(m+z) 的時間範圍內,可以精確定位子串內長度為“m”的模式“P1...PQ”的所有“z”次出現。

2. 識別字元序列的特徵:-
  • 在Theta(n(i) + n(j))的時間範圍內,可以確定字串'S(i)'和'S(j)'之間共享的最廣泛的公共子串。
  • 在 Theta (n + z) 的時間範圍內,所有最大配對、最大重複和超最大重複都可以被揭示。
  • 在 Theta (n) 的時間範圍內,可以識別最長的重複子串。
  • 在Theta(n)的時間範圍內,可以辨別只出現一次的最小長度的子串。

此外,字尾樹可以應用於生物資訊學、編輯和自由文字搜尋等應用中的各種字串挑戰。以下是一些最流行的用途的列表:

  1. 精確的字串對應:如前所述,在給定文字的字尾樹中,模式 P 的全部出現可能會以 O (P + occ) 的時間複雜度被發現。即使考慮到構建字尾樹的時間投入,這種方法也漸近地與 Knuth-Morris-Pratt 的效率相媲美,特別是在處理多種模式時。
  2. 計算基因組學:字尾樹在生物資訊學領域得到廣泛應用,特別是用於識別 DNA 鏈內重複出現的基序。此外,它們對於揭示 DNA 序列中最長的公共子串或子序列具有無價的價值。這些技術在進化生物學和識別生物體之間共享遺傳特徵的領域中至關重要。
  3. 文字度量:字尾樹中的每個節點都明確對應於一個文字因素,相反,每個因素都與一個唯一的節點相關。因此,即使產生的值傳統上遵循 Theta(n^2),文字中不同因素的總分類等於獨特節點的數量,該數量可以線上性時間 O(n) 中計算,如下所示:系統地遍歷字尾樹。文字中最長的迴圈因子表示至少重複兩次的最擴充套件的序列,它由字尾樹的最裡面的節點簡潔地表示。
  4. 最高迴文序列:迴文是一個在反轉時保持不變的序列的縮影,如“賽車”一詞所示。字尾樹領域內的這一概念是識別最擴充套件迴文序列的寶貴工具。
  5. 資料縮減策略:在訊號處理領域,資料壓縮封裝了使用比其初始表示更少的位元來編碼資訊的技術。

結論
樹因其表達層次關係、有效搜尋和檢索資料以及適應專門應用的天然能力而成為計算工具箱中的適應性工具。樹在眾多領域的流行強調了它們對電腦科學的重要性。樹對於建立有效的演算法和結構至關重要,無論是用於管理檔案系統中的層次關係、使用霍夫曼樹壓縮資料還是最佳化搜尋過程。樹也是電腦科學中必不可少的構建塊,由於它們對各種應用的適應性以及保持平衡以實現最佳效能的功能,為高效和有效地解決問題鋪平了道路。

相關文章