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