pEpinko napísal:galen napísal:inicializacia pola (usporiadana hashmapa, koli dalsiemu processingu): 2800 ms
Otazka: Naco je tam hashmapa? Nestaci obycajne pole s 10M intami?
nestaci, lebo:
obycajne pole s 10M intami musis pokazde prechadzat cele
to ze ci je cislo oznacene za prvocislo, prides az na konkretnom policku ... ked ho pristupis ...
takze musis n*n prebehnut cele pole, kym ho cele sprocessujes
a nasledne este Nkrat, kym dostanes zvysne prvocisla
Ak pouzijes dynamicku strukturu (list, hash), sice to budes musiet processovat n*n, ale N sa kazdym odstranenim prvku zmensi.
takze namiesto 10M zaznamov v konecnom dosledku budes prehladavat mozno 1/10...
na ukor pocetnosti prvkov pola vsak prichadza overhead s pristupovanim na ich prvky,
zatial co v beznom "array" pristupujes o(1), lebo vies ktory konkretny prvok,
tu, vzhladom na pouzitu strukturu o(n), log(n), pripadne idealny stav hashmapy o(1) pre kazdy prvok, ktory budes seekovat
podotykam, ze moja usporiadana hash-mapa (key set) bola usporiadana podla poradia prvkov, v akom boli do nej vkladane, nie na zaklade ich ciselnej hodnoty (kedze som tam daval rad radom cisla od najm. po najv. tak je to v tomto pripade identicke vysledkom)
nemusi tak hashmapa vyvazovat keySet, pri kazdom vkladani, na zaklade hodnoty kluca...
takze vkladanie do hashmapy bolo rychle - o(1)
seek na zaklade hash, tiez rychly, idealne o(1), kedze sa vsak jedna o Integer, dovolim si tvrdit, ze sa to tomu velmi priblizuje
remove prvkov uz sice mohol pokulhavat, nakolko boli odstranovane prvky z ktorehokolvek miesta, ale prinajhorsom to bolo o(n)
moznou experimentaciou s pouzitou datovou strukturou by sa mozno dal dosiahnut lepsi vysledok,
dovolim si vsak tvrdit, ze LIST lepsi urcite nebude, nakolko:
vkladanie o(1)
hladanie o(n)
odstranenie o(n)
mozno nejaky sortedList, ale tam by som povedal, ze zlozitosti ukonov pojdu zhruba O(log(n))
lava, prava, lava, prava ...