是否为二进制搜索定义了以下数组?

时间:2010-10-30 14:30:59

标签: php arrays performance binary-search

我有一个文件,每行包含 int; int 值。两列都是逐行升序。我计划将该文件加载到一个包含以下代码的数组中:

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

我打算使用这个数组根据键$ tmp [0]进行二进制搜索。数组将有1000个元素,但搜索将应用于10.000个不同的值。我应该简单地定义一个2x1000矩阵并将元素加载到其中吗?

THX

1 个答案:

答案 0 :(得分:2)

您可以使用file将文件的全部内容作为一个行数组。假设每对中的第一个int是唯一的,您可以将它用作数组的键:

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

$elements中的键查找值O(n) but really close to O(1);这可能足够快到你的目的。