Startup Engineering

努力作懂技術又懂產品的工程師 :)

用 JavaScript 學習資料結構和演算法:排序(Sort)與搜尋(Search)篇


什麼是排序(Sort)?想像一下如果你今天因為牙齒疼,想找住家附近的牙醫診所(假設你沒有網路和查號台可以使用),你必須得翻開電話黃頁一個個找。若是這本黃頁好死不死沒有做任何排序的話,你可能需要從頭到尾一個個查看,當然故事的結局很可能是等你找到電話時你已經疼死在家裡了。所以說選擇合適的排序方式讓資料更有組織和有效率地編排是排序演算法的目標。以下就介紹幾個經典的排序演算法,再介紹排序演算法之前......

用 JavaScript 學習資料結構和演算法:圖形(Graph)篇


什麼是圖形(Graph)?圖形是另外一種非線性由一組由邊連結節點的資料結構。社交網站的關係、道路航班等資訊都可以使用圖形表示。 在開始介紹圖形之前我們先來介紹一下關於圖形的基本概念: 圖形:G = (V, E),V(Vertex):一組頂點,E(Edge):一組邊,連接 V 中的頂點 相鄰:當兩節點有用邊連在一起時稱相鄰,由上圖得知 A、B 相鄰,A、E 不相鄰 度:決定於相鄰頂點......

用 JavaScript 學習資料結構和演算法:樹(Tree)篇


什麼是樹(Tree)?樹(Tree)是一種無序的資料結構,方便快速尋找資料。在生活中也可以常看到樹資料結構的應用,例如:階層表、比賽對戰表、家譜等。 在開始介紹樹這個資料結構之前,我們先來認識一下相關的專有名詞: 樹根節點(root):沒有父節點的最初節點 子樹(child tree):由節點和其後代構成 子節點(child node):有父節點的節點 葉節點或稱外部節點(leaf):沒......

用 JavaScript 學習資料結構和演算法:字典(Dictionary)和雜湊表(Hash Table)篇


前言在前一個單元我們學習了一種不重複元素的集合,本章我們繼續討論另外一種不重複值的資料結構:字典(Dictionary)和雜湊表(Hash Table)。在集合中我們主要關心的是值本身 { 值(value): 值(value)},在字典(Dictionary)和雜湊表(Hash Table)則是有 { 鍵(key): 值(value)} 之間的 mapping 關係。 什麼是字典(Dict......

用 JavaScript 學習資料結構和演算法:集合(Set)篇


什麼是集合(Set)?集合是一個源自於數學理論中擁有不同元素的集合: N = {0, 1, 2, 3, 4, 5, 6, …} 空集合:{} 其特性在於它是由一組無序且不重複的項目組成。你也可以想成是一個沒有重複元素和無順序的陣列。在這篇文章我們會介紹如何實作集合資料結構並使用 交集、聯集、差集等集合操作方式。 集合初體驗事實上,在 ES6 中就有原生的 Set,在這邊我們試著使用 Jav......

用 JavaScript 學習資料結構和演算法:鏈結串列(Linked List)篇


什麼是鏈結串列(Linked List)?在前面的章節我們已經學習了陣列(或可以稱為串列)這個資料結構,在 JavaScript 中陣列(Array)十分簡單且彈性,是一種存放資料序列的資料結構。而不同於陣列的循序串列型的資料結構,鏈結串列(Linked List)是種方便動態新增和刪除的資料結構,其存放有序的元素集合,但不同於陣列,鏈結串列中的元素在記憶體中並不是連續(Sequentia......

用 JavaScript 學習資料結構和演算法:佇列(Queue)篇


什麼是佇列(Queue)?佇列(Queue)是一種先進先出(First In First Out, FIFO)的有序串列(Ordered List),與堆疊(Stack)後進先出(Last In First Out, LIFO)不同的是佇列(Queue)的新增和刪除元素是發生在不同端,新增元素在尾部、移除元素在頂部,最新加入的元素會從尾部排入。在一般生活中比較常見的例子是電影院排隊買票、小......

用 JavaScript 學習資料結構和演算法:堆疊(Stack)篇


什麼是堆疊(Stack)?根據教科書的說法:堆疊是一種遵循 後進先出(Last In First Out,LIFO)的有序集合。在堆疊的世界裡,由於遵守後進先出原則,較新的元素會靠近頂部(堆疊尾部),較舊的元素會在堆疊的底部。在程式語言中,方法(method)的呼叫、運算式的轉換(例如:中序轉後序)或是編譯器和記憶體中儲存變數等都可以看到堆疊的應用。 聽起來離生活有點遙遠?事實上,在生活中......

用 JavaScript 學習資料結構和演算法:陣列(Array)篇


什麼是陣列(Array)?陣列可以說是程式語言中暫時儲存資料的櫃子,幾乎所有的程式語言都具備陣列這個廣泛運用的資料結構,但值得注意的是一般程式語言中陣列只能儲存同樣型別的值,但在 JavaScript 則可以儲存不同型別的值(但我們還是盡量避免)。 下面是陣列的簡單使用情境,當今天我們想儲存整個班級的學生姓名時,我們不可能使用一個個變數去一個個儲存,這時候陣列的功能就派上用場了: cons......

用 JavaScript 學習資料結構和演算法:JavaScript 快速入門


前言在 CS 江湖上曾傳言:程式設計 = 資料結構 + 演算法。在一般的大專院校裡,資料結構(Data Structure)與演算法(Algorithm)幾乎都是電腦科學(Computer Science)和資訊相關科系的基礎必修課,在這些課堂中多半是使用 C/C++ 或是 Java 進行教學,許多初學學生也因為對於這些語言的掌握度不夠,反而迷失在資料結構和演算法的世界裡,然而本系列文章將......