iT邦幫忙

2023 iThome 鐵人賽

DAY 1
2
Software Development

Easy to learn Algorithm系列 第 1

「Day1」演算法到底是啥?難不難啊!!

  • 分享至 

  • xImage
  •  

身為一個前端工程師,會寫寫網站但都一直沒有真正的去摸索理解演算法在web的定義,最常聽到就是YT演算法,但真的是那樣子嗎?

真的是滿滿的演算法嗎??

演算法是計算機科學與程式設計領域中重要的。也是我們人利用電腦解決問題的技巧之一,但不僅用於電腦領域上,包括數學、物理或是生活和工作都可以用演算法來描述。

接下來可能會說說演算法的意思,但知道有時候幾個字或是程式碼會讓人不太懂,所以會用圖解的方式來讓人來理解,但會介紹比較普遍的演算法或是常使用的為主。

演算法定義

演算法被定義為:「在有限步驟內解決數學問題的程式。」運用在計算領域中,我們也可以把演算法定義成: 「為了解決某個工作或問題,所需要有限數目的機械性或重複性指令與計算步驟。」

演算法的條件

描述演算法所需五個條件.

演算法特性 內容&說明
輸入(Input) 0個或多個輸入資料,這些輸入必須有清楚的描述或定義
輸出(Output) 至少會有一個輸出結果,不可以沒有輸出結果
明確性(Definiteness) 每一個指令或步驟必須是簡潔明確而不含糊的
有限性(Finiteness) 在有限步驟後一定會結束,不會產生無窮迴路
有效性(Effectiveness) 步驟清楚且可行,能讓使用者用紙筆計算而求出答案

另外流程圖(Flow Diagram)也是相當通用的演算法表示法,使用某些圖形符號.

時間複雜度O(f(n))

要如何評量一個演算法的好壞呢?

可以就某個演算法的執行步驟來衡量執行時間的標準,涉及到變數儲存與運算式的複雜度,真正絕對精確的執行時間一定不一樣。
可以利用一種「概量」的觀念來衡量執行時間,稱為「時間複雜度」(Time Complexity)

O(f(n))可視為某演算法在電腦中所需執行時間不會超過某一常數倍的f(n),也就是當某演算法執行時間T(n)的時間複雜度.

時間複雜度只是執行次數的一個概略的量度層級,並非真的執行次數。而Big-oh是一種來表示最壞執行時間的表現方式,也是最常使用在描述時間複雜度的漸進式表示法.
常見的Big-oh有下列:

Big-oh 特色&說明
O(1) 稱為常數時間(constant time),表示演算法的執行時間是一個常數倍
O(n) 稱為線性時間(linear time),執行時間會隨著資料集合的大小而線性成長
O(log_2n) 稱為次線性時間(sub-linear time),成長速度比線性時間還慢,而比常數時間還快
O(n^2) 稱為平方時間(quadratic time),演算法的執行時間會成二次方的成長
O(n^3) 稱為立方時間(cubic time),演算法的執行時間會成三次方成長
(2^n) 稱為指數時間(exponential time),演算法的執行時間會成2的n次方成長
O(nlog_2n) 稱為線性成對數時間,介於線性及二次方程長的中間之行為模式

對於n>=16時m時間複雜度的優劣比較關係如:

    O(1) < O(log_2 n) < O(n) <O(nlog_2 n) < O(n^2) < O(n^3) < O(2^n)

接下來會介紹常用的演算法,來去學習以及應用
大概的主題包括:

1.演算法介紹
2.認識資料結構
3.排序演算法
4.搜尋與雜湊演算法
5.陣列與鏈結演算法
6.堆疊與佇列演算法
7.樹狀演算法
8.圖型演算法

這應該不會太難吧!!

要是哪裡理解上還是邏輯上有錯請各位大大指正,感謝。


下一篇
「Day2」最常見演算法I
系列文
Easy to learn Algorithm30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
hlb
iT邦新手 5 級 ‧ 2023-11-01 23:04:08

在時間複雜度的表格中,出現了不應該在那邊的「輸出(Output)」喔。

Easyfun iT邦新手 4 級 ‧ 2023-11-02 09:21:45 檢舉

是線性時間(linear time)才對,感謝指正!

我要留言

立即登入留言