플로이드 알고리즘을 활용한 풀이에서 거리를 무한대의 의미로 놓기 위해 사용하는 0x3f3f3f3f와 0x7fffffff에 대하여.

처음 플로이드 문제를 해결할때, 거리를 초기에 무한대로 놓기 위해서 내가 생각한 수는 0x7fffffff이었는데, 

다른 풀이의 코드에서는 초기값을 0x3f3f3f3f의 값을 사용하기에 이 두 값에 대해서 비교하는 검색을 해보았다. 

이러한 답변을 얻을 수 있었다. 

 

'0x3f3f3f3f'는 'int' 타입의 최댓값에 가까운 값으로, 특히 다익스트라 알고리즘과 같은 최단 경로 문제에서

초기 거리 배열을 무한대 값으로 초기화할 때 사용됩니다. 이 값은 'INT_MAX' 보다 작아서 오버플로우가

발생하지 않는 동시에 충분히 크기 때문에 무한대 값을 나타내기에 적합합니다. 

 

라는 표현이 있는데, 확실히 0x7fffffff의 경우 int 값의 최대 범위에서 완전 끝 값이기 때문에 혹시나 모를 연산에서 int 오버플로우가

발생할 수 있을텐데, 0x3f3f3f3f의 값은 대략 10억이 조금 넘는 범위이기 때문에 그러한 걱정은 하지 않아도 되는 값이면서, 

충분히 큰 값이다. 

물론 연산에서 무한대 값을 결정하고, 그 값들을 연산에 활용해서 더하고 빼고 하는 형태의 코드가 아니라면 둘다 사용해도 문제가 없겠으나

이러한 0x3f3f3f3f을 사용하는데에는 충분히 합당한 이유가 있음을 알 수 있었다. 

어떠한 값을 사용하여도 상관없겠으나, 0x3f3f3f3f의 값도 기억해두도록 하자. 오히려 0x7fffffff보다 알아보기 쉬운 면도 있어서 

무한대의 값을 사용할때 이 값을 사용하여도 좋을것 같다. 

 

  Comments,     Trackbacks