Třetí skupina zadání projektů do předmětu Algoritmy II, letní semestr 2017/2018

Podobné dokumenty
Hašování. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 13.

Základy algoritmizace. Hašování

Datové struktury 2: Rozptylovací tabulky

HASHING GENERAL Hashovací (=rozptylovací) funkce

Úvod. Úvod do programování. Úvod. Hashovací tabulky

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. October 17, 2016

součet cvičení celkem. známka. Úloha č.: max. bodů: skut. bodů:

Návrh designu: Radek Mařík

Algoritmy II. Otázky k průběžnému testu znalostí

Iterator & for cyklus

Spojová implementace lineárních datových struktur

Výčtový typ strana 67

Vyhledávání, zejména rozptylování

Semestrální práce 2 znakový strom

Rozptylovací tabulky

HASHING GENERAL Hashovací (=rozptylovací) funkce

2 Datové struktury. Pole Seznam Zásobník Fronty FIFO Haldy a prioritní fronty Stromy Hash tabulky Slovníky

Algoritmizace prostorových úloh

Algoritmizace prostorových úloh

Úvod do programovacích jazyků (Java)

Šablony, kontejnery a iterátory

15. Projekt Kalkulačka

boolean hasnext() Object next() void remove() Kolekce

Kolekce, cyklus foreach

8 Třídy, objekty, metody, předávání argumentů metod

typová konverze typová inference

PB161 Programování v jazyce C++ Přednáška 3

20. Projekt Domácí mediotéka

Množina v C++ (set, multiset).

POZOR klíč NENÍ index (adresa), ale podle klíče se hodnoty ukládají na indexy (adresy).

KMI / TMA Tvorba mobilních aplikací. 6. seminář ZS 2016/2017 Středa 13:15-15:45

Robert Haken [MVP ASP.NET/IIS, MCT] software architect, HAVIT, Základní algoritmy v praxi

Operační systémy 2: Zápočtové úkoly

7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd

B Organizace databáze na fyzické úrovni u serveru Oracle

Šablony funkcí a tříd (Templates) Genericita

5a. Makra Visual Basic pro Microsoft Escel. Vytvořil Institut biostatistiky a analýz, Masarykova univerzita J. Kalina

Skripta ke školení. Základy VBA. vypracoval: Tomáš Herout. tel:

ALS1 Přednáška 1. Pravěpodobnost, náhodná proměnná, očekávaná hodnota náhodné proměnné, harmonická čísla

Základní definice Aplikace hašování Kontrukce Známé hašovací funkce. Hašovací funkce. Jonáš Chudý. Úvod do kryptologie

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

ALGORITMIZACE A PROGRAMOVÁNÍ

Lineární datové struktury

Druhá skupina zadání projektů do předmětu Algoritmy II, letní semestr 2014/2015

TÉMATICKÝ OKRUH TZD, DIS a TIS

Programovací í jazyk Haskell

Seminář Java IV p.1/38

ADT/ADS = abstraktní datové typy / struktury

Hašování (Vyhledávání metodou transformace klíče)

Standardní algoritmy vyhledávací.

11. Dědičnost. Dědičnost strana 103

VISUAL BASIC. Práce se soubory

8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek

DATABÁZOVÉ A INFORMAČNÍ SYSTÉMY

Pokročilé programování v jazyce C pro chemiky (C3220) Statické proměnné a metody, šablony v C++

JSON API pro zjišťování cen MtG karet

4a. Makra Visual Basic pro Microsoft Excel Cyklické odkazy a iterace Makra funkce a metody

Jazyk C# (seminář 5)

Seminář Java II p.1/43

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Semestrální úloha č. 1 z předmětu Moderní programovací postupy Studenti:...

Abstraktní datové typy FRONTA

Práce s řetězci. IUJCE Přednáška č. 10. string.h. vrací: délku řetězce str (bez '\0')

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Základy PHP. Úvod do jazyka PHP a principů skriptování na straně serveru

Abstraktní třída a rozhraní

Programovací jazyk Haskell

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

Příklad aplikace Klient/Server s Boss/Worker modelem (informativní)

Proměnná. Datový typ. IAJCE Cvičení č. 3. Pojmenované místo v paměti sloužící pro uložení hodnoty.

