前言 昨天從台北出發,沿著桃園、新竹一路走到台中,透過 DFS 確認了這幾個城市之間確實有路。不過如果問題改成「從台北到台中,最少要經過幾條路」,只看昨天 D...
前言 昨天把地圖存進 Graph 之後,如果要問「台北和新竹之間有沒有路」只要一次查找就能回答。但如果問的是台北和台中呢?這兩個城市之間沒有直接相連的路,ha...
前言 當我們打開 Google Map 輸入從台北到台中,它給出好幾條路線,每一條的距離和時間都不一樣。它是怎麼算出這些路線的呢?在程式裡又是什麼樣子? 之前...
前言 在編輯器裡打下 doc,下面立刻列出一排候選,document、DocumentFragment、DocumentTimeline 都在裡面;再多打一個...
前言 Day 12 介紹 Queue 時,最後有提到,如果連「照抵達的順序處理」這個原則都放棄了,那用的其實已經不是 Queue 了。今天要看的就是放棄之後的...
前言 昨天有舉一個 tree 的例子,每組父子關係都正確、整棵 Tree 卻不是 BST,因為 15 落在 9 的左 subtree 裡,卻比 9 大。原因是...
前言 昨天用 inorder 遍歷主例那棵 Tree 時,輸出的是 1, 4, 6, 9, 15, 20, 170,剛好由小到大。當時只說這不是巧合,這裡面有...
前言 今天要介紹的是 Tree~ 排序的部分告一段落,目前為止介紹的資料結構有個共同點:不管是 Array、Linked List,還是後來的 Stack 與...
前言 昨天有提到 Merge Sort 和 Quick Sort 的取捨,結論是兩個各有好壞。其實 Bubble、Selection、Insertion、Me...
前言 昨天的 Merge Sort 用分而治之確保每次執行都是 O(N log N),代價是每次合併都要一個新陣列來裝結果,額外空間是 O(N)。那如果新陣列...
前言 昨天的 Insertion Sort 是一個成本取決於輸入資料形狀的排序演算法,資料越接近已排序狀態,它花費的成本就越少。可是實務上不一定知道資料長什麼...
前言 昨天有用三種輸入去跑 Bubble Sort 和 Selection Sort,並整理出各自的執行次數,其中,在已排序那列可看到加了 early exi...
前言 大部分語言都有內建的排序方法,JavaScript 也不例外,呼叫 array.sort() 以後,就能把陣列排好,那為什麼還要了解排序演算法呢? 其中...
前言 今天要介紹的是遞迴 (Recursion)~ 昨天結尾提到,遞迴就是讓函式呼叫自己,每呼叫一次,call stack 就會再疊上一層。而這個東西其實更早...
前言 昨天的 Stack 把最後放進去的先拿出來,今天要介紹的 Queue 則是完全相反的那一種:最先放進去的最先拿出來。 先來看一個情境~假設辦公室裡有一台...
前言 今天要介紹的是 Stack~ 先看一段前幾篇一直在用的訂單資料,這次多記了每張訂單買了哪些東西: const orders = { 'A-1003':...
前言 Day 09 的開頭有說,希望能在聽到播放清單的第二首歌時,把另一首歌插在它後面,但後來介紹的方法只有 append 和 prepend,一個加在尾巴、...
前言 今天要介紹的是 Linked List~ 假設我們有一份播放清單,5 首歌照著順序排好,播完一首就自動接下一首: 晨光 → 迴聲 → 光暈 → 漂流 →...
前言 昨天留了個問題沒回答:不同的 key 撞在同一格時會發生什麼事,又該怎麼處理?今天就來看看~ 首先,再次看到熟悉的訂單資料~只是這次我們只給 4 格的...
前言 今天要介紹的是 Hash Table,它在 JavaScript 裡最常見的樣貌就是我們每天都在寫的物件。 前面兩篇都在談 Array,而 Array...
前言 在昨天的文章中,我們舉例的訂單資料設定為「已經照建立時間排好」,但整篇文章卻沒有提到這個特性,談到 Search 時,我們說時間複雜度是 O(N),原因...
前言 今天要介紹的是大家很常聽到也很常使用的 Array~ 先從一個很日常的問題開始,假設我們手上有一百萬筆訂單資料,想拿到 orders[999999] 也...
前言 前面兩篇用 Big O 和 Space Complexity 描述一個做法的時間與空間成本,不過一個做法即使又快又省,仍然可能算出錯誤答案。 那要怎麼知...
前言 上一篇文章介紹了 Big O,我們學會用「輸入規模增加時,操作次數會怎麼成長」來描述一個做法的成本,不過那篇從頭到尾數的都是「操作次數」,也就是 Tim...
前言 昨天簡單介紹了資料結構與演算法,提到同一份資料可用不同方式組織,而不同的資料結構與解決步驟也可能產生不同的運算成本,不過當我們說某個方法「比較有效率」時...
嗨大家好!我是 Monica,第一天一樣來講講系列文動機與大綱,談談未來的內容規劃。 關於分享主題 再次嘗試鐵人賽,希望能藉此督促自己學習新東西~這次的主題很經...
這 30 天,我們談過很多看起來完全不同的問題。排隊時,我們用了 Queue。復原操作時,我們看到了 Stack。找資料時,我們談 Hash Map。捷運路線讓...
上一篇,我們看到一個很現實的問題: 理論上存在答案,不代表我們能在現實時間內找到答案 像 Knapsack、Scheduling、Routing 這些問題,...
前幾篇,我們遇到了很多看起來不太一樣的問題。 例如: Knapsack:行李只能帶 20 公斤,哪些東西最值得帶? Scheduling:一天只有有限時間,工...
上一篇,我們談到實驗課排程時,先把注意力放在一件很重要的事情上: 先找到一個符合所有條件的可行解 例如實驗課表必須滿足: 同一間實驗室不能重複借用 實驗室...