高效演算法之時間複雜度介紹

来源:https://www.cnblogs.com/ITXiaoAng/archive/2019/09/13/11515699.html
-Advertisement-
Play Games

上一篇博客已經給大家介紹了一些演算法題,明天剛好是中秋了,這裡祝大家中秋快樂。剛好趕上數學建模了,今天就先介紹與衡量演算法水平的重要指標時間複雜度吧。在時間充裕情況下會更新5+2。之後還會介紹空間複雜度以及python內置函數的時間複雜度。 1.簡介 先看一下什麼是時間複雜度: 衡量代碼的好壞,包括兩個 ...


  上一篇博客已經給大家介紹了一些演算法題,明天剛好是中秋了,這裡祝大家中秋快樂。剛好趕上數學建模了,今天就先介紹與衡量演算法水平的重要指標時間複雜度吧。在時間充裕情況下會更新5+2。之後還會介紹空間複雜度以及python內置函數的時間複雜度。

 

1.簡介

先看一下什麼是時間複雜度:

  衡量代碼的好壞,包括兩個非常重要的指標:

  運行時間占用空間

  代碼的絕對執行時間是無法估計的,但可以預估代碼的基本執行次數。

2.程式中最常見的四種執行方式有

(1)T(n) = kn,執行次數是線性的。

  可以理解為有一個任務,完成全部要達到n,每k個時間完成任務的1/n,則完成全部任務所需要的時間為kn個時間。

(2)T(n) = klog(a)(N),執行次數是對數的。

  可以理解為有一個任務,完成全部要達到n,每k個時間完成任務的1/a,然後下一個時間完成剩下任務的1/a,依次迴圈,則完成全部任務所需要的時間為kloa(a)N個時間。

(3)T(n) = k,執行次數是常量的。

  可以理解為有一個任務,完成全部要達到n,則k個時間完成任務的n,也就是需要k個時間完成所有任務,這個是可以得到代碼的絕對執行時間的,則完成全部任務所需要的時間為k個時間。

(4)T(n) = 0.5n^2 + 0.5n,執行次數是一個多項式。

  可以理解為有一個任務,完成全部要達到n,完成第一個1要1個時間,完成第二個1要2個時間,就是不斷相加,這裡簡化了,則完成全部任務所需要的時間為0.5n^2 + 0.5n個時間。

(5)時間複雜度

但是上面的不同情況的由於演算法不同無法比較,而且有時候根據n的取值比較結果也不同。這時候就有了漸進時間複雜度的概念:

若存在函數 f(n),使得當n趨近於無窮大時,T(n)/ f(n)的極限值為不等於零的常數,則稱 f(n)是T(n)的同數量級函數。

記作 T(n)= O(f(n)),稱O(f(n)) 為演算法的漸進時間複雜度,簡稱時間複雜度,也被稱為大O表示法

(6)時間複雜度的規則

  如果運行時間是常數量級,用常數1表示;

  只保留時間函數中的最高階項

  如果最高階項存在,則省去最高階項前面的繫數

  就是當運行時間不是常數時,省去前面的k繫數。

  一般常見的時間複雜度的比較為:O(1)< O(logn)< O(n)< O(n^2)

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • mutation是更改Vuex的store中的狀態的唯一方法,mutation類似於事件註冊,每個mutation都可以帶兩個參數,如下: state ;當前命名空間對應的state payload ;傳入的參數,一般是一個對象 創建Vuex.Store()倉庫實例時可以通過mutations創建每 ...
  • 【需求:】數據從競品網站爬過來,經過分析處理之後,把結果通過網頁實時反饋給業務人員。 【應用:】2個應用: 一個是爬取數據的應用:不斷從競品網站爬數據,每次爬到的數據為一批。然後,對每一批爬到的數據進行清洗和分析,生成唯一批次號(batch_no),將分析結果持久化入庫。 一個是展示頁面:實時刷新持 ...
  • 單例模式:對於類的單例模式設計,就是採取一定的方法保證在整個軟體系統中,對某個類只能存在一個對象實例,並且該類只提供一個取得其對象實例的方法(靜態方法)。 單例模式有8種方式: 1、餓漢式(靜態常量) // 2、餓漢式(靜態代碼塊) 3、懶漢式(線程不安全) 4、懶漢式(線程安全,同步方法) 5、懶 ...
  • 前言 今天講的是結構型設計模式中的最後一個,這個模式也就是代理模式,在前段時間我寫的一篇關於正向代理和反向代理的文章。雖說此代理非彼代理。但是代理一詞還是具有相似的含義的。這裡我們繼續使用文章中的代購一個例子來講述一下代理模式吧,人不方便去購買哪些物品,這時就有一個中間人,他來購買。他代替我去購買。 ...
  • 1.nfs實現的原理解析? 2.安裝、配置、nfs服務 1.安裝 2.配置 3.根據配置進行初始化環境 4.啟動 5.客戶端測試 6.錯誤的示範 7.多個客戶端共用一個存儲伺服器 (NFS) 8.實現開機自動掛載(因為伺服器不重啟) 擴展瞭解即可 3.nfs相關的配置參數 4.rw 和 ro 2.驗 ...
  • 如何界定爬蟲的合法性,我通過翻閱大量文章、事件、分享、司法案例,總結出界定的三個關鍵點 ...
  • 併發編程 併發(偽):由於執行速度特別快,人感覺不到 並行(真):創建10個人同時操作 線程 1. 單進程,單線程的應用程式 print('666') 2. 到底什麼是線程?什麼是進程 Python自己沒有這玩意,Python中調用的操作系統的線程和進程(偽線程) 3. 多線程 工作的最小單元 共用 ...
  • 一、線程替代方案 1.subprocess (1)完全跳過線程,使用進程 (2)是派生進程的主要替代方案 (3)python2.4後引入 2.multiprocessing (1)使用threading介面派生,使用子進程 (2)允許為多核或者多CPU派生進程,介面很threading非常相似 (3 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...