알고리즘 - 프로그래밍 기법

Algorithm

나머지 연산

(a+b) mod m = (a mod m + b mod m) mod m

(a-b) mod m = (a mod m - b mod m) mod m

(a*b) mod m = (a mod m * b mod m) mod m

재귀적 알고리즘

부분집합 생성하기

void search(int x){
	if(k==n+1){
		//부분집합 처리
	}
	else{
		subset.push_back(k);
		search(k+1);
		subset.pop_back();
		search(k+1);
	}
}

순열 생성하기

void search(){
	if(permutation.size()==n){
		//순열처리
	}
	else{
		for(int i=1;i<=n;i++){
			if(check[i]) continue;
			check[i]=true;
			permutation.push_back(i);
			search();
			check[i]=false;
			permutation.pop_back();
		}
	}
}

퇴각검색

수정예정

비트연산

x « k 왼쪽 시프트 연산은 정수의 오른쪽에 비트 0을 k개 덧붙이는 연산이다.

x » k 오른쪽 시프트 연산은 정수의 오른쪽 비트 k개를 제거하는 연산이다.

왼쪽 시프트는 x에 2^k를 곱하는 것과 같다.

오른쪽 시프트는 x에 2^k로 나눈 후 정수로 내림 한 것과 같다.

회고

백트레킹 부분을 좀 더 보강해야하고, 비트마스킹에 대한 흐름을 이해하게 되었다. 이번 장에서는 딱히 자세하게 정리할 부분이 없기에 빠르게 넘어가도록 하겠다.