하이브리드 알고리즘
Hybrid algorithm하이브리드 알고리즘은 같은 문제를 해결하는 두 개 이상의 다른 알고리즘을 결합한 알고리즘으로, 주로 C++와 같은 프로그래밍 언어, (데이터에 따라) 하나를 선택하거나 알고리즘의 코스를 통해 이들 사이의 전환에 사용된다.이는 일반적으로 각 요소의 원하는 특징을 결합하기 위해 수행되며, 따라서 전체 알고리즘이 개별 구성요소보다 우수하다.
"하이브리드 알고리즘"은 단순히 여러 알고리즘을 결합하여 다른 문제를 해결하는 것이 아니라 - 많은 알고리즘은 단순한 조각의 조합으로 간주될 수 있다 - 단지 동일한 문제를 해결하는 알고리즘을 결합하는 것일 뿐, 다른 특징들, 특히 성능에 차이가 있다.
예
컴퓨터 과학에서, 하이브리드 알고리즘은 재귀 알고리즘의 최적화된 실제 구현, 특히 재귀에서 더 깊이 움직일수록 데이터의 크기가 감소하는 분할 및 정복 알고리즘의 구현에서 매우 흔하다.이 경우 (대형 데이터에 대한) 전체적인 접근방법에 하나의 알고리즘을 사용하지만, 재귀 깊숙한 곳에서 다른 알고리즘으로 전환해 작은 데이터에 더 효율적이다.일반적인 예는 큰 데이터에서는 비효율적이지만 작은 데이터에서는 매우 효율적인 삽입 정렬(예: 5개에서 10개 요소)을 주로 병합 정렬이나 퀵소트 같은 다른 알고리즘을 적용한 후 마지막 단계로 사용하는 정렬 알고리즘이다.병합 정렬과 퀵소트는 큰 데이터에서 점증적으로 최적이지만 작은 데이터에 적용하면 오버헤드가 중요하므로 재귀 끝에 다른 알고리즘을 사용한다.고도로 최적화된 하이브리드 정렬 알고리즘은 팀소트(Timsort)로, 병합 로직의 추가 논리(이진 검색 포함)와 병합 정렬, 삽입 정렬을 함께 결합한다.
단순한 하이브리드 재귀 알고리즘의 일반적인 절차는 팔 길이 재귀라고도 하는 베이스 케이스의 단락이다.이 경우, 불필요한 기능 호출을 피하면서, 기능 호출을 하기 전에 다음 단계가 베이스 케이스로 귀결되는지 여부를 확인한다.예를 들어 트리에서 하위 노드로 재귀한 다음 null인지 확인하는 대신 재귀하기 전에 null을 확인하십시오.이것은 많은 트리 알고리즘에서와 같이 알고리즘이 보통 기본 사례를 여러 번 접했을 때 효율성에 유용하지만, 그 외에는 복잡성이 더해져 특히 학계에서는 저조한 스타일로 간주된다.
성능상의 이유로 하이브리드 알고리즘의 또 다른 예는 빠른 평균 성능을 위해 하나의 알고리즘을 결합한 introsort와 introselect로, (비절제적으로) 최적의 최악의 성능을 보장하기 위해 다른 알고리즘으로 후퇴하는 것이다.인트로소트는 퀵소트로 시작하지만, 퀵소트가 잘 진행되지 않는 경우 힙으로 전환한다. 유사하게 퀵소트(quick select)는 퀵소트(quick select)로 시작하지만, 퀵소트가 잘 진행되지 않는 경우 중위수의 중위수로 전환한다.
중앙집중식 분산 알고리즘은 개별 알고리즘(각 분산 프로세서에서 실행됨)과 결합 알고리즘(중앙집중식 배포자에서 실행됨)으로 구성되는 하이브리드 알고리즘으로 간주될 수 있으며, 이는 각각 하나의 프로세서에서 전체 알고리즘을 실행하거나 배포에 대한 전체 계산을 실행하는 것과 일치한다.r, 사소한 결과(각 프로세서의 1개 데이터 세트)를 결합한다.이러한 알고리즘의 기본적인 예는 데이터를 별도의 하위 집합으로 나누고 하위 집합을 정렬한 다음 하위 집합을 완전히 정렬된 데이터로 결합하는 외부 정렬에 특히 사용되는 분포 정렬이다. 예를 들어 버킷 정렬과 플래시 정렬이 포함된다.
그러나, 일반적으로 분산 알고리즘이 하이브리드 알고리즘이 될 필요는 없다. 개별 알고리즘이나 결합 알고리즘이나 통신 알고리즘이 서로 다른 문제를 해결할 수 있기 때문이다.예를 들어, MapReduce와 같은 모델에서는 Map과 Reduce 단계가 서로 다른 문제를 해결하며, 다른 세 번째 문제를 해결하기 위해 결합된다.