저는 성능이 중요한 코드에서 엔트로피와 상호 정보를 엄청나게 계산하려고합니다. 중간 단계로서 각 값의 발생 횟수를 계산해야합니다. 예를 들어 : 물론발생 횟수를 계산하는 가장 효율적인 방법은 무엇입니까?
uint[] myArray = [1,1,2,1,4,5,2];
uint[] occurrences = countOccurrences(myArray);
// Occurrences == [3, 2, 1, 1] or some permutation of that.
// 3 occurrences of 1, 2 occurrences of 2, one each of 4 and 5.
확실한 방법은이 중 하나를 연관 배열을 사용하거나 빠른 정렬과 같은 "표준"정렬 알고리즘을 사용하여 입력 배열을 정렬하여있다 할 수 있습니다. 바이트와 같은 작은 정수의 경우 코드는 현재 보통의 오래된 배열을 사용하는 데 특화되어 있습니다.
해시 테이블보다 효율적으로 수행 할 수있는 똑똑한 알고리즘이 있습니까? 예를 들어 삽입에 비해 업데이트를 선호하는 연관 배열 구현이나 데이터가있을 때 빛나는 정렬 알고리즘과 같은 "표준"정렬 알고리즘이 제공합니다. 많은 관계?
주 : 희소가 아닌 정수는 가능한 데이터 유형의 한 예일뿐입니다. 여기에 합리적으로 일반적인 솔루션을 구현하는 찾고 있어요 비록 정수 및 structs 정수 만 포함 된 일반적인 경우, 나는 매우 효율적인 경우 이러한 특정 솔루션에 관심이있을 거라고.
위의 말보다 더 생각하면됩니다. 배열을 정렬 한 다음 순차적으로 통과시킵니다. –
아마도 알고리즘 속도를 높이기 위해 일종의 Hadoop이나 Map/Reduce를 사용할 수 있습니까? 그 외에는 아무것도 보지 못합니다. – kgrad
@kgrad : 외부 루프를 병렬 처리하여 이미 모든 코어를 완전히 사용하고 있으므로이 기능을 개별적으로 병렬 처리 할 필요가 없습니다. – dsimcha