Implementace slovníku bitovým vektorem

Podobné dokumenty
Radomíra Duží L Datový typ množina

Abstraktní datové typy FRONTA

Upozornění : barevné odstíny zobrazené na této stránce se mohou z důvodu možného zkreslení Vašeho monitoru lišit od fyzické dodávky.

B A B A B A B A A B A B B

Homer. prvky. délka. přední 0 zadní 4. Použití fronty BUS STOP. 3 Lisa. 2 Bart. 4 Maggie. 1 Marge. Grafické znázornění předchozí animace:

Předmět: Algoritmizace praktické aplikace

Notice:Jagran Infotech Ltd. Printed by Fontographer 4.1 on 6/3/2003 at 7:12 PM

Kombinatorika, výpočty

Programovací jazyk Pascal

Pascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7

Psychologie 03. Otázka číslo: 1. Přiřaď příslušné písmeno ke jménu významné osobnosti:

Motory šetřící energii s vlastním chlazením a zvýšenou účinností

2 Strukturované datové typy Pole Záznam Množina... 4

Algoritmus Minimax. Tomáš Kühr. Projektový seminář 1

Tlačné pružiny. Všechny rozměry pružin uvedených v katalogu jsou standardizovány. Také jsou zde uvedena potřebná technická data.

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy

2D standard pro jízdní doklady ČD, a.s.

Test prvočíselnosti. Úkol: otestovat dané číslo N, zda je prvočíslem

P S M

B D ABCDEFB E EB B FB E B B B B E EB B E B B F B

R O Z P I S ČESKÉHO POHÁRU MLÁDEŽE starších žákyň, starších žáků kadetek a juniorek, kadetů a juniorů pro soutěžní období 2015/2016

M I N I S T E R S T V A V N I T R A

Algoritmizace prostorových úloh

Anotace. Spojové seznamy, haldy. AVL-stromy, A-B stromy. Martin Pergel,

Stiga Eurochallange 2017

Varianty: - brání i C1 - situace 2 na 2 - povinná 3 překřížení A1 s B1 - D1 brání opačným držením hole Změníme orientaci cvičení

autoři a obrázky: Mgr. Hana a Radovan Sloupovi

Operace na datových strukturách

1. Implementace funkce počet vrcholů. Předmět: Algoritmizace praktické aplikace (3ALGA)

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

Algoritmizace prostorových úloh

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

Pokročilé haldy. prof. Ing. Pavel Tvrdík CSc. Fakulta informačních technologií České vysoké učení technické v Praze c Pavel Tvrdík, 2010

Inovace a zkvalitnění výuky prostřednictvím ICT Základy programování a algoritmizace úloh. Ing. Hodál Jaroslav, Ph.D. VY_32_INOVACE_25 09

Náznak ukázky syntaxe a sémantiky pro projekt. 1 Syntaktické prvky. Poslední aktualizace: 8.

Jednoznačné a nejednoznačné gramatiky

Operace na datových strukturách

Binární vyhledávací strom pomocí směrníků Miroslav Hostaša L06620

Algoritmizace a programování

1. D Y N A M I C K É DAT O V É STRUKTUR Y

Přístroje na měření tlaku SITRANS P Snímače relativního, absolutního a diferenčního tlaku


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

Úvod do programovacích jazyků (Java)

Pokročilá algoritmizace amortizovaná složitost, Fibonacciho halda, počítačová aritmetika

Algoritmizace prostorových úloh

