Middle — Senior
Je možné nájsť riešenie rýchlejšie ako O(n^2)?
sobes.tech AI
Odpoveď od AI
Otázka, či je možné nájsť riešenie rýchlejšie ako O(n²), závisí od konkrétnej úlohy a jej štruktúry.
Ak algoritmus s kvadratickou zložitostí vzniká kvôli potrebe porovnať všetky páry prvkov (napríklad hľadanie duplikátov, porovnanie všetkých párov), potom často existujú efektívnejšie prístupy:
- Použitie ďalších dátových štruktúr (hash tabuliek, množín) na skrátenie času vyhľadávania na O(n).
- Aplikácia zoradenia s následným lineárnym prechodom, čo dáva O(n log n).
- Použitie špecializovaných algoritmov, napríklad založených na dynamickom programovaní, greedy metódach alebo divide and conquer.
Avšak, pre niektoré úlohy je kvadratická zložitosť dolnou hranicou kvôli povahe problému.
Príklad: hľadanie párov so zadaným súčtom v poli.
Kvadratické riešenie:
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
if (arr[i] + arr[j] == target) {
// pár nájdený
}
}
}
Efektívnejšie riešenie s použitím hash tabuľky — O(n):
Set<Integer> complements = new HashSet<>();
for (int num : arr) {
if (complements.contains(num)) {
// pár nájdený
} else {
complements.add(target - num);
}
}
Takže, je často možné nájsť riešenie rýchlejšie ako O(n²), ale konkrétna odpoveď závisí od úlohy a jej obmedzení.