알고리즘 공부

<알고리즘/C++> 완전탐색(Exhaustive Search)

컴퓨터과학 2019. 10. 14. 11:46

Brute-Force Search라고도 부릅니다 찾아보니 BFS로는 사용하지 않는다고 합니다. 그래서 보통은 Exhaustive Search 아니면 Brute-Force Search 라고 합니다.

BFS는 보통 너비 우선 탐색 알고리즘을 뜻한다고 합니다.

말그대로 완전탐색은 하나씩 하나씩 전부 확인하면서 하는 탐색 기법입니다. 

소스코드를 보면 설명드리겠습니다.

예를들어 0~999까지의 랜덤한 데이터가 존재한다면  이 데이터의 두수의 합이 최대값이 얼마인가를 구한다고 가정을 합니다 당연히 유저는 여기 데이터의 숫자가 몇 인지 알 수 없습니다.

int N, arr[1000];
	cout << "랜덤에서 데이터의 숫자를 얼마를 얻을지 정하시오 1~1000:"<<endl;
	cin >> N;
	srand(NULL);
	
	for (int i = 0; i < N; i++) {
		arr[i] = rand() % 1000;
	}

그러면 MaxResult 를 arr[0](arr[i])와  arr[1](arr[j])부터 arr[999](arr[j])까지 각각 두수의 합을 더해줘서 비교해줍니다.

그리고 다시 arr[1](arr[i]) 와 arr[1](arr[j])을 제외한  arr[0](arr[j])부터 arr[999](arr[j])까지 각각의 두수의 합을 더해줘서 비교해줍니다.

계속 반복해서 ... 

이걸 arr[999](arr[i])와 arr[0](arr[j])부터 arr[998](arr[j])까지 각각 두수의 합을 더해줘서 비교해줍니다.

for (int i = 0; i < N; i++) {
		for (int j = 0; j < N; j++) {
			if(i!=j){
				if (MaxResult < arr[i] + arr[j]) {
					MaxResult = arr[i] + arr[j];
				}
			}
		}
	}

결과는 

cout << "최대값" << MaxResult << endl;

999+998 이라는 결과인 1997이라는 값이 나와야 합니다. 당연히 순서대로 하기 때문에 시간의 복잡도는 O(N^2)일겁니다.