티스토리 뷰
이 카테고리에서는 단순히 수학적 공식 혹은 지식을 깊게 다루진 않는다.
프로그래밍과 연관 지어서 유용하게 사용할 수 있는 수학적 지식을 다룬다.
1 + 2 + 3 + ... + n 의 결과는 무엇일까?
고등학교 교과과정에서 해당 식의 결과를 구하는 방법을 배웠다. 각 숫자의 나열을 수열이라 하고, 어떠한 규칙이냐에 따라 등차 혹은 등비로 나뉘었다. 해당 식의 경우 각 수열의 차가 1인 등차수열의 합이다.
해당 식은 간단하게 시그마(Σ)라는 기호를 사용하여 표현하였고, 시그마에 나오는 식의 종류나 형태에 따라 공식이 존재했다.
공식의 도출과정과 어떠한 형태로 코드에 나타날 수 있는지 프로그래머의 입장으로 다시 한번 식을 살펴보자.
먼저 공식의 도출 과정이다.
1 + 2 + 3 + ... + n을 나눠서 생각해보자,
만약 n이 짝수라면
첫째 숫자 1과 마지막 숫자 n 의 합 : n + 1
둘째 숫자 2와 마지막 전의 숫자 n-1의 합 : 2 + n - 1 = n + 1
셋째 숫자 3과 마지막 전전의 숫자 n-2 의 합 : 3 + n - 2 = n + 1
..
만약 n이 홀수라면
첫째 숫자를 0이라 하여 0과 마지막 숫자 n 의 합 : n
둘째 숫자 1와 마지막 전의 숫자 n-1의 합 : 1 + n - 1 = n
셋째 숫자 2과 마지막 전전의 숫자 n-2 의 합 : 2 + n - 2 = n
..
이런식으로 진행이 된다. 그렇다면
짝수일 때는 합이 n+1이 되는 쌍은 n/2개 나오고,
홀수일 때는 합이 n이 되는 쌍이 (n+1)/2 개 나온다
따라서 두 경우 모두 n(n+1)/2가 된다.
그렇다면 이러한 등차수열의 합은 프로그래밍에서 어떤 형태로 나타날까?
보통 중첩된 루프(nested loop)에서 이러한 형태를 많이 볼 수 있다.
예를 들어, 아래와 같은 코드의 시간 복잡도를 알아본다고 하자.
for(int i=0; i<n; i++){
for(int j=i+1; j<n; j++){
// do something
}
}
바깥쪽의 loop는 n번 도는게 자명하다.
안쪽의 loop는 어떤 식으로 동작할까?
i가 0일 때 n-1번
i가 1일 때 n-2번
i가 2일 때 n-3번
...
i가 n-1일 때 0번
이런 식으로 나아간다. 즉, 안쪽의 loop 순회는 등차수열의 공식에 따라 n(n-1)/2번이 수행된다고 볼 수 있고, 따라서 시간 복잡도는 O(n(n-1)/2) = O(n²)이다.
'IT > Math' 카테고리의 다른 글
[수학과 프로그래밍] Honor's Method (0) | 2022.10.07 |
---|---|
[수학과 프로그래밍] 2의 승수의 합 (등비수열의 합) (0) | 2022.08.17 |
[수학과 프로그래밍] 소수점을 이진수로 (0) | 2022.07.14 |
- Total
- Today
- Yesterday
- Tree
- C++
- ProblemSolving
- 코딩인터뷰
- 알고리즘
- LeetCode
- Interview
- coding interview
- 러스트 입문
- 내돈내산
- Medium
- 인터뷰
- 속초 맛집
- 자료구조
- 러스트 기초
- algorithm
- 트리
- DP
- 속초
- 러스트
- interview question
- 솔직후기
- Problem Solving
- rust
- 맛집
- PS
- 리트코드
- 기술면접
- 러스트 배우기
- 반드시 알아야 할 자료구조
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |