iT邦幫忙

algorithm相關文章
共有 354 則文章
鐵人賽 Software Development DAY 17

技術 [Day 17] 排序演算法 (4):Quick Sort

前言 昨天的 Merge Sort 用分而治之確保每次執行都是 O(N log N),代價是每次合併都要一個新陣列來裝結果,額外空間是 O(N)。那如果新陣列...

鐵人賽 Software Development DAY 16

技術 [Day 16] 排序演算法 (3):Merge Sort

前言 昨天的 Insertion Sort 是一個成本取決於輸入資料形狀的排序演算法,資料越接近已排序狀態,它花費的成本就越少。可是實務上不一定知道資料長什麼...

鐵人賽 Software Development DAY 15

技術 [Day 15] 排序演算法 (2):Insertion Sort

前言 昨天有用三種輸入去跑 Bubble Sort 和 Selection Sort,並整理出各自的執行次數,其中,在已排序那列可看到加了 early exi...

鐵人賽 Software Development DAY 14

技術 [Day 14] 排序演算法 (1):Bubble Sort 與 Selection Sort

前言 大部分語言都有內建的排序方法,JavaScript 也不例外,呼叫 array.sort() 以後,就能把陣列排好,那為什麼還要了解排序演算法呢? 其中...

鐵人賽 Software Development DAY 6

技術 [Day 06] Linear Search 與 Binary Search

前言 在昨天的文章中,我們舉例的訂單資料設定為「已經照建立時間排好」,但整篇文章卻沒有提到這個特性,談到 Search 時,我們說時間複雜度是 O(N),原因...

鐵人賽 Software Development DAY 5

技術 [Day 05] Array

前言 今天要介紹的是大家很常聽到也很常使用的 Array~ 先從一個很日常的問題開始,假設我們手上有一百萬筆訂單資料,想拿到 orders[999999] 也...

鐵人賽 Software Development DAY 4

技術 [Day 04] 演算法正確性

前言 前面兩篇用 Big O 和 Space Complexity 描述一個做法的時間與空間成本,不過一個做法即使又快又省,仍然可能算出錯誤答案。 那要怎麼知...

鐵人賽 Software Development DAY 3

技術 [Day 03] Space Complexity

前言 上一篇文章介紹了 Big O,我們學會用「輸入規模增加時,操作次數會怎麼成長」來描述一個做法的成本,不過那篇從頭到尾數的都是「操作次數」,也就是 Tim...

鐵人賽 Software Development DAY 2

技術 [Day 02] Big O 是什麼?

前言 昨天簡單介紹了資料結構與演算法,提到同一份資料可用不同方式組織,而不同的資料結構與解決步驟也可能產生不同的運算成本,不過當我們說某個方法「比較有效率」時...

My Project 考拉茲(Collatz)猜想的程式証明

標題看起來不太像是工程問題? 其實本質上是工程問題: '數'其實就是一堆石子數量的符號,或代表石子本身. 電腦所處理的都是很實際的符號或'字串'. 沒有遐想空間...

鐵人賽 Software Development DAY 1

技術 [Day 01] 系列文動機與大綱

嗨大家好!我是 Monica,第一天一樣來講講系列文動機與大綱,談談未來的內容規劃。 關於分享主題 再次嘗試鐵人賽,希望能藉此督促自己學習新東西~這次的主題很經...

鐵人賽 JavaScript

技術 Day 30|從生活問題回到軟體:為什麼 Reactive System 也是一張 Graph?

這 30 天,我們談過很多看起來完全不同的問題。排隊時,我們用了 Queue。復原操作時,我們看到了 Stack。找資料時,我們談 Hash Map。捷運路線讓...

鐵人賽 JavaScript DAY 30

技術 Day 29|為什麼工程師常常接受「夠好的答案」?

上一篇,我們看到一個很現實的問題: 理論上存在答案,不代表我們能在現實時間內找到答案 像 Knapsack、Scheduling、Routing 這些問題,...

鐵人賽 JavaScript DAY 29

技術 Day 28|為什麼有些問題知道怎麼算,卻還是算不完?

前幾篇,我們遇到了很多看起來不太一樣的問題。 例如: Knapsack:行李只能帶 20 公斤,哪些東西最值得帶? Scheduling:一天只有有限時間,工...

鐵人賽 JavaScript DAY 28

技術 Day 27|推薦系統真的只是在找你最喜歡的東西嗎?

上一篇,我們談到實驗課排程時,先把注意力放在一件很重要的事情上: 先找到一個符合所有條件的可行解 例如實驗課表必須滿足: 同一間實驗室不能重複借用 實驗室...

鐵人賽 JavaScript DAY 27

