Interpolation Search 와 Binary Search 의 비교
Binary Search 의 실현 에 대해 서 는 여 기 를 볼 수 있 습 니 다.
그러나 위 에서 Binary Search 의 실현 에 대해 저 희 는 재 귀적 호출 방식 으로 이 루어 졌 습 니 다.저희 가 이 두 가지 알고리즘 의 차 이 를 비교 하 는 데 편리 하도록 저 는 Binary Search 를 교체 로 실현 하 겠 습 니 다.코드 는 다음 과 같 습 니 다.
private static int binarySearch(int[] a, int low,int high,int x) {
int middle;
while(low<=high){// : “=”
middle=low+(high-low)/2;// InterpolationSearch
if(a[middle]==x){
return middle;
}
else if(a[middle]>x){
high=middle-1;
}
else{
low=middle+1;
}
}
return -1;
}
그리고 InterpolationSearch 의 자바 실현 코드 는 다음 과 같다.
package org.wrh.algorithmimplements;
import java.util.Arrays;
import java.util.Scanner;
//
public class InterpolationSearch {
public static void main(String[] args) {
int []a={10,21,23,42,56,78,98};
Scanner sc=new Scanner(System.in);
System.out.print(" :");
int x=sc.nextInt();
int index=interpolation(a,0,a.length-1,x);
if(index==-1){
System.out.println(" "+Arrays.toString(a)+" , "+x);
}
else{
System.out.println(x+" "+Arrays.toString(a)+" :"+index);
}
}
/* * :low ,high , * * x */
private static int interpolation(int[] a, int low,int high,int x) {
int middle;
while(low<=high){
middle=low+(high-low)*(x-a[low])/(a[high]-a[low]);// BinarySearch , ** **
if(a[middle]==x){
return middle;
}
else if(a[middle]>x){
high=middle-1;
}
else{
low=middle+1;
}
}
return -1;
}
}
코드 로 볼 때 InterpolationSearch 와 Binary Search 의 유일한 차 이 는 구분 할 때의 중간 값 middle 의 취 법 이 다르다 는 것 입 니 다.Binary Search 에서
middle=low+(high-low)/2;
InterpolationSearch 에 서 는 다음 과 같 습 니 다.
middle=low+(high-low)*(x-a[low])/(a[high]-a[low]);
비교 해 보면 InterpolationSearch 에 서 는 찾 으 려 는 X 의 더 많은 정 보 를 충분히 이용 하여 X 가 배열 에서 의 크기 비례 에 따라 배열 을 구분 하여 검색 속도 가 더욱 빠르다 는 것 을 알 수 있다.
총결산
수정:위의 while 순환 중
while(low<=high)// “=”
이렇게 해야만 배열 서열 중의"0"번 위치 와"length-1"의 위치 요 소 를 정확하게 찾 을 수 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.