日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数据结构和算法教程

發(fā)布時(shí)間:2023/12/16 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构和算法教程 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

1.1數(shù)據(jù)結(jié)構(gòu)的研究內(nèi)容

1.2基本概念和術(shù)語

1.2.1數(shù)據(jù),數(shù)據(jù)元素,數(shù)據(jù)項(xiàng),數(shù)據(jù)對象

1.2.2數(shù)據(jù)結(jié)構(gòu)(Data Structure)

1.2.3數(shù)據(jù)類型和抽象數(shù)據(jù)類型

1.3抽象數(shù)據(jù)類型的表示與實(shí)現(xiàn)

1.4算法和算法分析

算法時(shí)間復(fù)雜度的漸進(jìn)表示法

漸進(jìn)空間復(fù)雜度


1.1數(shù)據(jù)結(jié)構(gòu)的研究內(nèi)容

????????通常,用計(jì)算機(jī)解決一個(gè)問題的步驟:具體問題抽象為數(shù)學(xué)模型(實(shí)質(zhì)):分析問題;提取操作對象,找出操作對象之間的關(guān)系;用數(shù)學(xué)語言描述-》稱為數(shù)據(jù)結(jié)構(gòu)。設(shè)計(jì)算法。編程,調(diào)試,運(yùn)行。

????????早期,計(jì)算機(jī)主要用于數(shù)值計(jì)算。隨著計(jì)算機(jī)應(yīng)用領(lǐng)域的擴(kuò)展,計(jì)算機(jī)被越來越多地用于非數(shù)值計(jì)算。

例如1 學(xué)生學(xué)籍管理系統(tǒng)

?操作對象:每位學(xué)生的信息(學(xué)號(hào),姓名,性別,籍貫,專業(yè)....)

操作算法:查詢,插入,修改,刪除等。

操作對象之間的關(guān)系:線性關(guān)系? ? ? ? 數(shù)據(jù)結(jié)構(gòu):線性數(shù)據(jù)結(jié)構(gòu),線性表。

類似的還有圖書管理系統(tǒng),人事管理系統(tǒng),倉庫管理系統(tǒng),通訊錄

操作對象:若干行數(shù)據(jù)記錄

操作算法:查詢,插入,修改,刪除等

操作對象之間的關(guān)系:線性表

數(shù)據(jù)結(jié)構(gòu):線性數(shù)據(jù)結(jié)構(gòu)

?例如2? ? ? ? 人際對弈問題

人輸入棋子:計(jì)算機(jī)進(jìn)行運(yùn)算推算出機(jī)器人下一步的棋局。之所以能對弈:策略已經(jīng)輸入計(jì)算機(jī),可以根據(jù)當(dāng)前棋局來預(yù)測棋局的發(fā)展趨勢,甚至最后結(jié)果

計(jì)算機(jī)的操作對象:各種棋局狀態(tài),即描述棋盤的格局信息

計(jì)算機(jī)的算法:走棋,即選擇一種策略使棋局狀態(tài)發(fā)生變化(由一個(gè)格局派生出另一個(gè)格局)

  • ?文件系統(tǒng)的系統(tǒng)結(jié)構(gòu)圖

磁盤根目錄下有很多子目錄及文件,每個(gè)子目錄里又可以包含子目錄及文件,但每個(gè)子目錄只有一個(gè)父目錄,依次類推

?綜上所述

  • 這些問題的共性都是無法用數(shù)學(xué)的公式或方程來描述,是一些“非數(shù)值計(jì)算”的程序設(shè)計(jì)問題
  • 描述非數(shù)值計(jì)算問題的數(shù)學(xué)類型不是數(shù)學(xué)方程,而是諸如表,樹和圖之類的具有邏輯關(guān)系的數(shù)據(jù)
  • 數(shù)據(jù)結(jié)構(gòu)是一門研究非數(shù)值計(jì)算的程序設(shè)計(jì)中計(jì)算機(jī)的操作對象以及,他們之間的關(guān)系和操作的學(xué)科

1.2基本概念和術(shù)語

