Enumeration
課堂補充 by TreapKing
Q&A
• 影片都看過了嗎?
• 對於影片的內容有沒有什麼問題?
• 如果是三分搜不懂的話,等等我會再解釋。
題目在說什麼
• 給你一堆二次函數,要請你找出最小值。
• 影片中提到的「超車」到底是什麼意思?
• 函數的圖形長什麼樣子?
題目在說什麼
影片的片段
影片的片段
• Case1: S(a)<S(b)<S(c)<S(d)
影片的片段
• Case2: S(a)>S(b)<S(c)<S(d)
影片的片段
• Case3: S(a)>S(b)>S(c)<S(d)
影片的片段
• Case4: S(a)>S(b)>S(c)>S(d)
影片的片段
• 試著遮掉一些東西看看。
• 只要比較中間兩項的大小就好!
圖解三分搜
圖解三分搜
圖解三分搜
圖解三分搜
水平線
• 有些題目的單調性會是非嚴格遞增,二分搜的時候這並不成問題,
因為二分搜時會是越右(左)邊越好之類的,所以你會知道要往哪 一邊砍。
• 那麼三分搜呢?如果函數圖形有水平線也可以三分搜?
• 答案是不太行。
• 廢話要是可以的話我幹嘛特別提出來。
• 那為什麼不行呢?不太行又是怎麼一回事?
水平線-圖解
水平線-圖解
水平線-圖解
水平線-結論
• 三分搜在有水平線的情況下,如果可以確定水平線的地方一定是 答案的話,才可以用三分搜找極值。
• 否則的話,三分搜有可能會壞掉。
踏實感
• 所以說,哪些函數可以用三分搜找極值?
• 有沒有數學一點的寫法?
• for any (a, b), a<=b, if f(a)≤f(b), arg min f(x)≤b
• 要怎麼用數學表示那種先遞減再遞增的函數?
• 存在 (a, b) 使得 a≤b
• f(x)=f(a) for all x in [a, b]
• f on (-∞, a] 遞減, g on [b, ∞) 遞增
• (嚴格)遞增:對於任意(a, b), 如果a<b,則f(a)<f(b)
影片最後的想一想
影片最後的想一想
• Lotto中,當M=k時,DFS與BFS的空間差距會多大?
• 其實影片裡面有答案
• By二項式定理,ΣMi=0CMi=2M
• M=10時,2M=1024
• M=20時,2M=1048576
影片最後的想一想
• 數獨問題如果跑完所有可能的話,複雜度會是多少?
• 每個位子都可以填1~9,有81個格子。
• 這樣有981≈1.966*1077種可能。
影片最後的想一想
• 假如在暴搜的時候搜索的k層,通常大部分時間會花在哪一層?
• 基本上都會是在第k層。
• 暴搜的狀態樹的節點數通常隨著深度都是指數成長。
• 如果每層都長三倍的話,最後一層的節點數就跟前面所有其他層 加起來的兩倍差不多了。
影片最後的想一想
• 如果有個估價函數,花時間計算估價函數可以減少狀態樹的節點 數,應不應該用呢?
• 這不好說。
• 看題目而定,通常需要試過了才知道會不會變快。
凸函數
• 數學上有一個很類似的定義叫做凸函數(convex function)
• 上下顛倒後就叫凹函數(concave function)
凸函數
• convex set:
• 凸函數一定可以三分搜,可以三分搜不一定是凸函數
凸函數
• 直線應該是凸函數還是凹函數?
• 都是,直線是凸函數也是凹函數
凸函數的一些性質
• 若f(x), g(x)皆為凸函數,則以下的函數皆為凸函數:
1. f’(x) = af(x)+b 2. f’(x) = f(ax+b) 3. f’(x) = f(x)+g(x)
4. f’(x) = max(f(x), g(x))
• 凸函數的區域極小值(local minima)即為全域最小值(global minima)
• f(x)為凸函數 çè -f(x)為凹函數
• 凹函數同理,只差在max變成min
2014 TOI 1! 模考題
• 給你一張無向圖,圖上的每個邊有兩個權重a, b,你要決定一個 神秘數字k,讓圖上的每個邊的花費變成ak+b。
• 問你用哪一個 k 可以讓這張圖的最小生成樹權重和最大?
• n, m <= 100,000
• a, b <= 1,000,000,000
最小生成樹?
• 生成樹:從原圖中挑一些邊把所有點連起來,而且要是一棵樹
• 最小生成樹:所有生成樹中權重和最小的。
• 請情感上相信我有一個
O(ElogE)的方法可以找到 最小生成樹
思考
• 設 T={t1, t2…} 為所有生成樹組成的集合
• cost(t, k)為 t 在神秘數字為k時的權重和 (t為生成樹)
• 題目的要求為找出
• 對於每一顆生成樹 t ,cost(t, k)對於 k 成線性關係
• 所以f(k)在某個位子上為所有cost(t, k)的最小值
• f(k)的函數圖形為許多直線的最小值
• 直線為凹函數èf(k)為凹函數
• 凹函數 è 可以三分搜找最大值!
解法
• 對於 k 做三分搜。
最佳化
• 數學上的「最佳化」指的是找到函數的最低點的過程
• 有許多問題都可以轉成最佳化問題來得到解
• (雖然可以轉成最佳化跟解得出來是兩回事)
• 機器學習的模型訓練過程其實就是最佳化
• 多數是找出一個近似解
• 但可能可以證明可以花O(1/ε)的時間讓誤差小於O(ε)之類的
• 接下來介紹幾個簡單的(不一定有用的)最佳化算法
模擬退火
• 名字好像是因為要模擬金屬降溫的時候分子的移動模式之類的
• 理念簡單明瞭:靠賽(?
• 每一次隨機看一個附近的點
• 如果那裡的函數值比較低就跳過去
• 否則就再換一個點
• 步長可以考慮每次乘0.9,讓他慢慢停到最低點
這東西應該有名字但我忘記了
• 在座標平面上給你 N 個點
• 要你找到一個點(不用是 N 個點的其中一個),
• 使得這個點到那 N 個點的距離盡量小
模擬退火動起來
• 對,這題用模擬退火真的(可能)解得出來
• 可能需要花些時間調步長&收斂速度
梯度下降
• 如果我數學比較好,知道往哪邊走會降最快怎麼辦?
• 我可以每次算個切線斜率,然後往斜率的方向走!
• 高維度情況下,也可以算出類似的東西
• 很多主流的機器學習模型是用這種方法