2012-05-08 5 views
2

n 개의 요소 배열이 있고 나머지 요소보다 n 개의 요소 중 나머지보다 훨씬 큰 숫자가 있다고 가정 해보십시오.나머지 부분보다 훨씬 큰 배열에서 숫자를 선택하십시오.

그래서, 난이있을 수 있습니다이 경우

16, 1, 1, 0, 5, 0, 32, 6, 54, 1, 2, 5, 3 

, 나는 32, 1654에 관심이있을 것입니다.

또는 내가있을 수 있습니다 :이 경우

32, 105, 26, 5, 1, 82, 906, 58, 22, 88, 967, 1024, 1055 

, 나는 1024, 906, 9671055에 관심이있을 것입니다.

관심있는 번호를 추출하는 함수를 작성하려고합니다. 문제는 무엇이 "훨씬 더 큰지"를 결정할 수있는 임계 값을 정의 할 수 없다는 것과 두 함수 모두 호출되는 함수에 따라 달라 지므로 x 큰 숫자를 얻으라고 말할 수 없다는 것입니다.

저는 조금 붙어 있습니다. 누구든지 이것을 공격하는 방법에 대한 아이디어가 있습니까?

+0

모든 숫자의 평균보다 큰 모든 숫자가 필요합니다. – Sjoerd

답변

3

모든 숫자를 평균보다 크게 취하는 것이 항상 자르지는 않습니다. 예를 들어, 훨씬 더 큰 하나의 숫자 만 있지만 서로 가깝게 많은 숫자가있는 경우입니다. 너무 많은 숫자 복용 결과 대단히 평균을 이동하지 않습니다 한 많은 수의 : 당신이 숫자 사이의 차이를 보면

data = [ones(1,10) 2*ones(1,10) 10]; 
data(data>mean(data)) 

ans = 

     2  2  2  2  2  2  2  2  2  2 10 

이 문제는 해결된다 :

>> data = [16, 1, 1, 0, 5, 0, 32, 6, 54, 1, 2, 5, 3]; 
sorted_data = sort(data); 
dd = diff(sorted_data); 
mean_dd = mean(dd); 
ii = find(dd> 2*mean_dd,1,'first'); 
large_numbers = sorted_data(ii:end); 

large_numbers = 

    6 16 32 54 

을 임계 값 (이 경우 2)을 사용하면 숫자가 "얼마나 더 커"라는 의미로 연주 할 수 있습니다.

+0

이것은 정확히 내가 한 것입니다. 감사! – NOP

0

간단한 솔루션 (또는 배수) 찾아 평균 값을 기준으로 treshold 사용하는 것입니다 :

a = [16, 1, 1, 0, 5, 0, 32, 6, 54, 1, 2, 5, 3] 
find(a>mean(a)) 
2

그것은 나를라면 내가 좀 더 통계 학적 통찰력을 사용하는 것, 그 줄 것이다 미래의 코드를위한 가장 큰 유연성.

x   = [1 2 3 2 2 1 4 6 15 83 2 4 22 81 0 8 7 7 7 3 1 2 3] 
EpicNumbers = x(x>(mean(x) + std(x))) 

그런 다음 표준 편차 수를 늘리거나 줄여 임계 값을 늘리거나 좁힐 수 있습니다.

LessEpicNumbers = x(x>(mean(x) + 2*std(x))) 
MoreEpicNumbers = x(x>(mean(x) + 0.5*std(x))) 
관련 문제