亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

python中樹與樹的表示知識點(diǎn)總結(jié)

系統(tǒng) 2082 0

一、什么是樹

客觀世界中許多事物存在層次關(guān)系

人類社會家譜社會組織結(jié)構(gòu)圖書信息管理

其中,人類社會家譜如下圖所示:

python中樹與樹的表示知識點(diǎn)總結(jié)_第1張圖片

通過上述所說的分層次組織,能夠使我們在數(shù)據(jù)的管理上有更高的效率!那么,對于數(shù)據(jù)管理的基本操作――查找,我們?nèi)绾螌?shí)現(xiàn)有效率的查找呢?

二、查找

查找:根據(jù)某個(gè)給定關(guān)鍵字K,從集合R中找出關(guān)鍵字與K相同的記錄

靜態(tài)查找:集合中記錄是固定的,即對集合的操作沒有插入和刪除,只有查找

動態(tài)查找:集合中記錄是動態(tài)變化的,即對集合的操作既有查找,還可能發(fā)生插入和刪除(動態(tài)查找不在我們考慮范圍內(nèi))

2.1 靜態(tài)查找 2.1.1 方法1:順序查找

python中樹與樹的表示知識點(diǎn)總結(jié)_第2張圖片

            
/* c語言實(shí)現(xiàn) */

int SequentialSearch (StaticTable *Tbl, ElementType K)
{
// 在表Tbl[1]~Tb1[n]中查找關(guān)鍵字為K的數(shù)據(jù)元素
 int i;
 Tbl->Element[0] = K; // 建立哨兵,即沒找到可以返回哨兵的索引0表示未找到
 for (i = Tbl->Length; Tbl->Element[i] != K; i--); // 查找成功返回所在單元下標(biāo);不成功放回0
 return i;
}
          

順序查找算法的時(shí)間復(fù)雜度為O(n)

2.1.2 方法2:二分查找(Binary Search)

