2010-10-30 2 views
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 и загружать элементы в нее?

Thx

ответ

2

Вы можете использовать file, чтобы получить все содержимое файла в виде массива строк. Если предположить, что первый ИНТ в каждой паре является уникальным, вы можете использовать его в качестве ключа для массива:

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

Глядя значение их ключи в $elements будет O(n) but really close to O(1); это может быть достаточно быстро для ваших целей.

+3

массив в php - это карты с временем доступа O (1) (константа), а не O (log (n)) (логарифмический, двоичный поиск) – knittl

+0

@knittl Действительно! Я всегда предполагал, что массивы PHP были реализованы с помощью сбалансированного дерева. – meagar

+0

THX очень много. все они уникальны, так что это не проблема. также, хорошо знать о внутреннем представлении! – hummingBird

Смежные вопросы