2013-05-21 3 views
0

이것은 배열의 중간 값을 계산하기위한 솔루션입니다. 나는 처음 세 줄을 얻는다.). 그러나 세 번째 줄은 마술이 일어나고있는 곳이다. 누군가 '정렬 된'변수가 사용하는 방법과 왜 괄호 옆에있는 이유를 설명 할 수 있습니까? 그리고 왜 다른 변수 'len'이 그 괄호와 괄호로 묶여 있습니까? 정렬 된 것이 갑자기 배열로 사용되는 것과 거의 비슷합니까? 감사!배열의 중앙값 계산 - 누군가이 코드 줄에서 어떤 일이 벌어지고 있는지 말해 줄 수 있습니까?

def median(array) 
    sorted = array.sort 
    len = sorted.length 
    return ((sorted[(len - 1)/2] + sorted[len/2])/2.0).to_f 
    end 

    puts median([3,2,3,8,91]) 
    puts median([2,8,3,11,-5]) 
    puts median([4,3,8,11]) 
+0

중앙값은 정렬 된 배열의 "중간"요소이므로 정렬합니다. 벤자민이 말한 "중간"요소는 "len/2"위치에있는 요소입니다. 그러나 인덱스가 정수가 아니면 정렬 된 [(len-1)/2] 또는 정렬 된 [len/2] 중 하나가 발생해야합니다. – user1965813

답변

1

이 있다면 :

[1,2,2,3,4] 및 [1,2,3,4]. 두 배열은 모두 정렬되지만 홀수 및 짝수 개의 요소가 각각 있습니다. 따라서이 코드는이 두 가지 경우를 고려하고 있습니다.

sorted은 실제로 배열입니다. 당신은 [2,3,1,4]를 정렬하면 다시 [1,2,3,4]가됩니다. 그런 다음 짝수/홀수 요소에 대해 가운데 색인 (len - 1)/2len/2을 계산하고 평균을 찾습니다.

1

예, array.sort가 배열을 반환하고 정렬 된 것으로 지정됩니다. 그런 다음 배열 인덱스를 통해 액세스 할 수 있습니다.

(len-1)/2=(5-1)/2=2 

len/2=5/2=2 --- (remember this is integer division, so the decimal gets truncated) 

그래서 당신은 인덱스 2의 값을 가지고 추가 한 다음 나누기 : 당신이 요소의 홀수 번호가있는 경우

의 예에서와 같이 5 개 요소는 인덱스가 될 나오는 말 2.

는 요소의 짝수 번호가있는 경우, 4 말 인덱스의 값과 동일한 2에 의해이 경우에 따라서

(len-1)/2=(4-1)/2=1 --- (remember this is integer division, so the decimal gets truncated) 

len/2=4/2=2 

, 당신은 효과적으로 두 개의 중간 평균있다 요소 1과 2는 짝수 개의 요소가있는 경우의 중앙값의 정의입니다.

+0

감사합니다. 굉장히 유용하다. 예제를 가져 주셔서 감사합니다. 배열 구성 요소로 처리되는 인덱스 구성 요소에 대해 약간 명확하지 않았으며 거의 ​​모든 개체를 배열에 저장할 수 있습니다. 대단히 감사합니다. – ideahed

0

갑자기 배열이 갑자기 배열로 사용되는 것과 비슷합니까?

예, 그렇습니다. 2 행에서 입력과 동일한 요소를 가진 배열로 초기화되지만 오름차순으로 정렬됩니다 (기본 정렬은 오름차순). 3 행에서 sorted 배열의 길이로 초기화되는 len이 있습니다. 그렇기 때문에 sorted이 그 이후로 배열로 사용되고 있습니다.