1. 程式人生 > >第三章、函式的增長 -- 漸近記號

第三章、函式的增長 -- 漸近記號

漸近記號、函式與執行時間

Θ\Theta記號

對一個給定的函式g(n)g(n),用Θ(g(n))\Theta(g(n))來表示一下函式的集合: Θ(g(n))={f(n):c1c2n0,使nn0,0c1g(n)f(n)c2g(n)} \Theta(g(n))=\{f(n):存在正常量c_1、c_2和n_0,\\ 使得對所有n\geq n_0,有0\leq c_1g(n)\leq f(n)\leq c_2g(n)\}

若存在正常量c

1c_1c2c_2,使得對於足夠大的nn,函式f(n)f(n)能“夾入”c1g(n)c_1g(n)c2g(n)c_2g(n)之間,則f(n)f(n)屬於集合Θ(g(n))\Theta(g(n))。因為Θ(g(n))\Theta(g(n))是一個集合,所以可以記f(n)Θ(g(n))f(n)\in \Theta(g(n)),以指出f(n)f(n)Θ(g(n))\Theta(g(n))的成員,作為替代,我們通常記f(n)=Θ(g(n))f(n)=\Theta(g(n))
以表達相同的概念。

下圖給出了函式f(n)f(n)g(n)g(n)的一幅直觀畫面,其中f(n)=Θ(g(n))f(n)=\Theta(g(n))。對在n0n_0及其右邊nn的所有值,f(n)f(n)的值位於或高於c1g(n)c_1g(n)且位於或低於c2g(n)c_2g(n)。換句話說,對所有nn0n\geq n_0,函式f(n)f(n)在一個常量因子內等於g(n)g(n)。我們稱g(n)g(n)f(n)f(n)的一個漸進緊確界。

圖1

Θ(g(n))\Theta(g(n))

的定義要求每個成員f(n)Θ(g(n))f(n)\in\Theta(g(n))均漸近非負,即當nn足夠大時,f(n)f(n)非負。因此,函式g(n)g(n)本身必為漸近非負,否則集合Θ(g(n))\Theta(g(n))為空。所以我們假設用漸近記號中的函式都漸近非負。

OO記號

Θ\Theta記號漸近地給出一個函式的上界跟下界。當只有一個漸近上界時,使用OO記號。 Θ(g(n))={f(n):cn0,使nn0,0f(n)cg(n)} \Theta(g(n))=\{f(n):存在正常量c和n_0,\\ 使得對所有n\geq n_0,有0\leq f(n)\leq cg(n)\}

Ω\Omega記號

正如OO記號提供了一個函式的漸近上界,Ω\Omega記號提供了漸近下界。 Ω(g(n))={f(n):cn0,使nn0,0cg(n)f(n)} \Omega(g(n))=\{f(n):存在正常量c和n_0,\\ 使得對所有n\geq n_0,有0\leq cg(n)\leq f(n)\}

oo記號

OO記號提供的漸近上界可能是也可能不是漸近緊確的。界2n2=O(n2)2n^2=O(n^2)是一個漸近緊確的,但是界2n=O(n2)2n=O(n^2)卻不是。我們使用oo記號來表示一個非漸近緊確的上界。

o(g(n))={f(n):c>0n0>0,使nn0,0f(n)<cg(n)} o(g(n))=\{f(n):存在正常量c>0,存在常量n_0>0,\\ 使得對所有n\geq n_0,有0\leq f(n)<cg(n)\}

ω\omega記號

使用ω\omega記號來表示一個非漸近緊確的下界。

ω(g(n))={f(n):c>0n0>0,使nn0,0cg(n)<f(n)} \omega(g(n))=\{f(n):存在正常量c>0,存在常量n_0>0,\\ 使得對所有n\geq n_0,有0\leq cg(n)<f(n)\}

漸近記號的性質

傳遞性:

如:f(n)=Θ(g(n))g(n)=Θ(h(n))f(n)=Θ(h(n))f(n)=\Theta(g(n))\ \ \ 且\ \ \ g(n)=\Theta(h(n))\ \ \ 蘊含\ \ \ f(n)=\Theta(h(n))

