Functional Programming Basics - Pascal's triangle
ฝัง
- เผยแพร่เมื่อ 2 มิ.ย. 2024
- 0:00 Pascal's triangle
0:19 What the past me would write
0:39 code walkthrough
1:17 the problems with the code
1:52 How to make it pure?
3:41 adding console.log
4:14 easy unit testing
4:22 aren't for loops bad?
6:20 translating algos into FP implmentations
影片中使用的Icons: www.flaticon.com
插圖來源:www.irasutoya.com/
B roll來源:envato elements
個人認為說明一個概念/寫法 使用最單的方式說明是最好的
因為用來說明的東西大家都很清楚
如果使用很困難的問題來說明的話
可能大部分的人都沒有遇過這個問題
反而會對新的寫法沒那麼有共鳴
不管怎麼簡單的內容都還是有需要看的人。
這種類型的影片很棒!! 案例清晰、原理淺顯易懂!
這個觀念教學真的好有幫助,謝謝。
我一直卡在要用哪種?用哪種比較好?這種問題。
但都忘記重點是,只要有達成那個作法提供的好處就好,謝謝。
有幫助!! 總有不同的客群需要學習不同階段的東西,謝謝你!!
對一個大學以前從未接觸過程式的資工系學生來說 很有幫助
非常喜歡這樣的影片!!
非本科很需要
感謝James用心製作影片
我的話只會用到一個陣列(而不是n個),而且陣列大小只需要一半(因為左右的值是一樣的),另外陣列第一個,第二個元素是不需要計算就能知道的值,所以總計算次數小於一半,空間由N^2(約略n*(n+1)/2)降到N(約略n/2-2)。
也就是只需要原本少超過一半的計算次數,以及只要一個陣列(存一半,另一半是重複資料就不重複計算儲存了),就可以印出(產出)最終的結果。
若題目嚴格要求傳回整個完整陣列,則計算過程中一樣維持一個陣列及少一半的計算,只需於傳回最終結果前,將陣列鏡射到另一半元素回傳即可。
ps. 還有其他方式可以更優化計算時間
謝謝分享~希望出更多類似的系列
講得太好了,希望可以多多推出類似的影片!
很喜歡這類型的影片 給讚👍
用一個狀態算出下一個狀態的情況,我更喜歡用遞迴來解決,好處是我只需要關注在子問題上
最近在刷題剛好在複習這個 感想分享
影片做得挺好的,讚了👍
可以用排列組合的 nCm
n是列-1 m是位置-1
第六行是 5C0 , 5C1, 5C2, 5C3, 5C4, 5C5 (到一半就可以返回列出了)
但階層例如5!/(3!*2!)要減少BigO的話
就要用一個小型cache(map)去記
(缺點就是某些語言算階層用一些資料型態很容易就溢位)
清晰易懂~感謝👍
觀念清楚,深受助益
看的一知半解, 但我對Functional Programming 和程式理解也不夠深
我覺得還是很有收穫, 感覺以後學更多回來看會理解更多
讚!! 我也想從事自媒體!! 現在都當員工!!哈哈!! 多多指教 我也在找尋志同道合夥伴! 但我不會程式語言,我強項是軟體硬體安裝應用!! 自己還有用NAS架設網站!! 多多指教
非常剛好符合我的程度 感謝詳細解釋各個名詞意義
感謝你的教學~
很喜歡這種解說方式,很受用
很有幫助!
有幫助,謝謝。
講得很好
受益良多
感謝
有幫助,謝謝
您好,不知道我這樣理解可不可。
有時會希望可以用一個迴圈做完所有的事情,很怕迴圈多了會效能差。實際上現在的環境,這個已經不是最先需要考慮的,把功能切單純,一個迴圈能做完的兩三件事情,那就用兩三個method各自的任務,這樣之後程式要做單元測試或是復用都會很直覺明瞭。
讚一個!
感謝教學
謝謝分享
你的这段代码从原来的两层for循环改成FP的递归之后,时间复杂度从原来的O(N^2)变成了O(N^3)了。假设PC上1秒钟可以计算10^9次,原来的源代码可以在1秒内计算3*10^4,而修改后只能计算到10^3。
对于使用FP书写代码,会不小心增加复杂度,这种应该怎么避免以及优化?
讚 精簡
Linux kernel內可以看到C語言OOP的影子!🥰
先按讚假裝我看的懂XD
工作上有遇到前人留下的code幾乎都是寫死的 後續再開發常常會遇到unittest的問題 真的很頭痛= =
JAMES您好,滿想聽聽您對於chatgpt的看法,自從chatgpt問世後,對於軟體開發從業人員來說,提升了不少工作效率,以這影片的帕斯卡三角案例來說,只要給予簡單的泳唱語法,很快就能得到答案了
也就是說以前可能要思考的邏輯運算,現在只要你給chatgpt一個方向及需求,你就能針對它吐出來的結果做調整或修改,我的想法是未來像這種純運算的事,可能會越來越仰賴讓AI去做,軟體工程師的工作就是做需求及系統的整合、運用
演算法工程師本來就只有前2%的人能好好活著,現在GPT出來頂多讓2%變1%,你會在這裡代表你應該也是個普通人,所以這個倒是不用想太多。
你直接用 chatGPT 給的 code 來用很容易 debug 到很想死,相信我
現在的 AI 真的還不到能夠超越人類產值的地步
同意這個看法
這概念類似於你現在要從某字串中尋找文字時,不會徒法煉鋼的用for迴圈
而是很可能直接使用該程式語言的API,find()之類的函式
除非是在有限的環境,如C語言
因此當未來很多基礎與語法概念都被大多人數認同時且放進GPT後
可能透過詠唱就能取得50%的程式碼
多出來的時間就用來優化與調教生成的內容,與系統規劃架構
目前軟體工程師如果真的繼續當碼農,只會複製貼上
不去思考其邏輯原因與架構,真的很可能就會被取代掉了
你知道AI也會debug嗎?
@@yojaychang 你知道 AI 也會鬼打牆嗎
我大一的時候要是有看到大大的影片,就不會轉行了⋯⋯
要動態規劃~
猛一看應該是可以有算式以數學的方式給行數直接返回此行內容,不需要前列資料才能計算,應該才是最佳做法
仔細一看,恩,我懶
你好,請問可以做一些 Linux 重零開始的教學嗎
可以參考Linux指令教學,自己練習看看~
如果有特別想看的主題,可以留言在這邊,我會加入主題清單的
我甚至連fp是什麼都不知道,不過看這個影片有大概理解那個概念
所以c語言相對來說fp的方式會比較難寫嗎
Pure function 的概念還是很有幫助,但除此之外我覺得能發揮的應該有限
可以參考這篇看看
www.sevangelatos.com/john-carmack-on/
這題有辦法完全不用loop只用recursion來解嗎?
可以,數學上有證明,所有迴圈都可以轉換成遞迴,只要記憶體足夠
可以,loop 轉 recursion 有暴力簡單的轉換法,recursion 轉 loop 才比較燒腦 (要自己模擬函數堆疊)。 loop 轉 recursion 的方法是把計數變數當成函數參數,條件不滿足的時候就 return 結束
例如
for (let i = 0; i < j; i++) {
// ...do something
就是變成
function loop(i, j) {
if (i >= j) return;
// ...do something
loop(++i, j);
離開學校一陣子了,對於以前我記得很排斥使用遞迴,但感覺最近又開始倡導用遞迴。是因為記憶體問題已經得到解放,以及遞迴本身的程式碼簡潔以及高內聚低、耦合這幾個特性嗎?
@@wjchuang2487 硬體性能的進步當然是很主要的因素,跟高階語言的 runtime 實現方法也有關,現在有些語言的程式很有可能不是在系統 stack 上執行,而是分配在 heap 上 (關鍵字: split stacks、contiguous stacks),空間會比只有使用系統 stack 的情況大很多。
跟編譯技術的發展也有關係,現在 TCO (尾端呼叫最佳化) 很常見,Javascript 的標準也強制要求實做這個最佳化,寫了尾端遞迴它編譯過後就等於迴圈。
TCO 有很多好處,有一種最佳化策略是拿 TCO 當作模塊化的 computed goto,可以避免分支預測的問題,還能提升快取命中率,例如 WASM3 的解釋器就用了這個手段 (這方法它們取名叫做 M3 strategy)。
loop可以直接寫成並行化作業,不用recursion徒增stack吧?
帕斯卡三角形跟二項式
對於fp的理解不深。我覺得只有在function有可預期的重複利用,才會嘗試寫pure function,因此這個例子聽起來不是很適切。
按小弟寫程式的習慣,的確會把function獨立出來增加可讀性,然而一開始說了目的是為解題,那求快的前提下,這個題目是用不到function的,我會直接處理資料(生成帕斯卡三角形),然後進行輸出。
感覺目的沒有說的很清楚
目的不需要清楚,因為這是所有工程師都該有的基本素養
不管你目前當下的目的是什麼,除非明確規定否則永遠要為了未來著想
是從除非特別要求否則預設只管當下的需求,改變成除非特別要求否則預設顧慮到未來的的可能
在within constraints的情況下盡可能做到最好
那給你個情景,今天老師讓你做了這個三角生成的程式,下節課老師讓你改變程式的參數,輸出的格式,或者加入其他功能
這例子就跟客戶要求一樣,今天他只要這功能,不保證下次他會不會要求加些什麼或是改變些什麼
所以不需要目的很清楚才去做成這樣,而是在做的時候就考慮了以後的情況,預想以後需要用到所以先這樣設計了,沒用到也沒壞處,養成習慣後寫代碼的時候還能更順一些
楊輝三角還是帕斯卡三角
我認為如何寫成 pure 不重要,為什麼要寫成 pure 才重要。
很忙嘛James,最近很少更新了
最近有點,不過會持續更新的!
話說你面試過了沒?
這不就DP嗎...
這種題目對於轉職仔來說並不會太簡單啊...😅
應該不是在說題目吧
很有幫助!
有幫助,謝謝