• 沒有找到結果。

課堂補充 by TreapKingmodified by baluteshih Enumeration

N/A
N/A
Protected

Academic year: 2022

Share "課堂補充 by TreapKingmodified by baluteshih Enumeration"

Copied!
53
0
0

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

全文

(1)

Enumeration

課堂補充 by TreapKing

modified by baluteshih

(2)

Q&A

• 影片都看過了嗎?

• 對於影片的內容有沒有什麼問題?

• 如果是三分搜不懂的話,等等我會再解釋。

(3)

二分搜的使用關鍵

• 影片中提到了一些二分法的例子

• 有單調性,就能二分

• 啊單調性到底是什麼?

(4)

二分搜的使用關鍵

• 看看下面的這串序列

000000000011111111111111

• 請你告訴我0跟1的分界點在哪?

• 當然不是跑迴圈搜,想像序列的長度可能超級長

• 你每次只能問我某個位置是0還是1

• 這就是可以使用二分搜的時機

• 戳到1,右邊肯定都不是答案

• 戳到0,左邊肯定都不是答案

(5)

二分搜的使用關鍵

• 丟雞蛋問題

• 假設我們有一個函數叫 is_borken(x)

• 如果x這層樓丟下去雞蛋會破,那函式回傳1

• 反之回傳0

• 我們要找到蛋最高在哪層樓不會破

0跟1的分界點!

• 二分搜!

(6)

二分搜的使用關鍵

• 田忌賽馬

• 假設我們有一個函式叫 can_win(x)

• 如果訓練x天可以贏,函式回傳1

• 反之回傳0

• 我們要找到最少訓練幾天可以贏

0跟1的分界點!

• 二分搜!

(7)

二分搜的使用關鍵

• 所以二分搜時,總是會有一個只回傳0跟1的函式f(x)

• 存在一個分界,在分界處以上皆回傳1,以下皆回傳0

• 只要f(x)計算的夠快,就可以多花一個log找到分界處!

• 可是在程式上要怎麼寫呢?

• 接下來我會給三種做法

• 可以的話回答我,他們分別最後回傳的是分界處的0,還是分界處的1

(8)

二分搜的寫法

• 寫法一:左閉右閉

• 維護「答案可能的區間」

(9)

二分搜的寫法

• 寫法二:左閉右開

• 維護「答案可能的區間 + 一個不可能是答案的邊界」

(10)

二分搜的寫法

• 寫法三:位元枚舉

• 直接用二進位找到答案

• 適用的狀況比較少,但基於他搜尋的方法有可能在某些題目會出 現優勢

(11)

題目在說什麼

• 給你一堆二次函數,要請你找出最小值。

• 影片中提到的「超車」到底是什麼意思?

• 函數的圖形長什麼樣子?

(12)

題目在說什麼

(13)

影片的片段

(14)

影片的片段

• Case1: S(a)<S(b)<S(c)<S(d)

(15)

影片的片段

Case2: S(a)>S(b)<S(c)<S(d)

(16)

影片的片段

Case3: S(a)>S(b)>S(c)<S(d)

(17)

影片的片段

Case2: S(a)>S(b)>S(c)>S(d)

(18)

影片的片段

• 試著遮掉一些東西看看。

• 只要比較中間兩項的大小就好!

(19)

圖解三分搜

(20)

圖解三分搜

(21)

圖解三分搜

(22)

圖解三分搜

(23)

水平線

• 有些題目的單調性會是非嚴格遞增,二分搜的時候這並不成問題

,因為二分搜時會是越右(左)邊越好之類的,所以你會知道要往 哪一邊砍。

• 那麼三分搜呢?如果函數圖形有水平線也可以三分搜?

• 答案是不太行。

• 廢話要是可以的話我幹嘛特別提出來。

• 那為什麼不行呢?不太行又是怎麼一回事?

(24)

水平線-圖解

(25)

水平線-圖解

(26)

水平線-圖解

(27)

水平線-結論

• 三分搜在有水平線的情況下,必須確保水平線的地方一定是答案 才可以用三分搜找極值。

• 否則的話,三分搜會壞掉。

(28)

整數三分搜

• 如果今天我們要三分搜的點全是整數會發生什麼事?

• 注意到「決策點有限」

(29)

整數三分搜

(30)

整數三分搜

(31)

整數三分搜

• 整數三分搜可以被轉換成二分搜!

• 類似於「微分」的概念,詢問mid跟mid+1來比大小,再選擇要拋棄 哪邊就好了

(32)

例題:最小包覆圓的限制情況

• 給你二維平面上的N個點,問你包覆所有點的最小圓半徑是多少?

• 特殊限制:這個包覆圓必須恰與x軸交一點

• N<=10^5

• |座標範圍|<=10^7

• 保證沒有點的y座標是0

(33)

例題:最小包覆圓的限制情況

• 同時有y>0跟y<0的點出現的話,肯定無解

• 如果全部的y<0,那我們可以把全部的y取相反數之後做y>0的情 況

• 所以接下來我們假設所有的y>0

(34)

例題:最小包覆圓的限制情況

