문제

사람들이 말한 그것은 상각 O(1)을 넣어 해쉬테이블에 추가한다.따라서,퍼팅 n 요소여야 합 O(n).지 않는 진실을 위한 큰 n,그러나,이후로 answerer 말했다,"당신이 필요로하는 모든 만족하는 예상된 상각 O(1)은 테이블을 확장하고 재탕으로 모든 것을 새로운 임의의 hash function 모든 시간이 있습니다."

그래서:은 무엇인 평균 실행간의 삽입 n 는 요소으로 해시 테이블?나는 깨닫는 이것은 아마 구현에 따라 다릅니다,그래서 언급한 어떤 유형의 구현은 모르겠습니다.

예를 들어 있는 경우(로그 n)동일한 간격의 충돌이,그리고 각각의 충돌 걸 O(k)를 해결하려면,여기서 k 은 현재 크기의 hashtable,다음 당신이 되풀이 관계:

T(n) = T(n/2) + n/2 + n/2

(즉,당신은 당신이 시간을 가지고 삽입 n/2 요소,당신은 충돌이,취 n/2 를 해결하려면,당신은 나머지 n/2 삽입에 충돌하지 않고).이것은 여전히 끝 O(n),그래서 해.그러나 이것은 합리적인가?

도움이 되었습니까?

해결책

그것은 완전히 방법에 따라 비효율적이 당신의 들추어내입니다.특히,당신이 할 수있는 경우 제대로 추정은 예상되는 크기의 hashtable 두번째,당신의 여전히 런타임 접근 방식 O(n).을 효과적으로,당신은 당신이 지정하는 방법을 비효율적이 귀하의 개작 크기 계산할 수 있습니다 전에 결정하는 예상된다.

다른 팁

사람들이 말한 그것은 상각 O(1)을 넣어 해쉬테이블에 추가한다.

이론적인 입장에서,그것은 예상 상각 O(1).

해시 테이블은 기본적으로 무작위로 데이터 구조,같은 의미에서는 퀵은 무작위로 알고리즘이 있습니다.당신은 필요를 생성하고 해시 기능으로 일부를 임의,또는 다른 존재 병리학적인 입력되지 않는 O(1).

을 달성할 수 있는 예상된 상각 O 을 사용하는(1) 동적 완벽한 해싱:

순진한 아이디어가 원래시를 재탕으로 새로운 임의의 해시 함수에서는 모든 충돌이 발생합니다.(참조 완벽한 해쉬 기능)이 문제는 이에 필요한 O(n^2)공간에서 생일을 역설이다.

이 솔루션 두 개의 해시 테이블과 함께,두 번째 대한 테이블의 충돌;를 해결하의 충돌에는 두 번째 테이블에 의해 재건니다.는 표 O(\sqrt{n})요소,그래서 성장하는 O(n)크기입니다.

에서 연습을 자주 사용하여 고정 해쉬 기능을 할 수 있기 때문에 가정(또는 걱정하지 않는 경우)귀하의 입력이 병리학적인처럼,당신은 종종 퀵없이 prerandomizing input.

모든 O(1)는 말하는 작업이 수행되는 일정 시간에,그것은 에 의존하는 요소의 수에 당신의 데이터 구조입니다.

간단한 단어에서,이것은 당신이 지불해야 할 것 같은 비용이 얼마나 큰 상관 없이 귀하의 데이터 구조입니다.

에서 실용적인 측면 즉,간단한 데이터 구조와 같은 나무는 일반적으로 더 많은 효과적인지 않는 경우가 많이 저장하기 위해 데이터입니다.내 경험에서 나는 나무를 찾아 빨리까지~1k 소(32 비트 정수),그 다음 해시 테이블니다.지 YMMW.

왜 그냥 몇 가지 테스트에 사용하기 시작합니다.어쩌면 당신은 게시 원본을 우리는 다시 갈 수 있는 테스트이 그들의 시스템에서 우리는 정말 모양이 매우 유용한 논의한다.

그것은 단지 구현,하지만 환경뿐만 아니라는 것을 결정 시간이 얼마나 알고리즘 실제로 걸립니다.할 수 있는 그러나,경우에 보면 어떤 벤치마킹 샘플을 사용할 수 있다.문제는 나와 함께 게시 내 결과 아무 소용이 될 것입니다 때문에 사람들은 무슨 생각이 다른 것이 내 시스템에서 실행되고,얼마나 많은 램은 지금 무료니다.할 수 있습만 이제까지 폭 넓은 아이디어.고 그에 대해 무엇으로 좋은 big-O 은 당신이 제공됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top