從今天開始,我們終於可以開始真正地介紹演算法了!首先我們要介紹的是一切演算法的根本:「枚舉法」 前言 枚舉可以說是演算法設計的根本,核心精神是利用電腦高速計算的...
昨天所討論的是在實際實作中該如何讓程式符合預期的時間複雜度,而今天要進一步聊聊該如何讓程式表現的比想像更好! 常數真的不重要? 前幾天的文章在介紹複雜度時,曾提...
在前十天中,我們重點主要放在複雜度的理論和分析的手法。可是理論都知道了,但在實際實作中到底要怎麼寫才能使程式的效率一如預期或甚至比想像更好呢?這就是我們接下來兩...
均攤分析練習 今天如昨天最後所說,要再帶一個均攤分析的練習,今天要練習的範例相當經典,而且各大程式語言中像陣列的資料結構均是利用了該分析的結論來實作相關的成員函...
560. Subarray Sum Equals K 解題程式碼 var subarraySum = function (nums, k) { const...
128. Longest Consecutive Sequence 解題程式碼 var longestConsecutive = function (nums)...
今天要介紹最後一種時間複雜度的分析技巧,要是你能夠把這幾天介紹的三種技巧融會貫通,之後在大部分的場景你應該都有辦法看出一段程式的時間複雜度。 之所以說大部分是...
今天要繼續介紹時間複雜度的常用分析手法,文章內容參考了各種網路資源,其中最主要的是 AA 競程在 YouTube 的時間複雜度教學影片 ,有興趣的可以去他們的...
接下來幾篇要介紹時間複雜度各種的分析技巧,不過因為個人能力有限,因此這裡開始會大量參考網路資源,尤其是 AA 競程在 YouTube 的時間複雜度教學影片。...
Heap 是一種特別的完全二元樹(Complete Binary Tree),在一顆二元樹中,若除最後一層外的其他層都是充滿節點的,並且最後一層要麼是滿的,要麼...
一個理論的成立,通常也會帶動相關技術的進步。所以我們今天將利用昨天學的漸進符號,反過來改進我們實際在估算複雜度的流程。 實際的複雜度估計 昨天在最後提到了兩個問...
漸進符號 其實如果有看完前四天的文章並有試著跟著練習的話,你對時間複雜度應該有基本的感覺了就像折斷HB鉛筆會發出啪的一聲一樣理所當然 不過接下來說的漸進符號可以...
量級對實際程式的影響 看完昨天一大堆的數學後,我自己都寫得有點頭昏眼花了XD,但是理論也不能脫離現實,因此本段會實際用程式展示一下不同量級對於時間帶來的影響!...
量級與複雜度函數 延續昨天,我們發現就連步驟數都不必估計得很精確,因此我們真正需要的是一個能找到最痛點的估計方法! 不過在此之前,先讓我介紹一個例子:你 14...
延續自昨天,今天要來探討分析解決問題方法的效率的方法! 程式好壞評估 這邊先請大家思考一下:要怎麼精準評估一個程式寫的好不好呢? 一般來說,一個程式 跑得快...
昨天的樹狀結構是描述節點與節點之間,而圖形結構是兩個頂點之間是否相連。在圖形中連接兩點的邊若填上加權值,這類就稱為網路。 圖形簡介 圖形理論最早是18世紀的尤拉...
序言 —— 從不完美中尋找完美 大家好呀!我是暗魂駭客,接下來參賽的30天請各位多多指教!希望我能順利完賽。 我會選擇參賽的理由主要是有兩個:其一是想鍛鍊自己的...
常見演算法簡介二 今天介紹剩下常見的演算法~ 動態規劃法(Dynamic Programming Algorithm) 動態規劃法主要是如果一個問提答案與子問題...
此演算法是由一位叫 Edsger Dijkstra 的荷蘭工程師所發明,他在電腦科學領域貢獻了許多奠定目前網際網路、電腦科學與數位服務等等的基礎。 在學習 D...
當要取得、更新、檢查 Graph 裡所有的節點時就會需要用到 Traversal 方法,常見的使用場景為點對點的網際網路、網站爬蟲、導航、迷宮問題或遊戲類的 A...
簡言之, Graph 就是很多個節點與節點之間的連線所組成的,前幾天提到的 Three 也算是 Graph 的一種 , Graph 主要有以下幾點特色: Gr...
From Medium Hash Table 是用來儲存鍵值對的資料 (key-value pairs)。 而 Hash Table 在找特定資料與新增刪除...
Heap Sort 使用 Binary Heap 處理資料排序,也可視為 Selection Sort 的改良版。 兩者一樣都是將資料分成兩區,一區為排序好的,...
哇~終於來到最後一天了,其實在這幾個禮拜裡面,我禮拜六的文章都是禮拜五晚上熬夜寫出來的,因為我六日白天都常常有事情,所以我都必須半夜就先搞定,不過在這30天自己...
今天我們來做大家比較害怕的DP問題,我個人做下來發現有幾個步驟可以放我們去比較簡易的解決一個DP問題,大雞可以參考看看。 看看在最一開始你能做甚麼? 有沒有B...
Greedy的題目我認為是最難寫的,原因是我們如果沒有經過證明,會很難知道這是可行的答案,不過這邊還是找了幾題想讓大家感受一下Greedy演算法的思想。另外,撇...
今天我們來看看Binary Search類型的題目吧!還記得當初我們提到Binary Search的時候,會覺得這個演算法也不是特別的難,確實如果說單純搜尋一個...
今天我們來看看DFS跟BFS的題目吧! BFS跟DFS的題目有幾件事情要注意一下,這也是我做題下來發現的小技巧。 很多時候DFS跟BFS都是可以解決問題的。...
樹的題目我個人認為也相對簡單的,而且非常非常適合用來練習遞迴思想,有以下的技巧讓大家參考看看。 樹的題目大概7成以上都是用遞迴去思考,要思考的點通常有兩個,分別...
Linked List的題目相對單純一點,大概就一個技巧就是Two Pointer,因為我們只能單向的尋訪鏈結串列,所以時間複雜度通常都是O(n)。 Linke...