Konstruktory a destruktory

Reranking založený na metadatech

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 21.

Úvod Přetěžování Generika Kolekce Konec. Programování v C# Další jazykové konstrukce. Petr Vaněček 1 / 31

Operační systémy. Cvičení 3: Programování v C pod Unixem

Projekt Využití ICT ve výuce na gymnáziích, registrační číslo projektu CZ.1.07/1.1.07/ MS Excel

Koncepce (větších) programů. Základy programování 2 Tomáš Kühr

Interpret jazyka IFJ2011

Amortizovaná složitost. Prioritní fronty, haldy (binární, d- regulární, binomiální, Fibonacciho), operace nad nimi a jejich složitost

Generické programování

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

5 Rekurze a zásobník. Rekurzivní volání metody

Algoritmizace a programování

Tabulka. Často jde nejenom o dynamickou množinu, ale i statickou množinu. Matematické tabulky statická množina

Obsah přednášky 9. Skrývání informací. Skrývání informací. Zapouzdření. Skrývání informací. Základy programování (IZAPR, IZKPR) Přednáška 9

Funkční objekty v C++.

KTE / ZPE Informační technologie

Čtvrtek 3. listopadu. Makra v Excelu. Obecná definice makra: Spouštění makra: Druhy maker, způsoby tvorby a jejich ukládání

OOPR_05. Případové studie

6. Fyzická (interní) úroveň databázového systému

PROGRAMOVÁNÍ V C++ CVIČENÍ

Paměť počítače. alg2 1

5 Přehled operátorů, příkazy, přetypování

Příklad : String txt1 = new String( Ahoj vsichni! ); //vytvoří instanci třídy String a přiřadí ji vnitřní hodnotu Ahoj vsichni!

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Zadání druhého zápočtového projektu Základy algoritmizace, 2005

PB161 Programování v C++ Proudy pro standardní zařízení Souborové proudy Paměťové proudy Manipulátory

7. Datové typy v Javě

Konec a tak. PB173 Programování v C++11. Vladimír Štill, Jiří Weiser. Fakulta Informatiky, Masarykova Univerzita. 15.

Transkript:

Třetí skupina zadání projektů do předmětu Algoritmy II, letní semestr 2017/2018 doc. Mgr. Jiří Dvorský, Ph.D. 24. dubna 2018 Verze zadání 24. dubna 2018 První verze 1

1 Hašovací tabulka V tomto zadání bude vaším ukolem implementovat hašovací tabulku s následujícími vlastnostmi: tabulka bude implementována jako třída HashTable v C++, tabulka bude ukládat prvky typu string, velikost tabulky bude pevně daná v konstruktoru, kolize vkládaných prvků budou řešeny pomocí separátního řetězení, což znamená, každý slot tabulky obsahuje seznam a v něm jsou uloženy kolidující prvky, tj. prvky tabulky se stejnou hašovací hodnotou, a pro výpočet hašovací hodnoty můžete využít buď hašovací funkci z C++ Standard Library, viz například http://en.cppreference.com/w/cpp/string/basic_string/hash, nebo některou z hašovacích funkcí popsaných na Wikipedii, viz https://en.wikipedia.org/ wiki/list_of_hash_functions#cite_note-2, část Non-cryptographic hash functions. Třída HashTable bude implementovat: konstruktor bez parametrů, velikost tabulky bude nastavena na předem danou, vámi zvolenou, hodnotu, konstruktor s jedním parametrem size typu int, kde parametr Size udává velikost tabulky, metodu Insert s jedním parametrem s typu string, která vloží řetězec s do tabulky, metoda nevrací žádnou hodnotu, metodu Search s jedním parametrem s typu string a vracející true pokud se řetězec s nachází v tabulce, jinak vracející false, metodu Count vracející číslo typu int odpovídající počtu prvků uložených v tabulce, metodu LoadFactor vracející číslo typu double odpovídající faktoru naplnění tabulky, a metodu Report, která, vhodným způsobem, vypíše tabulku na standardní výstup. 2