1.2.1數(shù)據(jù),數(shù)據(jù)元素,數(shù)據(jù)項(xiàng),數(shù)據(jù)對象

數(shù)據(jù)(data)? ? ? ? 數(shù)據(jù)元素(data element)? ? ?

數(shù)據(jù)項(xiàng)(data item)? ? ? ? 數(shù)據(jù)對象(data object)

?1.數(shù)據(jù)(Data)

  • ? ? ? ? 是能夠輸入計(jì)算機(jī)且能被計(jì)算機(jī)處理的各種符號(hào)的集合
    • 信息的載體
    • 是對客觀事物符號(hào)化的表示
    • 能夠被計(jì)算機(jī)識(shí)別,存儲(chǔ)加工
  • 包括:
    • 數(shù)值型的數(shù)據(jù):整數(shù),實(shí)數(shù)等;
    • 非數(shù)值型的數(shù)據(jù):文字,圖像,圖形,聲音等

2.數(shù)據(jù)元素(Data Element)

  • 數(shù)據(jù)元素
    • 是數(shù)據(jù)的基本單位,在計(jì)算機(jī)程序中通常作為一個(gè)整體進(jìn)行考慮和處理
    • 也簡稱為元素,或稱為記錄,結(jié)點(diǎn)或頂點(diǎn)。
    • 一個(gè)數(shù)據(jù)元素可由若干個(gè)數(shù)據(jù)項(xiàng)組成(Data Item)

3.數(shù)據(jù)項(xiàng)

  • 數(shù)據(jù)項(xiàng)
    • 構(gòu)成數(shù)據(jù)元素的不可分割的最小單位
  • 數(shù)據(jù),數(shù)據(jù)元素,數(shù)據(jù)項(xiàng)三者之間的關(guān)系:
    • 數(shù)據(jù)>數(shù)據(jù)元素>數(shù)據(jù)項(xiàng)
      • 例如:學(xué)生表>個(gè)人記錄>學(xué)號(hào),姓名.....

4.數(shù)據(jù)對象

  • 數(shù)據(jù)對象
    • 是性質(zhì)相同是數(shù)據(jù)元素的集合,十?dāng)?shù)據(jù)的一個(gè)子集
  • 例如:
    • 整數(shù)數(shù)據(jù)對象是集合N={0,1,2,3.....};
    • 字母字符數(shù)據(jù)對象是集合C={‘A’,'B',.....'Z'}
    • 學(xué)籍表也可以看做一個(gè)數(shù)據(jù)對象
    • 數(shù)據(jù)元素-----組成數(shù)據(jù)的基本單位
      • 與數(shù)據(jù)的關(guān)系:是集合的個(gè)體
    • 數(shù)據(jù)對象----性質(zhì)相同的數(shù)據(jù)元素的集合
      • 與數(shù)據(jù)的關(guān)系是:集合的子集

