Knihovna pro stromy v C
Petr Baláš
petr.balas na gmail.com
Středa Září 12 08:47:31 CEST 2007
On 9/11/07, Jan Kasprzak <kas na fi.muni.cz> wrote:
> Dalibor Straka wrote:
> : Ahoj,
> :
> : On Tue, Sep 11, 2007 at 01:58:43PM +0200, Jan Kasprzak wrote:
> : > No a ted je otazka, jak toto v C naprogramovat. Pro 24 bitu v zasade
> : > staci mit pole delky 2^24, na zacatku naplnit nulami, pak pricitat
> : > jednicky podle vstupu a na konci jednim pruchodem vypsat ty nenulove.
> : > Bohuzel i tohle mi v profileru vylezlo nahoru jako nejvic narocne,
> : >
> : Mohl bys mi poslat kod? Todle se mi zda jako neuveritelne.
>
> Uz nemam, ale neco jako
>
> for (i=0; i < (1<<24); i++) {
> if (skore[i] > neco ...) {
> printf("%d,%d...\n", i, skore[i],...);
> }
> }
>
> Dal jsem to pro jistotu do samostatne funkce, a ta i presto
> ze v testovacim behu mela je nekolik malo desitek volani, tak sumarni cas
> mela daleko nejvetsi z celeho programu.
>
> -Y.
No pokud jsou ta vstupni cisla obvykle za sebou, tak bych zkusil
pridat neco jako:
int score2[4096];
do pocitaci fce pridat:
score2[vstupni_hodnota << 12] = 1;
a vypis upravit na:
for (i=0; i < 4096; i++){
if (score2[i] != 1)
continue;
for (j=0; j < 4096; j++) {
if (skore[(4096*i) + j] > neco ...) {
printf("%d,%d...\n", 4096*i) + j, skore[i],...);
}
}
}
Je to hruby nastrel, krasu kodu neresim :-)
--
Petr Baláš - petr.balas at gmail dot com
Další informace o konferenci Linux