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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

二、【绪论】算法和算法评价

發布時間:2025/3/21 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 二、【绪论】算法和算法评价 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

算法和算法評價


1 算法的基本概念

算法(Algorithm)是對特定問題求解步驟的一種描述,它是指令的有限序列,其中的每條指令表示一個或多個操作。一般具有下列5個重要特性:

  • 有窮性:一個算法必須在執行有窮步之后結束,且每一步都可在有窮時間內完成。
  • 確定性:算法中每條指令必須有確切的含義,對于相同的輸入只能得到相同的輸出。
  • 可行性:算法中描述的操作都可以通過已經實現的基本運算執行有限次來實現。
  • 輸入:一個算法有零個或多個輸入,這些輸入取自于某個特定的對象的集合。
  • 輸出:一個算法有一個或多個輸出,這些輸出是與輸入有著某種特定關系的量。


  • 2 算法效率的度量

    算法效率的度量是通過時間復雜度和空間復雜度來描述的。


    2.1 算法運行時間的估算

    算法執行時間需通過依據該算法編制的程序在計算機上運行時所消耗的時間來度量,而度量一個程序的執行時間通常有兩種方法:

  • 事后統計的方法:先運行一次程序,然后測量算法程序的運行時間。這種方法非常直接,也有一些明顯的缺陷:一是必須先運行一次程序,如果程序運行時間很長,就會消耗大量時間;二是依賴于特定計算機的運行速度,依賴于算法程序實現的質量,依賴于編譯器編譯的效率,有太多的無關因素影響度量標準,因此人們常常采用事前分析估算的方法。
  • 事前分析估算的方法:一個用高級程序語言編寫的程序在計算機上運行時所消耗的時間取決于下列因素:
  • 依據的算法選用何種策略
  • 問題的規模
  • 書寫程序的語言,對于同一個算法,語言越低級,執行效率就越高
  • 編譯程序所產生的機器代碼的質量
  • 機器執行指令的速度

  • 我們可以發現,同一個算法在用不同的語言實現,或者用不同的編譯程序編譯,或者是在不同計算機上運行時,效率都會不同。這說明用絕對的時間來衡量算法的效率是不合適的。我們希望找到一個不依賴與這些無關因素的度量標準。在上述5個條件中拋開與外部環境有關的因素,我們可以認為一個特定算法“運行工作量”的大小,只依賴于問題的規模。

    對于一個規模固定的問題,我們可以嘗試去統計算法每一步操作的執行次數,用這個指標來衡量算法的效率。實際操作后,我們會發現這種做法過于困難,而且常常是沒有必要的。我們應該做的是找出算法中最重要的操作,即所謂的基本操作(Baisc Operation),它們對總運行時間的貢獻最大,然后計算它們的運行次數。根據以上原則,我們就不難發現一個算法中的基本操作往往是算法最內層循環中最費時的操作。例如,大部分排序算法是通過比較待排序的元素和交換元素這兩步來工作的,對于這類算法,比較和交換就是基本操作。再比如,我們想用一個for循環重復累加來計算數列{1,2,3,…,100}\{1, 2, 3, \dots, 100\}{1,2,3,,100}的和,加法運算就是這個算法的基本操作。

    這樣我們就建立起一個分析算法時間效率的框架:對于輸入規模為nnn的算法,統計它的基本操作執行次數,來對其效率進行度量。

    我們約定copc_{op}cop?為特定計算機上一個算法基本操作的執行時間,而C(n)C(n)C(n)是該算法需要執行基本操作的次數。這樣,對運行在特定計算機上的算法程序的運行時間可以用下列公式計算:
    T(n)≈copC(n)T(n) \approx c_{op}C(n) T(n)cop?C(n)


    2.2 算法的最優、最差和平均效率

    我們在上一節提到以算法輸入規模為參數的函數可以合理地度量算法的效率。但是也有許多算法的運行時間不僅取決于輸入的規模,還取決于特定的輸入細節。例如,我們用下列算法來查找一個包含nnn個元素的數組中大小為KKK的元素:

    算法 SequentialSearch(A[0, 1, ..., n-1], K)// 用順序查找在給定的數組中查找給定的值// 輸入:數組A[0, 1, ..., n-1]和查找鍵K// 輸出:返回第一個匹配K的元素的下標,如果沒有匹配元素則返回-1i ← 0while i < n and A[i] ≠ K doi ← i +1if i < n return ielse reurn -1

    假設我們數組中沒有我們要找的元素KKK,或是元素KKK在數組的最后一位,我們就需要遍歷完整個數組;假設數組第一位就是我們要找的元素KKK,那么算法只需要執行一步。 很明顯,對于相同規模的數組,算法的運行時間也會產生很大的差異。

    • 最差效率 (Worst-case Efficiency):指當輸入規模為nnn時算法在最壞情況下的效率。分析算法的最差效率有助于我們了解算法運行時間的上界,換句話說,在任何情況下,算法的運行時間不會超過最壞輸入情況下的運行時間Cworst(n)C_{worst}(n)Cworst?(n)
    • 最優效率 (Best-case Efficiency):指當輸入規模為nnn時算法在最優情況下的效率。最優效率的分析不如最差效率分析重要,但是它也不是毫無用處。有些算法對于一些接近最優輸入的有用輸入類型,也可以獲得類似最優效率的良好性能。因此我們可以對輸入數據進行刻意挑選來獲得算法更好的性能。其次,如果一個算法的最優效率都不能滿足要求,我們就可以立刻放棄對該算法的研究,不必進一步分析。
    • 平均效率 (Average-case Efficiency):無論是最差還是最優效率,都不能體現出在“隨機”情況下算法的效率,因此我們還需要平均效率。

    2.3 漸進符號和基本效率類型

    在上文我們用T(n)T(n)T(n)t(n)t(n)t(n)來表示算法的運行時間,C(n)C(n)C(n)來表示基本操作的次數,現在我們加入g(n)g(n)g(n)來表示和基本操作次數相比較的函數。

    2.3.1 符號OOO

    如果存在大于0的常數ccc和非負的整數n0n_0n0?,使得對于所有的n≥n0n \ge n_0nn0?,有t(n)≤cg(n)t(n) \le cg(n)t(n)cg(n),則說函數t(n)t(n)t(n)包含在O(g(n))O(g(n))O(g(n))中,記作t(n)∈O(g(n))t(n) \in O(g(n))t(n)O(g(n))


    非正式來說,O(g(n))O(g(n))O(g(n))是增長次數小于等于g(n)g(n)g(n)的函數集合,例如,我們可以說100n+5∈O(n2)100n+5 \in O(n^2)100n+5O(n2)


    2.3.2 符號Ω\OmegaΩ

    如果存在大于0的常數ccc和非負的整數n0n_0n0?,使得對于所有的n≥n0n \ge n_0nn0?,有t(n)≥cg(n)t(n) \ge cg(n)t(n)cg(n),則說函數t(n)t(n)t(n)包含在Ω(g(n))\Omega(g(n))Ω(g(n))中,記作t(n)∈Ω(g(n))t(n) \in \Omega(g(n))t(n)Ω(g(n))

    Ω(g(n))\Omega(g(n))Ω(g(n))是增長次數大于等于g(n)g(n)g(n)的函數集合,例如n3∈Ω(n2)n^3 \in \Omega(n^2)n3Ω(n2)


    2.3.3 符號Θ\ThetaΘ

    如果存在大于0的常數c1c_1c1?c2c_2c2?和非負的整數n0n_0n0?,使得對于所有的n≥n0n \ge n_0nn0?,有c2g(n)≤t(n)≤c1g(n)c_2g(n) \le t(n) \le c_1g(n)c2?g(n)t(n)c1?g(n),則說函數t(n)t(n)t(n)包含在Θ(g(n))\Theta(g(n))Θ(g(n))中,記作t(n)∈Θ(g(n))t(n) \in \Theta(g(n))t(n)Θ(g(n))


    Θ(g(n))\Theta(g(n))Θ(g(n))是增長次數等于g(n)g(n)g(n)的函數集合。例如,12n(n?1)∈Θ(n2)\frac{1}{2}n(n-1) \in \Theta(n^2)21?n(n?1)Θ(n2)


    2.3.4 漸進符號的特性

    根據漸進符號的正式定義,我們可以得到下列定理:

    一、加法規則
    如果t1(n)∈O(g1(n))t_1(n) \in O(g_1(n))t1?(n)O(g1?(n))并且t2(n)∈O(g2(n))t_2(n) \in O(g_2(n))t2?(n)O(g2?(n)),則
    t1(n)+t2(n)∈O(maxg1(n),g2(n))t_1(n) +t_2(n) \in O(max{g_1(n), g_2(n)}) t1?(n)+t2?(n)O(maxg1?(n),g2?(n))
    二、乘法規則
    如果t1(n)∈O(g1(n))t_1(n) \in O(g_1(n))t1?(n)O(g1?(n))并且t2(n)∈O(g2(n))t_2(n) \in O(g_2(n))t2?(n)O(g2?(n)),則
    t1(n)×t2(n)∈O(g1(n))×O(g2(n))∈O(g1(n)×g2(n))t_1(n) \times t_2(n) \in O(g_1(n)) \times O(g_2(n)) \in O(g_1(n) \times g_2(n)) t1?(n)×t2?(n)O(g1?(n))×O(g2?(n))O(g1?(n)×g2?(n))
    (對于符號Ω\OmegaΩΘ\ThetaΘ,類似的斷言也成立。)

    這些特性意味著算法的整體效率是由具有較大增長次數的部分所決定的,即它效率較差的那一部分。例如,我們使用下述這個兩部分算法來檢查數組中是否含有相等元素:1. 應用某種已知的排序算法對數組進行排序, 2. 掃描該有序數組,比較相鄰元素是否相等。假設第一部分的比較次數不會超過12n(n?1)\frac{1}{2}n(n-1)21?n(n?1)(屬于O(n2)O(n^2)O(n2)),而算法的第二部分比較次數不超過n?1n-1n?1 (因此屬于O(n)O(n)O(n)),該算法的整體效率應該屬于O(max{n2,n})=O(n2)O(max \{ n^2, n \}) = O(n^2)O(max{n2,n})=O(n2)


    2.4 時間復雜度

    在了解了漸進符號后,我們就可以來定義時間復雜度了。

    一個語句的頻度是指該語句在算法中被重復執行的次數。我們通常將算法中所有語句的頻度之和記為T(n)T(n)T(n),它是該算法問題規模nnn的函數,時間復雜度主要分析T(n)T(n)T(n)的數量級。因為在算法中基本操作的頻度和T(n)T(n)T(n)在同一個數量級,所以我們使用算法中基本操作的頻度f(n)f(n)f(n)來分析算法的時間復雜度:
    T(n)=O(f(n))T(n) = O(f(n)) T(n)=O(f(n))
    沒有特殊說明的情況下,我們說的時間復雜度都是指最差時間復雜度。如果一個算法的時間復雜度T(n)=O(f(n))T(n) = O(f(n))T(n)=O(f(n)),那么我們說該算法的問題規模為nnn,其執行時間和f(n)f(n)f(n)成正比。

    時間復雜度由問題規模nnn和輸入的初始狀態共同決定。

    2.5 空間復雜度

    算法的空間復雜度S(n)S(n)S(n)定義為該算法所耗費的存儲空間,它是問題規模nnn的函數。記為:
    S(n)=O(g(n))S(n) = O(g(n)) S(n)=O(g(n))
    算法原地工作是指算法所需的輔助空間為常量,即O(1)O(1)O(1)



    相關章節

    第一節 【緒論】數據結構的基本概念
    第二節 【緒論】算法和算法評價
    第三節 【線性表】線性表概述
    第四節 【線性表】線性表的順序表示和實現
    第五節 【線性表】線性表的鏈式表示和實現
    第六節 【線性表】雙向鏈表、循環鏈表和靜態鏈表
    第七節 【棧和隊列】棧
    第八節 【棧和隊列】棧的應用
    第九節 【棧和隊列】棧和遞歸
    第十節 【棧和隊列】隊列

    《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

    總結

    以上是生活随笔為你收集整理的二、【绪论】算法和算法评价的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 久久国产精彩视频 | 亚洲成人77777 | 久久网站视频 | 最新91在线 | av激情在线 | 国产精品23p | 亚洲视频在线观看免费视频 | 揉我啊嗯~喷水了h视频 | 黄色大片一级片 | 午夜精品区 | 日韩特级毛片 | 欲涩漫入口免费网站 | 在线精品一区二区 | 久久高潮视频 | a亚洲天堂 | 在线h片| 三级av网| 精品不卡一区二区 | 女女同性女同一区二区三区按摩 | 久久国产成人精品 | 亚洲美女爱爱 | 久久中文免费视频 | 午夜精品久久久久久久无码 | 欧美在线视频二区 | 日本不卡1| 精品一区二区三区精华液 | av网站久久| 国产资源av| 国产黄色免费看 | 欧美视频免费看欧美视频 | ts人妖在线观看 | 中字幕视频在线永久在线观看免费 | 伦理黄色片 | 山村淫强伦寡妇 | 久久综合日本 | 永久视频| 中文字幕一二三四 | 午夜免费福利视频 | 国产精品久久久久久久久久辛辛 | 国产传媒精品 | 波多野结衣视频免费在线观看 | 国产性自拍 | 亚洲在线网站 | 国产夫妇交换聚会群4p | 色欧美88888久久久久久影院 | 免费看黄色一级视频 | 久久免费激情视频 | 2一3sex性hd | 日韩成人在线观看视频 | 最新av在线网站 | 一区二区国产在线观看 | 老熟妇精品一区二区三区 | 亚洲产国偷v产偷v自拍涩爱 | 久久99亚洲精品 | 成长快手短视频在线观看 | 午夜影院久久久 | 阿v天堂2017 欧美小视频在线观看 | 五月天看片 | 日韩欧美国产片 | 在线免费三级 | 亚洲一区二区免费电影 | 欧美视频在线观看一区二区 | 国产乱人乱偷精品视频a人人澡 | 亚洲看 | 国产性色视频 | 国产精品久久久久一区二区 | 亚洲人一区二区三区 | 97干干| 精品国产欧美一区二区三区成人 | 色播五月婷婷 | 成人精品免费网站 | 日本不卡不卡 | 那里可以看毛片 | 欧美深夜福利 | 波多野结衣一区二区三区在线观看 | 国产精品久久久久久一区 | 亚洲AV无码一区二区三区少妇 | 欧美偷拍精品 | 国产伦子伦对白视频 | xxxxwww一片| 日韩性生活视频 | 亚洲国产私拍精品国模在线观看 | 成人夜间视频 | 操碰av | 国产精品www. | 玖草在线视频 | 夜夜精品一区二区无码 | 99日韩精品 | 欧美透逼视频 | 99久免费精品视频在线观78 | xxxxwww一片| 日韩一区二区免费播放 | 国产精品国产精品国产专区蜜臀ah | 丰满人妻一区二区三区免费视频 | 亚洲成人 av | 天天想你在线观看完整版电影高清 | 91传媒入口 | 青娱乐国产在线视频 | 国产福利视频在线观看 |