ソートされたキー配列を持つ整数キーを仮定します。int[] keys = {10,20,30,40,50,60,70};
したがって、最初はランクlo = 0
とhi = 6
になります。配列内のキーをバイナリ検索する場合、loまたはhiの最終値は?
keys配列の30のバイナリ検索では、loの最終値は20ですか?1ですか?
私は論理を理解する必要があります。
ソートされたキー配列を持つ整数キーを仮定します。int[] keys = {10,20,30,40,50,60,70};
したがって、最初はランクlo = 0
とhi = 6
になります。配列内のキーをバイナリ検索する場合、loまたはhiの最終値は?
keys配列の30のバイナリ検索では、loの最終値は20ですか?1ですか?
私は論理を理解する必要があります。
バイナリ検索がそうのように起動します:
lo = 0, hi = 6, mid = 3, numberInMid = 40
、
lo = 0, hi = 2, mid = 1, numberInMid = 20
lo = mid + 1 = 2
最後に、30 > 20
として、hi = mid - 1 = 2
さて、30 < 40
として
lo = 2, hi = 2, mid = 2, numberInMid = 30
、以来35 > 30
として 、lo = mid + 1 = 3
、
lo > hi
:
30 == 30
として
、ループを抜けるとans = 30
代わりに、あなたが探していた場合は、その後、(私はそれが関係式上記のすべてで収まるので、この数を取る)35を言いますループが終了し、デフォルト値のans
が返されます。
例:ans = -1
正の整数のみが含まれている場合や、代わりに==
の式がヒットした場合にのみtrueに切り替わるflag = false
を使用することもできます。
デバッグを理解するために、コードを実装してトレースすることができます。
public class Test {
public int binary_search(int[] keys, int low, int high, int mid, int target){
if(low > high){
return -1;
}
if(target < keys[mid]){
high = mid - 1;
mid = (low + high)/2;
return binary_search(keys, low, high, mid, target);
}else if(target > keys[mid]){
low = mid + 1;
mid = (low + high)/2;
return binary_search(keys, low, high, mid, target);
}else{
return mid;
}
}
public static void main(String args[]){
int[] keys = {10,20,30,40,50,60,70};
Test test = new Test();
int mid = (0 + keys.length)/2;
int target = 30;
int index = test.binary_search(keys, 0, keys.length, mid, target);
System.out.println(index);
}
}
リストにないものを検索するとどうなりますか?例5のように?高値は0、低値は-1となりますか? – yummyyenni
上記の私の更新された説明をご覧ください。 5の場合、 'lo = -1'も出てくるでしょう。これも不可能なので、ループは壊れます。心配すると、whileループは 'lo> = 0 && hi
35を探している場合、loは3、つまり40ですか?低いだろう30は2ですか? – yummyyenni