• 沒有找到結果。

上課補充 by ZCKevinCredit by Howard41436, double Complexity

N/A
N/A
Protected

Academic year: 2022

Share "上課補充 by ZCKevinCredit by Howard41436, double Complexity"

Copied!
33
0
0

加載中.... (立即查看全文)

全文

(1)

Complexity

上課補充 by ZCKevin

Credit by Howard41436, double

(2)

• 影片看了嗎

• Q&A

(3)

今天要學的東西

• 今天的課以理論為主,不太會寫到題目

• 但是對於複雜度的知識絕對是寫程式最重要的一環

• 大家都怎麼算複雜度?

(4)

今天要學的東西

• 今天的課以理論為主,不太會寫到題目

• 但是對於複雜度的知識絕對是寫程式最重要的一環

• 大家都怎麼算複雜度?

(5)

今天要學的東西

• 今天的課以理論為主,不太會寫到題目

• 但是對於複雜度的知識絕對是寫程式最重要的一環

• 大家都怎麼算複雜度?

• “沒有迴圈就是O(1),一層迴圈就是O(n),兩層就O(n2)”

• By Foxconn Specialist

(6)

今天要學的東西

• 今天的課以理論為主,不太會寫到題目

• 但是對於複雜度的知識絕對是寫程式最重要的一環

• 大家都怎麼算複雜度?

• “沒有迴圈就是O(1),一層迴圈就是O(n),兩層就O(n2)”

• By Foxconn Specialist

• 真的是如此嗎?

(7)

複雜度的正確算法

• 數迴圈有幾層的優缺點:

• 優點:大部分的程式我們大概都可以這樣算啦

• 缺點:

• 1.有些操作可能不是O(1)

• 2.無法計算遞迴的時間複雜度

• 3.可能會錯估均攤複雜度

(8)

複雜度的正確算法

• 首先,先來討論複雜度的正確算法

• 正式的數學定義手寫作業有,也會讓大家證一些東西

• 不過在99%的時候,複雜度都這樣算就好了:

• 計算總共需要的操作數,留下量級最大那一項,常數去掉

• ex:O(3n2logn + 2n2 + 4n + logn) = O(n2logn)

(9)

案例1

• 計算a的n次方模109+7:

• Foxconn specialist:

• return a**n % 1000000007

• 沒有迴圈,所以O(1)

• 實測時間

(10)

案例1

(11)

案例1

(12)

案例1

• 事實上,計算a的n次方時,通常是在n很小,或著是在做a或n為 浮點數的運算時,我們才會用內建的 ** 運算,且將複雜度當 作O(1)

• 當計算整數a的n次方時,內建的 ** 運算似乎變成與n成線性 時間,複雜度應為O(n)

• 未來會學到如何將複雜度降為O(logn) (快速冪)

(13)

案例2

• 估算遞迴的複雜度

• gcd(p, q):

if q = 0:

return p else:

return gcd(q, p % q)

• 這種自己呼叫自己的函式,沒有迴圈可以數,複雜度要怎麼算?

(14)

案例2

• 估算遞迴的複雜度

• fib(n):

if n = 1 or 2:

return 1 else:

return fib(n - 1) + fib(n - 2)

• 這種自己呼叫自己的函式,沒有迴圈可以數,複雜度要怎麼算?

(15)

案例3

• 模擬一個stack,有3種操作

• 1. push(x)

• 2. top()

• 3. pop(k) : 連續pop掉k個物品,其中k<=stack的大小

• 執行n次操作的總複雜度是多少?

• 每個操作的時間複雜度是多少?

(16)

案例3

• 模擬一個stack,有3種操作

• 1. push(x)

• 2. top()

• 3. pop(k) : 連續pop掉k個物品,其中k<=stack的大小

• 執行n次操作的總複雜度是多少?O(n*n)=O(n2)?

• 每個操作的時間複雜度是多少?O(1),O(1),O(n)

(17)

案例3

• 模擬一個stack,有3種操作

• 1. push(x)

• 2. top()

• 3. pop(k) : 連續pop掉k個物品,其中k<=stack的大小

• 每個操作的時間複雜度是多少?O(1),O(1),O(n)

• 執行n次操作的總複雜度是多少?O(n*n)=O(n2)?

• pop掉的物品數<=push進的物品數<=n

• 均攤複雜度O(n)

(18)

案例4

• 底下的程式會計算對於所有 1 <= i <= n, i 有幾個因數

(19)

案例4

• 底下的程式會計算對於所有 1 <= i <= n, i 有幾個因數

• 複雜度 O(N log N)

(20)

複雜度的重要性

• 在競賽程式中,複雜度計算通常是為了讓我們判斷這個演算法 寫了會不會TLE

• 我們可以假設機器每秒大概跑 5e8 左右的操作

• 這件事也告訴我們,除非複雜度真的在 5e8 左右,否則演算法 的常數不是很重要,如果複雜度相同挑最好寫的方式寫就好

(21)

計算理論中的複雜度類

• recognizable

• decidable

• nondeterministic polynomial

• polynomial

recognizable

decidable

NP

P

(22)

計算理論中的複雜度類

• recognizable

對於答案是yes的輸入,能夠輸出yes 對於答案是no的輸入,則不一定跑的完

• decidable

• nondeterministic polynomial

• polynomial

