이산수학 3

수학적 귀납법과 재귀, 분할 정복

수학적 귀납법 수학 증명 기법중 하나 프로그래밍에서 자주 쓰이니 꼭 알아두자 증명방법 기본 단계 : 시작점 P(0)이 참임을 증명 귀납 가정 : 임의의 자연수 K에 대해 P(K)가 참일때, P(K + 1)도 참일 것이라는 가설을 세움. P(K) → P(K + 1) 귀납 단계 : 이 가설이 참임을 증명 결론 : 그럼 P(0)이 참이니 P(1)도 참이고, P(1)이 참이니 P(2)도 참. 이렇게 연쇄적으로 참이 돼서 모든 자연수 n에 대하여 P(n)이 참인것이 증명이됨. ex) 도미노게임을 이용한 예시 첫번째 도미노와 두번째 도미노를 일정한 간격에 두면 쓰러진다고 증명 마찬가지로 k번째 도미노와 k+1번째 도미노도 똑같을 거라 가정 실제로 된다는 걸 증명 첫번째 도미노부터 끝 도미노까지 쓰러진다는게 증명됨 ..

이산수학 2021.05.12

비트 마스킹

보통 우리가 짝수, 홀수를 구분한다면 코드를 이렇게 짤 것이다. num 의 짝, 홀수 구분코드 if(num % 2 == 0){} → num 이 짝수면 true if(num % 2 == 1){} → num 이 홀수면 true 여기서, 위의 홀수 코드는 if(num % 2 != 0){} → num 이 홀수면 true 이 코드가 더 좋다. 왜냐? 컴퓨터에서 0이랑 비교할 수 있으면 비교하는게 무조건 더 좋기 때문. (속도가 좀 더 빠르다. 근데 그렇게 큰 차이x) 이걸 비트 연산으로도 짝, 홀수를 구분할수가 있다. 2진수의 맨 오른쪽 비트가 0이면 짝수, 1이면 홀수임을 활용한것이다. if( (num & 0x1) == 0){} → num 이 짝수 즉 2^0 자리가 0이면 AND 연산으로 인하여 true가 됨...

이산수학 2021.05.11

실수를 표현하기 위한 IEEE 754 방식의 부동소수점

데이터의 표현법이 또 있다고??? 앞서 다뤘던것중에서 빠진것이 하나 있다. 바로 "실수" 실수는 뭐 학창시절에 배웠던 것처럼 정수 사이에있는 무수히 많이 표현할 수 있는 수들이다. 정수 0과 1 사이에는 무수히 많은 실수들이 존재한다. 거의 무한대라고 볼 수 있음. 소숫점을 이용해 표현할 수도 있고 분수를 이용해 표현할 수도 있는데 소수점을 이용해 많이 표현하는 것 같다. 자릿수 표현역시 2^-1 2^-2 .... 등등으로 표현함. 그럼 소수점 역시 2진수로 표현하는 법을 알아야겠지? 보통 10진수에서 2진수로 표현할때 정수같은 경우는 나눗셈을 한 나머지를 이용해 구했는데 실수의 경우 2씩 곱해서 나온 정수부분을 이용해 구하는데 거의 메커니즘이 비슷하다고 볼수 있다. 오 아주 간편한 방법이잖아? 하지만 ..

이산수학 2021.04.06