D DE = = + [ + D[ [ D = - - XY = = + -

Implementace seznamů do prostředí DELPHI pomocí lineárního seznamu

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

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Organizace a zpracování dat I

SIGNUM 3SB3 Tlačítka a signálky

Součin matice A a čísla α definujeme jako matici αa = (d ij ) typu m n, kde d ij = αa ij pro libovolné indexy i, j.

Fronta (Queue) Úvod do programování. Fronta implementace. Fronta implementace pomocí pole 1/4. Fronta implementace pomocí pole 3/4

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

Projekt OPVK - CZ.1.07/1.1.00/ Matematika pro všechny. Univerzita Palackého v Olomouci

ADT prioritní fronta. Haldy. Další operace nad haldou. Binární halda. Binomické stromy. Časová složitost jednotlivých operací.

SEZNAM A STRUKTURA HODNOT DCC KÓDU

Zjednodušení generativního systému redukcí rozlišení

Základy algoritmizace. Hašování

Cvičení 9 - Monitory. monitor m; var proměnné... procedure p; begin... end; begin inicializace; end;

type Obdelnik = array [1..3, 1..4] of integer; var M: Obdelnik;

TGH07 - Chytré stromové datové struktury

= = = : 1 k > 0. x k + (1 x) 4k = 2k x + 4 4x = 2 x = x = = 2 : 1.

Paradigmata programování 1

Základy algoritmizace. Pattern matching

Jak v Javě primitivní datové typy a jejich reprezentace. BD6B36PJV 002 Fakulta elektrotechnická České vysoké učení technické

Další příklady. Katedra softwarového inženýrství. Katedra teoretické informatiky, Fakulta informačních technologii, ČVUT v Praze. Karel Müller, 2011

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

Red Black strom (Red Black Tree) Úvod do programování. Rotace. Red Black strom. Rotace. Rotace

AVL stromy. pro každý uzel u stromu platí, že rozdíl mezi výškou jeho levého a pravého podstromu je nejvýše 1 stromy jsou samovyvažující

3 Množiny, Relace a Funkce

Návrh. VYHLÁŠKA ze dne 2004, kterou se stanoví rozsah údajů, které musí obsahovat žádost o udělení oprávnění k využívání rádiových kmitočtů

TGH07 - Chytré stromové datové struktury

Zadání k 2. programovacímu testu

Binární vyhledávací strom. Proč binární? Vyhledávání

PÁTEK ČASY. Sportovní hala

Syntetická geometrie I

IB111 Úvod do programování skrze Python

Příloha č. 4_A_1 ke Smlouvě č


ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ. FAKULTA STAVEBNÍ Katedra technologie staveb BAKALÁ SKÁ PRÁCE

Standardní algoritmy vyhledávací.

Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí

4. Model M1 syntetická geometrie

STRUKTURA RASTROVÝCH DAT

ZÁSADY UPRAVUJÍCÍ VÝŠI UHRAD ČLENŮ DRUŽSTVA, OBČANŮ A ORGANIZACÍ ZA ČINNOST A ÚKONY DRUŽSTVA

Úvod do logiky (presentace 2) Naivní teorie množin, relace a funkce

INOVACE BAKALÁŘSKÝCH A MAGISTERSKÝCH STUDIJNÍCH OBORŮ NA HORNICKO-GEOLOGICKÉ FAKULTĚ VYSOKÉ ŠKOLY BÁŇSKÉ - TECHNICKÉ UNIVERZITY OSTRAVA

Úvod do programovacích jazyků (Java)


Závěrečná zkouška z informatiky 2011

Informační systémy 2008/2009. Radim Farana. Obsah. Dotazy přes více tabulek

Seminář z IVT Algoritmizace. Slovanské gymnázium Olomouc Tomáš Kühr

NPRG030 Programování I, 2010/11

1.6 Singulární kvadriky

Ukazatelem množství produkce statků poskytnutých služeb v ekonomice určitého státu za určité období (zpravidla za jeden rok) je:

[APLIKACE PRO PŘEHRÁVÁNÍ VIDEA - PROJEKT MIAMI - SERVEROVÁ ČÁST]

ž éď ě ě ď ž Ý š ě ě ě ž Íá č á ž ě ě Í ž č Í ě č é Í Í Ď ž é č Ý á ě áťí ď á ť č é Ť ť Ž ě š ň á éč á é é ě ž č Í á á Ť é č é ď ď č á ě é ď ž é č é č

NPRG030 Programování I, 2016/17 1 / :58:13

Transkript:

Implementace slovníku bitovým vektorem Martina Linhartová L06628 Implementace slovníku bitovým vektorem Slovník Slovník je ve své podstatě množina. Množiny jsou pro matematiku i pro informatiku základní strukturou. Algoritmy pracují s množinami pomoci různých operací. Některým algoritmům postačuje vložení prvku, smazání prvku a test přítomnosti v množině. Jiné používají komplikovanější operace. Z toho vyplývá, že nejlepší implementace množiny silně závisí na používaných operacích. Každá množina se skládá z prvků, v našem případě, protože množinou je slovník, jde o slova. Pro nás je důležité, aby prvky v množině byly uspořádané, proto budeme slova ve slovníku řadit abecedně. Implementace slovníku bitovým vektorem Slovník je množina slov, které jsou přímo určeny. Slovník slov reprezentuje pole, Pole patří k nejjednodušším datovým strukturám. Přístup k prvkům pole v našem případě ke slovům je určen udáním hodnoty indexu, jde o strukturu s přímým přístupem. V našem případě se jedná o setříděné pole, v němž je každé pozici přiřazen právě jeden prvek (slovo). V takto setříděném poli se vyhledává pomocí binárního vyhledávání Slovníky se ukládají ve strukturách, které urychlují vyhledávání. Operace, které je možno provádět ve slovníku přidání slova do slovníku - INSERT, vymazání slova ze slovníku DELETE, určení, zda slovo je či není ve slovníku obsaženo MEMBER. Je možné vytvořit i sjednocení - UNION, průnik - INTERSECTION či rozdíl DIFERENCE, tyto operace, jsou však možné jedině při srovnávání dvou slovníku stejného typu, např. od dvou autorů. Operace na slovníku jsou stejné jako na množinách UNION(A, B, C) - do C přiřadí sjednocení A a B, INTERSECTION(A, B, C) - do C přiřadí průnik A a B, DIFFERENCE(A, B, C) - do C přiřadí množinový rozdíl A-B, MEMBER(x, A) - vrátí TRUE, když prvek x patří do množiny, jinak vrátí FALSE, MAKENULL(A) - vytvoří prádnou množinu A, INSERT(x, A) - vloží prvek x do množiny A. DELETE(x, A) - vyhodí prvek x z množiny A, pokud takový v množině existuje, MIN(A), MAX(A) - vrací minimální, resp. maximální prvek množiny A, EQUAL(A, B) - vrátí TRUE, pokud A=B, jinak vrátí FALSE, ASSIGN(A, B) - do A přiřadí hodnotu B.

Pro názornost operací si zvolíme všechna dvoupísmenová slova u prvních pěti písmen v abecedě, to je celkem 25 slov. MAKENULL (A) vytvoří se prázdný slovník A Slouží k vytvoření prázdného slovníku. Po stisknutí tlačítka dojde k vyprázdnění všech tři slovníku. Procedure MujMAKENULL(var A: slovnik); var i: Integer; for i:=1 to 25 do A[i]:=false; procedura TForm1.Button1.Click(Sender:TObject); Memo2.Lines.Clear; MujMakenull(SlA); MujMakenull(SlB); MujMakenull(SlC); INSERT (x, A) vloží slovo x do slovníku A Vloží slova do slovníku A a B. procedure TForm1.Button2Click(Sender: TObject); Memo2.Lines.Clear; SlA[1]:= true; Memo1.Lines.Add('aa'); SlA[2]:= true; Memo1.Lines.Add('ab'); SlA[4]:= true; Memo1.Lines.Add('ad'); SlA[6]:= true; Memo1.Lines.Add('ba'); SlA[7]:= true; Memo1.Lines.Add('bb'); SlA[8]:= true; Memo1.Lines.Add('bc'); SlA[11]:= true; Memo1.Lines.Add('ca'); SlA[13]:= true; Memo1.Lines.Add('cc'); SlA[14]:= true; Memo1.Lines.Add('cd'); SlA[15]:= true; Memo1.Lines.Add('ce'); SlA[17]:= true; Memo1.Lines.Add('db'); SlA[18]:= true; Memo1.Lines.Add('dc'); SlA[20]:= true; Memo1.Lines.Add('de'); SlA[21]:= true; Memo1.Lines.Add('ea'); SlA[24]:= true; Memo1.Lines.Add('ed'); SlA[25]:= true; Memo1.Lines.Add('ee'); SlB[1]:= true; Memo2.Lines.Add('aa'); SlB[3]:= true; Memo2.Lines.Add('ac'); SlB[4]:= true; Memo2.Lines.Add('ad');

SlB[5]:= true; Memo2.Lines.Add('ae'); SlB[7]:= true; Memo2.Lines.Add('bb'); SlB[7]:= true; Memo2.Lines.Add('bc'); SlB[8]:= true; Memo2.Lines.Add('bd'); SlB[9]:= true; Memo2.Lines.Add('bd'); SlB[12]:= true; Memo2.Lines.Add('cb'); SlB[13]:= true; Memo2.Lines.Add('cc'); SlB[15]:= true; Memo2.Lines.Add('ce'); SlB[17]:= true; Memo2.Lines.Add('db'); SlB[19]:= true; Memo2.Lines.Add('dd'); SlB[20]:= true; Memo2.Lines.Add('de'); SlB[21]:= true; Memo2.Lines.Add('ea'); SlB[22]:= true; Memo2.Lines.Add('eb'); SlB[23]:= true; Memo2.Lines.Add('ec'); aa ab ad ba bb bc ca cc cd ce db dc de ea ed ee Slovník B aa ac ad ae bb bc bd cb cc ce db dd de ea eb ec UNION (A, B, C) sjednocení dvou slovníku A a B do slovníku C Slovník C bude obsahovat slova slovníku A a B, které patří buď do slovníku A nebo do slovníku B. Po stlačení tlačítka dojde je sloučení slovníku A a B do slovníku C. Procedure MujUNION(A,B: boolean; var C: boolean); if A or B = true then C:= true; procedure TForm1.Button3Click(Sender: TObject); MujMakenull(SlC); for I:= 0 to 25 do MujUNION(SlA[I], SlB[I], SlC[I]); If MujMEMBER(I, SlC) then Memo3.Lines.Add(hodnota(I)); aa ab ad ba bb bc ca cc cd ce db dc de ea ed ee

Slovník B aa ac ad ae bb bc bd cb cc ce db dd de ea eb ec Slovník C aa ab ac ad ae ba bb bc Bd ca cb cc cd ce db dc dd de ea eb ec ed ee 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 INTERSECTION (A, B, C) - průnik dvou slovníků A a B Slovník C bude obsahovat pouze slova, která se nacházejí jak ve slovníku A tak ve slovníku B Procedure MujINTERSECTION(A,B: boolean; var C: boolean); if A and B = true then C:= true; procedure TForm1.Button4Click(Sender: TObject); MujMakenull (SlC); for I:= 0 to 25 do MujINTERSECTION(SlA[I], SlB[I], SlC[I]); if MujMEMBER(I, SlC) then Memo3.Lines.Add(hodnota (I)); aa ab ad ba bb bc ca Cc cd ce db dc de ea ed ee Slovník B aa ac ad ae bb bc bd cb cc ce db dd de ea eb ec Slovník C aa ad bb bc cc ce db de ea 1 0 0 1 0 0 1 1 0 0 0 0 1 0 1 0 1 0 0 1 1 0 0 0 0 DIFERENCE (A, B, C) - slovník C bude obsahovat rozdíl slovníku A a B Slovník C bude obsahovat pouze slova slovníku A, které se nenacházejí ve slovníku B Procedure MujDIFFERENCE(A,B: boolean; var C: boolean);

if (A = true) and (B = false) then C:= true; procedure TForm1.Button5Click(Sender: TObject); MujMakenull(SlC); for I:= 0 to 25 do MujDIFERENCE(SlA[I], SlB[I], SlC[I]); if MujMEMBER(I,SlC) then Memo3.Lines.Add(hodnota (I)); aa ab ad ba bb Bc ca cc cd ce db dc de ea ed ee Slovník B aa ac ad ae bb Bc bd cb cc ce db dd de ea eb ec Slovník C ab ba ca cd dc ed ee 0 1 0 0 0 1 0 0 0 0 1 0 0 1 0 0 0 1 0 0 0 0 0 1 1 MEMBER (x, A) vrátí TRUE, když slovo x patří do slovníku, jinak vrátí FALSE Určuje, zda je či není slovo obsaženo ve slovníku A. Function MujMEMBER( x: integer; A: slovnik) :boolean; result:=false; If A[x] then result:=true; procedure TForm1.Button6Click(Sender: TObject); if MujMEMBER(pozice(edit1.Text),SlA) then Memo1.Lines.Add('Patří do slovníku A') else Memo1.Lines.Add('Nepatří do slovníku A') ASSIGN(A,B) Přiřadí slova ze slovníku B do slovníku A Procedure MujASSIGN(var A,B: slovnik); var j: Integer;

for j:= 1 to 25 do A[j]:= B[j]; procedure TForm1.Button8Click(Sender: TObject); MujASSIGN(SlA, SlB); for I:= 1 to 25 do if MujMEMBER(I,SlA) then Memo1.Lines.Add(hodnota (I)); Použitá literatura Ďuráková, D., Dvorský, J., Ochodková, E. Základy algoritmizace. Ostrava: VŠB - Technická univerzita Ostrava, 2003