Skip to content

Instantly share code, notes, and snippets.

JavaScript - Closure的實際應用

tags: javascriptclosure

資料希望不被銷毀

// 沒有閉包
function heavyDuty(item) {
  const bigArray = new Array(7000).fill('^_^') // 執行完就銷毀囉
  return bigArray[item]
}

What is THIS in JavaScript

tags: javascriptthis

為什麼會有this

物件導向的語言中,this指的是實例。 JS的this之所以困難,是因為跟其他物件導向的語言比起來有著惱人的例外。JS其實不是物件導向的語言,只是有著原型物件導向語法的語法糖(很像物件導向但其實只是模擬物件導向),其實還是原型,並不是真正的以類型為基礎的物件導向設計。

基本情形

  1. this的值在瀏覽器底下就會是window
  2. 在node.js底下會是global,

資料結構與演算法 - 動態規劃、貼磁磚

tags: 資料結構與演算法,Algorithms,Data Structure

動態規劃(Dynamic programming)

dynamic programming是divide and conquer的延伸。當遞迴分割出來的子問題(sub-problems),一而再、再而三出現,就用記憶法儲存這些問題的答案,避免重複求解,以空間換取時間。

跟greedy method相比,比較全面。greedy method只考量當下的狀況做決定。也因為比較全面,可以解決子問題,也不會重工。

重疊子問題(Overlapping Subproblem)

當一個大問題能被分解成小問題,而小問題再分解下去的小問題有重複的情況時,表示這個問題有重疊子問題(Overlapping Subproblem)。例如:費氏數列。

資料結構與演算法 - Dynamic programming and Fibonacci sequence

tags: 資料結構與演算法,Algorithms,Data Structure

動態規劃(Dynamic programming)

dynamic programming是divide and conquer的延伸。當遞迴分割出來的子問題(sub-problems),一而再、再而三出現,就用記憶法儲存這些問題的答案,避免重複求解,以空間換取時間。

跟greedy method相比,比較全面。greedy method只考量當下的狀況做決定。也因為比較全面,可以解決子問題,也不會重工。

重疊子問題(Overlapping Subproblem)

當一個大問題能被分解成小問題,而小問題再分解下去的小問題有重複的情況時,表示這個問題有重疊子問題(Overlapping Subproblem)。例如:費氏數列。

資料結構與演算法 - 動態規劃、爬樓梯問題

tags: 資料結構與演算法,Algorithms,Data Structure

動態規劃(Dynamic programming)

dynamic programming是divide and conquer的延伸。當遞迴分割出來的子問題(sub-problems),一而再、再而三出現,就用記憶法儲存這些問題的答案,避免重複求解,以空間換取時間。

跟greedy method相比,比較全面。greedy method只考量當下的狀況做決定。也因為比較全面,可以解決子問題,也不會重工。

重疊子問題(Overlapping Subproblem)

當一個大問題能被分解成小問題,而小問題再分解下去的小問題有重複的情況時,表示這個問題有重疊子問題(Overlapping Subproblem)。例如:費氏數列。

資料結構與演算法 - Dijkstra's Algorithm

tags: 資料結構與演算法,Algorithms,Data Structure

要解決的問題

用來在沒有方向性的graph中,給一個節點,找到通往其他所有節點的成本最小路徑(least-cost path)。 在生活中應用很廣,例如:電線、油管、人行道鋪設、網路線。

步驟

資料結構與演算法 - BFT in graph

tags: 資料結構與演算法,Algorithms,Data Structure

graph

圖形(graph)是由多個節點(node)與連接節點的邊(edge)所組成,跟tree相比,graph中是沒有root的,也沒有parent and child的關係。tree是graph的一種。

廣度優先

從graph的起始node開始,從該node開始訪問,往鄰居節點繼續訪問,該節點的鄰居都問完了,才訪問鄰居的鄰居節點。

資料結構與演算法 - DFT in graph

tags: 資料結構與演算法,Algorithms,Data Structure

graph

圖形(graph)是由多個節點(node)與連接節點的邊(edge)所組成,跟tree相比,graph中是沒有root的,也沒有parent and child的關係。tree是graph的一種。

深度優先

從graph的起始node開始,從該node開始訪問,往鄰居節點繼續訪問,每次訪問都會盡量挑距離最遠的節點。

資料結構與演算法 - Prim's Algorithm

tags: 資料結構與演算法,Algorithms,Data Structure

minimal spainning tree

一個有loop的graph,消去一個以上的edge(edge具有值),使其成為tree(沒有loop)。這樣留下來的tree就是spainning tree。每個node都要算進去,不可以被消去。

一個有loop的graph,可能有著很多spainning tree;minimal spainning tree是指該tree的edge所具有的值,加總起來最小。

Prim's Algorithm

步驟

資料結構與演算法 - priority queue and max heap insertion

tags: 資料結構與演算法,Algorithms,Data Structure

priority queue

priority queue內的每個元素有個叫做priority的屬性,該數值代表優先程度。越大的數值越優先。

但這只是個概念,實際上該用那個資料格式來呈現?

  1. linked list
  2. queue
  3. array