技術 Day 26|實驗課都要借實驗室,課表怎麼排?

上一篇,我們看了外送平台怎麼決定誰來送一張訂單。 乍看之下,好像只是 找距離最近的外送員,但真正的問題裡,可能同時存在: 路線距離 等待時間 外送員工作量 手...

鐵人賽 JavaScript DAY 26

技術 Day 25|外送平台怎麼決定誰來送你的餐?

上一篇,我們把「人與工作之間的分配」畫成了一張 Graph。例如: 問題變成: 哪一個人應該被分配到哪一件工作? 這就是匹配想處理的問題。但如果真的打開一個...

鐵人賽 JavaScript DAY 25

技術 Day 24|人多工作也多,到底誰該做哪一件?

上一篇,我們談的是排程 Scheduling。 當一天只有有限的時間,而每件工作都有自己的: 持續時間 開始 / 結束 期限 優先級 我們真正要解決的是:...

鐵人賽 JavaScript DAY 24

技術 Day 23|一天只有八小時,工作到底怎麼排?

上一篇,我們談了 Bin Packing。假設每台貨車的容量有限: capacity = 10 而所有箱子都必須送走,我們要思考的是: 怎麼把這些箱子分配到...

鐵人賽 JavaScript DAY 23

技術 Day 22|所有箱子都要送走,最少需要幾台貨車?

上一篇,我們談了 Knapsack Problem。假設行李箱只能裝 20 公斤,而每件物品都有: 重量 價值 我們真正想解的是: 在有限容量裡,應該選哪...

鐵人賽 JavaScript DAY 22

技術 Day 21|行李只能帶 20 公斤,你要放什麼?

上一篇,我們透過找零錢問題看到,Greedy 每一步都選擇眼前看起來最好的選項,最後卻不一定能得到整體最佳解。我們也利用動態規劃,從較小金額的答案逐步推導,找出...

鐵人賽 JavaScript DAY 21

技術 Day 20|每一步都選最好,為什麼最後可能不是最好?

上一篇,我們用找零錢的問題認識了 Greedy。假設要找 67 元,可以使用 50、10、5、1 的面額。當我們每一步都選擇: 不超過剩餘金額的最大面額 會...

鐵人賽 JavaScript DAY 20

技術 Day 19|找零錢為什麼很自然會想到 Greedy?

前幾篇,我們一路從 dependency、propagation 談到 Graph 本身也可能隨著系統執行而改變。到這裡,我們已經不只是在描述資料結構,也開始面...

鐵人賽 JavaScript DAY 18

技術 Day 17|改一個東西,為什麼會影響很多地方?

上一篇,我們把 npm 專案看成了一張 Dependency Graph。當一個 package 依賴另一個 package 時,我們可以把關係畫成 A → B...

鐵人賽 JavaScript DAY 16

技術 Day 15|如果大家都有先後關係,要怎麼排順序?

上一篇我們看到,Dependency Graph 最麻煩的情況之一,就是出現循環。例如: A → B → C → A 如果箭頭代表: 前面的工作必須先完成,...

鐵人賽 JavaScript DAY 15

技術 Day 14|A 等 B,B 又等 A:Cycle 為什麼麻煩?

上一篇我們開始把「事情必須按照先後順序完成」畫成有向圖。例如: 買食材 → 備料 → 烹煮 → 上桌 箭頭代表 dependency: A → B 可以理解...

鐵人賽 JavaScript DAY 14

技術 Day 13|為什麼有些事情一定要先做完?

前幾天我們一直用 Graph 描述「東西之間怎麼連在一起」。例如捷運路網: 我們在意的是: 從 A 能不能走到 F?哪條路比較短?哪條路花的時間比較少? 但...

鐵人賽 JavaScript DAY 13

技術 Day 12|導航為什麼不能只靠 BFS?

上一篇我們討論 BFS 時,用了一個很適合它的問題: 從 A 到 F,最少要經過幾個站? 只要每經過一個站,都把它看成相同的一步,BFS 就能一層一層往外搜...

鐵人賽 JavaScript DAY 11

技術 Day 10|捷運最少經過幾站:為什麼 BFS 很適合?

上一篇談到 DFS 時,我們做了一個很明確的選擇: 先沿著一條路一路走到底 這是一種搜尋策略。但如果今天問題換方向了呢? 假設我們面前不是迷宮,而是一張捷運...

鐵人賽 JavaScript DAY 10

技術 Day 9|在迷宮裡一路走到底:DFS 在做什麼?

昨天我們終於把 Graph 從紙上的線條,變成程式真的能保存的資料。例如一張簡化的路網: 我們可以用 Adjacency List 表示: const grap...