前言html
其實我一直想寫一篇揭祕算法的文章,由於,據我所見,大多數寫算法的軟件工程師,其實,就是普通程序員,並不是高人一等。程序員
但我一直不知道從何下手,今天姑且嘗試着亂寫一點。算法
最唬人的高大上數組
算法最唬人的東西莫過於公式了。框架
而公式中最唬人的摸過於∑了;這個符號叫sigma,以下圖:post
舉個例子:spa
某公司開會討論項目功能實現,與會人員有:一個項目經理,三個A組成員,三個B組成員和一個算法工程師。設計
而後,討論着,討論着,就遇到了一個爭議功能。3d
A組成員認爲該功能應該循環來處理,B組成員認爲應該使用遞歸來處理,雙方爭議不下。code
此時,項目經理爲了擱置爭議,共同開發。。。而後,請算法工程師發表意見。
算法工程師走到黑板,刷刷刷寫下了上圖的公式。。。而後開始了表演。。。呃,是講解。
「咱們這個功能,我覺使用這個公式來實現最好,這個Ki乘以Mi,而後咱們求一下和,巴拉巴拉。。。」
而後,A組B組成員就都蒙了,由於他們看不懂,也沒聽懂。由於程序員的特質是嚴謹,因此一旦遇到不懂的事情,他們一般是不發表意見的。
而後,在這小小的會議室中,算法工程師的形象就瞬間高大了起來。
"沉默就表示贊成了,那這個功能就這麼處理吧"項目經理說道。
最後,會議結束,由於沒人能看懂這個公式,因此,A組組長和B組組長私下討論了一個解決方案把問題處理掉了。。。
----------------------------------------------------------------------------------------------------
其實這個公式很簡單,就是M=K1*M1+K2*M2+K3*M3+…+Kn*Mn。
什麼?看不懂?
那這樣總該能看懂了吧。
1
2
3
4
5
6
7
8
|
int
totalM = 0;
int
n = 10;
List<
int
> K =
new
List<
int
>() { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
List<
int
> M =
new
List<
int
>() { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
for
(
int
i = 0; i < n - 1; i++)
{
totalM += K[i] * M[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哈哈~
固然了,仍是有真正大牛算法工程師,這裏不能一律而論。
但咱們不必自卑的認爲比算法工程師第一檔就是了。