트리는 괜찮지 만 배열을 다차원 배열에 배치 할 필요는 없습니다. JS에서 큰 배열을 사용하여 수행하는 방법은 다음과 같습니다.
배열을 정렬해야합니다.
배열 중간으로 건너 뜁니다. 루프 : 배열 항목이 작고 tosearch 인 경우 위쪽 절반의 중간으로 점프합니다. 그렇지 않으면 배열 항목이 더 큰 경우 tosearch, 아래쪽 절반의 중간으로 점프합니다. 다른 사람을 찾았습니다.
var maxstep=Math.abs((Math.log(0.5)-Math.log(array.length))/Math.log(2)-1);
function searchinterval(tosearch,array){
var len=array.length,
pos=range=len/2,
index=Math.round(pos),
maxstep=.49999;
for(var i=0;i<=maxstep;i++){
range/=2;
if(tosearch<array[index]){
pos-=range;
}
else if(tosearch>array[index]){
pos+=range;
}
else{
return index;
//you found it
}
index=Math.round(pos);
}
return false;
}
배열에 tosearch가 없으면이 기능이 느립니다. 배열 길이 200에 대해 7 개의 루프를 의미합니다.
최대 스텝 수 또는 스텝 크기가 확실하지 않습니다.
PS : (감사 맥시마) 또한 구글 종이지도-감소 읽는 것을 좋아 할 수
Log(0.5)-Log(array_length))/Log(2) -1);
: 나는 단계의 최대을 찾은 것 같아요. http://labs.google.com/papers/mapreduce.html도 역 색인이 될 수 있습니다. http://en.wikipedia.org/wiki/Reverse_index – Nishant
각 답변 및이 댓글별로 훌륭한 글을 읽었습니다. 나는 대답의 포럼에 대한 더 많은 설정 ... 나는 조금 더 읽고 내가 가장 좋아하는 하나를 선택하려고합니다. 이런 종류의 물건은 항상 나를 당황하게했고, 이제 마침내 약간의 이해를 얻습니다. – jphenow