• 有什麼東西是我們可以枚舉的?

(35)

例題:最小包覆圓的限制情況

• 有什麼東西是我們可以枚舉的?

(36)

例題:最小包覆圓的限制情況

• 有什麼東西是我們可以枚舉的?

• 圓心的x座標!

(37)

例題:最小包覆圓的限制情況

• 倘若我們枚舉到圓心的x座標必須要在p……

• 圓心越高,可以包到的點就越多!

• 好像可以再二分搜圓心的高度...?

• 當然不用這麼麻煩

(38)

例題:最小包覆圓的限制情況

• 倘若我們枚舉到圓心的x座標必須要在p……

• 對於一個點(x,y),如果圓心的x座標在p,那圓心至少要多高才可 以蓋到他?

(39)

例題:最小包覆圓的限制情況

• 倘若我們枚舉到圓心的x座標必須要在p……

• 對於一個點(x,y),如果圓心的x座標在p,那圓心至少要多高才可 以蓋到他?

• .

• r只要超過某個值

• 就可以蓋到他!

(40)

例題:最小包覆圓的限制情況

• 所以我們只需對於每個點,求出最小可以蓋到他的r

• 最後取max,就是圓心在p的答案了

• 可是可能的圓心x座標有很多種啊?

• 看看我們取max的那些r:

(41)

例題:最小包覆圓的限制情況

• 所以我們只需對於每個點,求出最小可以蓋到他的r

• 最後取max,就是圓心在p的答案了

• 可是可能的圓心x座標有很多種啊?

• 看看我們取max的那些r:

• .

(42)

例題:最小包覆圓的限制情況

• 所以我們只需對於每個點,求出最小可以蓋到他的r

• 最後取max,就是圓心在p的答案了

• 可是可能的圓心x座標有很多種啊?

• 看看我們取max的那些r:

• .

• 看起來像是二次函數

(43)

例題:最小包覆圓的限制情況

• 所以我們只需對於每個點,求出最小可以蓋到他的r

• 最後取max,就是圓心在p的答案了

• 可是可能的圓心x座標有很多種啊?

• 看看我們取max的那些r:

• .

• 看起來像是二次函數

• 那我們不就是在求一群二次函數的max嗎?

(44)

例題:最小包覆圓的限制情況

• 對於每個p,都會對應到一群二次函數的max

• 三分搜!

• O(NlogC)

(45)

例題:最小包覆圓的限制情況

• 有什麼東西是我們可以枚舉的?

• 半徑!

(46)

例題:最小包覆圓的限制情況

• 不妨看看,我們有沒有辦法用半徑r的圓蓋住所有點

• 如果確定了r,表示圓心的y座標已經確定了

• 所以我們需要找到符合的x座標

• 對於一個點(x,y),有哪些x座標可以把圓心擺在上面蓋住他呢?

(47)

例題:最小包覆圓的限制情況

• 對於一個點(x,y),有哪些x座標可以把圓心擺在上面蓋住他呢?

• 可以發現是一個區間!(右下圖的L~R)

(48)

例題:最小包覆圓的限制情況

• 既然對於每個點我們都能算出一個合法區間

• 那最後只要看這些區間有沒有交集就行了

• 可是要枚舉的半徑有無限多種,該怎麼辦?

• 看起來半徑是否合法存在著單調性

• 二分搜!

• O(NlogC)

(49)

影片最後的想一想

(50)

影片最後的想一想

• Lotto中,當M=k時,DFS與BFS的空間差距會多大?

• 其實影片裡面有答案

• By二項式定理,ΣMi=0CMi=2M

• M=10時,2M=1024

• M=20時,2M=1048576

(51)

影片最後的想一想

• 數獨問題如果跑完所有可能的話,複雜度會是多少?

• 每個位子都可以填1~9,有81個格子。

• 這樣有981≈1.966*1077種可能。

(52)

影片最後的想一想

• 假如在暴搜的時候搜索的k層,通常大部分時間會花在哪一層?

• 基本上都會是在第k層。

• 暴搜的狀態樹的節點數通常隨著深度都是指數成長。

• 如果每層都長三倍的話,最後一層的節點數就跟前面所有其他層 加起來的兩倍差不多了。

(53)

影片最後的想一想

• 如果有個估價函數,花時間計算估價函數可以減少狀態樹的節點 數,應不應該用呢?

• 這不好說。

• 看題目而定,通常需要試過了才知道會不會變快。

參考文獻

相關文件

There would be no special value in &#34;creative leaps,&#34; no fundamental gap between solving a problem and recognizing the solution once it's found. Everyone who could

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

DP3 inclass.

• 數學上有一個很類似的定義叫做凸函數 (convex function). • 上下顛倒後就叫凹函數

•  三分搜在有水平線的情況下,如果可以確定水平線的地方一定是 答案的話,才可以用三分搜找極值。..

課堂補充 by

課堂補充 by qazwsxedcrfvtg14...

Show that the requirement in the definition of uniform continuity can be rephrased as follows, in terms of diameters of sets: To every  &gt; 0 there exists a δ &gt; 0 such that