Menu

#6 Hash tabulka

1.0
open
nobody
hash (2)
2012-10-14
2012-10-08
Mixerito
No

Doladit hash tabulku pro naše potřeby,
naplnit ji klíčovými slovy a rezervovanými slovy (dle zadání),

Discussion

  • Mixerito

    Mixerito - 2012-10-10

    Jakub Strych zkontroloval a doladil téměř perferktní verzi Hash table po Jirkovi Skácelovi:
    Následující komentáře byly připsány v opravách.
    Jenže to bylo ještě na sourceforge SVN
    a tedy to radši kopíruju i sem:

    1. smrcka doporucuval a ja sam se vyhybam "continue" vzdy to jde prepsat
    2. while tam byl zbytecny jelikoz se cyklus provede vzdy alespon jednou
      cili jsem nahradil do ... while (podminka z radku 21)
    3. premyslim ze bych prekopal ty promenty(nazvy ale to podle dohody
      (26.9.2012 9:00)
    4. kdyz je na vyber mezi vetsi narokem na pamet nebo na procesor beru pamet
      cili jsem presunul deklaraci next a list nad for
      (ted se deklaruji vzdy)
    5. asi vsimnete obcas nemam rad zkracenou verzi ifu apod bez slozenych zavorek

    6. jinak co jsem se zatim dival obdivuhodna prace :)

    Klidne me opravte jak rikam nejsem dokonaly :)

     
  • Lukas

    Lukas - 2012-10-11

    Zběžně jsem se díval na zdrojový kód hashovací tabulky a mám k němu několik poznámek:

    • dodatečnými úpravami a přesuny definicí lokálních proměnných byly do kódu zaneseny drobné chyby znemožňující překlad
    • pokud hlavička obsahuje inline definici hashovací funkce, je její modul obsahující pouze její redekleraci k ničemu
    • funkce pro změnu velikosti tabulky mi přijde zbytečná, přeskupovat všechny položky při změně velikosti a pro každou přepočítávat její hash je celkem neefektivní
    • dále by bylo dobré přesunout všechny definice funkcí do jednoho souboru
     
  • Arbon

    Arbon - 2012-10-14

    Už jsou v jednom souboru - ial.c, spolu se sortem a findem. Použil jsem kousky z druhé revize na SVN a všechno funguje, takže asi mám zdrojáky ještě před úpravami.

    ad inline hashi: co vím, tak v C je s inline problém, protože musí existovat jednak pokud se zapnou optimalizace a inlinuje se - to je v hlavičkovém souboru, ale potom musí existovat ještě jedna verze, která vygeneruje kód funkce, pokud se neinlinuje. Navíc zadání v ICJ k té tabulce definovalo, že tam musí být ten soubor :).

    ad resize: záleží jak moc nových položek vůči přístupu ke starým je. Když máš tisíc položek a špatně nadimenzuješ tabulku na tři sta položek, tak musíš procházet v průměru 2 členy zřetězeného seznamu pro každý přístup. Pokud tabulku jednou rozšíříš, tak to projdeš jen jednou všechno, i když trochu pomaleji. Co jsem si dělal metriky k projektu do ICJ, tak se to s dobře nastavenými hranicemi vyplatí. Stejně jsem ale udělal menší úpravy, aby se to dalo jednoduše vypnout pokud undefneš HTABLE_RESIZABLE v ial.h. Můžeme pak porovnat výkonnost :).

     

Log in to post a comment.