記得以前剛轉行從事網頁工程的時候,需要從 database 撈資料到前端呈現,可是當時真的是不清楚要怎麼處理資料,主管便問我說:「你要用什麼演算法」。演・算・法,當時聽到這三個字我真的是滿臉黑人問號?演算法到底是什麼碗糕?
後來想想在學習的路上,總是接觸到很多陌生但卻又耳熟的詞彙,做為新手,常常聽到很多詞就先畏懼了,覺得自己好像很多東西都還不懂的感覺,但其實很多字詞並沒有想得這麼複雜或這麼難。
演算法簡單來說,就是「解決問題的方法」—當碰到一個問題時,要用什麼樣的方式來解決所碰到的這個問題。
這個在 TEDEd 短短 5 分鐘的影片(中文字幕),清楚說明了演算法(Algorithm)的概念:
接下來這一系列的筆記,則是最近剛好有機會在 Udemy 上觀看了由 Eric Traub 的 Learning Algorithm in JavaScript from Scratch 和 Learning Data Structures in JavaScript from Scratch 這兩堂課,讓我真正從 JavaScript 開始學起了演算法和資料結構,筆記當中主要是按照該課程的脈絡加以整理,但是很多程式碼的寫法是消化過後以自己能夠理解的方式撰寫,因此可能和原課程內容有些出入。希望對於沒有接觸過演算法/資料結構的朋友們,也可以一起從 JavaScript 學起演算法/資料結構:
演算法篇(Algorithm)
- Fizz Buzz
- 如何評斷演算法的好壞:Big O Notation 和 Time Complexity
- Harmless Ransom Note:計算陣列中各元素出現的次數
- Is Palindrome:判斷順著寫逆著寫是否相同?
- Caesar Cipher: 往後或往前推移英文字母
- Reverse Words: 把單字反過來寫
- Reverse Array in Place: 暫存變數的使用
- Mean Median Mode
- Two Sum
- 什麼是遞回函式(recursive function, recursion)?
- Binary Search:在陣列中尋找特定元素
- Fibonacci:善用 cache 和 Memoization 提升程式效能
- Sieve of Eratosthenes 質數判斷
- Bubble Sort:學習將陣列對半切分
- 合併排序法(Merge Sort)
- Max Stock Profit
資料結構篇(Data Structure)
這裡一併列出其他和演算法/資料結構有關的學習資源:
- JavaScript Algorithms and Data Structures @ Github
- Data Structure and Algorithms Tutorial @ Tutorial Points
- 演算法筆記
- VisuAlgo
0 意見:
張貼留言