2010-10-30 22 views
1

J'ai un fichier composé de int; int valeurs dans chaque ligne. Les deux colonnes sont ascendantes, rangée par rangée. Je prévois de charger ce fichier dans un tableau avec le code suivant:Le tableau suivant est-il bien défini pour la recherche binaire?

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

Je compte utiliser ce tableau pour faire une recherche binaire basée sur la clé $ tmp [0]. Array aura 1000 éléments, mais la recherche sera appliquée pour 10.000 valeurs différentes. Dois-je simplement définir une matrice 2x1000 et y charger des éléments?

Thx

Répondre

2

Vous pouvez utiliser file pour obtenir le contenu d'un fichier comme un tableau de lignes. Si l'on suppose que le premier int dans chaque paire est unique, vous pouvez l'utiliser comme la clé du tableau:

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

Vous cherchez des valeurs par leurs clés dans $elements sera O(n) but really close to O(1); Cela pourrait être assez rapide pour vos besoins.

+3

array en php sont des cartes avec le temps d'accès O (1) (constante), pas O (log (n)) (logarithmique, recherche binaire) – knittl

+0

@knittl Vraiment! J'ai toujours supposé que les tableaux de PHP étaient implémentés avec un arbre équilibré. – meagar

+0

thx beaucoup. ils sont tous uniques, donc ce ne sera pas un problème. aussi, bon à savoir sur la représentation interne! – hummingBird