pjy1368   3년 전

put과 containsKey 모두 시간복잡도가 O(1)인 것으로 알고 있는데 이 문제에서 시간초과가 나는 이유가 궁금합니다.

herdson   3년 전

해시테이블을 잘 저격하면 시간복잡도가 O(n)이 걸리게 만들 수 있습니다.

pjy1368   3년 전

어떤 조건에서 hashmap의 시간복잡도가 O(N)이 되는 건가요?

herdson   3년 전

매번 수를 넣을때마다 해시 충돌을 일으키게 하면 됩니다.
https://www.secmem.org/blog/20...

ㄴ 글 후반부에 c++ unordered_map 에서 시간복잡도가 O(n)이 되는 수열을 생성하는 코드가 있습니다.
https://codeforces.com/blog/en...
ㄴc++ unordered_map의 저격을 방지하는 방법. 이 문제에서는 통하지 않았습니다.

pjy1368   3년 전

그렇다면.. 어떤 경우에는 해쉬맵을 쓰면 안되는걸까요? 단순히 해쉬맵에 저장되는 데이터가 한 1000만이상이 넘어가면 안 쓰려고해야하는걸까요?

이 문제에 경우, 수를 넣을 때마다 해쉬 충돌을 야기할 수도 있겠구나싶은데, 다른 문제를 풀 때에도 해쉬 충돌을 어떻게 고려해야할지 궁금합니다.

herdson   3년 전

코드포스같은 커뮤니티에서는 되도록 트리맵으로 처리가 가능한 범위까지만 맵/셋 사용을 고려하고 수가 너무 많이 주어진다 싶으면 다른 방법을 찾으라고 권하고 있습니다.

pjy1368   3년 전

트리맵이 시간복잡도가 O(logN)으로 알고있는데, 연산 과정에서 어떠한 시간복잡도와 트리맵의 시간복잡도를 계산하였을 때 시간 안에 처리가 가능하지 않다면 맵 자체를 쓰지 말라는 말씀이신가요??

herdson   3년 전

예 그렇습니다. 그렇게 많은 데이터라면 분명 해쉬를 저격하는 데이터도 포함이 되었을거라는 거죠.

pjy1368   3년 전

친절한 답변 감사합니다 ㅎㅎ

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