1

各行にint;int値で構成されたファイルがあります。どちらの列も行ごとに昇順です。次のコードを使用して、そのファイルを配列にロードする予定です。

while( ! feof($f) ) {
    $line = fgets( $f, 32 );
    $tmp = explode( ";", $line );
    $elements[] = array( $tmp[0] => $tmp[1] );
}

この配列を使用して、キー $tmp[0] に基づいてバイナリ検索を実行するつもりです。配列には 1000 個の要素がありますが、検索は 10.000 個の異なる値に適用されます。単純に 2x1000 マトリックスを定義して要素をロードする必要がありますか?

どうも

4

1 に答える 1

2

を使用fileして、ファイルの内容全体を行の配列として取得できます。各ペアの最初のintが一意であると仮定すると、それを配列のキーとして使用できます。

foreach (file('ints.txt') as $line) {
  list($key, $value) = explode(';', $line);
  $elements[$key] = $value;
}

キーで値を検索$elementsするとO(n)になりますが、実際にはO(1)に近くなります。これはあなたの目的には十分速いかもしれません。

于 2010-10-30T14:34:33.967 に答える