iT邦幫忙

演算法相關文章
共有 201 則文章

技術 【Day35】[演算法]-常見的演算法策略Algorithmic Patterns

分治法(Divide and conquer) 又稱分而治之法,是最常被使用的策略方式,原理是將一個難以直接解決的大問題,依據相同的概念分割成多個子問題,再各個...

技術 【Day34】[演算法]-費波那契數列Fibonacci Sequence

之前在遞迴的篇章有介紹過費波那契數列,是使用遞迴的方式實作,但是從下面遞迴的樹狀圖來看,會發現有很多重複的節點,遞迴的深度越深,重複計算的節點也就越多,甚至會出...

技術 【Day33】[演算法]-深度優先搜尋DFS與廣度優先搜尋BFS

深度優先搜尋(Depth-First Search,DFS)與廣度優先搜尋(Breadth-First Search, BFS),是可以用來走訪或搜尋樹節點與圖...

技術 【Day32】[演算法]-內插搜尋法Interpolation Search

內插搜尋法(Interpolation Search  ),又稱插補搜尋法,是二分搜尋法的改良版,二分搜尋法是先找出中間值,而內插搜尋法是透過斜率公式來估出資料...

鐵人賽 自我挑戰組 DAY 30

技術 Day 30:寫在不怕演算法之後

如果說演算法讓人以更好的方法解決問題,那麼對於以程式解決問題的人而言,演算法理當能讓我們寫出更好的程式。所以隨著鐵人賽來到了終點,經過了沐浴在演算法光輝中的一個...

技術 【Day31】[演算法]-二分搜尋法Binary Search

二分搜尋法(Binary Search ),在執行前有一項必須條件,資料列需要是已排序好的狀態,因此若資料龐大且未排序,需要先搭配使用前面幾天介紹的排序法,再來...

鐵人賽 自我挑戰組 DAY 29

技術 Day 29:K-近鄰演算法(k-nearest neighbors)

K-近鄰演算法是一個以已知的資料作為輸入,為資料進行分類的演算法,在日常生活中有非常多應用。 舉例來說,假設我們想要幫一些不知道是章魚還是烏賊的動物分類,我們依...

鐵人賽 自我挑戰組 DAY 28

技術 Day 28:Diffie–Hellman演算法

一路到了鐵人賽最後階段,最後寫兩個完全不同但都蠻有趣的演算法。 我們之前寫到SHA家族演算法可以用來為資料加密,今天的演算法也跟加密有關,不過並不是直接用來改變...

鐵人賽 Software Development DAY 30

技術 【Day30】[演算法]-線性搜尋法Linear Search

搜尋(Search) 就是從一群資料中找出符合某些條件的資料,當資料量非常龐大時,如何在短時間內有效率地找到所要的資料,因此,搜尋演算法就變得相當重要。 線性...

鐵人賽 自我挑戰組 DAY 27

技術 Day 27:碰到困難問題,演算法也救不了?

上一回我們說旅行推銷員問題(TSP)是一個NP困難問題,沒有快速的演算法可以解決。 那一個問題怎樣叫做「困難」,演算法又要多快才叫做快呢? 如果說所有運算問題有...

鐵人賽 Software Development DAY 29

技術 【Day29】[演算法]-基數排序法Radix Sort

基數排序法(Radix Sort),與前篇的桶排序都是非比較排序,也屬於「分配性」的排序方式,原理依據鍵值排序的方向又分為兩種: LSD(Least Sig...

鐵人賽 自我挑戰組 DAY 26

技術 Day 26:旅行推銷員問題(TSP)

之前在貪婪演算法的文章中有提到,現實生活中並不是所有問題都能用演算法快狠準地解決,有些困難的問題只有非常慢的解法。旅行推銷員問題(travelling sale...

鐵人賽 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),原理是反覆從未排序數列中找出最小值,將它與左邊的數做交換。可以有兩種方式排序,一為由大到小排序時,將最小值放到末端;...

技術 Ruby、演算法學習心得(一) 二元搜尋法 Binary Search。

鐵人賽結束後一陣空虛?? 文章內容都會以Ruby來撰寫程式碼,然後繼續來傳教K-POP啦! 有請韓國國民妹妹IU來獻唱第一首! 轉載於:Jaxirius個人Y...

鐵人賽 自我挑戰組 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

技術 【第三十天 - 結論】

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