Nastavení a cíl
Řekněme, že máme jeden velký textový dokument a máme spoustu klíčových slov, na která chceme dokument analyzovat. Nezajímá nás, kolikrát se klíčové slovo objeví – zajímá nás pouze to, aby bylo použito. Když najdeme klíčové slovo, musíme ho zaznamenat, abychom ho mohli později zkontrolovat.
Neefektivní metoda: Shromažďování a vyhledávání polí
První metodou, jak zaznamenat, že bylo klíčové slovo nalezeno, je vložení klíčového slova do jednoho pole:
//Assume an array called "foundKeywords" was defined above if(shouldSave(keyword)) { foundKeywords.push(keyword); }
Na konci hledání dokumentu bychom skončili s polem jako:
//the foundKeywords array looks like: //['keyword1','keyword2','keyword2',...]
Pokud jde o kontrolu tohoto pole na existenci daného klíčového slova, tato metoda se ukáže jako neefektivní. Proč? Protože bychom museli procházet polem a hledat, dokud nenajdeme dané klíčové slovo (pokud vůbec). To je spousta „promarněných“ nebo neplodných cyklů, i když při nalezení klíčového slova přerušíme smyčku. Neefektivní je jediné slovo, které tento proces popisuje.
Efektivní metoda: Objekt s indexem
Nejrychlejší metodou kontroly uložených klíčových slov pro pozdější použití je objekt (v JavaScriptu) nebo asociativní pole (v PHP). Místo přidávání klíčového slova do pole přidáme klíčové slovo jako index k hlavnímu objektu, přičemž hodnotu uvedeme jako 1:
//Assume an object {} called "foundKeywords" was defined above if(shouldSave(keyword)) { foundKeywords[keyword] = 1; }
Proč je to rychlejší? Žádné promarněné cykly slepě prohlížející pole. Kontrola je rychlá a jednoduchá:
if(foundKeywords[keyword]) { //FOUND! //do something }
Buď je to index, nebo není! V PHP bychom klíčové slovo uložili do asociativního pole:
//Assume an array called "$found_keywords" was defined above if(shouldSave($keyword)) { $found_keywords[$keyword] = 1; } //Later: checking if the keyword was there... if($found_keywords[$keyword]) { //or array_key_exists($keyword,$found_keywords) //FOUND! }
Jedním slovem...úžasné. Nejen rychlé, ale také jednoduché!
Nemohu poskytnout benchmark, protože rychlost provádění závisí na tom, jak velké je pole klíčových slov. V zájmu jednoduchosti a rychlosti stačí říci, že použití objektu s indexem klíčových slov je rozhodně správnou cestou!