Milyen futásideje/komplexitása van az alábbi algoritmusnak?
Adott egy string tömb, pl.:
["yx", "ba", "cc"]
Először rendezzük az egyes stringek karaktereit, tehát ez után így fog kinézni:
["xy", "ab", "cc"]
Utána pedig magát a tömböt rendezzük, tehát ez a végeredmény:
["ab", "cc", "xy"]
Nem konkrét implementációra vagyok kíváncsi, csak a futásidőre.
Attól is függ milyen rendezési algoritmust használsz:
Rendezést N*logN idővel fogod tudni.
Tegyük fel, hogy a string-ek legrosszabb esetben M hosszúak és N darab van belőle. Ekkor N*M*logM
Most pedig a rendezett stringeket rendezzük a tömbben:
N*logN
Az eredmény a kettő egymásutáni futtatása, tehát
N*M*logM + N*logN, felsőhatárral, jó algoritmussal.
Quick sort komplexitása csak rossz pivot választással (és rendezett tömbre hívva) négyzetes, a Java implementáció nyilván nem ilyen.
Illetve nyilvánvalóan nem lehet egyváltozós komplexitása az algoritmusnak.
#4-es egész jó úton jár, de nem veszi figyelembe, hogy két String összehasonlítása nem O(1)-es művelet (mivel stringeket karakterenként hasonlítunk össze, nem mindegy, hogy 3 karakterből állnak, vagy 3 millióból).
Legyen a leghosszabb String s és a tömb mérete n.
Egy String rendezése s*log s.
n String rendezése n*s*log s.
Ezután rendezhetjük a tömböt, ha a Stringek egy karakterből állnának, akkor ez n*log n lenne, de bejön egy s szorzó, tehát s*n*log n lesz.
Tehát a vége n*s*log s + n*s*log n, azaz O(n*s*(log s + log n)) a komplexitás.
Köszönöm a válaszokat, főleg a hatosnak!
(úgy látom valamiért le lett pontozva mindenki, nem én voltam)
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!