2 Testování hašovacích funkcí Vaším úkolem je experimentálně prozkoumat chování hašovací funkce Java hashcode(), viz https://en.wikipedia.org/wiki/java_hashcode() či https://docs.oracle.com/javase/ 1.5.0/docs/api/java/lang/String.html#hashCode%28%29, pro danou množinu textových řetězců a různé rozsahy hašovacích hodnot. Experiment proběhne následujícím způsobem: 1. Implementujete zadanou hašovací funkci, nazvěme ji pro jednoduchost h. 2. Zvolíte rozsah hašovacích hodnot N. Hašovací funkce h bude tedy pro řetězec s vracet hodnoty h(s) v rozsahu 0 h(s) < N. Pokud funkce h vrací hodnoty v jiném rozsahu je nutné tyto hodnoty upravit, nejjednodnodušeji pomocí operace modn. 3. Postupně načtete všechny řetězce z připraveného textového souboru, každý řádek v tomto souboru představuje jeden řetězec, vypočtete pro ně hašovací hodnotu a budete sledovat četnosti, s jakou se jednotlivé hašovací hodnoty vyskytly. 4. Na závěr naměřené četnosti vypíšete do tabulky, případně zobrazíte v grafu. (Excel?) 5. Experiment zopakujete pro různé hodnoty N. Textový soubor pro experimenty bude k dispozici na stránkách předmětu. 3

3 Hašovací tabulka V tomto zadání bude vaším ukolem implementovat hašovací tabulku s následujícími vlastnostmi: tabulka bude implementována jako třída HashTable v C++, tabulka bude ukládat prvky typu string, velikost tabulky bude pevně daná v konstruktoru, kolize vkládaných prvků budou řešeny pomocí otevřeného adresování, metodou kvadratických pokusů, a pro výpočet hašovací hodnoty můžete využít buď hašovací funkci z C++ Standard Library, viz například http://en.cppreference.com/w/cpp/string/basic_string/hash, nebo některou z hašovacích funkcí popsaných na Wikipedii, viz https://en.wikipedia.org/ wiki/list_of_hash_functions#cite_note-2, část Non-cryptographic hash functions. Třída HashTable bude implementovat: konstruktor bez parametrů, velikost tabulky bude nastavena na předem danou, vámi zvolenou, hodnotu, konstruktor s jedním parametrem size typu int, kde parametr Size udává velikost tabulky, metodu Insert s jedním parametrem s typu string, která vloží řetězec s do tabulky, metoda bude vracet true, pokud se vložení do tabulky zdařilo, jinak bude vracet false, metodu Search s jedním parametrem s typu string a vracející true pokud se řetězec s nachází v tabulce, jinak vracející false, metodu Count vracející číslo typu int odpovídající počtu prvků uložených v tabulce, metodu LoadFactor vracející číslo typu double odpovídající faktoru naplnění tabulky, a metodu Report, která, vhodným způsobem, vypíše tabulku na standardní výstup. 4

4 Testování hašovacích funkcí Vaším úkolem je experimentálně prozkoumat chování hašovací funkce PJW hash function, viz https://en.wikipedia.org/wiki/pjw_hash_function, použijte variantu UNIX ELF, pro danou množinu textových řetězců a různé rozsahy hašovacích hodnot. Experiment proběhne následujícím způsobem: 1. Implementujete zadanou hašovací funkci, nazvěme ji pro jednoduchost h. 2. Zvolíte rozsah hašovacích hodnot N. Hašovací funkce h bude tedy pro řetězec s vracet hodnoty h(s) v rozsahu 0 h(s) < N. Pokud funkce h vrací hodnoty v jiném rozsahu je nutné tyto hodnoty upravit, nejjednodnodušeji pomocí operace modn. 3. Postupně načtete všechny řetězce z připraveného textového souboru, každý řádek v tomto souboru představuje jeden řetězec, vypočtete pro ně hašovací hodnotu a budete sledovat četnosti, s jakou se jednotlivé hašovací hodnoty vyskytly. 4. Na závěr naměřené četnosti vypíšete do tabulky, případně zobrazíte v grafu. (Excel?) 5. Experiment zopakujete pro různé hodnoty N. Textový soubor pro experimenty bude k dispozici na stránkách předmětu. 5

