실제 응용 프로그램에서는 알고리즘 대신 사용할 때 이점이 있습니까?
예를 들어보다 일반적인 이진 검색 트리 구현 대신 van Emde Boas 트리를 사용하는 경우입니다. 그러나 예를 들어, 우리가 을 취 하면 가장 좋은 경우에 이중 로그 알고리즘은 의 인수 (대략)만큼 로그를 능가합니다 . 또한 일반적으로 구현이 더 까다 롭고 복잡합니다.
개인적으로 VEB- 트리보다 BST를 선호한다면 어떻게 생각하십니까?
이를 쉽게 입증 할 수 있습니다.
실제 응용 프로그램에서는 알고리즘 대신 사용할 때 이점이 있습니까?
예를 들어보다 일반적인 이진 검색 트리 구현 대신 van Emde Boas 트리를 사용하는 경우입니다. 그러나 예를 들어, 우리가 을 취 하면 가장 좋은 경우에 이중 로그 알고리즘은 의 인수 (대략)만큼 로그를 능가합니다 . 또한 일반적으로 구현이 더 까다 롭고 복잡합니다.
개인적으로 VEB- 트리보다 BST를 선호한다면 어떻게 생각하십니까?
이를 쉽게 입증 할 수 있습니다.
답변:
여전히 보다 기하 급수적으로 ( ) 증가 한다는 것을 잊지 마십시오 !
실제로 및 의 몫을 살펴보면 다음과 같이 인상적입니다.

[ 출처 ]
그러나 여전히 최대 크기의 경우 5-6 됩니다. 더 큰 크기는 실제로 드문 일이 아니며 해당 요소에 의한 속도 향상은 대단합니다 ! 점심 식사 후 또는 내일 만 결과를 얻는 데 차이가있을 수 있습니다. 더 높은 상수의 트리 구현으로 인해 속도 향상의 일부가 사라질 수 있습니다. 당신은 음모에 (또는 분석) 것 와 와 실제 사진을 얻을 수있는 실제 런타임 상수.
또한 Dave가 언급 한 사항이 중요합니다. 즉, 작업 속도가 선형으로 자주 실행되는 경우 일정한 속도 향상은 선형 속도 향상이됩니다. 즉 전체 알고리즘의 선행 상수를 줄일 수 있습니다! 위에서 말했듯이, 그것은 굉장합니다. 작업을 번 실행하면 어떻게되는지 살펴보십시오 .

[ 출처 ]
이제 그만한 가치가 없다면 나는 무엇을 모른다.
나는 실제로 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 트리에는 집단. , , 이것은 요소 6 개선이며 실제로는 약간입니다. 또한 van Emde-Boas 나무는 스스로 균형을 잡을 필요가 없기 때문에 일정한 상수 요소 (실제로는 차이가 작은 상수 요소에 관한 것)가 있습니다.