有哪些充滿暴力美學的數據結構或演算法?
「圓周率(Pi)壓縮法」:
這個演算法常被用來開壓縮演算法的玩笑 —— 但不止是玩笑而已,理論上確實管用。方法是你把想要的壓縮文件二進位化,然後在二進位化的 Pi 序列里找這段數據。由於 Pi 是無限不循環小數,所以任何你所選擇的二進位數據最終都會在Pi里被找。這是個瘋狂的但是尚未被徹底推翻的理論上可行的演算法。但是如果我們只是要對單個文件進行壓縮,而不是多個,這個方法一定管用。
於是你只需要標記 Pi 的起始位置和你文件的大小,壓縮過程就愉快地完成了。這可以把任意的文件壓縮到非常小的地步,而且可能會用掉你海量的時間來找到對應的二進位串,完全是拼人品的演算法。
不過,理論上,如果你人品不夠,找到的數據位於非常遙遠的地方,那用這逗比演算法得到的壓縮包也可能會非常大。但是最近有一些逗比孩子對此還發表了論文,指出你可能得到比你要壓縮的數據還大的壓縮包。github 上就有一個這樣的玩意兒叫 PIFS(Pi文件系統),這個開源項目聲稱不管怎麼說, 100% 的壓縮率在數學上是不可能的。
不過,Pi 壓縮演算法的確能把一些數據壓縮的很小很小。在一些案例文件中,它能完成你想要任何壓縮率。
來自: http://i.jandan.net/2014/06/15/quora-most-compressed.html最簡單暴力演算法那不就是二分法么。。
簡單到啥程度就不必說了,大部分上知乎的十秒內理解原理無壓力。
暴力到啥程度? 連超越方程都能搞定好么。。我就不說平時在工作中,遇到個方程,懶得想就直接上excel二分法搞定了。
其他各位提到的演算法比起二分法,都太高大上了。Splay啟發式合併
名字非常高大上,但是實際上就是在合併Splay時把小的樹插入大的樹中。
效率卻是O(nlgn)的。流體方程,納維爾-斯托克斯方程的直接數值模擬方法,老毛子提出的思路。針對湍流現象的。你不是多尺度么?你不是非線性么?你不是混沌么?沒問題,我把你所有尺度都解出來。計算量大到嚇得我都泰勒展開了。
再說一個,氣體元胞自動機。早先電腦CPU處理邏輯運算速度要遠速度大於處理浮點運算。當時搞cfd的一個科學怪人和編程怪人弄出來了一種演算法,直接用離散的網格上的粒子碰撞來模擬流體現象,你別說,效果還不錯。據說在70年代剛出來那會兒還上過華盛頓郵報。而且這玩意兒演算法特別簡單,簡單到可以很容易給這個演算法流一個晶元讓它硬體算。缺點就是離散還需要平均這一步,綜合起來效率就不高了。再就是有時算不準,尤其是可壓流體。那些數學裡的演算法也是充滿暴力美學的好吧。
1、矩陣分析——矩陣函數轉換演算法:任意一個f(x)在矩陣A的影譜上有定義,都可以轉化為一個多項式函數p(x),s.t. f(A)=p(A);這個轉換多麼暴力,多麼有美感。。。2、近世代數——利用同態基本定理構造同構的演算法(1)f是G到G的滿同態,則(同構的意思,知乎沒有同構符號)(2)G是一個群,N是G的正規子群,若H是G的子群(3)若H是G的正規子群這三個是抽象的定理啊!!! 也就是對於所有滿足條件的群都TM可以構造這樣的同構啊啊!你不覺得很美么。。。
3、數論——米勒拉賓大素數測試演算法費馬小定理的應用,再大的素數在這個測試演算法面前都可以證明啊,雖然證明不是充分必要的,但反反覆復的測試就有97%以上的正確率啊!!數學中充滿暴力美感的演算法也是有很多的!少年們一起來舉例吧!我覺得 TCP/IP 中的 IP 協議使用 Dijkstra 方法就挺簡單粗暴的。
具體演算法實現就是每個埠都是一個獨立的節點,這個節點一開始是不知道整體的拓撲結構的,然後通過不停地發送自己和相鄰節點的連接信息給所有相鄰節點,相鄰節點再轉發,這樣一步步地更新,最後每個節點中都存儲了整個網路的拓撲信息,再使用 Dijkstra 演算法尋路,從而知道了怎樣給一個給定伺服器發送信息最高效。
缺點就是不能用在太大的網路結構上,因為一來最終每個節點裡存儲的拓撲信息會很大,二來為了維持每個節點都知曉最新的拓撲結構,每個節點都要不停地發送信息包……三來每個節點都要重複運行 Dijkstra,拓撲情況一有更新就要運行 Dijkstra。erlang的fastfail速錯演算法。只要出問題了立馬去死,然後滿血復活重來一遍。還有乙太網碰撞檢測。兩個都是無招勝有招
難道不是動態規劃這種高級枚舉嗎。。
分塊,莫隊,塊狀鏈表彈飛綿羊和糖果公園的演算法剛見到的時候簡直驚艷。王悅同的集訓隊論文看著也覺得非常有趣。
Knuth的simpath數據結構精巧的不要不要的效果屌炸天…
北京賽區熱身賽的第一題和最後一題:第一題:找出這份題目中有多少個「ACM"最後一題:給一段C語言代碼,問你能否停機(下面提示樣例最多只有三段)以上開開玩笑。。。充滿暴力美學的數據結構或演算法,只想得到Knuth提出的跳舞鏈(Dancing Link) 和與之對應的 Dancing Link X 演算法吧!
剛在另外一邊寫完突然想起這個問題
為什麼總有一個人能傲嬌地卡進時限,而我們用同樣的演算法交了十遍
time limit exceededtime limit exceededtime limit exceeded......後來得到真傳
for i to k 每次i+4
{a1=a[i]a2=a[i+1]a3=a[i+2]a4=a[i+3]sum=sum+a1+a2+a3+a4}//處理膜4多餘的部分這段代碼可以比一個一個加快一倍
原理據說涉及現代cpu的猜測『命中』鏈接:有哪些看起來很高端的技術其實原理很暴力很初級? - 陳泓仰的回答 - 知乎猴子排序
為什麼我覺得KMP挺簡單暴力的?!
霍夫變換。暴力窮舉所有可能存在的直線來找出圖片里的直線。
蒙特卡洛廚子炒一切…
必須DNN啊, 一言不合就上GPU
遺傳演算法,退火演算法這類進化演算法。
四色定理證明。
神經網路深度學習。遺傳演算法
記憶化搜索。。。秒殺眾多動態規劃。。,不過遇到狀態壓縮 必死
SleepSort
各種群體智能演算法
遺傳演算法?
================
看下面有人說猴子排序,我倒也想起一個來,豬排序,哦,不對,是珠排序,時間複雜度o(1),perfect有沒有!暴力美學!字元串匹配絕對算暴力求解了吧(非KMP),圖的遍歷也是通過遞歸遍歷的也算暴力求解了吧~排序中的暴力求解一定不是時間複雜度最低的…反而是交換與比較次數最多的選擇排序…多暴力啊~
推薦閱讀:
※如何在第一次天池比賽中進入Top 5%(一)
※數據挖掘系列篇(18):走進Facebook公司內部,動態消息演算法揭秘
※模型優化不得不思考的幾個問題
※監督學習中各演算法優缺點及應用場景概覽
※哪種隨機數生成演算法最適合遊戲使用?