其他的也具體有此性質。 自反性:

如:f(n)=Θ(f(n))f(n)=\Theta(f(n))

其他的也具體有此性質。 對稱性:

f(n)=Θ(g(n))g(n)=Θ(f(n))f(n)=\Theta(g(n))\ \ 當且僅當\ \ g(n)=\Theta(f(n))

轉置對稱性:

f(n)=O(g(n))g(n)=Ω(f(n))f(n)=o(g(n))g(n)=ω(f(n)) f(n)=O(g(n))\ \ 當且僅當\ \ g(n)=\Omega(f(n)) \\ f(n)=o(g(n))\ \ 當且僅當\ \ g(n)=\omega(f(n))

因為這些性質對漸近記號成立,所以可以在兩個函式ffgg的漸近比較和兩個實數aabb的比較之間做一種類比。 f(n)=O(g(n))abf(n)=Ω(g(n))abf(n)=Θ(g(n))a=bf(n)=o(g(n))a<bf(n)=ω(g(n))a>b \begin{aligned} &f(n) = O(g(n))\ \ 類似於\ \ a\leq b\\ &f(n) = \Omega(g(n))\ \ 類似於\ \ a\geq b\\ &f(n) = \Theta(g(n))\ \ 類似於\ \ a=b\\ &f(n) = o(g(n))\ \ 類似於\ \ a<b\\ &f(n) = \omega(g(n))\ \ 類似於\ \ a>b\\ \end{aligned}

相關推薦

函式增長 -- 記號

