2012-11-02 5 views
1

배열의 다중 평균 최대 값을 계산하는 알고리즘을 연구 중입니다. 어레이는 5 시간 동안 Garmin 장치에 기록 된 HR 데이터와 같은 시간/값 쌍을 포함합니다. 알 수없는 기간 동안 데이터는 약 1 초에 1 회이지만 보장 된 주파수는 없습니다. 예를 들어, 10 분의 평균 최대 값은 평균 평균 10 분의 지속 시간 값입니다. "평균"은이 논의의 평균값이라고 가정합니다. 원하는 평균 최대 값의 지속 시간은 임의로, 1 분, 5 분, 60 분입니다. 그리고, 나는 그들 중 많은 수가 필요할 것으로 생각합니다. 적어도 30 개 이상이 필요하지만 이상적으로는 오랜 요청이 아니라면 언제든지 요구할 수 있습니다.어레이 값의 평균 최대 서브 세트

1) 배열의 시작 부분에 시작하고 일부는 원하는 길이 과거와 같거나 한 요소가 될 때까지 앞으로 "걸어"

는 지금은 값을 계산하기 위해 정직하고 알고리즘을 가지고있다. 배열의 끝에 도달하면 중지하십시오.

2) 해당 부분 집합 값의 평균을 찾습니다. 현재 최대 값보다 큰 경우 최대 평균값으로 저장하십시오.

3) 배열의 왼쪽에서 단일 값을 시프트합니다.

4) 배열이 끝날 때까지 1에서부터 반복합니다.

기본적으로 가능한 모든 연속 평균을 계산하고 최대 값을 반환합니다. 각 기간 동안이 작업을 수행합니다. 그리고 그것은 실제 평균 계산을 계산합니다. 왼쪽 이동 점을 제거하고 단순 이동 평균 시리즈처럼 할 수있는 것처럼 오른쪽을 추가하여 어떻게 든 미끄러지는 대신 계속해서 계산합니다. 전체 배열 크기에 따라 평균 최대 값 당 약 3-10 초가 소요됩니다.

이 방법을 최적화하는 방법이 궁금합니다. 예를 들어, 모든 평균 최대 값의 시리즈는 1s 값이 가장 높은 지수 곡선이 될 것이고 전체 평균이 충족 될 때까지 낮아질 것입니다. 이 곡선과 모든 값을 특정 수의 점으로부터 보간 할 수 있습니까? 또는 위의 무거운 계산에 대한 다른 최적화가 여전히 정확도를 유지합니까?

답변

1

"실제 평균 계산은 연속 이동 평균 시리즈처럼 할 수있는 것처럼 왼쪽 지점을 제거하고 오른쪽을 추가하는 대신 계속해서 계산합니다."

왜 그냥 슬라이드하지 않습니까? 즉, 합계를 유지하고 그 합계의 요소 수로 나눕니다.

+0

그 말은 내가 그 성명서에서 언급 한 것입니다. 그러나 실행중인 평균 대신에 합계를 유지하는 것은 내가 그 일을하기 위해 놓친 부분이었습니다. 감사. 테스트 해보고 성능 향상 방법을 살펴 보겠습니다. 다른 아이디어에도 여전히 열려 있습니다. – Miro

+0

훌륭한 시작으로이 슬라이딩 평균 업데이트는 이미 성능을 획기적으로 향상 시켰습니다. 특히 수천 개의 점에 대한 평균을 계산하는 대신 더 큰 세그먼트의 경우 산술 계산을 3 번만 수행합니다. – Miro

관련 문제