0

そこで、バイナリ検索法を使用してファイルを検索する作業プログラムを実装しました。

public int BSearch(int x1, int x2) throws IOException {
    int current_key;

    middle=(x1+x2)/2;
    if(x1>x2) {
        middle=-1;  //middle==-1 is condition of 'key not found'
        return middle;
    }
    MyFile.seek(middle*4);
    current_key=MyFile.readInt();
    da++;
    if(current_key==key) {
        return middle;
    }
    else if(key<current_key) {
        x2=middle-1;
        return BSearch(x1,x2);
    }
    else {
        x1=middle+1;
        return BSearch(x1,x2);
    }
}

ここで、ファイルを 1 つずつ (たとえば 1 KB ずつ) バッファーに読み込み、そのバッファーをバイナリ検索するように変換します。そのバッファにキーが見つからない場合は、ファイルなどをさらに読み取ります。ただし、バッファーは次のような手作りのバッファーであることを明確にしたいと思います (訂正してください)。

 byte[] buf = new byte[1024];
 MyFile.read(buf);
 ByteArrayInputStream bis= new ByteArrayInputStream(buf1);
 DataInputStream ois= new DataInputStream(bis);
 current_key=ois.readInt();

(とりわけ) 大きな問題は、バッファの特定の位置からどのように読み取るかがわからないことです。

4

1 に答える 1

0

OK、バッファを要素ごとに新しいint []配列にコピーすることで、なんとかできたと思います。バッファをロードするたびにディスクにアクセスするよりも高速であると信じたい.

于 2013-03-18T08:14:40.173 に答える