Třídící algoritmy v praxi Vyřešeno

Místo pro dotazy a rady ohledně programovacích jazyků (C++, C#, PHP, ASP, Javascript, VBS..) a tvorby webových stránek

Moderátor: Mods_senior

denethor
nováček
Příspěvky: 10
Registrován: leden 12
Pohlaví: Nespecifikováno
Stav:
Offline

Třídící algoritmy v praxi  Vyřešeno

Příspěvekod denethor » 21 čer 2012 09:56

Ahoj
snažím se setřídit pole, které bude mít maximálně tak 10000 prvků. Zatím používám mergesort, to funguje, ale chtěl bych, aby to běhalo rychleji. Nevíte někdo, jestli treba quicksort bude rychlejší a o kolik přibližně? Asymptotická složitost je pořád nlogn, ale myslím, že merge je dost složitý a proto pomalejší... Nebo jaký algoritmus byste použili vy?
Dik

Reklama
Uživatelský avatar
Koja
Level 4.5
Level 4.5
Příspěvky: 1909
Registrován: listopad 05
Bydliště: Brno
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: Třídící algoritmy v praxi

Příspěvekod Koja » 21 čer 2012 10:16

Quicksort patří mezi nejrychlejší (stejně jako mergesort a heapsort), ale hodně záleží na způsobu jeho implementace. Pokud to uděláš špatně, tak bude o poznání pomalejší. Z těch dalších bych vyzkoušel i heapsort.
Everybody lies so don't trust anyone. :)

Uživatelský avatar
Tomina
Level 5.5
Level 5.5
Příspěvky: 2690
Registrován: březen 08
Bydliště: Praha
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: Třídící algoritmy v praxi

Příspěvekod Tomina » 21 čer 2012 10:18

QuickSort bývá u větších polí nestabilní, ovšem je nejrychlejší. Řazení haldou je na tom podobně, jak QuickSort, čili tam ten smysl moc nevidím. Nic jiného snad není, klasická bublinovka je jen na menší pole.

Počítal sis časovou složitost svého algoritmu?

Uživatelský avatar
Koja
Level 4.5
Level 4.5
Příspěvky: 1909
Registrován: listopad 05
Bydliště: Brno
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: Třídící algoritmy v praxi

Příspěvekod Koja » 21 čer 2012 10:24

Velikost pole nemá na (ne)stabilitu až takový vliv. A zároveň by vůbec nemuselo vadit, že je nestabilní, záleží na tom, co přesně chce řadit.
Everybody lies so don't trust anyone. :)

denethor
nováček
Příspěvky: 10
Registrován: leden 12
Pohlaví: Nespecifikováno
Stav:
Offline

Re: Třídící algoritmy v praxi

Příspěvekod denethor » 21 čer 2012 10:36

Dik za odpovědi.

Nemáte představu, kolikrát by asi byl dobře naprogramovaný quicksort rychlejší než mergesort? Jestli je třeba možný mít dvojnásobný zrychlení? Protože se mi to nechce jen tak zkoušet a pak to vyjde skoro nastejno.

Jestli je časová složitost to, co si myslim, že to je, tak mam nlogn, což je asi nejlepsi mozne.

A o to, jestli je algoritmus stabilni nebo ne nejde.

Uživatelský avatar
Koja
Level 4.5
Level 4.5
Příspěvky: 1909
Registrován: listopad 05
Bydliště: Brno
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: Třídící algoritmy v praxi

Příspěvekod Koja » 21 čer 2012 10:49

2x rychlejší rozhodně nebude. Podívej se sem, nastav si problem size na 50, a uvidíš, že merge je mírně rychlejší, než quick. Zároveň quick sice má obvykle složitost "nlogn", ale v nejhorších případech může mít až kvadratickou (n^2).
Everybody lies so don't trust anyone. :)


Zpět na “Programování a tvorba webu”

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 5 hostů