前言
其實我一直想寫一篇揭秘演算法的文章,因為,據我所見,大多數寫演算法的軟體工程師,其實,就是普通程式設計師,並非高人一等。
但我一直不知道從何下手,今天姑且嘗試著亂寫一點。
最唬人的高大上
演算法最唬人的東西莫過於公式了。
而公式中最唬人的摸過於∑了;這個符號叫sigma,如下圖:
舉個例子:
某公司開會討論專案功能實現,與會人員有:乙個專案經理,三個a組成員,三個b組成員和乙個演算法工程師。
然後,討論著,討論著,就遇到了乙個爭議功能。
a組成員認為該功能應該迴圈來處理,b組成員認為應該使用遞迴來處理,雙方爭議不下。
此時,專案經理為了擱置爭議,共同開發。。。然後,請演算法工程師發表意見。
演算法工程師走到黑板,刷刷刷寫下了上圖的公式。。。然後開始了表演。。。呃,是講解。
「我們這個功能,我覺使用這個公式來實現最好,這個ki乘以mi,然後我們求一下和,巴拉巴拉。。。」
然後,a組b組成員就都蒙了,因為他們看不懂,也沒聽懂。因為程式設計師的特質是嚴謹,所以一旦遇到不懂的事情,他們通常是不發表意見的。
然後,在這小小的會議室中,演算法工程師的形象就瞬間高大了起來。
"沉默就表示同意了,那這個功能就這麼處理吧"專案經理說道。
最後,會議結束,因為沒人能看懂這個公式,所以,a組組長和b組組長私下討論了乙個解決方案把問題處理掉了。。。
其實這個公式很簡單,就是m=k1*m1+k2*m2+k3*m3+…+kn*mn。
什麼?看不懂?
那這樣總該能看懂了吧。
int totalm = 0;聰明的你有沒有發現什麼?int n = 10;
listk = new list() ;
listm = new list() ;
for (int i = 0; i < n - 1; i++)
【∑sigma】就是for迴圈有沒有。
這個∑下面i=0,上面n-1就是for迴圈的條件有沒有;k和m就是兩個count等於n的陣列有沒有。
上面例子中,演算法工程師提出的解決方案就是迴圈處理有沒有。。。
如果演算法工程師講公式時這樣說:「k和m集合長度相等,我們迴圈一下,計算下k[i] 和 m[i]的乘積,然後累加求和一下。」
是不是就都聽懂了。
當然了,如果他真這樣講,就高大上不起來了。。。
其實我們每天都在寫演算法
想想我們寫過的那些複雜甚至噁心的業務邏輯,結合一下上文的例子。
然後,你會發現,其實你每天都在寫演算法。。。
只是你不知道如何把你寫的東西,用公式表達出來而已。。。
誠然,經常寫演算法的朋友,的確,很多時候可以給出乙個非常好的處理問題的邏輯。
但是,這並不是演算法工程師在能力上高人一等,只是他們長期應用演算法,對計算問題,相對更敏感,所以,處理起來更簡潔,高效。
其實,軟體工程師也一樣,有經驗的軟體工程師,寫的**邏輯更清晰,**更簡潔,會使用的開源框架更多,這並不能代表什麼,因為,這只是工作能力的高低而已。
嘗試寫乙個公式
編寫演算法公式其實非常簡單,使用word就可以實現啦。
編寫公式步驟,開啟word—插入—公式,然後在裡面選擇公式模板,單擊,就可以插入公式模板了。
如上圖所示,word裡提供非常多的公式模板。ps:有沒有發現,勾股定理其實也是一種演算法。
插入公式模板後,word上方的面板會自動跳轉到設計介面。
如上圖所示,這裡有非常多的功能。
作為程式設計師,你一定寫過文件吧,如果你在文件中加入幾個公式。。。
試想一下,當專案經理看你的文件時,看到一堆他不懂的公式。。。你在他心中的形象是不是瞬間就高大上起來了呢,o(∩_∩)o哈哈~
當然了,還是有真正大牛演算法工程師,這裡不能一概而論。
但我們沒必要自卑的認為比演算法工程師第一檔就是了。
摩卡,讓我們一起成長
本人加入摩卡倒頗有些緣分 在剛籌畫成立天津研發中心時,就差點成為研發中心的一員,但由於種種原因未能成行 經過一年多的等待,最終還是走進了摩卡,成為一名上海本土員工。時間如梭,加入摩卡轉眼三年了,我能很清楚地感覺到自己的成長與進步,同時也目睹了公司快速健康發展與壯大的過程,能成為摩卡人的一分子感到榮幸...
摩卡,讓我們一起成長
本人加入摩卡倒頗有些緣分 在剛籌畫成立天津研發中心時,就差點成為研發中心的一員,但由於種種原因未能成行 經過一年多的等待,最終還是走進了摩卡,成為一名上海本土員工。時間如梭,加入摩卡轉眼三年了,我能很清楚地感覺到自己的成長與進步,同時也目睹了公司快速健康發展與壯大的過程,能成為摩卡人的一分子感到榮幸...
讓我們一起Go(十三)
上篇,我們了解了go語言介面的一些知識,在這篇中,我們將繼續聊聊介面這東西。go語言中定義乙個空介面,也就是沒有任何函式需要實現的介面就是乙個空介面,作為乙個空介面,因為物件無需實現它的函式,所以它可以指向任何物件,看下面的示例 上面的empty介面變數分別可以被賦值為int型別,string型別,...