Erstellen Sie eine Java wie HashMap in PHP mit O (1) Lesekomplexität.
Öffnen Sie ein PHPsh-Terminal:
php> $myhashmap = array();
php> $myhashmap['mykey1'] = 'myvalue1';
php> $myhashmap['mykey2'] = 'myvalue2';
php> echo $myhashmap['mykey2'];
myvalue2
Die Komplexität von $myhashmap['mykey2']
in diesem Fall scheint die konstante Zeit O (1) zu sein, was bedeutet, dass die Zeit, die zum Abrufen eines Werts bei einem Schlüssel benötigt wird, gleich bleibt, wenn sich die Größe von $ myhasmap der Unendlichkeit nähert.
Der Nachweis, dass das gelesene PHP-Array eine konstante Zeit ist:
Führen Sie dies durch den PHP-Interpreter:
php> for($x = 0; $x < 1000000000; $x++){
... $myhashmap[$x] = $x . " derp";
... }
Die Schleife fügt 1 Milliarde Schlüssel / Werte hinzu. Es dauert ungefähr 2 Minuten, um alle zur Hashmap hinzuzufügen, was Ihren Speicher erschöpfen kann.
Dann sehen Sie, wie lange es dauert, eine Suche durchzuführen:
php> system('date +%N');echo " " . $myhashmap[10333] . " ";system('date +%N');
786946389 10333 derp 789008364
Wie schnell sucht die PHP-Array-Karte?
Das 10333
ist der Schlüssel, den wir nachgeschlagen haben. 1 Million Nanosekunden == 1 Millisekunde. Die Zeit, die benötigt wird, um einen Wert von einem Schlüssel zu erhalten, beträgt 2,06 Millionen Nanosekunden oder etwa 2 Millisekunden. Ungefähr die gleiche Zeit, wenn das Array leer war. Das sieht für mich nach ständiger Zeit aus.