iT邦幫忙

algorithm相關文章
共有 358 則文章
鐵人賽 Software Development DAY 29

技術 [Day 29] 優化程式的小技巧

前言 今天要介紹的是幾個從演算法層級優化程式的小技巧,會從一些題目來看如何應用~ 之前介紹的問題通常可快速找到對應解法,例如要把資料排好就去找排序演算法,要在...

鐵人賽 Software Development DAY 28

技術 [Day 28] Dynamic Programming

前言 今天要介紹的是動態規劃 (Dynamic Programming)~ Day 13 介紹遞迴的時間複雜度時有提到一個問題,有些遞迴寫法會重複計算相同的子...

鐵人賽 Software Development DAY 27

技術 [Day 27] Dijkstra's Algorithm

前言 昨天的 BFS 回答的是「從台北到台中最少要經過幾條路」,或者可以說要經過幾條 edge,小結最後有說,每條 edge 代表同樣的成本時,最少 edge...

鐵人賽 Software Development DAY 18

技術 [Day 18] 排序演算法 (5):如何選擇排序演算法?

前言 昨天有提到 Merge Sort 和 Quick Sort 的取捨,結論是兩個各有好壞。其實 Bubble、Selection、Insertion、Me...

鐵人賽 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 可以理解...