1.2.2數(shù)據(jù)結(jié)構(gòu)(Data Structure)

  • 數(shù)據(jù)結(jié)構(gòu)
    • 數(shù)據(jù)元素不是孤立存在的,他們之間存在著某種關(guān)系,數(shù)據(jù)元素相互之間的關(guān)系稱為結(jié)構(gòu)(Structure)
    • 是指相互之間存在一種或多種特定關(guān)系的數(shù)據(jù)元素的集合
    • 或者說,數(shù)據(jù)結(jié)構(gòu)是帶結(jié)構(gòu)的數(shù)據(jù)元素的集合
  • 數(shù)據(jù)結(jié)構(gòu)包括以下三個(gè)方面的內(nèi)容
  • 數(shù)據(jù)元素之間的邏輯關(guān)系,也稱為邏輯結(jié)構(gòu)
  • 數(shù)據(jù)元素及其關(guān)系在計(jì)算機(jī)內(nèi)存中的表示(又稱為影像),稱為數(shù)據(jù)的物理結(jié)構(gòu)或數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)
  • 數(shù)據(jù)的運(yùn)算和實(shí)現(xiàn),即對數(shù)據(jù)元素可以施加的操作以及這些操作在相應(yīng)的存儲(chǔ)結(jié)構(gòu)上的實(shí)現(xiàn)
    • 邏輯結(jié)構(gòu)
      • 描述數(shù)據(jù)元素之間的邏輯關(guān)系
      • 與數(shù)據(jù)的存儲(chǔ)無關(guān),獨(dú)立于計(jì)算機(jī)
      • 是從具體問題抽象出來的數(shù)學(xué)模型
    • 物理結(jié)構(gòu)(存儲(chǔ)結(jié)構(gòu))
      • 數(shù)據(jù)元素及其關(guān)系在計(jì)算機(jī)存儲(chǔ)器中的結(jié)構(gòu)(存儲(chǔ)方式)
      • 是數(shù)據(jù)結(jié)構(gòu)在計(jì)算機(jī)中的表示
    • 邏輯結(jié)構(gòu)與存儲(chǔ)結(jié)構(gòu)的關(guān)系:
      • 存儲(chǔ)結(jié)構(gòu)是邏輯結(jié)構(gòu)的映像與元素本身的映象
      • 邏輯結(jié)構(gòu)是數(shù)據(jù)結(jié)構(gòu)的抽象,存儲(chǔ)結(jié)構(gòu)是數(shù)據(jù)結(jié)構(gòu)的實(shí)現(xiàn)
      • 兩者綜合起來建立了數(shù)據(jù)元素之間的結(jié)構(gòu)關(guān)系
    • 邏輯結(jié)構(gòu)的種類
      • 劃分方法一
      • (1)線性結(jié)構(gòu):有且僅有一個(gè)開始和終端結(jié)點(diǎn),并且所有結(jié)點(diǎn)都最多只有一個(gè)直接前趨和一個(gè)直接后繼
        • 例如:線性表,棧,隊(duì)列,串
      • (2)非線性結(jié)構(gòu):一個(gè)結(jié)點(diǎn)可能有多個(gè)直接前趨和直接后繼
        • 例如:樹,圖
      • 劃分方法二——四類基本邏輯結(jié)構(gòu)
      • (1)集合結(jié)構(gòu):結(jié)構(gòu)中數(shù)據(jù)元素之間除了同屬于一個(gè)集合的關(guān)系外,無任何其他關(guān)系
      • (2)線性結(jié)構(gòu):結(jié)構(gòu)中數(shù)據(jù)元素之間存在著一對一的線性關(guān)系
      • (3)樹形結(jié)構(gòu):結(jié)構(gòu)中數(shù)據(jù)元素之間存在著一對多的層次關(guān)系
      • (4)圖狀結(jié)構(gòu)網(wǎng)狀結(jié)構(gòu):結(jié)構(gòu)中的數(shù)據(jù)元素之間存在著多對多的任意關(guān)系
    • 四種基本的存儲(chǔ)結(jié)構(gòu)
      • 順序存儲(chǔ)結(jié)構(gòu)
        • 用一組連續(xù)的存儲(chǔ)單元依次存儲(chǔ)數(shù)據(jù)元素,數(shù)據(jù)元素之間的邏輯關(guān)系由元素的存儲(chǔ)位置來表示
        • C語言中用數(shù)組實(shí)現(xiàn)順序存儲(chǔ)結(jié)構(gòu)
      • 鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)
        • 用一組任意的存儲(chǔ)單元存儲(chǔ)數(shù)據(jù)元素,數(shù)據(jù)元素之間的邏輯關(guān)系用指針來表示
        • C語言中用指針(地址)來實(shí)現(xiàn)鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)
      • 索引存儲(chǔ)結(jié)構(gòu)
        • 在存儲(chǔ)結(jié)點(diǎn)信息的同時(shí),還建立附加的索引表
        • 索引表中的每一項(xiàng)稱為一個(gè)索引項(xiàng)
        • 索引項(xiàng)的一般形式是(關(guān)鍵字,地址)
        • 關(guān)鍵字是能唯一標(biāo)識(shí)一個(gè)結(jié)點(diǎn)的那些數(shù)據(jù)項(xiàng)
        • 若每個(gè)結(jié)點(diǎn)在索引表中都有一個(gè)索引項(xiàng),則該索引表稱之為稠密索引(Dense Index)若一組結(jié)點(diǎn)在索引表中只對應(yīng)一個(gè)索引項(xiàng),則該索引表稱為稀疏索引(Sparse Index)
      • 散列存儲(chǔ)結(jié)構(gòu)
        • 根據(jù)結(jié)點(diǎn)的關(guān)鍵字直接計(jì)算出該結(jié)點(diǎn)的存儲(chǔ)地址

    1.2.3數(shù)據(jù)類型和抽象數(shù)據(jù)類型

    • 在使用高級程序設(shè)計(jì)語言編寫程序時(shí),必須對程序中出現(xiàn)的每個(gè)變量,常量或表達(dá)式,明確說明它們所屬的數(shù)據(jù)類型
      • 例如:C語言中:
        • 提供int,char,float,double等基本數(shù)據(jù)類型
        • 數(shù)組,結(jié)構(gòu),共用體,枚舉等構(gòu)造數(shù)據(jù)類型
        • 還有指針,空(void)類型
        • 用戶也可以用typedef 自己定義數(shù)據(jù)類型
    • 一些最基本數(shù)據(jù)結(jié)構(gòu)可以用數(shù)據(jù)類型來實(shí)現(xiàn),如:數(shù)組,字符串等;
    • 而另一些常用的數(shù)據(jù)結(jié)構(gòu),如:棧,隊(duì)列,樹,圖等,不能直接用數(shù)據(jù)結(jié)構(gòu)類型來表示
    • 高級語言中的數(shù)據(jù)類型明顯地或隱含地規(guī)定了在程序執(zhí)行器件變量表達(dá)的所有可能的取值范圍,以及在這些數(shù)值范圍上所允許進(jìn)行的操作
      • 例如:C語言中定義變量i為int 類型,就是表示i是[-min,max]范圍的整數(shù),在這個(gè)整數(shù)集上可以進(jìn)行+,-。,/,%等操作
        • 數(shù)據(jù)類型的作用:1.約束變量或常量的取值范圍2.約束變量或常量的操作
    • 數(shù)據(jù)類型(Data Type)
      • 定義:數(shù)據(jù)類型是一組性質(zhì)相同的值的集合以及定義于這個(gè)值集合上的一組操作的總稱
      • 數(shù)據(jù)類型=值的集合+值集合上的一組操作
    • 抽象數(shù)據(jù)類型(Abstract Data Tpye,ADT)
    • 是指一個(gè)數(shù)學(xué)模型以及定義在此數(shù)學(xué)模型上的一組操作
      • 由用戶定義,從問題抽象出數(shù)據(jù)模型(邏輯結(jié)構(gòu))
      • 還包括定義在數(shù)據(jù)模型上的一組抽象運(yùn)算(相關(guān)操作)
      • 不考慮計(jì)算機(jī)內(nèi)的具體存儲(chǔ)結(jié)構(gòu)與運(yùn)算的具體實(shí)現(xiàn)算法
    • 抽象數(shù)據(jù)類型的形式定義
      • 抽象數(shù)據(jù)類型可用(D S P)三元組表示
      • 其中:D是數(shù)據(jù)對象? ?S是D上關(guān)系集? ? ?P是對D的基本操作集
    • 一個(gè)抽象數(shù)據(jù)類型的定義格式如下:

    ADT? 抽象數(shù)據(jù)類型名{

    ? ? ? ? 數(shù)據(jù)對象:<數(shù)據(jù)對象的定義>

    ? ? ? ? 數(shù)據(jù)關(guān)系:<數(shù)據(jù)關(guān)系的定義>

    ? ? ? ? 基本操作:<基本操作的定義>

    }ADT 抽象數(shù)據(jù)類型名

    其中:

    • 數(shù)據(jù)對象,數(shù)據(jù)關(guān)系的定義用偽代碼描述
    • 基本操作的定義格式為:
      • 基本操作名(參數(shù)表)
      • 初始條件:(初始條件描述)
      • 操作結(jié)果:(操作結(jié)果描述)
    • 基本操作定義格式說明:
      • 參數(shù)表:
        • 賦值參數(shù) 只為操作提供輸入值
        • 引用參數(shù) 以&打頭,除可提供輸入值,還將返回操作結(jié)果
      • 初始條件:描述操作執(zhí)行之前數(shù)據(jù)結(jié)構(gòu)和參數(shù)應(yīng)滿足的條件,若不滿足則操作失敗,并返回相應(yīng)出錯(cuò)信息。若初始條件為空,則省略之
      • 操作結(jié)果:說明操作正常完成之后,數(shù)據(jù)結(jié)構(gòu)的變化狀況和應(yīng)返回的結(jié)果

    ?

    1.3抽象數(shù)據(jù)類型的表示與實(shí)現(xiàn)

    • 抽象數(shù)據(jù)類型可用通過固有的數(shù)據(jù)類型(如整型,實(shí)型,字符型)來表示和實(shí)現(xiàn)
      • 即利用處理器中已經(jīng)存在的數(shù)據(jù)類型來說明新的結(jié)構(gòu),用已經(jīng)實(shí)現(xiàn)的操作作為新的操作

    1.4算法和算法分析

    • 算法的定義
      • 對特定問題求解和步驟的一種描述,他是指令的有限序列,其中每個(gè)指令表示一個(gè)或者多個(gè)操作:簡而言之,算法就是解決問題的方法和步驟
    • 算法的描述
      • 自然語言:英語,中文
      • 流程圖:傳統(tǒng)流程圖,NS流程圖
      • 偽代碼:類語言:類c語言
      • 程序代碼:C語言程序,JAVA語言程序
    • 算法與程序
      • 算法是解決問題的一種或者一個(gè)過程,考慮如何將輸入轉(zhuǎn)換成輸出,一個(gè)問題可以有多種算法
      • 程序是用某種程序設(shè)計(jì)語言對算法的具體實(shí)現(xiàn)
        • 程序=數(shù)據(jù)結(jié)構(gòu)+算法
        • 數(shù)據(jù)結(jié)構(gòu)通過算法實(shí)現(xiàn)操作
        • 算法根據(jù)數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)程序
    • 算法特性:一個(gè)算法必須具備以下五個(gè)重要特性
      • 有窮性:一個(gè)算法必須總是在執(zhí)行有窮步之后結(jié)束,且每一步都在有窮時(shí)間內(nèi)完成
      • 確定性:算法中的每一條指令必須有確切的含義,沒有二義性,在任何條件下,只有唯一的一條執(zhí)行路徑,即對于相同的輸入只能得到相同的輸出
      • 可行性:算法是可執(zhí)行的,算法描述的操作可以通過已經(jīng)實(shí)現(xiàn)的基本操作執(zhí)行有限次來實(shí)現(xiàn)
      • 輸入:一個(gè)算法有零個(gè)或者多個(gè)輸入
      • 輸出:一個(gè)算法有一個(gè)或者多個(gè)輸入
    • 算法設(shè)計(jì)的要求
    • 正確性(Correctness):算法滿足問題要求,能正確解決問題算法轉(zhuǎn)化為程序后要注意:
  • 程序中不含語法錯(cuò)誤
  • 程序?qū)τ?組輸入數(shù)據(jù)能夠得出滿足要求的結(jié)果
  • 程序?qū)τ诰倪x擇的,典型,苛刻且?guī)в械箅y性的機(jī)組輸入數(shù)據(jù)能夠得出滿足要求的結(jié)果
  • 程序?qū)τ谝磺泻戏ǖ妮斎霐?shù)據(jù)都能夠得出滿足要求的結(jié)果? ???
    • 可讀性(Readability)
  • 算法主要是為了人的閱讀和交流,其次才是為了計(jì)算機(jī)執(zhí)行,因此算法應(yīng)該易于人們理解
  • 另一方面,晦澀難懂的算法易于隱藏較多錯(cuò)誤而難以調(diào)試
    • 健壯性(Robustness)
  • 指當(dāng)輸入非法數(shù)據(jù)時(shí),算法恰當(dāng)?shù)淖龀龇磻?yīng)或者進(jìn)行相應(yīng)的處理,而不是產(chǎn)生莫名其妙的輸出結(jié)果
  • 處理出錯(cuò)的方法,不應(yīng)該是中斷程序的執(zhí)行,而是應(yīng)返回一個(gè)表示錯(cuò)誤或錯(cuò)誤性質(zhì)的值,以便在更高的抽象層次上進(jìn)行處理
    • 高效性(Efficiency)
  • 要求花費(fèi)盡量少的時(shí)間和盡量低的存儲(chǔ)要求
  • ?算法效率以下兩個(gè)方面來考慮:

  • 時(shí)間效率:指的是算法所耗費(fèi)的時(shí)間;
  • 空間效率:指的是算法執(zhí)行過程中所耗費(fèi)的存儲(chǔ)空間。
  • 時(shí)間效率和空間效率有時(shí)候是矛盾的
    • 算法時(shí)間效率的度量
      • 算法時(shí)間效率可以用依據(jù)該算法編制的程序在計(jì)算機(jī)上執(zhí)行所消耗的時(shí)間來度量
      • 兩種度量方法
        • 事后統(tǒng)計(jì)
          • 將算法實(shí)現(xiàn),測算其時(shí)間和空間開銷
          • 缺點(diǎn):編寫程序?qū)崿F(xiàn)算法將花費(fèi)較多時(shí)間和精力:所得實(shí)驗(yàn)結(jié)果依賴于計(jì)算機(jī)的軟硬件等環(huán)境因素,掩蓋算法本身的優(yōu)劣
        • 事前分析
          • 對算法所消耗資源的一種估算方法
        • 事前分析方法:
          • 一個(gè)算法的運(yùn)行時(shí)間是指一個(gè)算法在計(jì)算機(jī)上運(yùn)行所耗費(fèi)的時(shí)間大致可以等于計(jì)算機(jī)執(zhí)行一種簡單的操作(如賦值,比較,移動(dòng)等)所需的時(shí)間與算法中進(jìn)行的簡單操作次數(shù)乘積
          • 算法運(yùn)行時(shí)間=一個(gè)簡單操作所需的時(shí)間*簡單那操作次數(shù)
          • 也即算法中每條語句的執(zhí)行時(shí)間之和
          • 算法運(yùn)行時(shí)間=每條語句執(zhí)行次數(shù)*該語句執(zhí)行一次所需要的時(shí)間
          • 算法運(yùn)行時(shí)間=每條語句頻度*該語句執(zhí)行一次所需的時(shí)間

    ?例如:兩個(gè)n*n矩陣相乘的算法可描述為:

    for(i=1;i<=n;i++) //執(zhí)行n+1次for(j=1;j<=n;j++){//n(n+1)次c[i][j]=0;//n*n次for(k=0;k<n;k++)//n*n*(n+1)次c[i][j]=c[i][j]+a[i][k]*b[k][j];//n*n*n次 }

    ?我們把算法所耗費(fèi)的時(shí)間定義為該算法中每條語句的頻度之和,則上述算法的時(shí)間消耗T(n)

    為:T(n)=2n^3+3n^2+2n+1;這是一個(gè)關(guān)于n的函數(shù)

    算法時(shí)間復(fù)雜度的漸進(jìn)表示法

    • 為了便于比較不同算法的時(shí)間效率,我們僅比較它們的數(shù)量級?
      • 例如:兩個(gè)不同的算法,時(shí)間消耗分別是
        • T1(n)=10n^2? ? ? ? T2(n)=5n^3
        • 數(shù)量級越大越不好
    • 若有某個(gè)輔助函數(shù)f(n),使得當(dāng)n趨近于無窮大時(shí),T(n)/f(n)的極限值為不等于零的常數(shù),則稱f(n)是T(n)的同數(shù)量級函數(shù).記作T(n)=O(f(n)).稱O(f(n))為算法的漸進(jìn)時(shí)間復(fù)雜度(O是數(shù)量級的符號(hào)),簡稱時(shí)間復(fù)雜度

    對于求解矩陣相乘問題,算法耗費(fèi)時(shí)間:

    ? ? ? ? T(n)=2n^3+3n^2+2n+1

    ?∞時(shí)候,T(n)/n^32,這表示n充分大時(shí),T(n)與n^3是同階或者同數(shù)量級,引入大"O"記號(hào),則T(n)可記為:T(n)=O(n^3)

    一般情況下,不必計(jì)算所有操作的執(zhí)行次數(shù),而只考慮算法中基本操作執(zhí)行的次數(shù),它是問題規(guī)模n的某個(gè)函數(shù),用T(n)表示。

    ????????算法中基本語句重復(fù)執(zhí)行的次數(shù)問題規(guī)模n的某個(gè)函數(shù)f(n) 算法的時(shí)間度量記作:

    T(n)=O(f(n));

    ? ? ? ? 它表示隨著n的增大,算法執(zhí)行的時(shí)間的增長率和f(n)的增長率相同,稱為漸進(jìn)時(shí)間復(fù)雜度。

    基本語句:?

    • ?算法中重復(fù)執(zhí)行次數(shù)和算法的執(zhí)行時(shí)間成正比的語句
    • 對算法運(yùn)行時(shí)間的貢獻(xiàn)最大
    • 執(zhí)行次數(shù)最多

    問題規(guī)模:

    • n越大算法的執(zhí)行時(shí)間越長
    • 排序:n為記錄數(shù)
    • 矩陣:n為矩陣的階數(shù)
    • 多項(xiàng)式:n為多項(xiàng)式的項(xiàng)數(shù)
    • 集合:n為元素的集合
    • 樹:n為樹的結(jié)點(diǎn)個(gè)數(shù)
    • 圖:n為圖的頂點(diǎn)樹或邊數(shù)

    分析算法時(shí)間復(fù)雜度的基本方法:

    ?

    ?忽略所有低次冪項(xiàng)最高次冪系數(shù),體現(xiàn)出增長率的含義

    1.找出語句頻度最大的那條語句作為基本語句

    2.計(jì)算基本語句的頻度得到問題規(guī)模n的某個(gè)函數(shù)f(n)

    3.取其數(shù)量級用符號(hào)“O”表示

    時(shí)間復(fù)雜度是由嵌套最深層語句的頻度決定的

    例題:

    i=1;

    while(i<=n)

    ????????i=i*2;

    所以時(shí)間復(fù)雜度是O(log2? n)

    ?

    ?請注意:有的情況下,算法中基本操作重復(fù)執(zhí)行的次數(shù)還隨問題的輸入數(shù)據(jù)集不同而不同

    例如:順序查找,在數(shù)組a[i]中查找值等于e的元素,返回其所在位置

    for(i=0;i<n;i++)if(a[i]==e)return i+1;//找到,則返回第幾個(gè)元素return 0;
    • 最好情況:1次
    • 最壞情況:n次
    • 平均·時(shí)間復(fù)雜度為:O(n)
    • 算法時(shí)間復(fù)雜度
    • 最壞時(shí)間復(fù)雜度指在最壞情況下,算法的時(shí)間復(fù)雜度
    • 平均時(shí)間復(fù)雜度:值在所有可能輸入實(shí)例在等概率出現(xiàn)的情況下,算法的期望運(yùn)行時(shí)間
    • 最好時(shí)間復(fù)雜度:指在最好情況下,算法的時(shí)間復(fù)雜度
      • 一般總是考慮在最壞情況下的時(shí)間復(fù)雜度,以保證算法的運(yùn)行時(shí)間不會(huì)比他更長

    ?對于復(fù)雜的算法,可將它分成幾個(gè)容易估算的部分,然后利用大O的加法法則和乘法法則,計(jì)算算法的時(shí)間復(fù)雜度:

    ?算法時(shí)間效率的比較

    • 當(dāng)n取得很大時(shí),指數(shù)時(shí)間算法和多項(xiàng)式時(shí)間算法在所需時(shí)間上非常懸殊

    ?

    ?時(shí)間復(fù)雜度T(n)按數(shù)量級遞增順序?yàn)?#xff1a;

    漸進(jìn)空間復(fù)雜度

    • 空間復(fù)雜度:算法所需存儲(chǔ)空間的度量,記作:S(n)=O(f(n))其中n為問題的規(guī)模(或大小)
    • 算法要占用的空間
      • 算法本身要占據(jù)的空間,輸入/輸出,指令,常數(shù),變量等
      • 算法要使用輔助空間

    ?例題:將一維數(shù)組a中的n個(gè)數(shù)逆序存放到原數(shù)組中

    算法一 for(i=0;i<n/2;i++) {t=a[i];a[i]=a[n-i-1];a[n-i-1]=t; }//S(n)=O(1)稱為常數(shù):原地工作 算法二 for(i=0;i<n;i++) {b[i]=a[n-i-1]; } for(i=0;i<n;i++) {a[i]=b[i]; } //S(n)=O(n)

    總結(jié)

    以上是生活随笔為你收集整理的数据结构和算法教程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 国产有码在线 | 最新自拍偷拍 | 欧美大片视频在线观看 | 夜夜嗨网站 | 亚洲久爱| 三点尽露的大尺度国产 | 91久久精品www人人做人人爽 | 天天爽天天 | 人人澡人人澡人人 | 一区二区三区在线 | 欧美性大战久久久久久久 | 欧美巨乳在线观看 | 狠狠久久 | 你懂的在线播放 | 精品黄色在线观看 | 天天天天干 | 国产精品日韩一区二区 | 91精品免费视频 | 竹菊影视一区二区三区 | 欧美视频亚洲视频 | 久久久777| 一级片在线免费观看视频 | 中文字幕免费 | 国产精品亚洲成在人线 | 精品自拍视频在线观看 | 久久在线视频精品 | 不卡欧美 | 日韩中文第一页 | 欧美人交a欧美精品 | 久久久精品久久久 | 亚欧洲精品视频在线观看 | 播色网| 成品短视频泡芙 | www网站在线免费观看 | 天天色播 | 在线看日本 | 日本特级片 | 国产网址在线观看 | 国产精品久免费的黄网站 | 伊人春色av | 丁香五色月 | 中文字幕在线观看1 | 色婷婷成人网 | 成人免费一级视频 | 粉嫩av一区二区三区四区五区 | 三年中文在线观看中文版 | 国产av无码专区亚洲av | 一区二区不卡视频在线观看 | 欧美色欧美色 | 亚洲日b视频 | 国产精品s色 | 狠狠人妻久久久久久综合 | 欧美三级日本三级 | 欢乐谷在线观看免费播放高清 | 怡红院av亚洲一区二区三区h | 熟妇人妻无码xxx视频 | 国产黄色免费 | 韩国av免费在线 | 国产夜色精品一区二区av | 无码少妇一级AV片在线观看 | 国产日批| 波多野结衣办公室双飞 | www久久久久久久 | 少妇高潮网站 | 亚洲一个色 | 亚洲天堂首页 | 免费视频一区 | 美女久久久久久久久久 | 欧美大黄 | 欧美粗大猛烈老熟妇 | 免费一级a毛片夜夜看 | 日日噜噜夜夜爽爽 | 欧美一区二区三区免费看 | 亚洲无码一区二区三区 | 国产66页 | 男人插入女人下面的视频 | 神马电影久久 | 瑟瑟视频在线观看 | 在线观看你懂的网站 | 今天最新中文字幕mv高清 | 射射色| 884aa四虎影成人精品一区 | 黄色网页免费在线观看 | 关之琳三级做爰 | 成人免费视频免费观看 | xxx老太太| 亚洲欧美日韩电影 | 欧美大胆a视频 | 日韩少妇中文字幕 | av中文字幕第一页 | 粗喘呻吟撞击猛烈疯狂 | 欧美激情一区二区三区在线 | 97超碰福利| 欧美麻豆| 国产亚洲综合精品 | 波多野结衣不卡 | 精品免费在线观看 | 中文字幕精品久久久久人妻红杏ⅰ | 亚洲最大福利视频网 |