漸近記號、函式與執行時間 Θ記號\Theta記號Θ記號 對一個給定的函式g(n)g(n)g(n),用Θ(g(n))\Theta(g(n))Θ(g(n))來表示一下函式的集合: Θ(g(n))={f(n)

函式增長 --標準記號與常用函式

單調性 若m≤nm\leq nm≤n蘊含f(m)≤f(n)f(m)\leq f(n)f(m)≤f(n),則函式f(n)是單調遞增的f(n)是單調遞增的f(n)是單調遞增的。 若m≤nm\leq nm≤n蘊含f(m)≥f(n)f(m)\geq f(n)f(m)≥f

演算法導論 函式增長 筆記(Θ記號O記號Ω記號o記號ω記號記號的性質標準記號與常用函式

Θ記號: 該記號圓圈中是個M。Θ記號漸近地給出一個函式的上界和下界。 對於一個給定的函式g(n),我們用Θ(g(n))來表示以下函式的集合: Θ(g(n))={f(n):存在正常量c1、c2和n0,使得對於所有n⩾n0,有0⩽c1g(n)⩽f(n)⩽c2g(n)}。 即若存在正常

函數編程

合並 ble iss 位置參數 body 函數默認參數 大小寫轉換 復用 getc (一)三元運算 三元運算又稱三目運算,對簡單條件語句的簡寫,如: if 條件成立: val =1 else: val =2 三元運算: v

spring cloud---feign+Hystrix熔斷器

熔斷器 雪崩效應 在微服務架構中通常會有多個服務層呼叫,基礎服務的故障可能會導致級聯故障,進而造成整個系統不可用的情況,這種現象被稱為服務雪崩效應。服務雪崩效應是一種因“服務提供者”的不可用導致“服務消費者”的不可用,並將不可用逐漸放大的過程。 如果下圖所示:A作為服務提供者,B

資料庫設計(物理設計)

Mysql常用儲存引擎 表及欄位命名原則 1.可讀性原則 2.表意性原則 3.長名原則 欄位型別的選擇原則 1.int 2.Datatime 3.char 4.varchar char和varchar如何選擇

Office辦公自動化 excl電子表格處理

1.第三章excl電子表格處理 一、辦公室表格處理軟體: 1.office Excel 2.wps excel 二、excel2010介面組成部分 1.單元格名稱 2.功能選項卡 3.標題欄 4.功能面板 5.編輯區 6.單元格 7.工作表導航按鈕 8.工作表標

選擇結構(一)

T103 周旭 一、if結構 1.使用基本的if選擇結構:    語法:if(){ } 2.使用複雜條件下的if選擇結構: 運用邏輯運算子: (1): &&  與,並且   (2):||  或

OpenCV 3 python (直線和圓檢測)

lines = cv.HoughLinesP( image, rho, theta, threshold[, lines[, minLineLength[, maxLineGap]]] ) 這個api的作用是 lines的輸出是(x1,y1,x2,y2) r

python彈球遊戲 計算分數顯示分數更新難度遊戲結束判斷

設計概要前兩章我們實現了介面、球、木板的建立,並使得球可以相對邊緣彈來彈去,木板可以通過ws,上下鍵來移動,構成了遊戲的基本框架。接下來需要新增函式來實現遊戲的可玩性1、左右板子玩家的分數。通過檢測小球與板子的碰撞來增加玩家的分數,因此需要調節的量:             

ORMLite完全解析()官方文件自定義查詢構造器 Custom Query Builder

          接著上一篇,下面是第三章的翻譯整理,理解錯誤的地方還請批評指正。  第三章、 自定義查詢構造器 3.1  查詢構造器基礎       下面是使用查詢構造器建立自定義查詢語句的基本步驟。首先,以java常量的形式為屬性設定列名,便於使用它 們進行

【集體智慧程式設計】發現群組

一、前言 本章中,我們將學習到如下內容:從各種不同的來源中構造演算法所需的資料;兩種不同的聚類演算法;更多有關距離度量(distance metrics)的知識;簡單的圖形視覺化程式碼,用以觀察所生成的群組;最後,我們還會學習如何將異常複雜的資料集投影到二維空間中。 聚類

DispatcherServlet詳解

3.1、DispatcherServlet作用 DispatcherServlet是前端控制器設計模式的實現,提供Spring Web MVC的集中訪問點,而且負責職責的分派,而且與Spring IoC容器無縫整合,從而可以獲得Spring的所有好處。 具體請參考第二章的圖

Go-內建容器

3.1.陣列 (1)陣列的定義 package main import ( "fmt" ) func main() { //用var定義陣列可以不用賦初值 var arr1 [5]int //[0 0 0 0 0] //用冒號必須指定初值

2018/11/29 演算法時空(2) 演算法導論 函式增長

漸進記號:   O記號:   歐米茄記號: 注意: O記號是複雜度函式的上限, 歐米茄記號是複雜度函式的下限. 等式/不等式漸進記號:  極限的定義: 通過極限的方法, 來求複雜度函式.   當極限的值是一個大於零

python全棧開發中級班全程筆記(第二模組4節 :函式進階

python全棧開發筆記第二模組 第三章4節:函式進階 一、函式進階 1、函式進階--名稱空間   名稱空間,又稱名稱空間,或名字空間,就是存放變數名的地方比如 n = 1 , 1是存在記憶體的,但n 這個名字和繫結關係就儲存在名稱空間   *名稱空間和作用域是有直接關係的,   &nb

字符串向量和數組

5-0 get main 運算符 using else 3.3 stream 一次 3.2 1 #include <iostream> 2 #include <string> 3 4 using std::cin; 5 using s

2017.11.12 字符串向量和數組

bsp 使用 個數 初始 == 一行 位置 hello ostream 3.1 命名空間的using聲明 std::cin 表示從標準輸入中讀取內容。此處使用作用域操作符(::)表示:編譯器從操作符左側名字所示的作用域中尋找右側那個名字。 而使用using聲明是最安全的一種

】字段約束:數據完整性主鍵外鍵非空默認值自增唯一性

索引 記錄 incr efault 主鍵 pri 增長 不可 作用 一、表完整性約束 作用:用於保證數據的完整性和一致性==============================================================約束條件        

Testlink1.9.17使用方法( 初始配置[配置用戶產品] )

admin face alt 項目管理 按鈕 leader 裏程碑 測試計劃 testlink 第三章 初始配置(配置用戶、產品)       一. 設置用戶          QQ交流群:585499566 在TestLink系統中,每個用戶都可以維護自己的私有信息。ad