假設(shè)n個(gè)數(shù)據(jù)元素的關(guān)鍵字滿足有序(比如:小到大),即\(k_1 <\cdots

例:假設(shè)有13個(gè)數(shù)據(jù)元素,按關(guān)鍵字由小到大順序存放。二分查找關(guān)鍵字為444的數(shù)據(jù)元素過程如下圖:

python中樹與樹的表示知識點(diǎn)總結(jié)_第3張圖片

仍然以上面13個(gè)數(shù)據(jù)元素構(gòu)成的有序線性表為例,二分查找關(guān)鍵字為43的數(shù)據(jù)元素如下圖:

python中樹與樹的表示知識點(diǎn)總結(jié)_第4張圖片

            
/* c語言實(shí)現(xiàn) */

int BinarySearch (StaticTable *Tbl, ElementType K)
{
 // 在表中Tbl中查找關(guān)鍵字為K的數(shù)據(jù)元素
 int left, right, mid, NoFound = -1;
 
 left = 1; // 初始左邊界
 right = Tbl->Length; // 初始右邊界
 while (left <= right)
 {
  mid = (left + right) / 2; // 計(jì)算中間元素坐標(biāo)
  if (K < Tbl->Element[mid]) right = mid - 1; // 調(diào)整右邊界
  else if (K > Tbl->Element[mid]) left = mid + 1; // 調(diào)整左邊界
  else return mid; // 查找成功,返回?cái)?shù)據(jù)元素的下標(biāo)
 }
 return NotFound; // 查找不成功,返回-1
}

          

            
# python語言實(shí)現(xiàn)

def binary_chop(alist, data):
  n = len(alist)
  first = 0
  last = n - 1
  while first <= last:
    mid = (last + first) // 2
    if alist[mid] > data:
      last = mid - 1
    elif alist[mid] < data:
      first = mid + 1
    else:
      return True
  return False

          

二分查找算法具有對數(shù)的時(shí)間復(fù)雜度O(logN)

二分查找算法雖然解決了查找的時(shí)間復(fù)雜度問題,但是對于數(shù)據(jù)的插入和刪除確是O(n)的,因此有沒有一種數(shù)據(jù)結(jié)構(gòu),既可以減少數(shù)據(jù)查找的時(shí)間復(fù)雜度,又可以減少數(shù)據(jù)的插入和刪除的復(fù)雜度呢?

三、二分查找判定樹

除了使用上述兩個(gè)方法進(jìn)行關(guān)鍵字的查找,我們還可以通過二叉樹這種數(shù)據(jù)結(jié)構(gòu)完成關(guān)鍵字的查找。

python中樹與樹的表示知識點(diǎn)總結(jié)_第5張圖片

從上圖可以看出,如果我們需要尋找數(shù)字8,可以通過以下4步實(shí)現(xiàn)(可能看不懂,未來會看得懂):

根節(jié)點(diǎn)6小于8,往6的右子節(jié)點(diǎn)9找結(jié)點(diǎn)9大于8,往9的左子結(jié)點(diǎn)7找結(jié)點(diǎn)7小于8,往7的左子結(jié)點(diǎn)找找到8 判定樹上每個(gè)結(jié)點(diǎn)需要的查找次數(shù)剛好為該結(jié)點(diǎn)所在的層數(shù);查找成功時(shí)查找次數(shù)不會超過判定樹的深度 N個(gè)結(jié)點(diǎn)的判定樹的深度為\([log_2{n}]+1\) \(ASL = (4*4+4*3+2*2+1)/11 = 3\) 四、樹的定義

樹(Tree):\(n(n\geq{0})\)個(gè)結(jié)點(diǎn)構(gòu)成的有限集合。

當(dāng)n=0時(shí),稱為空樹對于任一顆非空樹(n>0),它具備以下性質(zhì): 樹中有一個(gè)稱為根(Root)的特殊結(jié)點(diǎn),用r表示其余結(jié)點(diǎn)可分為m(m>0)個(gè)互不相交的有限集\(T_1,T_2,\cdots,T_m\),其中每個(gè)集合本身又是一棵樹,稱為原來樹的子樹(SubTree)

python中樹與樹的表示知識點(diǎn)總結(jié)_第6張圖片

五、樹與非樹

牢記樹有以下3個(gè)特性:

子樹是不相交的;除了根結(jié)點(diǎn)外,每個(gè)結(jié)點(diǎn)有且僅有一個(gè)父結(jié)點(diǎn);一顆N個(gè)結(jié)點(diǎn)的樹有N-1條邊 5.1 非樹

python中樹與樹的表示知識點(diǎn)總結(jié)_第7張圖片

5.2 樹

python中樹與樹的表示知識點(diǎn)總結(jié)_第8張圖片

六、樹的一些基本術(shù)語

python中樹與樹的表示知識點(diǎn)總結(jié)_第9張圖片

結(jié)點(diǎn)的度(Degree):結(jié)點(diǎn)的子樹個(gè)數(shù)樹的度:樹的所有結(jié)點(diǎn)中最大的度數(shù)葉結(jié)點(diǎn)(Leaf): 度為0的結(jié)點(diǎn)父結(jié)點(diǎn)(Parent):有子樹的結(jié)點(diǎn)是其子樹的根結(jié)點(diǎn)的父結(jié)點(diǎn)子結(jié)點(diǎn)(Child):若A結(jié)點(diǎn)是B結(jié)點(diǎn)的父結(jié)點(diǎn),則稱B結(jié)點(diǎn)是A結(jié)點(diǎn)的子結(jié)點(diǎn);子結(jié)點(diǎn)也稱孩子結(jié)點(diǎn)

兄弟結(jié)點(diǎn)(Sibling):具有同一父結(jié)點(diǎn)的各結(jié)點(diǎn)彼此是兄弟結(jié)點(diǎn)

路徑和路徑長度:從結(jié)點(diǎn)\(n_1\)到\(n_k\)的路徑為一個(gè)結(jié)點(diǎn)序列\(zhòng)(n_1 , n_2 ,\cdots, n_k\) , \(n_i\)是\(n_{i+1}\)的父結(jié)點(diǎn)。路徑所包含邊的個(gè)數(shù)為路徑的長度

祖先結(jié)點(diǎn)(Ancestor):沿樹根到某一結(jié)點(diǎn)路徑上的所有結(jié)點(diǎn)都是這個(gè)結(jié)點(diǎn)的祖先結(jié)點(diǎn)

子孫結(jié)點(diǎn)(Descendant):某一結(jié)點(diǎn)的子樹中的所有結(jié)點(diǎn)是這個(gè)結(jié)點(diǎn)的子孫

結(jié)點(diǎn)的層次(Level):規(guī)定根結(jié)點(diǎn)在1層,其它任一結(jié)點(diǎn)的層數(shù)是其父結(jié)點(diǎn)的層數(shù)加1

樹的深度(Depth):樹中所有結(jié)點(diǎn)中的最大層次是這棵樹的深度

七、樹的表示

7.1 樹的鏈表表示

python中樹與樹的表示知識點(diǎn)總結(jié)_第10張圖片

上圖所示樹的鏈表表示法有很大的缺陷,假設(shè)樹的深度非常大,并且不能保證所有樹的子結(jié)點(diǎn)都有3個(gè),那么會造成很大程度的浪費(fèi)。

7.2 樹的鏈表(兒子-兄弟)表示法

為了解決樹的普通鏈表表示會有空間的浪費(fèi)的缺陷,我們可以把鏈表的指針設(shè)置兩個(gè)鏈接,一個(gè)鏈接指向兒子結(jié)點(diǎn),另一個(gè)鏈接指向兄弟結(jié)點(diǎn),如下圖所示:

python中樹與樹的表示知識點(diǎn)總結(jié)_第11張圖片

上圖所示的樹的表示方法,已經(jīng)足夠完美了,但是如果我們把鏈表表示的樹旋轉(zhuǎn)45°角,會發(fā)現(xiàn)如下圖所示:

python中樹與樹的表示知識點(diǎn)總結(jié)_第12張圖片

經(jīng)過45°角的旋轉(zhuǎn),我們會發(fā)現(xiàn)一顆二叉樹(一個(gè)結(jié)點(diǎn)至多擁有2個(gè)子結(jié)點(diǎn)的樹),也就是說最普通的樹其實(shí)可以通過二叉樹表示,也就是說我們只要把二叉樹研究透了,我們即研究透了樹。

以上就是本次全部相關(guān)知識點(diǎn)內(nèi)容,感謝大家的閱讀和對腳本之家的支持。


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 九九这里有精品 | 久久香蕉精品 | 天堂亚洲国产日韩在线看 | 久久午夜青青草原影院 | 日本波多野结衣字幕久久 | 国产丰满老厨女房乱 | 久久99精品亚洲热综合 | 国产精品久久久免费视频 | 亚洲精品片 | 国产香蕉75在线播放 | 中文国产成人精品久久久 | 激情五月色婷婷丁香伊人 | 青青操夜夜操 | 手机看福利 | 永久免费观看黄网站 | 5252色欧美在线男人的天堂 | a级成人毛片久久 | 精品国产一区二区三区久 | 精品国产一区二区三区2021 | 国产精品久久久尹人香蕉 | 狠狠色丁香婷婷综合最新地址 | 国内精品久久久久久麻豆 | 欧美精品在线看 | 九九九精品在线观看 | 色色色资源站 | 久久中文亚洲国产 | 国产青草视频免费观看97 | 国产成人免费观看 | 国产精品无码久久av | 久久99精品热在线观看15 | 亚洲欧美日韩成人 | 毛片毛片毛片毛片 | 奇米777视频二区中文字幕 | 亚洲波多野结衣日韩在线 | 午夜在线播放免费高清观看 | 黄色在线观看www | 欧美一级α片毛片免费观看 | 桃花综合| 国产亚洲精品网站 | 国产欧美日韩图片一区二区 | 黄色影院在线观看视频 |