ํฐ์คํ ๋ฆฌ ๋ทฐ
์๊ฐ ๋ณต์ก๋ ํ๊ธฐ - ์ ๊ทผ์ ํ๊ธฐ๋ฒ (Big-O, Big-Θ, Big-โฆ)
Horang๐ฏ 2024. 1. 29. 00:38
์๊ฐ ๋ณต์ก๋ ๊ฐ๋ ์ ์์์ผ๋..
์ด์ ์๊ฐ ๋ณต์ก๋๋ฅผ ์ด๋ป๊ฒ ํ๊ธฐํ๋ ์ง ์์๋ด ์๋ค !!
(์์ง๋ ์๊ฐ ๋ณต์ก๋๊ฐ ๋ญ์ง ๋ชจ๋ฅด์ ๋ค๋ฉด.. ์๋ ํ์ธํด๋ณด์ธ์ ๐)
์๊ฐ ๋ณต์ก๋ (Time Complexity), ๊ทธ๋ฆฌ๊ณ ๊ณต๊ฐ ๋ณต์ก๋ (Space Complexity)
๋ค์ ๊ธฐ์ต์ ๋์ด๋ ค๋ณด๋ฉด,
์ฐ๋ฆฌ๋ ์๊ฐ ๋ณต์ก๋๋ฅผ ์ธก์ ํ ๋
์ต์ ์ ์ํฉ์ ๊ฐ์ ํ๊ณ , ์ํ์๊ฐ์ ์ธก์ ํ๋ค๊ณ ํ์ต๋๋ค.
๊ทธ๋ ๋ค๋ฉด ๋ฐ์ดํฐ n๊ฐ๊ฐ ๋ค์ด์์ ๋ ์ต์ ์ ์ํฉ์ ๊ฐ์ ํ๋ค๋ฉด,
n๊ฐ์ ์ ๋ ฅ์ ๋ํ ๊ธฐ๋ณธ ์ฐ์ฐ ์ํ ํ์๋ฅผ n์ ๊ดํ ์์ผ๋ก ๋ํ๋ผ ์ ์๊ฒ ์ฃ ?!
(๋ฌด์จ ๋ง์ธ์ง ๋ชจ๋ฅด์๊ฒ ๋ค๊ณ ์..? ์๋ ์์๋ฅผ ๋ณด๋ฉด ์ดํด๊ฐ์ค ๊ฑฐ์์! )
์ ๋ฒ์ ๋ดค๋ ์ฝ๋๋ก ์๋ฅผ ๋ค์ด๋ณด๊ฒ ์ต๋๋ค !
์๋ ํจ์๋ ๋ฐฐ์ด์์ ์ ์ผ ํฐ ์์๋ฅผ ๊ตฌํ๋ ํจ์์ ๋๋ค.
// Swift
func findMaxValue(numbers: [Int]) -> Int {
// ๋ฐฐ์ด์ ์ฒซ ๋ฒ์งธ ์์๋ฅผ ์ด๊ธฐ ์ต๋๊ฐ์ผ๋ก ์ค์
var maxValue = numbers[0]
// ๋๋จธ์ง ์์๋ค๊ณผ ๋น๊ตํ์ฌ ์ต๋๊ฐ ๊ฐฑ์
for number in numbers {
if number > maxValue {
maxValue = number
}
}
return maxValue
}
๋ถ๋ช , ์ด์ ๊ธ์์๋
์ ํํ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ตฌํ ์ ์๋ค๊ณ ๋์ด ๊ฐ์ง๋ง,
๋ง์ฝ, ์ต์ ์ ์ํฉ์ ๊ฐ์ ํ๋ค๋ฉด ๊ตฌํ ์ ์์ง ์์๊น์?
ํ ๋ฒ ๊ตฌํด๋ด ์๋ค !
์์ ํจ์์์ ์ต์ ์ ์ํฉ์ ๋ฌด์์ผ๊น์?
numbers ๋ฐฐ์ด์์ ๊ฐ์ฅ ํฐ ์์๊ฐ ์ ์ผ ๋์ ์์นํ๋ค๋ฉด
๋ชจ๋ ๊ฒฝ์ฐ์ ์ฐ์ฐ์ ํด์ผ์ง๋ง ์ต๋ ๊ฐ์ ์ฐพ์ ์ ์์ ๊ฒ๋๋ค.
(if๋ฌธ ๋ด์ ์ฐ์ฐ์ด ๋ง์ด ์ผ์ด๋๋ ๊ฒฝ์ฐ๊ฐ ์ต์ ์ ์ํฉ์ด๊ฒ ์ฃ !)
๊ทธ๋ ๋ค๋ฉด ๋ฐฐ์ด์ ์์ ๊ฐ์๋ฅผ n์ด๋ผ ํ๊ณ , n์ ์ด์ฉํ์ฌ ์๊ฐ ๋ณต์ก๋ T(n)์ ํํํด๋ด ์๋ค !
(๋ฐ๋ณต๋ฌธ์ number์ ๋์ ์ฐ์ฐ์ ์นด์ดํธํ์ง ์์ต๋๋ค !)
ํจ์๊ฐ ์คํ์ด ๋๋ฉด,
maxValue์ ์์๋ฅผ ์ ์ฅํ๋๋ฐ ์ฐ์ฐ์ด 1๋ฒ ์คํ
for๋ฌธ์์ ๋ฐฐ์ด์ ๊ธธ์ด๊ฐ n์ด๊ธฐ ๋๋ฌธ์, ๋ฐ๋ณต๋ฌธ ๋ด์ if๋ฌธ ์ฐ์ฐ์ด n๋ฒ ์คํ
if๋ฌธ ๋ด์ ๋์ ์ฐ์ฐ์ ์ฒซ ๋ฒ์งธ ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ๊ณ , ๋งค ๋ฒ ์คํ์ด ๋๊ธฐ ๋๋ฌธ์ n-1๋ฒ ์คํ
(์ฒซ ๋ฒ์งธ ์ํฉ์์ if๋ฌธ์ ์กฐ๊ฑด์ด false๊ฐ ๋์ค๋๊น ๋์ด๊ฐ์!)
๋ฐ๋ผ์, ์ด 2n์ ์๊ฐ ๋ณต์ก๋๊ฐ ๋์ค๊ฒ ๋ฉ๋๋ค!
๋ค์ ๋งํด, ๋ฐฐ์ด์ ์์ ๊ฐ์๊ฐ 200์ด๋ผ๋ฉด
์ต์ ์ ๊ฒฝ์ฐ์ 400๋ฒ์ ์ฐ์ฐ์ด ๋ฐ์ํ๋ค๋ ๋ง์ด์ฃ !
ํ์ง๋ง, ์ด๋ ๊ฒ ๋งค ๋ฒ์ต์ ์ ์ ๋ ฅ์ ๋ํ ๊ธฐ๋ณธ ์ฐ์ฐ์ ํ์๋ฅผ
์ ํ์ ๊ตฌํ๋ ๊ฑด ์ผ๋ฐ์ ์ผ๋ก ๊ท์ฐฎ๊ณ ๊น๋ค๋กญ์ต๋๋ค.
๊ทธ๋ ๋ค๋ฉด..
๋ค์ ์ฒ์์ผ๋ก ๋์๊ฐ์, ์๊ฐ ๋ณต์ก๋๋ฅผ ์ ๊ตฌํ๋ ์ง ์๊ฐ ํด๋ด ์๋ค!
์ฐ๋ฆฌ๋ ์๊ฐ๋ณต์ก๋๋ฅผ ํจ์๊ฐ ์ ํํ ๋ช ๋ฒ ์ฐ์ฐ์ ํ๋ ์ง๋ฅผ ๊ตฌํ๊ธฐ ๋ณด๋ค๋,
ํด๋น ์๊ณ ๋ฆฌ์ฆ์ด ์ผ๋ง๋ ๋น ๋ฅด๊ณ , ๋๋ฆฐ์ง๋ฅผ ๋น๊ตํ๊ธฐ ์ํด ๊ตฌํ๋ ๊ฒ์ ๋๋ค.
๋ค์ ๋งํด, ๋ฐ์ดํฐ์ ํฌ๊ธฐ n์ด ์ปค์ง ๋,
์ํ ์๊ฐ์ ์ฆ๊ฐํ๋ ์ ๋๋ฅผ ํจ์ฌ ์ค์ํ๊ฒ ์๊ฐํ๋ค๋ ๊ฒ ์ ๋๋ค.
๊ทธ๋์ ์ฐ๋ฆฌ๋ ์ ๋ ฅ ๊ฐ์ ํฌ๊ธฐ์ ๋ฐ๋ฅธ ํจ์์ ์ฆ๊ฐ๋,
์ฆ ์ฑ์ฅ๋ฅ (rate of growth)๋ง์ ์ง์คํด์ ๋ณด๊ธฐ ์ํด, ์ค์ํ์ง ์์ ๋ถ๋ถ์ ์์์ ์ ๊ฑฐํ์ฌ ๋ณด๊ธฐ๋ก ํ์ต๋๋ค.
์ด๊ฒ์ ๋ฐ๋ก ์ ๊ทผ์ ํ๊ธฐ๋ฒ(asymptotic notation)์ด๋ผ๊ณ ํ๊ณ ,
์ ๊ทผ์ ํ๊ธฐ๋ฒ์๋ ๋ค์ 3๊ฐ์ง ํํ๊ฐ ์์ต๋๋ค.
๋ฐ๋ก Big-Θํ๊ธฐ๋ฒ, Big-O ํ๊ธฐ๋ฒ, ๊ทธ๋ฆฌ๊ณ Big-โฆํ๊ธฐ๋ฒ์ ๋๋ค.
ํ๋์ฉ ์ฐจ๋ก๋๋ก ๋ณด๊ฒ ์ต๋๋ค.
๋น ์ค ํ๊ธฐ๋ฒ (Big O)
๋น ์ค ํ๊ธฐ๋ฒ์ ์ฃผ๋ก ์ ๊ทผ์ ์ํ๋ง์ ๊ณ ๋ คํ์ฌ ์คํ ์๊ฐ์ ํ๊ธฐํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
๊ฐ๋จํ ๋งํ๋ฉด,
์ด ๊ธฐ์ค์ ์ต์ ์ ๊ฒฝ์ฐ์๋ ํน์ ํจ์๋ฅผ ๋์ง ์๋๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
์์ ๊ทธ๋ํ๋ฅผ ์ดํด๋ณด๋ฉด n์ด ์ถฉ๋ถํ ํฐ ๊ฐ์ผ ๋,
running time์ด k·f(n)์ ๊ทธ๋ํ๋ฅผ ๋์ง ์๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
์ด ๋, ์ฐ๋ฆฌ๋ ์คํ ์๊ฐ์ f(n)์ ๋น ์ค(O)๋ก ๋ํ๋ธ๋ค๊ณ ๋งํฉ๋๋ค.
์ฌ๊ธฐ์ ์ฐ๋ฆฌ๋ k์ ๊ฐ์ ์์๋ฅผ ์ ์ธํ๊ณ ํจ์ f(n)์ ์ง์คํฉ๋๋ค.
์ข ๋ ์ฝ๊ฒ ์ค๋ช ํ๋ฉด...!
์น๊ตฌ๊ฐ ์ํ ์ด์์จ์ ๋ํด ๋ฌผ์ด๋ดค์ ๋, ํ์ฌ ์ ํํ ์ด์์จ์ ๋ชจ๋ฅด์ง๋ง
๋ฒ์ ์ต๊ณ ์ด์์จ์ ์๊ณ ์๋ค๊ณ ๊ฐ์ ํด ๋ด ์๋ค.
ํ์ฌ ๋ฒ์ ์ต๊ณ ์ด์์จ์ด ์ฐ 20%์ด๋ผ๋ฉด,
์ด์์จ์ด 20%๋ ๋์ง ์์ ๊ฒ์ด๋ผ๊ณ ๋๋ตํ ์ ์์ ๊ฒ์ ๋๋ค.๐
๋น ์ค๋ฉ๊ฐ ํ๊ธฐ๋ฒ (Big-โฆ)
๋น ์ค๋ฉ๊ฐ ํ๊ธฐ๋ฒ์ ์ฃผ๋ก ์ ๊ทผ์ ํํ๋ง์ ๊ณ ๋ คํ์ฌ ์คํ ์๊ฐ์ ํ๊ธฐํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
๊ฐ๋จํ ๋งํ๋ฉด,
์ด๋ ์ต์ํ์ ์คํ ์๊ฐ์ ํํํ๋ ๊ฒ์ผ๋ก, ์ต์ ์ด๋ ์ ๋ ๊ฑธ๋ฆฌ๋์ง๋ฅผ ๋ํ๋ ๋๋ค.
์์ ๊ทธ๋ํ๋ฅผ ์ดํด๋ณด๋ฉด
n์ด ์ถฉ๋ถํ ํฐ ๊ฐ์ผ ๋, running time์ด k·f(n)์ ๊ทธ๋ํ๋ฅผ ํญ์ ๋๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
์ด ๋, ์ฐ๋ฆฌ๋ ์คํ ์๊ฐ์ f(n)์ ๋น ์ค๋ฉ๊ฐ(โฆ)๋ก ๋ํ๋ธ๋ค๊ณ ํฉ๋๋ค.
๋น ์ค์ ๋ง์ฐฌ๊ฐ์ง๋ก ์์ k๋ ์ ์ธํ๊ณ ๋ด ๋๋ค.
์ด๊ฒ๋ ์ฝ๊ฒ ์ค๋ช ํด๋ณด๋ฉด...!
์ด๋ฒ์๋ ๋ฒ์ค๋น๋ฅผ ์๊ฐํด๋ด ์๋ค!
์ด๋ค ์ฌ๋์ด ์์ฆ ๋ฒ์ค๋น๊ฐ ์ผ๋ง์ธ์ง ๋ฌผ์ด๋ณด์๋ค๊ณ ๊ฐ์ ํด ๋ด ์๋ค.
ํ์ฌ ์ ํํ ๋ฒ์ค๋น๋ ๋ชจ๋ฅด์ง๋ง ์ด๋ฆด ๋ ๋๋ 1000์๋ณด๋ค๋ ๋น์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ฌ
์ต์ํ 1000์๋ณด๋ค๋ ๋ ๋น์ ๊ฒ์ด๋ผ๊ณ ๋๋ตํ ์ ์์ ๊ฒ์ ๋๋ค. ๐ค
๋น ์ธํ ํ๊ธฐ๋ฒ (Big-Θ)
๋น ์ธํ ํ๊ธฐ๋ฒ์ ์ ๊ทผ์ ์ํ๊ณผ ํํ์ ๋ชจ๋ ๊ณ ๋ คํ์ฌ ์คํ ์๊ฐ์ ํ๊ธฐํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
๊ฐ๋จํ ๋งํ๋ฉด,
์ต์ ๋ฐ ์ต๋ ์คํ ์๊ฐ์ ๋์์ ๊ณ ๋ คํ์ฌ ํน์ ํจ์์ ๋ฒ์๋ฅผ ํํํฉ๋๋ค.
์์ ๊ทธ๋ํ๋ฅผ ์ดํด๋ณด๋ฉด n์ด ์ถฉ๋ถํ ํฐ ๊ฐ์ผ ๋,
running time์ด kโ·f(n)๊ณผ kโ·f(n)์ ๊ทธ๋ํ๋ฅผ ๋์ง ์๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
์ด ๋, ์ฐ๋ฆฌ๋ ์คํ ์๊ฐ์ f(n)์ ๋น ์ธํ(Θ)๋ก ๋ํ๋ธ๋ค๊ณ ํฉ๋๋ค.
์ฌ๊ธฐ์๋ ๋น ์ค์ ๋น ์ค๋ฉ๊ฐ์ ๊ฐ์ด ์์ k๋ ์ ์ธํ๊ณ ํจ์ f(n)์ ์ง์คํฉ๋๋ค.
์ข ๋ ์ฝ๊ฒ ์ค๋ช ํ์๋ฉด...! (๋ง์ง๋ง~)
์ด๋ฒ์๋ ์น๊ตฌ๊ฐ ํ๊ต๊น์ง ๊ฐ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ๋ํด ๋ฌผ์ด๋ดค๋ค๊ณ ์์ํด ๋ด ์๋ค!
ํ๊ต๊น์ง ๊ฐ๋ ๋ฐฉ๋ฒ์ ๋ฐ๋ผ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ์
๊ฐ์ฅ ์ค๋ ๊ฑธ๋ฆฌ๋ ๊ฒฝ์ฐ์ ๊ฐ์ฅ ์งง๊ฒ ๊ฑธ๋ฆฌ๋ ๊ฒฝ์ฐ์ ์ค๊ฐ๊ฐ์ ๊ณ ๋ คํ๊ธฐ๋ก ํ์ต๋๋ค.
๊ฐ์ฅ ์ค๋ ๊ฑธ๋ฆฌ๋ ๊ฒฝ์ฐ๋ ํ๊ต๊น์ง ๊ฑธ์ด๊ฐ๋ ์๊ฐ์ด๊ณ
(์ด๊ฒ์ ๋น ์ค๋ก ํํํ ์๋ ์๊ฒ ์ฃ !)
๊ฐ์ฅ ๋นจ๋ฆฌ ๊ฐ ์ ์๋ ๋ฐฉ๋ฒ์ ๋ถ๋ชจ๋์ด ์ฐจ๋ก ๋ฐ๋ ค๋ค์ฃผ๋ ๊ฒ์ ๋๋ค.
(์ด๊ฑด ๋น ์ค๋ฉ๊ฐ!)
๋ฐ๋ผ์ ๋ ์๊ฐ์ ์ค๊ฐ๊ฐ์ ์น๊ตฌ์๊ฒ ๋๋ตํ๋ ๊ฒ์ ๋๋ค.
(์ด๊ฑด ๋น ์ธํ!)
๋ง๋ฌด๋ฆฌ
์ฐ๋ฆฌ๋ ๊ณ์ฐ์ด ๊น๋ค๋ก์ด ํ๊ท ๋์ ์,
์ต์ ์ ์ํฉ์ ๋ํ๋ด๋ ๋น ์ค ํ๊ธฐ๋ฒ์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค.
์ ์ฒด์ ์ธ ์๊ฐ ๋ณต์ก๋์ ํ๊ธฐ๋ฒ๋ค์ ๋ํด์ ์์ธํ ์์๋ดค์ผ๋,
๋ค์ ๋ฒ์๋ ๋น ์ค ํ๊ธฐ๋ฒ์ ํน์ง๊ณผ ์ข ๋ฅ์ ๋ํด์ ์์๋ณด๊ฒ ์ต๋๋ค. ๐ค
(์๊ฐ๋ณด๋ค ์์ฑํ๋ ์๊ฐ์ด ๊ฝค ๊ฑธ๋ ค์.. ๊ณต๋ถ ์๊ฐ์ด ๋ถ์กฑํ๋ฉด ์กฐ๊ธ ๋์ค์ ์ธ๊ฒ์..!)
๐ ์ฐธ๊ณ ์๋ฃ
ํ๊ตญ์ธ๋ ์ ์ฐฌ์ ๊ต์๋์ Data Structures with Python ๊ฐ์
https://www.tutorialspoint.com/data_structures_algorithms/asymptotic_analysis.htm
https://chayan-memorias.tistory.com/100
'Computer > Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์๊ฐ ๋ณต์ก๋ (Time Complexity), ๊ทธ๋ฆฌ๊ณ ๊ณต๊ฐ ๋ณต์ก๋ (Space Complexity) (0) | 2024.01.18 |
---|
- 10808
- ์์ด ๊ณต๋ถ
- ์๋ฃ ๊ตฌ์กฐ
- root view controller
- 5397
- Swift
- ์๋ฐฉํฅ ์ฐ๊ฒฐ ๋ฆฌ์คํธ
- ์คํ
- ๊ท๋๋ผ๋ฏธ ์์ด
- 2024๋ ๋ชฉํ
- 4949
- gitkraken
- ๊ท ํ์กํ ์ธ์
- remainder
- BOJ
- ๊ท๋๋ผ๋ฏธ ์์ด
- ๊ดํธ์ ๊ฐ
- C++
- tipkit
- Anyobject
- ์ ๋ง๋๊ธฐ
- ๋ฒ์ฉ๊ณ ์ ์๋ณ
- ํ
- pageViewController
- Container View Controller
- ๋จ์ผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ
- containerView
- ๊ณต๊ฐ ๋ณต์ก๋
- ์์ด ๋ด์ค
- 2023๋ ํ๊ณ
- Total
- Today
- Yesterday