iT邦幫忙

演算法相關文章
共有 309 則文章
鐵人賽 Software Development DAY 28

技術 【Day28】[演算法]-桶排序法Bucket Sort

桶排序法(Bucket Sort),與前面幾篇的排序法不一樣,前面都是經由兩兩互相比較而成的排序,稱為比較排序法,而桶排序是非比較排序,屬於「分配性」的排序。原...

鐵人賽 Software Development DAY 27

技術 【Day27】[演算法]-堆積排序法 Heap Sort

堆積排序法(Heap Sort)原理是利用「堆積」的資料結構為基礎來完成排序。 堆積的介紹可以參考此篇。 操作流程(最大堆積為例): 將陣列轉換最大堆積(...

鐵人賽 自我挑戰組 DAY 25

技術 Day 25:動態規劃(dynamic programming)

動態規劃也是一種演算法設計模式,常用來解決最佳化問題。它的方法是將問題(通常是遞迴地)分解成子問題,再以子問題的最佳解組成原問題的最佳解。 這樣的描述看起來完全...

鐵人賽 自我挑戰組 DAY 24

技術 Day 24:霍夫曼編碼(Huffman coding)

這回寫到的霍夫曼編碼是在Algorithms Illuminated Part 3: Greedy Algorithms and Dynamic Program...

鐵人賽 Software Development DAY 26

技術 【Day26】[演算法]-快速排序法Quick Sort

快速排序法(Quick Sort)又稱分割交換排序法,是目前公認效率極佳的演算法,使用了分治法(Divide and Conquer)的概念。原理是先從原始資料...

鐵人賽 自我挑戰組 DAY 23

技術 Day 23:最小生成樹(MST)

貪婪演算法可以解決的一個問題就是找到一張圖中的最小生成樹(minimum spanning tree)。 樹、生成樹與最小生成樹 我們之前提到資料結構中的樹是有...

鐵人賽 Software Development DAY 25

技術 【Day25】[演算法]-合併排序法Merge Sort

合併排序法(Merge Sort)原理是會先將原始資料分割成兩個資料列,接著再將兩個資料繼續分割成兩個資料列,依此類推,直到無法再分割,也就是每組都只剩下一筆資...

鐵人賽 Software Development DAY 24

技術 【Day24】[演算法]-希爾排序法Shell Sort

希爾排序法(Shell Sort)是插入排序(Insertion Sort)的改良版。可減少插入排序的資料搬移次數,加入了間距(Gap)的概念將資料分成多個小區...

鐵人賽 自我挑戰組 DAY 22

技術 Day 22:貪婪演算法(2)

上一回寫到大部分貪婪演算法並非永遠正確,那哪些問題適合用它來解呢? 最佳子結構 貪婪演算法既是在過程中不斷地尋求局部最佳解,換句話說,它也就適合解決有辦法透過局...

鐵人賽 Software Development DAY 23

技術 【Day23】[演算法]-插入排序法Insertion Sort

插入排序法(Insertion Sort),原理是逐一將原始資料加入已排序好資料中,並逐一與已排序好的資料作比較,找到對的位置插入。例如:已有2筆排序好資料,將...

鐵人賽 自我挑戰組 DAY 21

技術 Day 21:貪婪演算法(greedy algorithm)

之前寫到過分治法,它並不是單一個演算法,而是許多演算法設計的基礎。同理,貪婪演算法也是一種設計模式。這類演算法的作法是,在每一個階段選擇當前最佳解,並以此達到整...

鐵人賽 自我挑戰組 DAY 20

技術 Day 20:Dijkstra演算法

先前我們利用廣度優先搜尋,找到圖中兩節點之間的最短路徑,其中所謂「最短」是指「經過最少的邊」。可是這樣的路徑卻未必是最快路徑,因為現實生活中不會每條路徑的距離或...

鐵人賽 Software Development DAY 22

技術 【Day22】[演算法]-選擇排序法Selection Sort

選擇排序法(Selection Sort),原理是反覆從未排序數列中找出最小值,將它與左邊的數做交換。可以有兩種方式排序,一為由大到小排序時,將最小值放到末端;...

鐵人賽 自我挑戰組 DAY 19

技術 Day 19:深度優先搜尋(DFS)與拓樸排序(topological sorting)

深度優先搜尋(depth-first search, DFS)是一種搜尋整張圖所有節點的演算法。它的名稱也表達出跟廣度優先搜尋的順序不太一樣,它是從根節點(樹的...

鐵人賽 Software Development DAY 21

技術 【Day21】[演算法]-排序Sort & 氣泡排序法Bubble Sort

排序(Sorting) 排序(Sorting)在電腦領域中是非常普遍且重要工作,即是將一群不規格的資料按照某個規格來重新排列,讓排序過的資料容易閱讀、利於統計整...

鐵人賽 自我挑戰組 DAY 18

技術 Day 18:廣度優先搜尋(BFS)

上一回提到廣度優先搜尋的步驟是檢查圖中節點,並將與其相連的節點放入佇列中,再一一檢查。 光是這樣的文字描述,可能感覺只是線性地檢查所有節點,但其實廣度優先搜尋的...

鐵人賽 自我挑戰組 DAY 30

技術 【第三十天 - 結論】

本系列文章複習了一些業界常考演算法 從中也一再的複習/整理自己所學,釐清一些概念,希望大家經過一系列的文章,都能有所收穫,再次提醒,建議練習題目時,除了...

鐵人賽 自我挑戰組 DAY 17

技術 Day 17:圖與演算法

有一些演算法是在圖(graph)上操作,我們可以先想一些實際的例子,例如: 開車的時候,使用導航系統找到最短路徑抵達目的地。 下棋的程式知道如何利用最少...

鐵人賽 自我挑戰組 DAY 29

技術 【第二十九天 - 系統分析 題目分析】

先簡單回顧一下,今天預計分析的題目: 題目連結:https://leetcode.com/problems/design-twitter/ 題目敘述 設計...

鐵人賽 Software Development DAY 14

技術 【在廚房想30天的演算法】Day 14 演算法 : 排序 sort I 氣泡、選擇、插入

Aloha~!又是我少女人妻 Uerica!今天終於可以進入到演算法的章節啦 (歡呼) ~ 之前因為從沒碰過演算法,在整理和學習的時候發現大家都從資料結構開始提...

鐵人賽 影片教學 DAY 29

技術 [Day-29] R語言 - 分群其他演算法 ( Clustering other Algorithms )

您的訂閱是我製作影片的動力訂閱點這裡~ 若內容有誤,還請留言指正,謝謝您的指教

鐵人賽 自我挑戰組 DAY 28

技術 【第二十八天 - 系統設計 介紹】

Q1. 系統設計 是什麼 在業界基本上都是團隊開發專案,每個人負責實作部分功能,而 Leetcode 會列出典型的系統設計,學會看到問題時,會使用什麼方式實...

鐵人賽 自我挑戰組 DAY 27

技術 【第二十七天 - Dijkstra 題目分析】

先簡單回顧一下,今天預計分析的題目: 題目連結:https://leetcode.com/problems/path-with-maximum-prob...

鐵人賽 自我挑戰組 DAY 26

技術 【第二十六天 - Dijkstra 介紹】

Q1. Dijkstra 是什麼? 一種利用 Dynamic Programming ,與 Floyd-Warshall 一樣,是求 Graph 中兩點之間...

鐵人賽 自我挑戰組 DAY 25

技術 【第二十五天 - Floyd-Warshall 題目分析】

先簡單回顧一下,今天預計分析的題目: 題目連結:https://leetcode.com/problems/find-the-city-with-the...

鐵人賽 自我挑戰組 DAY 24

技術 【第二十四天 - Floyd-Warshall介紹】

Q1. Floyd-Warshall 是什麼 一種利用 Dynamic Programming ,求 Graph 中兩點之間最短路徑的演算法。 考慮 A, B...

鐵人賽 自我挑戰組 DAY 9

技術 【Day 09】Sorting:Bubble Sort 氣泡排序法 ( 用 JavaScript 學演算法 )

氣泡排序法是,從第一個元素開始,和相鄰數字比大小,若有需要就交換位置。因此也可稱為交換排序法。它的時間複雜度是 O(n^2)。 一、步驟觀察 遍歷未排序...

鐵人賽 自我挑戰組 DAY 11

技術 Day 11:合併排序(mergesort)

合併排序(merge sort 或 mergesort)是另一種採用分治法的排序演算法。它的步驟是: 分割:用遞迴的方式,將長度為n的數列分成兩半,直到子數列...

鐵人賽 自我挑戰組 DAY 23

技術 【第二十三天 - DFS 題目分析】

先簡單回顧一下,今天預計分析的題目: 112. Path Sum 題目連結:https://leetcode.com/problems/path-sum...

鐵人賽 自我挑戰組 DAY 8

技術 【Day 08】Sorting:Selection Sort 選擇排序法 ( 用 JavaScript 學演算法 )

選擇排序法的概念是,將陣列分為兩個部分,每次掃描未排序的部分時,從數列中拿出最小的數,丟到另一邊,最後就會得到一個完成排序的陣列。它的時間複雜度是 O(n^2...