電腦科學中最重要的演算法是什麼演算法?

時間 2021-05-08 09:08:41

1樓:孫冰

提名乙個在程式設計師實際工作中比較有用,個人認為堪稱屠龍刀的演算法:圖搜尋演算法。已經看到有人提名了搜尋,我稍微寫詳細一點。

這個算法學過資料結構的人都學過,形式非常簡單,如下:

定義 OPEN 和 CLOSE 集合

while OPEN 不為空

x <- 從 OPEN 中取出乙個擴充套件 x 的相關結點加入 OPEN

x 加入 CLOSE

end打完收工。

如果要處理圖、樹結構,或者做迴圈巢狀關係的資料處理,有非常大的概率會用到這個演算法。

這個演算法的好處是乙個演算法相當於一堆演算法,主要取決第三行中怎麼從 OPEN 中取 x。

取深度最深的,就是 DFS;

取深度最淺的,就是 BFS;

根據乙個代價評估函式來選,就是 A 演算法;

代價評估函式設計的牛X,就是 A* 演算法;

將一些沒必要處理的節點從OPEN中刪掉,就是剪枝;

隨便怎麼取,把過程記錄下來,就是拓撲排序;

取到離 CLOSE 中節點的最近的乙個,就是求最小生成樹的 Prim 演算法;

取到離 CLOSE 中節點的最近乙個,中間再調整一下距離值,就是 Dijkstra;

……應該還有,想到再補充。

在我看來,圖搜尋演算法算是乙個分水嶺,實際工作中不需要這個演算法解決的簡單問題,用基本的資料結構加迴圈差不多可以直觀的搞定。而這個演算法搞不定的,大概就需要很燒腦的一些演算法了,至少是動態規劃起步。(當然動態規劃十分的重要而有用,可以看成是倚天劍,需要武功高強方能游刃有餘。

)至於排序、hash之類的演算法,實際工作中都是直接調函式庫的,基本不會再寫一遍。

2樓:

你這個答案就好像在問:「最重要的食物是哪種?」。

什麼時候你能分清楚小麥水稻玉公尺大豆哪個才是最重要的,你也就知道這個題目的答案了。

3樓:tefx

除去排序啊圖啊這些具體演算法,解決乙個問題的基本方法無非:

第一Greedy和分治

第二窮舉、搜尋+剪枝以及A star之類

接著基本方法就是Heuristic

最後的辦法,optimization問題上Meta-heuristic,clustring問題的上SVM啊NN啊之類。。。

基本上電腦科學主要就是這些玩法了。。。

4樓:

個人認為最重要的意思是缺了它計算機/程式就不能跑,這才能符合最重要的定義

缺了hash又不是不能跑

在沒有動態規劃的時候不也能做事嗎

效率低點占用大點還是能用噻

硬要說那些的話,題目改成最偉大的演算法會不會更合理一點?

電腦科學的基礎是什麼

每次上課都是幾百人以上,為什麼你還願意花那麼多錢讀這個專業?本文寫給打算申請電腦科學專業 Computer Science,CS 以及對CS感到好奇,甚至是不知道CS是啥的同學。 發展者老翟 第乙個是離散數學,包含邏輯與計算。可計算性啊,圖靈機什麼的,都在離散數學的框架下。對於大部分計算機應用從業者...

學習電腦科學的順序是什麼?

已登出 程式設計面對的是作業系統,語言,編譯器,標準庫和執行時環境共同提供的抽象和虛擬環境,而不是機器的實際環境。抽象的目的是,遮蔽掉我們不需要或不應該去關心的下層實現 細節,從而讓我們能夠騰出精力去關心真正重要的東西。比如說,當你在C的乙個函式裡面定義int a的時候,不需要去關心這個a分配在記憶...

量子計算機攻擊密碼演算法的原理是什麼?

asdacs 現代密碼基本都是基於某種數學上求解的困難。以最經典的rsa演算法為例,破解rsa演算法只需要將公鑰進行因數分解。但是一般用作公鑰的數都是兩個非常大的素數 上萬位甚至更大 相乘,破解是能破解,但在現在的計算機上耗時非常長,目前還沒有乙個高效率的解決辦法。事實上,對於大多數密碼而言,只要解...