2017年9月24日

[演算法] Max Stock Profit

此系列筆記主要依照 [Udemy] Learning Algorithms in JavaScript from Scratch by Eric Traub 的課程脈絡加以整理,但部分程式碼是消化後以自己較易理解的方式重新撰寫,因此和原課程內容有些出入。 問題描述 以陣列的方式儲存許多數值,這些數值是各個不同時間點股票的價格,例如,[32, 46, 26, 38, 40, 48, 42],我們要透過演算法: 找出在哪個時間點買進、哪個時間點賣出可以獲得最高的收益。以剛剛的陣列為例,應該在價格為 26 元時買入、48 元時賣出,這時會獲得 22 元的最高收益。 如果該天沒有獲利的可能則回傳...

[演算法] 合併排序法(Merge Sort)

此系列筆記主要依照 [Udemy] Learning Algorithms in JavaScript from Scratch by Eric Traub 的課程脈絡加以整理,但部分程式碼是消化後以自己較易理解的方式重新撰寫,因此和原課程內容有些出入。 問題描述 透過函式將陣列中的數值加以排序。 前置知識:Merge Sort Merge Sort 和 Bubble Sort 一樣,都是一種用來排序的演算法。 Merge Sort 的演算法主要包含兩個部分: 1. 將陣列對半拆分 Merge Sort 的第一步是要將陣列兩兩對半拆分,直到拆到每個陣列只剩一個元素://...

[演算法] 氣泡排序法(Bubble Sort):利用兩兩元素交換位置達到排序

此系列筆記主要依照 [Udemy] Learning Algorithms in JavaScript from Scratch by Eric Traub 的課程脈絡加以整理,但部分程式碼是消化後以自己較易理解的方式重新撰寫,因此和原課程內容有些出入。 問題描述 以陣列的方式傳入許多數值,回傳排序好的資料:function bubbleSort (arr) {...} Bubble Sort 的方式是從陣列的最前面開始,一次比較陣列中兩兩相鄰的元素,然後根據大小將它們調換順序,大的移到後面: 當我們比較過所有元素一次後,可以確保數值最大的元素在最後面 ...

2017年9月23日

[演算法] Algorithm: Sieve of Eratosthenes 質數判斷

此系列筆記主要依照 [Udemy] Learning Algorithms in JavaScript from Scratch by Eric Traub 的課程脈絡加以整理,但部分程式碼是消化後以自己較易理解的方式重新撰寫,因此和原課程內容有些出入。 問題描述 給予一個數值,把所有小於此數值的質數(Prime)都列出來:// 以陣列的方式列出小於 number 的所有質數 function sieveOfEratosthenes (number) {...} sieveOfEratosthenes(20) // [2, 3, 5, 7, 11, 13,...

[演算法] Fibonacci:善用 cache 和 Memoization 提升程式效能

此系列筆記主要依照 [Udemy] Learning Algorithms in JavaScript from Scratch by Eric Traub 的課程脈絡加以整理,但部分程式碼是消化後以自己較易理解的方式重新撰寫,因此和原課程內容有些出入。 Memoization 是一種優化的技巧,透過藉由將函式的回傳值暫存起來,來提升效能,一旦發現有相同的輸入時(same inputs),就直接回傳暫存值出去。這裡的關鍵字就是「相同的輸入(same inputs)」。 前置知識: 費波那契數列(Fibonacci Sequence) 費波那契數列(Fibonacci Sequence)指的是: 1,...

[演算法] Binary Search:在陣列中尋找特定元素

此系列筆記主要依照 [Udemy] Learning Algorithms in JavaScript from Scratch by Eric Traub 的課程脈絡加以整理,但部分程式碼是消化後以自己較易理解的方式重新撰寫,因此和原課程內容有些出入。 問題描述 透過 binary search 的方式在一個陣列(numArray)中找出目標元素(target):function binarySearch(numArray, target) {...} 演算法實做 在 Big O Notation & Time Complexity 時,曾有使用...

[演算法] 遞回函式(recursive function, recursion)

此系列筆記主要依照 [Udemy] Learning Algorithms in JavaScript from Scratch by Eric Traub 的課程脈絡加以整理,但部分程式碼是消化後以自己較易理解的方式重新撰寫,因此和原課程內容有些出入。 什麼是遞回函式(recursion) 遞回函式(recursive function)簡單來說就是在一個函式當中再去呼叫它自己,其中一個實際的範例就是階層的計算(factorial)。 階層聽起來可能很陌生,但是大家高中數學一定接觸過,例如 5! = 5 x 4 x 3 x 2 x 1。 演算法實做 透過遞回函式來實做一個階層(!)的函式: function...

2017年9月22日

[演算法] Two Sum

此系列筆記主要依照 [Udemy] Learning Algorithms in JavaScript from Scratch by Eric Traub 的課程脈絡加以整理,但部分程式碼是消化後以自己較易理解的方式重新撰寫,因此和原課程內容有些出入。 問題描述 指定一個特定的數字,在以陣列的方式傳入許多數字(numArray),看看能否在這些數字中透過加法組合出這個特定的數字:// return every pair of numbers from 'numArray' that adds up to the 'targetSum' function...

[演算法] Harmless Ransom Note:計算陣列中各元素出現的次數

計算陣列中各元素出現的次數(calculate the number of elements in an array) 問題描述 這是一個類似單字剪報功能的演算法,告訴它我們希望得到哪些單字(noteText),然後在一篇文章(magazineText)中去尋找看看能不能找到這些單字,而且數量要足夠。 因此要寫一個 harmlessRansomNote function,並且代入兩個參數 noteText 和 magazineText,如果 noteText 中的單字和數量都能在 magazineText 中被找到,則回傳 true,否則回傳 false。// return...