1. 程式人生 > >談下程式設計演算法的準備心得與體會-nCov隔離也許幫你提升能力

談下程式設計演算法的準備心得與體會-nCov隔離也許幫你提升能力

最近武漢的n-Cov使得大家只能在家辦公了。

在家裡的感受是什麼樣的呢?

1.上班的時候一直在奔跑,現在總算可以有集中的時間來思考一些之前一直沒能好好整理的內容

2.時間變得自己可以掌控,優先順序有自己掌控,暫時這一兩個星期不需要為錢而奔波,感覺每天其實過得很充實

 

首先宣告我不是什麼演算法高手,身邊有很多演算法高手太厲害了,我僅是一名考慮如何將孩子們能領入計算機正確之門的教育工作者。

 

最近因為要給一些孩子(5年級到初中)講下基礎演算法,而且孩子肯定是需要深入淺出的,這樣其實對老師是個很高的要求。

為了不給孩子帶錯路,不讓孩子們覺得演算法很難產生牴觸情緒,本人最近在閱讀大量的資料和上各個大學的公開課。通過大量閱讀資料和視訊學習,發現當老師真是一個教學相長的過程。

讀大學那會兒學習都沒這麼認真過:)

 

1.目標與出發點

主要從以下幾個方面:

1.如何用簡單形象化的例子來講述一個演算法,最好是生活中的列子

2.找一些能用簡單程式碼來體會演算法的例子

3.如何歸納出,看到題目,大概能反應出題目考的是哪個演算法

4.使用這些演算法解題要注意的關鍵點

 

2.參考書籍

下面是參考的一些書籍,書籍真的是世界上最好的東西,作者一般都是在書中儘量傾其所有。但是書籍的作者一般會寫作專注於某一個或多個方面,和一部分特定人群,所以需要博覽群書來提取符合自己的內容。

下面是我參考的一些書籍,感覺角度和內容還是比較豐富。

 

書中有幾段文字,還是挺有意思的,我也截圖了一下:

-- “從本質上說,演算法只是做事的方法,因此一個不怎麼會寫程式的數學家也可是演算法領域的頂尖高手”

-- “以對一個無序數列進行從小到大排序的問題為例,小學生都能想出的‘插入排序’演算法,大多數人打牌摸牌的同時,讓手上的同色花牌保持有序,就是用的這種方法”

其實我們生活當中,不自然的在應用一些非常好的演算法。

 

--“演算法可以說是程式的靈魂。演算法水平額高低很大程度上決定了程式設計師的層次。”

--“沒有演算法工地的程式設計師俗稱為碼農,大多隻能從事技術含量低、機械的程式設計工作。一般IT培訓機構不教演算法,培養的就是此類人員。”

 

3.成果與感受

通過前期零散的總結和,這一週的集中攻克,終於折騰出了下面10多份,自己還比較滿意的教案

下面這個網站給我幫助很大,分享你們

https://www.geeksforgeeks.org/

線上視訊我覺得比較好的

https://www.icourse163.org/

 

演算法研究學習的一些心得體會,也許很多人覺得淺顯,不過自己感覺還是很有滿足感的,所以寫一下:

1.基礎程式設計是for,while迴圈,加上判斷語句

2.程式設計水平的提升,在於你能熟練使用遞迴,掌握了遞迴你能控制計算機程式就進入了另外一個階段

3.大的問題,看起來很複雜,那麼我們只能使用分而治之的手法,將大問題分解成為小問題,通過解決小問題來完成大問題的解

4.有些問題,窮舉所有情況是NP完全問題,那麼計算近似解又快又簡單,比方貪心演算法

5.計算機擅長的是什麼?按照一個式子重複性的工作,那麼如果一個問題我們能推匯出一個遞推式,並且能給出終止條件(也就是問題被分解到足夠小,並能求解時的條件),剩下的就交給計算機來完成吧

6.程式的呼叫棧這個東西很有意思,先擱置一連串待解決的問題,等棧頂這個問題解決了,一連串問題,像多米諾骨牌一樣,全部解決:)

7.當然請大概估算一下時間複雜度和空間複雜度,犧牲時間換空間?犧牲空間換時間?儲存已計算過的值來避免重複計算

8.當然還有一眼看不出,想不到全域性最優解時,可以考慮區域性最優解,或許區域性最優解能推出整體最優解,呀,好像還要用數學歸納法證明(高中最後一題,一般是不是都是考這個?現在才知道原來還是有用處的)

9.人類這個個題能生存這麼久,那麼其實天生就會使用很多優秀的演算法,只是我們沒有發覺而已

 

好了 好了,才疏學淺就暫時能總結這麼多了,等水平有了更高提升,對程式有了更高的理解再來寫吧~~ 希望對大家有