recognizable

decidable

NP

P

(23)

計算理論中的複雜度類

• recognizable

• decidable

對於答案是yes的,能輸出yes 對於答案是no的,能輸出no

此複雜度類的問題才有「演算法」

• nondeterministic polynomial

• polynomial

recognizable

decidable

NP

P

(24)

計算理論中的複雜度類

• recognizable

• decidable

• nondeterministic polynomial

常常聽到的NP問題,並不是指非多項式 時間(decidable裡面很多非多項式但 也不是NP的問題)

是指如果我們多給程式一個提示,

就有辦法在多項式時間內得知答案是yes

• polynomial

recognizable

decidable

NP

P

(25)

計算理論中的複雜度類

• recognizable

• decidable

• nondeterministic polynomial

• polynomial

這個就很直觀了,是指能夠在多項式時 間內判斷答案是yes還是no

一般我們能有效率解決的問題都是P問題

recognizable

decidable

NP

P

(26)

P與NP

• 所有P問題都是NP問題

• 我們可能會很想幫NP和P之間的區域取一個 名字,這樣當我們發現一個問題很難,我

可就可以試圖去證明它屬於那個區域

recognizable

decidable

NP

P

(27)

P與NP

• 所有P問題都是NP問題

• 我們可能會很想幫NP和P之間的區域取一個 名字,這樣當我們發現一個問題很難,我

可就可以試圖去證明它屬於那個區域

• 但目前我們不確定那個區域是否存在

• 也就是有可能P=NP

• 於是我們定義NP問題裡最難的那些問題為 NP-Complete,如果有一天確定了P!=NP,那 那些NPC的問題肯定不屬於P

recognizable

decidable

NP

P

(28)

多項式時間複雜度

• 剛剛P和NP都有提到的多項式時間,大家都知道多項式要有一個 變數,那麼題目裡的變數有時候是指個數,有時候是數字範圍,

有時候甚至超過一個變數,多項式時間是指哪個變數的多項式呢

• 印出1+2+...+n:

• 1.使用公式解

• 2.使用暴力法

• 上述哪些是多項式時間演算法,哪些不是呢?

(29)

多項式時間複雜度

• 剛剛P和NP都有提到的多項式時間,大家都知道多項式要有一個 變數,那麼題目裡的變數有時候是指個數,有時候是數字範圍,

有時候甚至超過一個變數,多項式時間是指哪個變數的多項式呢

• A: 輸入總長度(字元數),N,的多項式

• 因此當你的複雜度裡面有代表數字大小而非個數的變數時,其實 不能算是多項式演算法,因為長度為N的輸入可以表示出約10N大 小的數字。

• 這種看似是多項式時間的演算法,我們會稱其為「偽多項式時間」

演算法。在題目有限制數字範圍不會太大時依然很有效率。

(30)

問題時間

• 為什麼我們剛剛都只討論yes/no問題?這樣適用於其他問題 嗎?

(31)

P問題的重要性

• 當我們在歸類一個問題為P問題時,等於不在乎他的複雜度是 O(N2)還是O(N3)之類的,只要是多項式時間就好。

• 這是因為多項式次數的差別可以透過運算速度隨著科技進步的 提升,或是更多更高級的運算資源來突破。但是非多項式時間的 問題我們基本上就是永遠沒辦法有效率的解決。

(32)

P問題的重要性

• 當我們在歸類一個問題為P問題時,等於不在乎他的複雜度是 O(N2)還是O(N3)之類的,只要是多項式時間就好。

• 這是因為多項式次數的差別可以透過運算速度隨著科技進步的 提升,或是更多更高級的運算資源來突破。但是非多項式時間的 問題我們基本上就是永遠沒辦法有效率的解決。

• 存在無法多項式時間解決的問題並不是壞事,這可以製造 computational gap

• 可以用在密碼學中

• 如果P=NP會發生什麼事?

(33)

P=?NP

• If P = NP, then the world would be a profoundly different place than we usually assume it to be.

There would be no special value in "creative leaps," no fundamental gap between solving a problem and recognizing the solution once it's found. Everyone who could appreciate a symphony would be Mozart; everyone who could follow a

step-by-step argument would be Gauss; everyone who could recognize a good investment strategy would be Warren Buffett.

參考文獻

相關文件

Because both sets R m  and L h i ði ¼ 1; 2; :::; JÞÞ are second-order regular, similar to [19, Theorem 3.86], we state in the following theorem that there is no gap between

Optim. Humes, The symmetric eigenvalue complementarity problem, Math. Rohn, An algorithm for solving the absolute value equation, Eletron. Seeger and Torki, On eigenvalues induced by

It represents a universally applicable attitude and skill set everyone, not just computer scientists, would be eager to learn and

• 當我們在歸類一個問題為 問題時,等於不在乎他的複雜度是 還是 之類的,只要是多項式時間就好。.

Sunya, the Nothingness in Buddhism, is a being absolutely non-linguistic; so the difference between the two &#34;satyas&#34; is in fact the dif- ference between the linguistic and

課堂補充 by TreapKing modified

There are a number of talented and experienced students, like Dexter Chua and Au Ting Fai who participated in the Creative Problem Solving Competition last year. They got

Attractions, no matter physical or cultural, are the main pull factor of tourist flow. Without these attractions, there would be no need for other tourist