簡單隨機化

2022-05-16 09:55:52 字數 1010 閱讀 5200

有乙個挺不錯的 隨機化blog

codechef - mstones

平面上有 \(n\) 個點 \((x_i,\ y_i)\) ,保證這 \(n\) 個點可以用 \(7\) 條直線覆蓋。找出一條直線使得它覆蓋的點最多

\(30\) 組 test

\(n\leq10^4;\ |x_i|,\ |y_i|\leq1.5\times10^4\)

每次隨機找兩個點 \(a,\ b\) ,判斷它們所在的直線所覆蓋的點數,找到答案的概率為 \(\frac(k=7)\) ,時間複雜度 \(o(tnk^2)\)

也有乙個確定性演算法:當 \(n時暴力,當 \(n\ge k^2\) 時可以發現題目給定的 \(k\) 條直線點數一定大於等於 \(k\) ,故可以固定乙個點,找到覆蓋它的直線的點數最大值(可以按斜率考慮),若大於等於 \(k\) 則刪掉這些點遞迴,時間複雜度 \(o(tkn\log n)\)

雜題

給定乙個 \(n\times m\) 的矩形,每個點有一種顏色 \(a_\) ,你可以從 \((1,\ 1)\) 出發,每次走到與它四連通的格仔上,問至少經過 \(k\) 種顏色最少需要走多少步

\(n,\ m\leq30;\ k\leq7;\ a_\in[1,\ 1000]\)

每次給每種顏色賦乙個 \([1,\ k]\) 的權值,將原矩形看做只有 \(k\) 種顏色,然後狀壓bfs,每次結果為正確答案的概率為 \(\frac\)

時間複雜度 \(o(tnm2^k)\)

雜題

給定乙個 \(n\times m\) 的矩形,每個位置有乙個權值 \(a_\) 和乙個顏色 \(c_\) ,找乙個四連通塊使得包含了至少 \(k\) 種顏色並且權值和最小

\(n,\ m\leq15;\ k\leq7;\ a_\in[1,\ 10^5]\)

如上隨機化賦值,問題轉化為了求斯坦納樹,時間複雜度 \(o(t(nm3^k+\operatorname(nm,\ nm)2^k))\)

隨機化演算法

隨機化演算法的主要目的是希望讓隨機發生在演算法上,而不是發生在輸入分布上,這樣的話,沒有特別的輸入會引起我們的演算法的最壞情況。即使你最壞的敵人也無法產生最壞的輸入陣列。因為隨機排列使得輸入次序不再相關。只有在隨機數生成器產生乙個不走運的排列時,隨機演算法才會執行得很差。一.隨機優先順序陣列法 我們...

隨機化搜尋

參與考古挖掘的小明得到了乙份藏寶圖,藏寶圖上標出了 nn 個深埋在地下的寶藏屋,也給出了這 nn 個寶藏屋之間可供開發的mm 條道路和它們的長度。小明決心親自前往挖掘所有寶藏屋中的寶藏。但是,每個寶藏屋距離地面都很遠,也就是說,從地面打通一條到某個寶藏屋的道路是很困難的,而開發寶藏屋之間的道路 則相...

隨機化快速排序

define max size 100 include include using namespace std 交換指標p1,p2指向的值 void exchange int p1,int p2 pa為指向a的陣列,p,r為下標,對a p.r 進行就地重排,以a r 為主元 劃分為小於主元和大於主元...