Milyen bonyolultsági osztályba tartozik ez az algoritmus?
Két lépést hajtunk végre egy string tömbön, először megcseréljük minden string első és utolsó karakterét aztán rendezzük a tömböt csökkenő ABC sorrendben.
Ez milyen bonyolultsági osztály lesz?
Osztálytársam azt mondja hogy az első lépés attól függ hogy milyen nyelvről beszélünk mert ha mutable a string (pl C++) akkor valóban csak egy csere ha viszont immutable (Pl Java, Python) akkor át kell másolni az egész stringet ahhoz hogy módosítsuk.
A rendezés pedig szerinte akkor lenne n*logn ha minden string 1 karakter hosszú lenne hiszen stringeket karakterenként hasonlítunk össze és nem mindegy hogy 1 karakter hosszú stringeket hasonlítunk össze vagy 1 millió karakter hosszúakat.
Miért nincs igaza? (gondolom ide hozzáértőbb emberek írnak egy gimnazistánál)
Nem akarok más nevében beszélni, de szerintem itt mindenki félreértette, és a string tömb alatt karakterláncra gondolt, nem pedig karakterláncokból álló tömbre.
Ez esetben a rendezésnek a komplexitása O(n*log n), a stringek összehasonlítása pedig lineáris, így O(m), ahol m a leghosszabb string hossza. Így a teljes művelet O(m*n*log n).
Az átmásolást nem kell beleszámolni a komplexitásba, ugyanis O(a + b) = O(b), ha a < b. Itt az 'a' a másolás a 'b' a rendezés.
De ha egy karakterláncra gondoltam volna akkor hogy értelmezted azt hogy "megcseréljük minden string első és utolsó karakterét"?
"a stringek összehasonlítása pedig lineáris, így O(m), ahol m a leghosszabb string hossza"
Azt mondja ez nem igaz csak min(m1, m2) karaktert kell összehasonlítani mert ha eltérő hosszúak a stringek akkor a hosszabban nem kell minden karaktert megvizsgálni.
Ez nem így van? Végig kell nézni a hosszabb stringet?
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!