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:
smrcka doporucuval a ja sam se vyhybam "continue" vzdy to jde prepsat
while tam byl zbytecny jelikoz se cyklus provede vzdy alespon jednou
cili jsem nahradil do ... while (podminka z radku 21)
premyslim ze bych prekopal ty promenty(nazvy ale to podle dohody
(26.9.2012 9:00)
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)
asi vsimnete obcas nemam rad zkracenou verzi ifu apod bez slozenych zavorek
jinak co jsem se zatim dival obdivuhodna prace :)
Klidne me opravte jak rikam nejsem dokonaly :)
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
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
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
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 :).
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
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:
cili jsem nahradil do ... while (podminka z radku 21)
(26.9.2012 9:00)
cili jsem presunul deklaraci next a list nad for
(ted se deklaruji vzdy)
asi vsimnete obcas nemam rad zkracenou verzi ifu apod bez slozenych zavorek
jinak co jsem se zatim dival obdivuhodna prace :)
Klidne me opravte jak rikam nejsem dokonaly :)
Zběžně jsem se díval na zdrojový kód hashovací tabulky a mám k němu několik poznámek:
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 :).