소프트웨어 공부/자료구조
[자료구조] 간단한 이차문제 선형으로 해결하기 (속도향상의 간단 예)
야곰야곰+책벌레
2021. 11. 5. 10:16
728x90
반응형
배열의 중복 값이 있는지 확인하는 함수를 만든다고 해보자. 가장 먼저 떠오리는 방법은 중첩 for문을 이용하는 것이 아닐까 싶다.
bool hasDuplicateVal(int* list, unsigned int len)
{
for (int i=0; i<len; i++)
for (int j = 0; j < len; j++)
{
if (i != j && list[i] == list[j])
return true;
}
return false;
}
이 코드는 잘 동작하지만 비효율적이다. N * N 단계가 필요하다.
이 부분을 선형적으로 바꿔 보자. 배열이 가지는 범위를 정하고 range라는 추가 정보를 만들자.
bool hasDuplicateVal2(int* list, unsigned int len, unsigned int range)
{
bool *existInt = new bool[range + 1];
memset(existInt, 0, sizeof(existInt));
for (int i = 0; i < len; i++)
{
int val = list[i];
if (existInt[val])
{
delete existInt;
return true;
}
else
existInt[val] = true;
}
delete existInt;
return false;
}
검색하는 동안 찾은 데이터를 기록해 두면 일일이 검색할 필요가 없게 된다. 물론 데이터의 range를 정확하게 알 때 더 유용할 것 같다.
728x90
반응형