今天來討論最短路徑的另一個演算法,Dijkstra Algorithm。主要內容是指定一個點 (源點) 到其餘各個頂點的最短路徑,也稱作「單源最短路徑」。我們用...
有鑒於昨天學的泡沫排序法,效率篇低,就有某位聰明的科學家發明了快速排序法,其實也有用到一點二元分類的概念。 快速排序 (Quick Sort) 的想法是說,先找...
深度優先搜尋(Depth-First Search,DFS)與廣度優先搜尋(Breadth-First Search, BFS),是可以用來走訪或搜尋樹節點與圖...
先說說什麼是分群?分群就是對所有數據進行分組,將相似的數據歸類為一起,每一筆數據的能有一個分組,每一組稱作為群集 (Cluster)。那分類根據什麼來定義,常用...
排序(Sorting) 排序(Sorting)在電腦領域中是非常普遍且重要工作,即是將一群不規格的資料按照某個規格來重新排列,讓排序過的資料容易閱讀、利於統計整...
不論是之前提到過的 Floyd-Warshall 或 Dijkstra 演算法,雖然都很好用也好理解,但卻有一個缺點是無法解決帶有「負權迴路」 (或稱「負權環」...
網路上有各式各樣的地圖出現,背後的運算就有很多的演算法、資料庫和參數來支持。還記得之前討論過有關圖的深度及廣度搜尋,就有提到過怎麼找最短的路徑,而這只是其中最基...
目標:這題主要目的在於練習HashMap/Dictionary的應用。 原題: Question: Given an array of integers, re...
題目來源:Reverse Integer 問題: 給一個數字,將其反轉 例子: 例如: x = 123, 則回傳 321 例如: x = -123, 則回傳 -...
在討論費氏搜尋之前,要先了解一下費氏數列。 費氏數列 (Fibonacci numbers),又稱費波那契數列,是指在一串數字中,每一項是前兩項的和。數學上的定...
目標:這題主要目的在於學習一個常見的演算法:動態規劃(Dynamic Programming)。 原題: Question: Given an integer...
合併排序法(Merge Sort)原理是會先將原始資料分割成兩個資料列,接著再將兩個資料繼續分割成兩個資料列,依此類推,直到無法再分割,也就是每組都只剩下一筆資...
目標:這題主要目的在於引導讀者了解Linked List的資料結構以及基本操作。 原題: Question: Merge two sorted linked l...
插入排序法(Insertion Sort),原理是逐一將原始資料加入已排序好資料中,並逐一與已排序好的資料作比較,找到對的位置插入。例如:已有2筆排序好資料,將...
題目來源:Remove duplicates from sorted array 問題: 給予一個已排序過的陣列(ARRAY),請計算移 除該陣列中所有重複出現...
我是國中組「柏拉圖的抉擇--競爭參考與期望值的策略模型探討」的作者,今天是第57屆中小學科展複賽第一天。老師問了一個問題: 你都是用電腦模擬,怎麼證明你的模擬...
拉蒙碎碎念 其實昨天的桶子演算法雖然直覺、簡單好懂,但也遺留了一些問題。舉例來說如果資料很大,就會很浪費空間,或者當資料有小數的時候,沒辦法產生相對應的桶子。因...
這回寫到的霍夫曼編碼是在Algorithms Illuminated Part 3: Greedy Algorithms and Dynamic Program...
並查集又稱不相交集資料結構,其實是之前討論過的資料樹的延伸。剛開始的樹每一個都是獨立的,一棵樹只有一個節點。在透過尋找相同的根節點 (root),來將這些樹逐漸...
今天來講一個「非比較性」的演算法,基數排序法 (Radix Sort)。其實之前的排序法也是屬於 非比較性 的演算法。怎麼說?以泡沫和快速為例,這兩個演算法都是...
還記得之前討論過的樹嗎?都會分成左子樹和右子樹,而二分搜尋也是遵循這樣的邏輯來運算的。 二分搜尋 (Binary Search) 是取 已排序資料的中間索引的值...
拉蒙碎碎念 還記得以前剛學程式設計的時候,老師都會從幾個較簡單的演算法教起,讓學生比較好學也快上手。其實演算法就是在學邏輯,語法啊、技巧啊,我個人倒覺得是其次。...
這篇文章主要敘述我用基因遺傳演算法解旅行推銷員問題,用的語言是Python。這邊會一步一步帶過程式碼,之後也會上傳到Github。演算法參考:https://t...
目標:這題主要目的在於練習Two Pointer類型的問題應用。 原題: Question: Given an array nums of n integers...
選擇排序法(Selection Sort),原理是反覆從未排序數列中找出最小值,將它與左邊的數做交換。可以有兩種方式排序,一為由大到小排序時,將最小值放到末端;...
大家好: 我是紫楓,之前曾經在巴哈姆特發表一個關於軟體工程師,問都給問的文 其中有很多個問題是關於 我是學生,我該學什麼? 我想轉職,我該學什麼? 我想精益求...
目標:這題主要目的在於練習常見的字串比對處理。 原題: Question: Write a function to find the longest commo...
快速排序法(Quick Sort)又稱分割交換排序法,是目前公認效率極佳的演算法,使用了分治法(Divide and Conquer)的概念。原理是先從原始資料...
如果是非本科系一個剛轉職沒幾年的超級菜鳥很多人應該是沒有任何DSA的任何一丁點基礎的或甚至是本科系的菜鳥但是大學教DSA的時候還沒意識到這個東西還蠻重要的所以根...
Q1. linked list是什麼 是一種資料結構,透過很多節點(Node)串接成一個 linked list 型態的資料。 以 python 宣告的 Li...