0203peter   2년 전

런타임 에러가 어디서 발생하는건지 모르겠습니다 대답 주시면 감사하겠습니다

euphoric_n   2년 전

문자열 해싱을 통해 중복을 찾아내시려는 것으로 보입니다만

18번줄 f += (j+1)*pow(p1[i].second[j], j+1);

에서 최대 f += 50 * pow(122, 50); 으로 int 자료형으로는 감당이 안되는 수가 더해집니다. (122는 'z'의 ASCII 값)

또한 정상적으로 계산되더라도 213169 * 50은 1000만이 넘습니다. 따라서 ttl 값이 배열 인덱스를 초과할 수도 있겠지요.

게다가 26종류의 알파벳이 50개나 포함될 수 있는 문자열을 1000만개 해쉬값중 하나로 해싱하는것은 의미가 없습니다.

문자열을 구성하는 경우의 수는 무려 26 + 26^2 + 26^3 + ... + 26^50 입니다.

이를 0~1000만 사이의 값으로 해싱한다면 서로 다른 여러 문자열이 같은 해쉬값을 가져 의미가 없게 될 것입니다.

댓글을 작성하려면 로그인해야 합니다.