나는 실제로 van Emde-Boas 트리를 한 번 벤치마킹했습니다. AA Tree, hashmap 및 bit array와 비교했습니다.
테스트 size
는 간격에 임의의 숫자로 삽입을 수행 [0, bound]
한 다음 size
검색 한 후 size
삭제 한 다음 다시 size
검색합니다. 삭제는 임의의 숫자에서도 이루어 지므로 먼저 구조에 있는지 확인해야합니다.
다음은 초 단위 의 결과 ( size
= 2000000, bound
= 10000000)입니다.
AATreeLookup - O(n log n)
Inserting... 3.3652452
Searching... 5.2280724
Deleting... 7.3457427
Searching... 9.1462039
HashLookup - O(n) expected
Inserting... 0.3369505
Searching... 0.6223035
Deleting... 0.9062163
Searching... 1.1718223
VanEmdeBoasTree - O(n log log n)
Inserting... 0.7007531
Searching... 1.1775800
Deleting... 1.7257065
Searching... 2.2147703
ArrayLookup - O(n)
Inserting... 0.0681897
Searching... 0.1720300
Deleting... 0.2387776
Searching... 0.3413800
보시다시피 van Emde-Boas 트리는 해시 맵보다 약 2 배, 비트 배열보다 10 배, 바이너리 검색 트리보다 5 배 느립니다.
물론 위의 면책 조항이 필요합니다. 테스트는 인공적이므로 출력이 더 빠른 컴파일러 등을 사용하여 코드를 개선하거나 다른 언어를 사용할 수 있습니다.
이 면책 조항은 알고리즘 설계에서 점근 분석을 사용하는 이유의 핵심입니다. 상수가 무엇인지 모르고 환경 요인에 따라 상수가 변경 될 수 있으므로 최선을 다하는 것은 점근 분석입니다.
이제는 로그엔 대 로그로그엔위의 예에서 내 van Emde-Boas 트리에는 232 집단. 로그232= 32, 로그32 = 5, 이것은 요소 6 개선이며 실제로는 약간입니다. 또한 van Emde-Boas 나무는 스스로 균형을 잡을 필요가 없기 때문에 일정한 상수 요소 (실제로는 차이가 작은 상수 요소에 관한 것)가 있습니다.