2013-12-21 3 views
0

배열에 숫자가 꽉 차 있으며 순서가 다르며 그 배열에서 다른 특정 숫자에 가장 가까운 번호가 필요하지만 더 크지는 않습니다. 그것보다. 예를 들어 : Actionscript 3.0 - 배열을 특정 지점까지 양수 거리로 정렬

someArray:Array=new Array(-10,-5,2,2.7,30,46,123.56,231,320); 
somenumber:Number=50; 

지금 나는 50에 가장 가까운 때문에 밖으로 (46)를 얻을 수있는 가장 빠른 방법입니다 알고리즘이 필요하지만, 그보다 더 큰.

감사

답변

2
일 것 같은

뭔가 - 단지 배열의 각 숫자를 반복하고 목표보다 작거나 같은 값 중 가장 큰 하나 찾을 :

var closest:Number = Number.NEGATIVE_INFINITY; 
for each(var num:Number in someArray) 
{ 
    if(num > closest && num <= somenumber) { 
    closest = num; 
    } 
} 
// now the variable closest has your answer 

당신이 배열 인 경우를 정렬이 보장되면 선형 시간 대신 로그 시간으로 실행되는 일종의 이진 검색 유형 알고리즘을 수행 할 수 있습니다.

+0

당신은 내 질문에 대답했지만 솔직히 당신이 로그 시간을 사용하여 이진 검색 알고리즘에 대해 무슨 말을하는지 모른다. 당신이 그것을 설명 할 수 있다면, 내가 배운 것을 좋아하기 때문에, 그것은 인정 될 것이지만 그렇지 않다면 나는 대학에 갈 때 배울 것이라고 생각합니다. – Xiler

+0

그래서 배열에는 _n_ 요소가 있습니다. 우리 알고리즘은 모든 _n_ 요소를 한 번 보았기 때문에 선형 시간입니다. 일반적으로 로그 시간 알고리즘에는 log (_n_) 단계가 있으며, 큰 수의 경우 _n_ 단계보다 훨씬 빠릅니다. Wikipedia에는 ​​실재 유형 시나리오 (숫자 추측 게임 : http://en.wikipedia.org/wiki/Binary_search_algorithm#Number_guessing_game – JKillian

+0

)에서 바이너리 검색이 어떻게 작동하는지 예제가 있습니다. 이는 소리보다 훨씬 간단합니다. . – Xiler