Problem
模擬 Google 的模糊搜尋,使用編輯距離找到相符的前綴單詞數量。
編輯距離的限制小於等於 2。
Sample Input
|
|
Sample Output
|
|
Solution
對於每一個詢問,沒辦法把每一個單字都拿出來嘗試過一次。
建造一個 trie,然後在 trie 上面進行編輯距離的 dp 規則,當搜尋到重覆的結果時,可以立刻返回,由於編輯距離小於等於 2,重複走訪的可能性低很多,因此用一個懶標記,如果前綴已經符合,則下次走訪就沒有必要搜索下去。
|
|
模擬 Google 的模糊搜尋,使用編輯距離找到相符的前綴單詞數量。
編輯距離的限制小於等於 2。
|
|
|
|
對於每一個詢問,沒辦法把每一個單字都拿出來嘗試過一次。
建造一個 trie,然後在 trie 上面進行編輯距離的 dp 規則,當搜尋到重覆的結果時,可以立刻返回,由於編輯距離小於等於 2,重複走訪的可能性低很多,因此用一個懶標記,如果前綴已經符合,則下次走訪就沒有必要搜索下去。
|
|
給摩斯電碼的編碼方式,以及一串沒有切割的主字串,和可能使用的單字集,請問有多少不同的解析方式。
|
|
|
|
這題很明顯地是一道 O(nm)
的動態規劃,dp[i]
表示長度為 i 的解析方法數,藉由 match S[i, j]
轉移成 dp[j] += dp[i]
。
為了加速 match 的速度,先將字典集轉換成摩斯電碼,插入到 trie 中,當要做 match 時,相當於在 trie 走訪,可以高效地降低 O(m)
的嘗試。變成 O(nn)
|
|
給予最多 4 個骰子,修改最少的面,使得每個骰子同構。
|
|
|
|
由於每個骰子有 24 種同構排列,複雜度 O(24^4)
。
將排列對齊後,使用貪心算法,將每一個 column 找到最多相同元素,剩餘的就是最少修改元素。
類似漢明距離的最少修改。順便將之前的代碼重新構造。
|
|
圓桌武士要圍一桌,由於騎士很多,他們彼此憎恨的關係也越來越複雜,梅林被聘請來計劃會議的圓桌位置,騎士們的座位必須符合下列條件,否則將會無法開會。
由於是圓桌,每個騎士都恰好有兩個鄰居,梅林只想知道誰絕對沒有辦法參與圓桌,求出絕對無法參與圓桌會議的騎士個數,並不用最大化圓桌的最大人數。
|
|
|
|
首先,一個簡單的特性,二分圖如果存在環,則保證沒有奇環,因為從 X 集合出去到 Y 集合,再回到 X 集合,保證環的路徑一定經過偶數條邊。同時,存在奇環的圖,一定不是二分圖。
二分圖不存在奇環,存在奇環的圖一定不是二分圖
藉由這個道理,這題還需要點特性,如果這張圖存在奇環,對於一個 BCC (雙向連通元件),則滿足所有點都可以在一個奇環上。有可能一個點同時在奇環或者是偶環。
這個證明也很簡單,BCC 在元件中,定義拿走任一條邊 e(u, v)
,u
和 v
之間仍然存在一條路徑。那麼可以知道對於一個奇環上的點 x
和 y
,以及奇環外一點 u
,若 e(x, u)
存在,則 e(u, y)
也存在,則會產生兩個環,其中一個環一定是奇數。擴散下去,所有在 BCC 元件的點,都會在一個奇環上。
BCC 存在奇環,每一個點都至少在一個奇環上
很久沒寫 BCC,一直以來寫 cut point (關節點) 和 cut edge (bridge) 的機會比較高,都忘了 BCC 的寫法。一張圖,拆成 BCC 時,每一個節點可能存在數個 BCC 元件中。
|
|
配合上一篇巨量資料的學習,利用馬可夫過程找到 Page Rank。
|
|
|
|
然而 Page Rank 計算主要分成兩種,一種是指派所有的 Page Rank 總合為 S,如果加起來不足 S,則把不足的部分平攤給所有節點,這麼一來計算誤差就可以被碾平,但這樣會會因為太多網頁,而導致單一 Rank 過小。
另外一種,則單純倚靠隨機的全局擴散,雖然會有計算誤差,持續做下去一樣會收斂。
為了加快速度,將公式的 $1 - \beta$ 提出,沒有必要將一個稀疏矩陣變成稠密矩陣,如果每一個矩陣元素都加上 $\frac{1 - \beta}{N}$ 會導致整個矩陣不存在非 0 的元素,而事實上 0 的元素是相當多的。這麼一來每次迭代的效率為 $O(E)$,而非 $O(N^{2})$。
|
|
用最少的皇后,覆蓋盤面中所有的 ‘X’。皇后之間的相互攻擊可以忽略不理。
|
|
|
|
直接套 DLX 最小重複覆蓋的模板,但是單純使用會狂 TLE。額外加上初始貪心,找到搜索的第一把剪枝條件,這一個貪心使用每次找盤面上能覆蓋最多 ‘X’ 的位置,進行放置皇后的工作。
|
|
對平面上,每一個點找到最鄰近點的距離,輸出歐幾里得距離的平方即可。
|
|
|
|
計算幾何中的資料結構 KD-tree,雖然不算完美,一開始先進行 random search,先找到基礎的剪枝條件,隨後掛上啟發式進行搜索。
KD-tree 的效能在 D 度空間,區間詢問 (回報區域中的所有點或求區域極值) 的效能約為 O(n^(1-1/d))
。我不會估算找鄰近點對的效能。
|
|
關於 Delaunay triangulation 在此就不說明,由於是 Voronoi Diagram,就可以找到所有相鄰的點。
效能是 O(n log n)
,而平面上的邊為線性 O(n)
,但這種做法必須離線。
|
|
在凸多邊形內部找一最大空白矩形 (平行兩軸)。多邊形頂點數最多 10 萬個。
|
|
|
|
三分內嵌三分再內嵌二分,幾何算法從函數觀點下手的有趣題目。
首先,觀察矩形在 x 軸的情況,觀察矩形左側 left.x,最大空白矩形面積呈現凸性,而在 left.x 下,right.x 分布也呈現凸性。
因此,三分左端點再三分右端點,最後二分查找兩條平行線交凸邊形的兩點,找到空白矩形的面積。
|
|
操作有二種,學習單詞以及給一篇文章,詢問學習單詞出現總次數。
輸入有經過加密,其加密的位移量為上一次詢問答案。
|
|
|
|
如果是靜態,則可以想到 AC 自動機自然可以解決,但是 AC 自動機卻不支持動態建造。
為了滿足操作,可以利用快取記憶體的方式,進行分層,將小台 AC 自動機不斷重新建造,當小台 AC 自動機的節點總數大於某個值時,將其與大台 AC 自動機合併。合併操作必須是線性的,不要去重新插入每一個單詞。
特別小心有重複的單詞出現的小台或者是大台的操作,如果有重複必須忽略。雖然在理論上,分兩層操作的總複雜度高於倍增分層 (2, 4, 6, 8, …),但是實作後,倍增分層一直 TLE。
然而這一題還有一種更困難的作法,詳見劉汝佳那本書,估計是一個動態後綴樹自動機 …
|
|
每一條公車路線都是環狀,要求每一個站只在一條公車路線上,給定站與站之間的連通花費,求公車路線最少為何。
|
|
|
|
看起來先拆點,要求每一個點變成出點跟入點,要求每一個出點都能配對一個入點,這麼一來能保證每一個點都能走出去,進而形成環狀。
那麼這就是一題完美帶權二分匹配判定。
|
|