有哪些充滿暴力美學的數據結構或演算法?

「圓周率(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的滿同態,則

G/Ker(f)simeq G(同構的意思,知乎沒有同構符號)

(2)G是一個群,N是G的正規子群,若H是G的子群

H/(Hcap N)simeq (HN)/N

(3)若H是G的正規子群

(G/N)/(H/N)simeq G/H

這三個是抽象的定理啊!!! 也就是對於所有滿足條件的群都TM可以構造這樣的同構啊啊!你不覺得很美么。。。

3、數論——米勒拉賓大素數測試演算法

費馬小定理的應用,再大的素數在這個測試演算法面前都可以證明啊,雖然證明不是充分必要的,但反反覆復的測試就有97%以上的正確率啊!!

數學中充滿暴力美感的演算法也是有很多的!少年們一起來舉例吧!


我覺得 TCP/IP 中的 IP 協議使用 Dijkstra 方法就挺簡單粗暴的。

具體演算法實現就是每個埠都是一個獨立的節點,這個節點一開始是不知道整體的拓撲結構的,然後通過不停地發送自己和相鄰節點的連接信息給所有相鄰節點,相鄰節點再轉發,這樣一步步地更新,最後每個節點中都存儲了整個網路的拓撲信息,再使用 Dijkstra 演算法尋路,從而知道了怎樣給一個給定伺服器發送信息最高效。

缺點就是不能用在太大的網路結構上,因為一來最終每個節點裡存儲的拓撲信息會很大,二來為了維持每個節點都知曉最新的拓撲結構,每個節點都要不停地發送信息包……三來每個節點都要重複運行 Dijkstra,拓撲情況一有更新就要運行 Dijkstra。


erlang的fastfail速錯演算法。只要出問題了立馬去死,然後滿血復活重來一遍。還有乙太網碰撞檢測。兩個都是無招勝有招


難道不是動態規劃這種高級枚舉嗎。。


分塊,莫隊,塊狀鏈表

彈飛綿羊和糖果公園的演算法剛見到的時候簡直驚艷。

王悅同的集訓隊論文看著也覺得非常有趣。


Knuth的simpath

數據結構精巧的不要不要的

效果屌炸天…


北京賽區熱身賽的第一題和最後一題:

第一題:找出這份題目中有多少個「ACM"

最後一題:給一段C語言代碼,問你能否停機(下面提示樣例最多只有三段)

以上開開玩笑。。。

充滿暴力美學的數據結構或演算法,只想得到

Knuth提出的跳舞鏈(Dancing Link) 和與之對應的 Dancing Link X 演算法吧!


剛在另外一邊寫完突然想起這個問題

為什麼總有一個人能傲嬌地卡進時限,而我們用同樣的演算法交了十遍

time limit exceeded

time limit exceeded

time 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公司內部,動態消息演算法揭秘
模型優化不得不思考的幾個問題
監督學習中各演算法優缺點及應用場景概覽
哪種隨機數生成演算法最適合遊戲使用?

TAG:演算法 | 數據結構 | 演算法與數據結構 | 暴力美學 |

分頁阅读: 1 2