Diskuze: Soutěž v programování :)

Tvůrce

Zobrazeno 50 zpráv z 92.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
Dodatek k řazení: kratší slova by měla být ve výstupu před delšími
slovy.
Např.
a
aa
aaa
Jakože:
a
b
c
aa
bb
aaa
bbb
nebo:
a
aa
aaa
b
bb
bbb
c
Dá se to chápat různě
... a ještě dotaz máš ve windows nainstalované PHP?
Varianta 2:
a
aa
aaa
b
bb
bbb
Mám tu Wamp, takže PHP to být může
Můžu použít více vláken?
doublepost
Jen pro zajímavost:
sortovací funkce v Game Makeru udělá 50000 slov za 140.81 vteřiny
na 1 vlákně o 2.3Ghz za výše uvedených podmínek.
Měli byste být lepší, ať svému oblíbenému jazyku neuděláte ostudu.
To není zrovna extra výkon (resp. jde to o dost líp)
GM obecně plýtvá výkonem kde jen může. Faktem je, že Mark Overmars
asi nečekal využití GM v jiných oblastech než PacMan & company.
Prave jsem zkusil svuj radici algoritmus a trochu me ten cas vydesil,
premyslim, jestli ma cenu to optimalizovat, zkusil jste to jeste nekdo, abych
mel od ceho se odrazit?
Chtěl bych se zeptat, jestli je vylosovaných 100 000 slov za jednu minutu a
třicet osm sekund (1:38) dobrý čas, nebo jsem mimo ligu?
Pro porovnání: zatím jsem na 32ms pro seřazení 50 000 slov
V čem to programuješ? Zkoušeli jsme zabudované řazení u kolekcí v
Jave/C# a časy byly kolem 100ms
A nepočítáš do té doby i generování těch slov?
Až na to že Java měla +-90ms a C# 150ms. Java vede!
Počítám pouze generování čísel.
Programuji v C++.
Zajimalo by me, co na generovani slov tak trva, muzes to poslat? (Cas se pocita az u razeni, takze tohle klidne zverejnit muzes)
A tady je kdyztak verze, co na generovani dat pouzivam ja:
http://pastebin.com/eFLgvnpY
A to si děláš vlastní sortící metodu? Já sme zkoušel to na těch kolekcích a mám časy řazení u 100k slov kolem 190ms. Ale taky to dost záleží na stroji na kterým to pustíš, sem přepnul z úspornýho režimu kde mi to trvalo seřadit 650ms za vysokej výkon a zrychlení bylo fakt velký.
Generování 100k slov mi trvá kolem 50ms.
Jj, vlastni sort, ty sorty v kolekcich jsou univerzalni a umej sortovat vsechno, ale maj taky docela velkou rezii.
A vlastni algoritmus si muzu prizpusobit a optimalizovat podle dat a situace.
Nejspíše to mám plné neefektivních a zbytečných součástek.
Myslim, ze to generovani je az zbytecne moc robustne napsane urcite hodne
zpomaluje treba ten stringstream, pouzij tu moji verzi, taky to neni zadna
slava, ale bezi to rychleji
.
Trocha statistik k řazení slov dle zadaných kritérií:
Velikost souboru : 50 000 slov
Procesor : Intel Core 2 Quad Q9550 2,8GHz
Nativni sort PHP : 230ms
Nativni sort C# 32bit : 155ms
Nativni sort C# 64bit : 145ms
Nativni sort java : cca 90 ms
C++ vlastni sort 32bit : 6 ms
Hmm, já sme se 100k se dostal na 70ms. Ale to brzdí ta kolekce. I když do kompareru dám jen return 1; tak se pod 20ms nedostanu. Zítra ju vyhodim a uvidim co se s tím dá udělat.
Jinak dobrej nápad s tou soutěží Ale C++ to nevyhraje, ani kdybych měl dělat ve Fortranu, Lue nebo
nějakym takovym jazyce, kterej by měl bejt safra rychlej
Ja misto stringu pouzivam nulou ukoncene pole charu jako se pouzivaly nekde
pred 20-30 lety a misto kolekci pole, takze rezie temer nulova
A taky porovnavas 100k slov vs 50k slov (coz jsem teda zatim testoval jen
kvuli tomu GM ), pokud nemas
linearni slozitost algoritmu, tak 100k slov bude trvat vice nez dvojnasobek casu
nez razeni 50k slov
Ja se dobrovolne porazit nenecham, i kdybych to mel prepsat cely do asm
100k slov mi připadá pro můj Atom málo. Nebylo by lepší soutěžit s 10M slovy? Jak dlouhá mají být ta slova?
Tak sem to udělal jak si říkal, dal sme tam pole charů a zbytek vypustil. Ale to řazení pak trvalo ještě dýl asi o 20ms. A to jsem zkoušel celkem rychlé metody řazení. Tak nevim, asi budu muset přemigrovat na jiné jazyk.
Zkus raději přemigrovat na jiný algoritmus. Bubblesort se na tohle opravdu
nehodí
Já sme nebublinkoval
Ale taky sem zkoušel quick sort, ale nic moc. Pak sem zkoušel přes LINQ ten
mě vycházel dycky nejrychlejš, ale na to C++ sme se furt nedostal.
Nejrychlejác sem to měl kolem 30ms 50k slov.
Také záleží na typu procesoru a celkovém výkonu počítače. Když jsem zkoušel různé jazyky na různých PC, tak na jednom vítězilo C++, na jiném Java.
Luboš Běhounek Satik - Máš už hotový referenční program? Potřeboval bych se
tě na něco zeptat ohledně mého řešení a nechtěl bych nějak ovlivnit to
tvoje, kdybys na něm ještě pracoval
Odpovědi na tvé otázky najdeš nahoře - 50k slov jsem tu zkoušel jen
kvůli porovnání s gamemakerem, jinak to asi milióny nebo desetimilióny
budou
Neaktivní uživatel :
Základ už mám, teď už jen ladím drobnosti, možná ještě to zkusím
přepsat do asm.
Processor Inlel Core Duo (2.4GHz)
100 000 slov - generování 31 - 32 ms, řazení 31 - 32 ms
1 000 000 slov - generování 330 - 360 ms, řazení 660 - 720 ms
10 000 000 slov - generování - cca 3.5 s, řazení - cca 10.5 s
Psáno v C++.
Kompilováno v g++ (Dev-C++) se zapnitou maximální optimalizací.
To uz je docela slusny, zatim nejlepsi vysledek
Myslím, že hlavní měření můžeme provést na 10M nebo 100M slovech.
Myslim že 10M je akorát, 100M už je moc, to může trvat i několik minut.
Zatím jsem na 7 ms (řazení) pro 100k čísel, zadání jsem schválně napsal tak, aby bylo možné oproti běžnému sortování použít hodně drastické optimalizace.
Jinak napsáno a zkompilováno to mám v MSVS 2008.
Mě napad ještě jeden způsob jak porovnat řetezce, otázka je ale jestli
bude rychlejší, spíš bych řek že ne, ale vyzkoušim to
No, teoreticky můžeme řadit až něco kolem 400M slov (teď jsem to
zkoušel na svém alg. a zvládá to), ale záleží dost na tom, jaká je
paměťová náročnost zvolených algoritmů
Jinak, měřil jsem to funkcí clock(), takže u těch 100k to asi nebude moc přesný, může to bejt 30, stejně tak 10 nebo 50. Proto jsem sem hodil i ty vyšší čísla, u těch už by to mělo bejt dostatečně přesný.
Koukni na funkce queryperformance, ty to umějí přesněji.
Co je to za algoritmus???? =-O Mě to quicksortem(nebo alespoň napodobeninou) trvá 1 000 000 slov
v c# zhruba 5 sekund!
Tak to jsem si myslel, že se svým naprosto neoptimalizovaným Radixsortem v Javě na Atomu 1.6 GHz a časy
100000 ... 361 ms generování, 248 ms sort
1000000 ... 2958 ms generování, 1608 ms sort
jsem patlal.
Neberte to jako konečné řešení. Javu se teprve učím a právě jsem dostal nápad, jak to radikálně zrychlit.
Je to Quick sort... záleží taky dost na tom jak máš napsaný porovnání řetězců a prohození, nesmíš je kopírovat celý.
C# má nějakou režii oproti C++ navíc a má některé vlastnosti, které se občas nehodí - např. ta, že všechny pole při vytváření vynuluje, což někdy není potřeba a zbytečně to snižuje výkon.
Používání low-level konstrukcí (char[] místo string, pole místo kolekcí) může taky urychlit výpočet, protože se sníží režie.
Míst k optimalizacím je tam spousta.
Když napíšu, že 10 000 000 slov řadím v jednom vlákně na 2,8GHz
procesoru za méně než 200ms, budete mi to věřit?
Ač to nechápu, tak věřím
V pátek sem hodím zdrojáky a lehce povysvětlím, co a jak dělám, pokud
mě někdo nepřekoná
Hm, tak jsem vyvinul algoritmus na míru tomu zadání.
Je trochu atypický, ale vypadá, že dělá co má.
Přinutil jsem s tím GameMaker udělat 1M za 11.13sec. To sice není
bůhvíco,
ale u gml kódu to bude pravděpodobně fyzikální hranice. Pro srovnání
je
třeba uvést, že třídění stejného množství pomocí vestavěné
funkce
( označované v návodech za rychlou ) jsem včera po třech hodinách
vypnul, protože hrozilo, že počítač obroste lišejníkem.
V rychlejších jazycích by ten princip třídil zřejmě celkem neskutečně.
Kdyžtak mi napiš zprávou, jaký postup jsi použil, třeba jsme použili
stejný
Zobrazeno 50 zpráv z 92.