5 Hašovací tabulka V tomto zadání bude vaším ukolem implementovat hašovací tabulku s následujícími vlastnostmi: tabulka bude implementována jako třída HashTable v C++, tabulka bude ukládat prvky typu string, velikost tabulky bude pevně daná v konstruktoru, kolize vkládaných prvků budou řešeny pomocí otevřeného adresování, metodou dvojitého hašování, a pro výpočet hašovací hodnoty můžete využít buď hašovací funkci z C++ Standard Library, viz například http://en.cppreference.com/w/cpp/string/basic_string/hash, nebo některou z hašovacích funkcí popsaných na Wikipedii, viz https://en.wikipedia.org/ wiki/list_of_hash_functions#cite_note-2, část Non-cryptographic hash functions. Třída HashTable bude implementovat: konstruktor bez parametrů, velikost tabulky bude nastavena na předem danou, vámi zvolenou, hodnotu, konstruktor s jedním parametrem size typu int, kde parametr Size udává velikost tabulky, metodu Insert s jedním parametrem s typu string, která vloží řetězec s do tabulky, metoda bude vracet true, pokud se vložení do tabulky zdařilo, jinak bude vracet false, metodu Search s jedním parametrem s typu string a vracející true pokud se řetězec s nachází v tabulce, jinak vracející false, metodu Count vracející číslo typu int odpovídající počtu prvků uložených v tabulce, metodu LoadFactor vracející číslo typu double odpovídající faktoru naplnění tabulky, a metodu Report, která, vhodným způsobem, vypíše tabulku na standardní výstup. 6

6 Testování hašovacích funkcí Vaším úkolem je experimentálně prozkoumat chování hašovací funkce Jenkins hash function, viz https://en.wikipedia.org/wiki/jenkins_hash_function, pro danou množinu textových řetězců a různé rozsahy hašovacích hodnot. Experiment proběhne následujícím způsobem: 1. Implementujete zadanou hašovací funkci, nazvěme ji pro jednoduchost h. 2. Zvolíte rozsah hašovacích hodnot N. Hašovací funkce h bude tedy pro řetězec s vracet hodnoty h(s) v rozsahu 0 h(s) < N. Pokud funkce h vrací hodnoty v jiném rozsahu je nutné tyto hodnoty upravit, nejjednodnodušeji pomocí operace modn. 3. Postupně načtete všechny řetězce z připraveného textového souboru, každý řádek v tomto souboru představuje jeden řetězec, vypočtete pro ně hašovací hodnotu a budete sledovat četnosti, s jakou se jednotlivé hašovací hodnoty vyskytly. 4. Na závěr naměřené četnosti vypíšete do tabulky, případně zobrazíte v grafu. (Excel?) 5. Experiment zopakujete pro různé hodnoty N. Textový soubor pro experimenty bude k dispozici na stránkách předmětu. 7

7 Hašovací tabulka V tomto zadání bude vaším ukolem implementovat hašovací tabulku s následujícími vlastnostmi: tabulka bude implementována jako třída HashTable v C++, tabulka bude ukládat prvky typu string, velikost tabulky bude pevně daná v konstruktoru, kolize vkládaných prvků budou řešeny pomocí otevřeného adresování, metodou lineárních pokusů, a pro výpočet hašovací hodnoty můžete využít buď hašovací funkci z C++ Standard Library, viz například http://en.cppreference.com/w/cpp/string/basic_string/hash, nebo některou z hašovacích funkcí popsaných na Wikipedii, viz https://en.wikipedia.org/ wiki/list_of_hash_functions#cite_note-2, část Non-cryptographic hash functions. Třída HashTable bude implementovat: konstruktor bez parametrů, velikost tabulky bude nastavena na předem danou, vámi zvolenou, hodnotu, konstruktor s jedním parametrem size typu int, kde parametr Size udává velikost tabulky, metodu Insert s jedním parametrem s typu string, která vloží řetězec s do tabulky, metoda bude vracet true, pokud se vložení do tabulky zdařilo, jinak bude vracet false, metodu Search s jedním parametrem s typu string a vracející true pokud se řetězec s nachází v tabulce, jinak vracející false, metodu Count vracející číslo typu int odpovídající počtu prvků uložených v tabulce, metodu LoadFactor vracející číslo typu double odpovídající faktoru naplnění tabulky, a metodu Report, která, vhodným způsobem, vypíše tabulku na standardní výstup. 8