Algorithm101
SW λ¬Έμ ν΄κ²° μλμ΄λ?
: νλ‘κ·Έλ¨ μμ±μ μν λ§μ μ μ½ μ‘°κ±΄λ€κ³Ό μꡬμ¬νλ€μ μ΄ν΄νκ³ μ΅μ μ λ°©λ²μ μ°Ύμλ΄λ λ₯λ ₯
νλ‘κ·Έλλ¨Έκ° μ¬μ©νλ μΈμ΄, λΌμ΄λΈλ¬λ¦¬, μλ£κ΅¬μ‘°, μκ³ λ¦¬μ¦μ λν μ§μμ μ μ¬μ μμ μ°κ²°νμ¬ ν° κ·Έλ¦Όμ λ§λλ λ₯λ ₯
μκ³ λ¦¬μ¦μ ν¨μ¨
1. 곡κ°μ ν¨μ¨μ±κ³Ό μκ°μ ν¨μ¨μ±
곡κ°μ ν¨μ¨μ±μ μΌλ§λ λ§μ λ©λͺ¨λ¦¬ 곡κ°μ μνλκ°λ₯Ό λ§ν¨
μκ°μ ν¨μ¨μ±μ μΌλ§λ λ§μ μκ°μ μνλκ°λ₯Ό λ§ν¨
ν¨μ¨μ±μ λ€μ§μ΄ νννλ©΄ 볡μ‘λ (
Complexity
) κ° λλ€λ³΅μ‘λκ° λμμλ‘ ν¨μ¨μ±μ μ νλλ€
2. μκ°μ 볡μ‘λ λΆμ
νλμ¨μ΄ νκ²½μ λ°λΌ μ²λ¦¬μκ°μ΄ λ¬λΌμ§λ€
μννΈμ¨μ΄ νκ²½μ λ°λΌ μ²λ¦¬μκ°μ΄ λ¬λΌμ§λ€
κ·Έλμ, νμ΄λ¬ν νκ²½μ μ°¨μ΄λ‘ μΈν΄ λΆμμ΄ μ΄λ ΅λ€
3. 볡μ‘λμ μ κ·Όμ νκΈ°
μκ° (λλ 곡κ°) 볡μ‘λλ μ λ ₯ ν¬κΈ°μ λν ν¨μλ‘ νκΈ°νλλ°, μ΄ ν¨μλ μ£Όλ‘ μ¬λ¬κ°·μ νμ κ°μ§λ λ€νμμ΄λ€
O (Big-Oh) νκΈ°
1. μ μ
T(n): μ€νμκ°
T(n) <= c*f(n)μ΄ λλ μμ c, n0κ° μ‘΄μ¬ν λλ§ T(n) = O(f(n))μ΄λΌκ³ νλ€
λ¨, μμ cμ μ΄κΈ°κ° n0λ nμ κ°μ λ 립μ μ΄λ€
2. νκΈ°
O-νκΈ°
볡μ‘λμ μ κ·Όμ μνμ λνλΈλ€
볡μ‘λκ° T(n) = 2n^2 - 7n +4 μ΄λΌλ©΄, T(n)μ O νκΈ°λ O(n^2) μ΄λ€
T(n)μ λ¨μνλ ννμ n^2μ΄λ€
"μ΅μ μ κ²½μ°μλ μ΄λ§νΌμ λμ¨λ€"
Big-Omega νκΈ°
볡μ‘λμ μ κ·Όμ ννμ μλ―Ένλ€
"μ΅μν μ΄λ§νΌμ κ±Έλ¦°λ€"
Omega < Theta < Big O
μμ£Ό μ¬μ©νλ O-νκΈ°
O(1)
μμ μκ° (Constant time)
O(logn)
λ‘κ·Έ(λμ) μκ° (Logarithmic time)
O(n)
μ ν μκ° (LInear time)
O(nlogn)
λ‘κ·Έ μ ν μκ° (Log-linear time)
O(n^2)
μ κ³± μκ° (Quadratic time)
O(n^3)
μΈμ κ³± μκ° (Cubic time)
O(2^n)
μ§μ μκ° (Exponential time)
λΉνΈ μ°μ°
λΉνΈ μ°μ°μ
μ μλ 2byteλ‘, νΉμ 4byteλ‘ νκΈ°νκΈ°λ νλ€
λ²μλ₯Ό λμ΄ κ° λ
μμ λ²λ¦¬κ±°λ
보μ μ ν΄μ€λ€
μ μλ λΆνΈ λΉνΈκ° κ°μ₯ μμ λ€μ΄κ°λ€
N & 1
λ³μμ μ μ₯λ μμ μ μ κ°μ νμ μ§μ νλ³
N%2
% μ°μ°μΌλ‘ λ§μ§λ§ λΉνΈ κ°μ΄ 1μΈμ§ 0μΈμ§ νλ¨, μ§μ νμ νλ³
1 << n
2^nμ κ°μ κ°λλ€
μμκ° nκ°μΌ κ²½μ°μ λͺ¨λ λΆλΆμ§ν©μ μλ₯Ό μλ―Ένλ€
Power set
(λͺ¨λ λΆλΆ μ§ν©)곡μ§ν©κ³Ό μκΈ° μμ μ ν¬ν¨ν λͺ¨λ λΆλΆμ§ν©
κ° μμκ° ν¬ν¨λκ±°λ ν¬ν¨λμ§ μλ 2κ°μ§ κ²½μ°μ μλ₯Ό κ³μΌνλ©΄ λͺ¨λ λΆλΆμ§ν©μ μκ° κ³μ°λλ€
i & (1 << j) = (i >> j) &1
κ³μ° κ²°κ³Όλ iμ jλ²μ§Έ λΉνΈκ° 1μΈμ§ μλμ§λ₯Ό μλ―Ένλ€
λΉνΈ μ°μ°μ ^λ₯Ό λ λ² μ°μ°νλ©΄ μ²μ κ°μ λ°ννλ€
λΉνΈ μ°μ° μμ 1
μλμ (Endianness)
μ»΄ν¨ν°μ λ©λͺ¨λ¦¬μ κ°μ 1μ°¨μ 곡κ°μ μ¬λ¬ κ°μ μ°μλ λμμ λ°°μ΄νλ λ°©λ²μ μλ―Ένλ©° HW μν€ν μ²λ§λ€ λ€λ₯΄λ€
μ£Όμ!
μλ ν₯μμ μν΄ λ°μ΄νΈ λ¨μμ μλ λ¨μλ₯Ό λ³ννμ¬ μ°μ° ν λ μ¬λ°λ‘ μ΄ν΄νμ§ μμΌλ©΄ μ€λ₯λ₯Ό λ°μ μν¬ μ μλ€
λΉ
μλμ (Big-endian)
λ³΄ν΅ ν° λ¨μκ° μμ λμ΄
λ€νΈμν¬
ex) internet protocol, IBM z/architecture (λν μ»΄ν¨ν° μΌλΆλ§..)
리ν μλμ (Little-endian)
μμ λ¨μκ° μμ μ΄
λλ€μ λ°μ€ν¬ν μ»΄ν¨ν°
ex) Intel, ARM processor
μλμ νμΈ μ½λ
Python μμ μλμ λ³ν
μ§μ
2μ§μ, 8μ§μ, 10μ§μ, 16μ§μ
10μ§μ -> ν μ§μλ‘ λ³ν
μνλ ν μ§λ²μ μλ‘ λλ λ€ λλ¨Έμ§λ₯Ό κ±°κΎΈλ‘ μ½λλ€
μ»΄ν¨ν°μμ μμ μ μ νν λ°©λ²
1μ 보μ
λΆνΈμ μ λκ°μΌλ‘ ννλ κ°μ λΆνΈ λΉνΈλ₯Ό μ μΈ ν λλ¨Έμ§ λΉνΈλ€μ 0μ 1λ‘, 1μ 0μΌλ‘ λ³ν
2μ 보μ
1μ 보μλ°©λ²μΌλ‘ ννλ κ°μ μ΅νμ λΉνΈμ 1μ λνλ€
μ€μ
μ€μμ νν
μ»΄ν¨ν°λ μ€μλ₯Ό νννκΈ° μν΄ λΆλ μμμ (floating-point) νκΈ°λ²μ μ¬μ©νλ€
λΆλ μμμ νκΈ° λ°©λ²μ μμμ μ μμΉλ₯Ό κ³ μ μμΌ νννλ λ°©μμ΄λ€
μμμ μ μμΉλ₯Ό μΌμͺΌκ·Έμ΄ κ°μ₯ μ ν¨ν μ«μ λ€μμΌλ‘ κ³ μ μν€κ³ λ°μμ μ§μμΉμΌλ‘ νν
ex) 10001.0011 -> 1.0010011x 2^3
μ€μλ₯Ό μ μ₯νκΈ° μν νμ
λ¨μ λ μ€μ (32λΉνΈ)
float
λ°°μ λ μ€μ (64λΉνΈ)
double
pythonμ floatμ΄λΌκ³ ννν¨
μ»΄ν¨ν°λ μ μλ₯Ό κ·Όμ¬μ μΌλ‘ νννλ€
μ΄μ§λ²μΌλ‘ νν ν μ μλ ννμ μ€μλ μ νν κ°μ΄ μλλΌ κ·Όμ¬ κ°μΌλ‘ μ μ₯λλλ°, μ΄λ μκΈ°λ μμ μ€μ°¨κ° κ³μ° κ³Όμ μμ λ€λ₯Έ κ²°κ³Όλ₯Ό κ°μ Έμ¨λ€
μ€μ μλ£νμ μ ν¨ μλ¦Ώμ
32 λΉνΈ μ€μν μ ν¨ μλ¦Ώμ (10μ§μ κΈ°μ€) ->
6
64 λΉνΈ μ€μν μ ν¨ μλ¦Ώμ (10μ§μ κΈ°μ€) ->
15
νμ΄μ¬μ μ«μ μλ£ν
μ«μν (Number)
μ«μν(Number)μ΄λ μ«μ ννλ‘ μ΄λ£¨μ΄μ§ μλ£ν
μ μ
123, -345, 0
μ€μ
123.45, -1234.5, 3.4e10
8μ§μ
0o34, 0o25
16μ§μ
0x2A, 0xFF
μ μν
μ μν(Integer)μ΄λ λ§ κ·Έλλ‘ μ μλ₯Ό λ»νλ μλ£νμ λ§νλ€.
ex) μμ μ μμ μμ μ μ, μ«μ 0μ λ³μ aμ λμ νλ μ
μ€μν
νμ΄μ¬μμ μ€μν(Floating-point)μ μμμ μ΄ ν¬ν¨λ μ«μλ₯Ό λ§νλ€.
ex) μ€μλ₯Ό λ³μ aμ λμ νλ μ
μΌλ°μ μΌλ‘ λ³Ό μ μλ μ€μνμ μμμ νν λ°©μ
"μ»΄ν¨ν°μ μ§μ νν λ°©μ"
νμ΄μ¬μμλ 4.24e10 λλ 4.24E10μ²λΌ νννλ€
eμ E λ μ€ μ΄λ κ²μ μ¬μ©ν΄λ 무방
μ¬κΈ°μ 4.24E10μ 4.24β10104.24β1010, 4.24e-10μ 4.24β10β104.24β10β10μ μλ―Έν¨
8μ§μμ 16μ§μ
8μ§μ(Octal)λ₯Ό λ§λ€κΈ° μν΄μλ μ«μκ° 0o λλ 0O(μ«μ 0 + μνλ²³ μλ¬Έμ o λλ λλ¬Έμ O)λ‘ μμνλ©΄ λλ€.
16μ§μ(Hexadecimal)λ₯Ό λ§λ€κΈ° μν΄μλ 0xλ‘ μμνλ©΄ λλ€.
Last updated