Să vedem cât de repede va funcționa.
Să presupunem matrice 100 de elemente. Dacă acestea sunt toate la fel, atunci rezultatul va consta dintr-un singur element, iar bucla interioară este executată o singură dată. În acest caz, totul este bine.
Și dacă toate sau aproape toate elementele sunt diferite?
În acest caz, fiecare element va nevoie pentru a obține în jurul valorii de toată gama actuală de rezultate, și apoi - pentru a adăuga la această matrice.
- Pentru primul element - este de la 0 la costul operațiunilor de acces rezultat elemente (până când acesta este gol).
- Pentru al doilea element - acesta va costa un acces direct la elementele rezultatul operației.
- Al treilea element - va costa 2 pentru a avea acces la elementul rezultat.
- ... Pentru elementul n-lea - va costa în operațiunile de acces n-1 rezultat elementul.
Total 0 + 1 + 2 + ... + n-1 = (n-1) * n / 2 = n 2/2 - n / 2 (suma progresiei aritmetice), adică numărul de operații crește aproximativ cu pătratul n.
Aceasta este o creștere foarte rapidă. Pentru elementele de 100 - 4950 operatii pentru 1000 - 499500 (în formula de mai sus).
Prin urmare, o astfel de soluție este adecvată numai pentru tablouri mici. În schimb, puteți utiliza dincazul și arr.indexOf. situația nu se va schimba, deoarece indexOf este, de asemenea, cauta forta bruta.
Soluția la obiect (rapid)
Soluția la obiect (rapid)
Cea mai bună tehnică pentru a selecta siruri de caractere unice - folosiți un obj auxiliar. La urma urmei, numele proprietăților obiectului, pe de o parte - linie, iar pe de altă parte - întotdeauna unic. -Intrarea Re în proprietatea același nume se va suprascrie.
De exemplu, în cazul în care „iepurele“ a lovit obiect o dată (obj [ „iepure de câmp“] = true), atunci al doilea este aceeași atribuire nu se va schimba nimic.
Decizia de mai jos creează un obj = <> și scrie în ea toate șirurile ca nume de proprietate. Și apoi colectează proprietățile obiectului în matrice prin for..in. Duplicatele va fi plecat.