Alan Zhan 部落格

Live for nothing, or die for something

Interpolation Search Algorithm - 插補搜尋法

繼續使用猜數字當範例, 1 ~ 100 的數字,但是這次你已經知道結果了,你如果還是繼續使用二元搜尋法,那麼效率不會那麼好,那我們該用甚麼方式解決呢? 概念 插補搜尋法 (Interpolation Search):是一個基於二元搜尋法的演算法,被搜尋的清單是需要事先先被排序過的,而且資料的分布狀態最好是呈現線性的,如果不是呈現線性分布,那麼在搜尋的過程中,將有可能會得到 O(n) 的結果,可能會 …

Jump Search Algorithm - 跳躍搜尋法

延續猜數字遊戲,1 ~ 100 我們是不是可以換個猜法呢? 如果我們從一開始,只要每次沒猜中,我們就往後面 +10 繼續猜,直到最大值範圍值變成我們所猜的數值後,往回開始找值,這樣做,在數值較小的時候,將會更有效率。

Binary Search Algorithm - 二元搜尋法

我們來玩猜數字遊戲,1 ~ 100 中的整數,你必須猜中我腦海中的數字,而且我們必須在最少的布數內猜到答案,那麼你會怎麼猜呢? 答案很簡單,你一定會從 50 開始猜,如果沒猜中的話,太高你就會從 25 開始猜,太低你就會從 75 開始猜,以此類推,你每次操作的過程,你都會從中剖一半來猜測,其實你所使用的就是 Binary Search。

Linear Search Algorithm - 線性搜尋法

在查找一個元素是否存在的時候,我們最常使用的方式是甚麼呢?答案是 for 或者是 while 迴圈,恭喜你!已經學習完 Linear Search 了! 概念 線性搜尋 (Linear Search):這個演算法會訪問每個元素,確認元素在陣列中的哪個位置,如果找不到元素則會回傳 -1。

Divide and Conquer - 分而治之

分而治之 從字面上看起來,就是把一個複雜的問題分解成兩個或者很多個相同或者相似的問題,讓小問題可以被解決,再將最終結果合併求出問題的答案。 優點 解決問題的難度降低。 可以提升執行效率。 有些時候能夠平行處理,增進性能。 使用步驟 分解:將一個問題分解成若干個較小的問題,相對獨立,與原先問題形式相同的子問題。 解決:若子問題規模較小並且容易解決時,就直接解決。否則,就遞迴的方式解決子問題。 合併: …

Big O Notation - Big O 符號

如何選擇演算法來解決問題 同一個問題可以用不同的演算法來解決問題,但是選擇哪一個最好?有兩個指標可以評估一個算法的好壞: 時間複雜度 (花的時間) 空間複雜度 (花的記憶體) 所以花費的時間越少、花費的記憶體越少,通常就是越好的演算法,但是演算法的時間複雜度分析又可以細分為以下三種: