Algorithm
Algorithm_SW문제해결
Sergemeow
2023. 4. 10. 16:58
문제해결 과정
- 문제를 읽고 이해
- 문제를 익숙한 용어로 재정의
- 어떻게 해결할지 계획을 세움
- 계획을 검증
- 프로그램으로 구현
- 풀이를 돌아보고 개선 방법 여부 확인
복잡도 분석
- Big-Oh 표기
- O-표기는 복잡도의 점근적 상한을 나타냄
- 복잡도가 f(n) = 2N2-7n+4라면, f(n)의 O-표기는 O(n2)임
- 먼저 f(n)의 단순화된 표현은 n2
- 단순화된 함수 n2에 임의의 상수 c를 곱한 cn2이 n이 증가함에 따라 f(n)의 상한이 됨
- 자주 사용하는 O- 표기
- O(1) 상수시간 constant time
- O(logn) 로그(대수)시간 logarithmic time
- O(n) 선형시간 linear time
- O(nlogn) 로그 선형시간 log-linear time
- O(n2) 제곱시간 quadratic time
- O(n3) 세제곱시간 cubic time
- O(2n) 지수시간 exponential time
def Bbit_print(i):
output = ""
for j in range(7, -1, -1):
output += "1" if i & (1 << j) else "0"
print(output)
for i in range(-5, 6):
print("%3d = "%i, end='')
Bbit_print(i)
...
-5 = 11111011
-4 = 11111100
-3 = 11111101
-2 = 11111110
-1 = 11111111
0 = 00000000
1 = 00000001
2 = 00000010
3 = 00000011
...
def Bbit_print(i):
output = ''
for j in range=(7, -1, -1):
output += '1' if i & (1<<j) else '0'
print(output, end='')
a= 0x10 # 16진수
x= 0x01020304
print('%d = ' % a, end = '')
Bbit_print(a)
print()
print('0%X = ' % x, end ='')
for i in range(0, 4):
Bbit_print((x >> i*8) & 0xff)
엔디안(Endianness)
- 컴퓨터의 메모리와 같은 1차원 공간에 여러 개의 연속된 대상을 배열하는 방법을 의미하며 HW 아키텍처마다 다름
- 속도향상을 위해 바이트 단위와 워드 단위를 변환하여 연산할 때 올바로 이해하지 않으면 오류를 발생시킬 수 있음
- 빅엔디안(Big-endian): 보통 큰 단위가 앞에 나옴. 네트워크
- 리틀엔디안(Little-endian): 작은 단위가 앞에 나옴. 대다수의 데스크탑 컴퓨터
예)
0x1234를 빅엔디안으로는 12 34, 리틀엔디안으로는 34 12가 됨
- 명제
- 참이나 거짓을 알 수 있는 식이나 문장
- p, q, r … 로 표현
- 1 + 1 = 3
- 진릿값
- 참이나 거짓을 표현
- T, F 혹은 1, 0
연산(결합)
- 부정 Not
- p가 명제일 때, 명제의 진릿값이 반대
- ~p 또는 -p로 표기 (not p 또는 p의 부정으로 읽음)
- 논리곱 And
- p, q가 명제일 때, p,q 모두 참일 때만 참이 되는 명제
- p ^ q(p and q, p 그리고 q)
- 논리합 OR
- p, q가 명제일 때, p,q 모두 거짓일 때만 거짓이 되는 명제
- p V q (p or q, p또는 q)
- 배타적 논리합 XOR
- p, q가 명제일 때, p, q 중 하나만 참일 때 참이되는 명제
연산자 우선 순위
-
- V, ^ > →, ←—→
- 항진명제: 진릿값이 항상 참
- 모순명제: 진릿값이 항상 거짓
- 사건명제: 항진명제도 모순명제도 아닌 명제
- 조건 명제
- p, q가 명제일 때, 명제 p가 조건(또는 원인), q가 결론(또는 결과)로 제시되는 명제
- p → q (p이면 q이다)
- 쌍방조건명제
- p, q가 명제일 때, 명제 p와 q가 모두 조건이면서 결론인 명제
- p ↔ q (p면 q이고, q면 p다)
- 조건명제의 역, 이, 대우
- 역: q → p
- 이: -p → -q
- 대우: -q → -p
- 이: 100점을 받지 않으면 치킨을 사주지 않는다
- 명제: 100점을 받으면 치킨을 사준다
수와 표현
- 컴퓨터는 0/1을 표현할 수 있는 비트들을 모아 수를 표현
- k개의 비트를 사용하면 0부터 2^k-1까지 표현 가능
- 꼭 위와 같은 범위인 것은 아니고, 어떤 경우든 최대 2^k가지 값을 표현하는 것이 가능
- 10진수로 k자리까지 쓰면 0부터 10^k-1까지 표현이 가능한 것과 완전히 동일한 과정
- x = logn일 때 x와 n을 비교하면 x가 더 작고, n이 커질수록 그 차이가 굉장히 달라짐
- 100자리로 표현할 수 있는 10진수 값은 읽을 수도 없을 정도로 큰 값
- 컴퓨터분야에서 로그의 밑은 항상 2