Kezdőoldal » Számítástechnika » Programozás » Milyen futásideje/komplexitása...

Milyen futásideje/komplexitása van az alábbi algoritmusnak?

Figyelt kérdés

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.



2020. jan. 2. 14:20
 1/9 A kérdező kommentje:
A stringek nem feltétlenül egyenlő hosszúak, ha ez számít.
2020. jan. 2. 14:21
 2/9 anonim ***** válasza:
84%

Attól is függ milyen rendezési algoritmust használsz:

[link]

2020. jan. 2. 14:27
Hasznos számodra ez a válasz?
 3/9 A kérdező kommentje:
Hát Java nyelven írom és a sima Arrays.sort() metódust használom, nincs saját implementációm a rendezésre.
2020. jan. 2. 14:32
 4/9 anonim ***** válasza:
35%

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.

2020. jan. 2. 14:46
Hasznos számodra ez a válasz?
 5/9 anonim ***** válasza:
22%
Az Array.sort quick sort algoritmust használ, aminek a futásideje O(n^2). Tehát ez a teljes algortmus futásideje is (hascsak te nem cseszel el valamit nagyon, mert ugy ez Array.sort() nem fog neked betűket cserélgetni, azt gondolom te magad csinálod, amit lehet lineáris időben)
2020. jan. 2. 14:46
Hasznos számodra ez a válasz?
 6/9 anonim ***** válasza:
81%

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.

2020. jan. 2. 15:11
Hasznos számodra ez a válasz?
 7/9 anonim ***** válasza:
36%

+1 az utolsónak


[link]

2020. jan. 2. 15:16
Hasznos számodra ez a válasz?
 8/9 A kérdező kommentje:

Köszönöm a válaszokat, főleg a hatosnak!

(úgy látom valamiért le lett pontozva mindenki, nem én voltam)

2020. jan. 2. 15:55
 9/9 anonim ***** válasza:
63%

Egy kis megjegyzés az előbbiekhez: Javaban az Arrays.Sort(Object[]) TimSortot használ nem QuickSortot. Tehát referencia típusokoknál TimSort. Viszont az érték típusokat már Dual-Pivot QuickSorttal rendez.


TimSort: [link]


D-QuickSort

[link]

2020. jan. 3. 02:03
Hasznos számodra ez a válasz?

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!