資料結構與演算法教學系列文 (6) - 暴力法、貪婪演算法、回溯法
HackMD 完整版請點我 其他演算法與常見解題技巧演算法(Algorithm)是在有限的步驟之內,提供明確的法則,求出問題正確答案的程序。它可以是一種方法、法則或者程序,讓資料可按照預先設計的方式處理。 認識演算法 推薦補充閱讀:演算法筆記 Algorithm Design 暴力法(Brute Force)暴力法(Brute Force)是一種基本的解題策略,透過系統地嘗試所有可能的解決方案來找出答案。它的原理很簡單:列舉所有可能性,不斷嘗試,直到找到符合要求的解。 這種方法的優點是實現簡單,且保證能找到存在的解。但它的效率通常較低,特別是在處理大規模問題時,因此暴力法常用於簡單問題或作為其他算法的比較基準。 以下補充幾個以前教過,但其實都跟暴力法有關的演算法。 補充:【舌尖上的演算法】Day6 – Brute Force - Selection Sort補充:【舌尖上的演算法】Day7 – Brute Force - Bubble Sort補充:【舌尖上的演算法】Day8 – Brute Force - Knapsack補充:【舌尖上的演算法】Day9 – Brut...
資料結構與演算法教學系列文 (5) - 雜湊表、字典樹、並查集
HackMD 完整版請點我 雜湊表(Hash Table) 雜湊函數的性質雜湊函式是一種把輸入數據轉換成固定長度的字符串(雜湊值)的工具。它有以下特點: 固定長度輸出:無論輸入數據有多長,輸出都是固定長度。 無法回推:從雜湊值無法反推出原始輸入(即單向性),保證了數據的不可逆性。 抗碰撞性:難以找到兩個不同的輸入有相同的雜湊值。 快速計算:能快速生成雜湊值。 [資料結構] 雜湊 (Hash) Images are from 什麼是Hash Function? 有什麼特性及用途? 雜湊函數的應用 資料完整性驗證:確保收到的資料是完整的,或確保文件未被篡改。 密碼儲存:儲存密碼的雜湊值,而不是明文密碼,提高安全性。常見的加密方式如 MD5、SHA-256 等等,若有興趣可以再研究密碼學。 資料結構:用於實現雜湊表,能夠快速存取資料。使用雜湊函數的常見資料結構包含集合(Set)、字典(Dictionary)等等。 數位簽章:保護資料完整性和驗證身份。 補充:雜湊函數 - 維基百科 Leetcode 49. Group Anagrams 387. First Uni...
資料結構與演算法教學系列文 (4) - 矩陣、堆積、優先佇列
HackMD 完整版請點我 矩陣(Matrix) 在介紹 Graph 的表示方法時,我們提到了兩種不同的表示方式,分別是鄰接串列(Adjacency List)與鄰接矩陣(Adjacency Matrix)。不過其實,矩陣本身也可以被當作一種資料結構來使用,舉凡像是迷宮、地圖等等具有 2D 性質的資料型態,都可以使用矩陣來表示。 Matrix 的相關操作其實都與 Graph 差不多,不外乎就是在 Matrix 中進行搜尋或遍歷,但因為我們可以以 $O(1)$ 的複雜度,直接取用 Matrix 內部中的任一元素(matrix[row][col]),所以 Matrix 在某些應用上具有較為快速的優勢。那接著就讓我們直接實戰演練吧! Leetcode 200. Number of Islands 994. Rotting Oranges 1351. Count Negative Numbers in a Sorted Matrix 堆積(Heap)一種具有特殊性質(Parent Node 大於或小於 Child Node)的 Complete Binary Tree。 堆積排序法(H...
資料結構與演算法教學系列文 (3) - 樹、圖
HackMD 完整版請點我 樹(Tree)基本單位為 Node,且只有一個 Node 是 Root(無人指向的 Node),且不存在任何 Cycle。每個 Node 可以指向多個 Child。 Tree(樹): Intro(簡介) 二元樹(Binary Tree)當樹中的每個 Node 都只有兩個 Child,即為 Binary Tree。 Binary Tree: Intro(簡介) Binary Tree: Traversal(尋訪) 以上面的 Binary Tree 為例: Pre-Order Traversal: ABDECFG In-Order Traversal: DBEAFCG Post-Order Traversal: DEBFGCA 延伸閱讀:Binary Tree: 建立一棵Binary Tree 二元搜尋樹(Binary Search Tree)若一個二元樹中,所有 Node 都滿足 Node.left.value < Node.value < Node.right.value,就稱為二元搜尋樹。二元搜尋樹有良好的排序特質,...
資料結構與演算法教學系列文 (2) - 陣列、鏈結串列、堆疊、佇列
HackMD 完整版請點我 資料結構(Data Structure)資料結構是一種設計、組織、儲存資料的方式,以實現最佳性能和效率。這些結構包含不同形式,像是陣列、鍊結列表、樹、圖等等。選擇適當的資料結構對於解決特定的問題至關重要,不同的資料結構可以用於不同的應用,並且可以極大地影響程序的運行時間和記憶體使用。 陣列(Array)可隨機存取的一串連續記憶體位址。 陣列 (Array) 簡介 補充:List Are Arrays in Python Leetcode 26. Remove Duplicates from Sorted Array 27. Remove Element 鏈結串列(Linked List)元素間彼此串聯在一起,形成一條鍊子的資料結構。也可以是上圖雙向連結的形式。 Linked List:Intro(簡介) Linked List:新增資料、刪除資料、反轉 Leetcode 21. Merge Two Sorted Lists 24. Swap Nodes in Pairs 206. Reverse Linked List 堆疊(Stack...
資料結構與演算法教學系列文 (1) - 概述、排序、搜尋、時間複雜度
哈囉!久違又來更新教學文系列了,這次的主題是在學完基礎程式設計後,一定也需要會的東西:資料結構與演算法。若你對程式設計還不太熟悉,或是想回去複習一下 Python 或 C++,可以參考我下面的系列文: Python 教學 C++ 教學 這個系列文應該會很長,因為 DSA(i.e. Data Structure and Algorithm)這個主題是在是涵蓋太多東西了,甚至我寫的內容也沒有到很完整。這次的來源一樣是拿來做家教講義,文字部分不會太詳盡,有需要更詳盡的內容歡迎聯絡我,如果我有空就可以幫你上課 XD。 最後就是轉載請記得標註來源,這裡面的內容都是作者本人收集的心血! HackMD 完整版請點我 入門介紹 Google Coding Style 甚麼是演算法? 甚麼是資料結構? 來複習一下學習地圖,以臺大資工系必修為例:以臺大資管系必修為例: 而在演算法與資料結構的世界裡面,大概又可以分為以下幾種類別。在我們之後的課程中,會逐漸的介紹每個名詞以及其對應概念: 相關連結: How to master DSA labuladong 的算法筆記 演算法與資料結構 競...
Make your shell great again! 來安裝 Oh My Zsh 吧!
身為一個資工人,總是少不了每天跟 Shell 打交道,自從大二上過 OS 以後,什麼 ls、cd、sudo rm -rf /*,根本就是跟喝水一樣每天都會碰到(絕對不要試最後一個,後果自負 XD)。大多 OS 預設的 Shell 功能通常都不多,僅僅只能算是堪用而已,因此常常會遇到一些麻煩的狀況,像是你要進到很深的資料夾就要一直瘋狂 cd,或是要一直 ls 看這邊到底有什麼檔案等等。某天偶然聽到別人介紹 Oh My Zsh,感覺非常好用,就乾脆自己來玩玩看。(延伸閱讀:什麼是 Shell?) 安裝方法我主要綜合以下三篇文章的教學: Oh my ZSH with plugins Ubuntu 安裝 Zsh + Oh My Zsh + Powerlevel10k 與各種插件 【分享】Oh My Zsh + powerlevel10k 快速打造好看好用的 command line 環境 首先,如果你的作業系統不是 Mac,那通常預設 Shell 會是 Bash。可以透過以下 command 安裝 Zsh 並設置預設 Shell: 12sudo apt install zshchsh...
突然想寫的生活近況更新
嗨,好久不見! 最近特別忙碌,好一陣子沒有來更新了。趁著前幾天在新電腦上重新架好 hexo 的環境,順便來隨意更新一下生活近況。(舊電腦實在太炸,已經用五六年了,鍵盤還一直壞,忍不住換了新筆電,M4 Pro 真香~) 繼上次更新在聊尋找實習後,這半年(2024/07~2025/03)發生了許多蠻值得記錄的事情,就且聽我娓娓道來吧。 關於工作我於七月加入 Appier 擔任 ML Scientist Intern,到目前為止都還在實習。每週工作三到四天,可以一半遠端的工作模式也讓我有較多彈性,細節也許我之後會再發一篇文單獨來談,總體而言我還是蠻滿意這個經歷的。 另外,我依然有在接家教,但現在學生數量降到一個,每週大概一到兩次,準備起來是蠻輕鬆的,除了學生很常請假,和會佔用一點時間以外,整體也是挺不錯的。 最後,我也陸陸續續準備面試了一些正職的面試(真的好累……),之後也會有一篇文章跟大家分享,總之目前是拿到了還算喜歡的 offer,但也會偶爾持續尋找面試看看其他機會。 關於學校碩二是研究最繁忙的時候,但不見棺材不掉淚的我,還是選了一堂可怕但實用的課:李允中教授的...
2024 年科技業暑期實習面試心得(Google, Gamania, Appier)
一年又過去啦~又到了要找暑期實習的時間了,如果還沒看過去年的暑期實習面試心得文可以 點我 觀看。今年我的策略一樣是只找大公司 & 有興趣的職位,因為順利的話畢業也許可以直接拿 Return Offer,就不用再找工作了。另外我主要是找暑期,以 SWE、AI & ML 相關的職缺為主。(雖然我最後去的是長期實習 XD) 面試紀錄 投遞履歷:18 家公司 面試邀請:3 家公司 Offer Get:1 家公司 最後去 Appier 做 Machine Learning Scientist Intern,我也只有拿到這個 Offer。 Google - SWE Intern第一關(1/29 & 1/30)- Online Coding Interview x 2一月初投的,中間兩三周都沒收到任何消息,還以為涼去,結果到快月底了才收到面試邀請,還好我一月都算有在加減刷題,話雖如此但面試前幾天還是緊張到靠北。題外話,我原本選一中一英,但莫名其妙變成二中,不知道該開心還是該難過,因為我也不知道到底語言會不會影響評分 @@。 以下因為 Google ...
C++ 教學系列文 (2) - 類別、延伸議題
HackMD 完整版請點我 類別(Class)作為物件導向的程式語言,C++ 的 class 相關語法可以說是非常重要與常用,在大型專案的開發一定少不了他的身影,且多樣又彈性的語法支援,可以說是將物件導向的概念發揮到了極致。此處我們簡述一些常見的相關語法與概念,過於高深或少見的語法我們會先略過。 基本語法 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566class Car { private: int wheels; string plateID; string driver; bool engine; int meters; public: Car(string plateID, string driver); ~Car(); void turnO...










