Cvičení 11
Téma
- hashování
- řešení kolizí řetězením
- otevřené adresování
Úkoly
- Implementujte struktury a následující funkcionalitu pro hashovací tabulky nad řetězci s řešením kolizí řetězením:
chaining_table* create_chaining_table(int size, int (*hash)(char*));int add_ct(char* data, chaining_table* table);int remove_ct(char* data, chaining_table* table);int contains_ct(char* data, chaining_table* table);
create_chaining_tableje ukazatel na hashovací funkci. Poslední tři procedury budou vracet 1 při úspěchu (provedení požadované operace) a 0 jinak (nenalezeno, nepřidáno, nelze smazat atd.). Hashovací funkcí pro řetězce si zvolte dle přednášek. - Implementujte struktury a následující funkcionalitu pro hashovací tabulky nad řetězci s řešením kolizí otevřeným adresováním:
oa_table* create_oa_table(int size, int (*hash)(char*), int (*probe)(int, int));int add_oat(char* data, oa_table* table);int remove_oat(char* data, oa_table* table);int contains_oat(char* data, oa_table* table);
create_oa_tableje ukazatel na hashovací funkci a třetí ukazatel na průzkumnou funkci. Poslední tři procedury budou vracet 1 při úspěchu (provedení požadované operace) a 0 jinak (nenalezeno, nepřidáno, nelze smazat atd.). Hashovací funkcí pro řetězce si zvolte dle přednášek. - Napište
mains ukázkami použití implementací. U otevřeného adresování ukažte použití na tabulkách s lineární a kvadratickou průzkumnou funkcí. - (*) Zkuste si otevřené adresování s bilineární průzkumnou funkcí. Tj budete muset zobecnit strukturu pro oa_table tak, abyste ji mohli předat dvě hashovací funkce.