bin arn ı vyhled av an ı a bst Karel Hor ak, Petr Ryˇsav y 23. bˇrezna 2016 Katedra poˇ c ıtaˇ c u, FEL, ˇ CVUT

Podobné dokumenty
a) b) c) Radek Mařík

Radek Mařík

Vyvažování a rotace v BVS, všude se předpokládá AVL strom

Datové struktury Úvod

Návrh Designu: Radek Mařík

Algoritmy a datové struktury

Složitosti základních operací B + stromu

Adresní vyhledávání (přímý přístup, zřetězené a otevřené rozptylování, rozptylovací funkce)

bfs, dfs, fronta, zásobník, prioritní fronta, halda

Základy algoritmizace c2005, 2007 Michal Krátký, Jiří Dvorský1/39

Volné stromy. Úvod do programování. Kořenové stromy a seřazené stromy. Volné stromy

Programování 3. hodina. RNDr. Jan Lánský, Ph.D. Katedra informatiky a matematiky Fakulta ekonomických studií Vysoká škola finanční a správní 2015

bfs, dfs, fronta, zásobník, prioritní fronta, halda

ˇ razen ı rychlejˇ s ı neˇ z kvadratick e Karel Hor ak, Petr Ryˇsav y 20. dubna 2016 Katedra poˇ c ıtaˇ c u, FEL, ˇ CVUT

BINARY SEARCH TREE

Select sort: krok 1: krok 2: krok 3: atd. celkem porovnání. výběr nejmenšího klíče z n prvků vyžaduje 1 porovnání

Stromy. Jan Hnilica Počítačové modelování 14

Stromy, haldy, prioritní fronty

BINARY SEARCH TREE

Algoritmizace Dynamické programování. Jiří Vyskočil, Marko Genyg-Berezovskyj 2010

Algoritmizace prostorových úloh

Reprezentace aritmetického výrazu - binární strom reprezentující aritmetický výraz

Informatika navazující magisterské studium Přijímací zkouška z informatiky 2018 varianta A

STACK

Dynamické programování. Optimální binární vyhledávací strom

ADT STROM Lukáš Foldýna

Stromy. Strom: souvislý graf bez kružnic využití: počítačová grafika seznam objektů efektivní vyhledávání výpočetní stromy rozhodovací stromy

Binární vyhledávací stromy II

Binární vyhledávací stromy pokročilé partie

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

Datový typ prioritní fronta Semestrální práce z předmětu 36PT

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í

Základní datové struktury III: Stromy, haldy

B3B33ALP - Algoritmy a programování - Zkouška z předmětu B3B33ALP. Marek Boháč bohacm11

B3B33ALP - Algoritmy a programování - Zkouška z předmětu B3B33ALP. Marek Boháč bohacm11

Definice. B-stromu. B-strom řádu m je strom, kde každý uzel má maximálně m následníků a ve kterém platí:

3 Algoritmy řazení. prvku a 1 je rovněž seřazená.

autoři: Rudolf Bayer, Ed McCreight všechny vnější uzly (listy) mají stejnou hloubku ADS (abstraktní datové struktury)

Dynamické datové struktury III.

Prioritní fronta, halda

Maturitní téma: Programovací jazyk JAVA

1. Převeďte dané číslo do dvojkové, osmičkové a šestnáctkové soustavy: a) b)

Programování v C++ 1, 16. cvičení

Binární Vyhledávací Stromy, u kterých je. složitost operací v nejhorším. rovná O(log n)

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

Cvičení 5 - Průchod stromem a grafem

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

Vyhledávací stromy. Slouží jako pomůcka pro organizaci dat umožňující efektivní vyhledávání.

R zné algoritmy mají r znou složitost

Binární vyhledávací stromy

Rekurzivní algoritmy

Algoritmizace a programování

Datové struktury 2: Rozptylovací tabulky

1. Binomiální haldy Zavedení binomiální haldy

Dynamicky vázané metody. Pozdní vazba, virtuální metody

prohled av an ı graf u Karel Hor ak, Petr Ryˇsav y 16. bˇrezna 2016 Katedra poˇ c ıtaˇ c u, FEL, ˇ CVUT

ABSTRAKTNÍ DATOVÉ TYPY

f(x,y) = max ( f(x 1, y 1)+ f(x 1,y) ) + f(x,y 1) +1 jinak f(x,y,z) = f(x 1, y 1, z 1)+ f(x 1,y,z) + f(x,y 1,z) + f(x,y,z 1)+1 jinak

Obecná informatika. Matematicko-fyzikální fakulta Univerzity Karlovy v Praze. Podzim 2012

Návrh designu: Radek Mařík

Náplň. v Jednoduché příklady na práci s poli v C - Vlastnosti třídění - Způsoby (algoritmy) třídění

Algoritmizace Hashing II. Jiří Vyskočil, Marko Genyg-Berezovskyj 2010

Algoritmy výpočetní geometrie

IB111 Úvod do programování skrze Python

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

TGH07 - Chytré stromové datové struktury

Dynamické datové struktury IV.

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

Semestrální práce 2 znakový strom

Cílem kapitoly je seznámit studenta se seznamem a stromem. Jejich konstrukci, užití a základní vlastnosti.

Stromy. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta a kol.

Algoritmy na ohodnoceném grafu

A4B33ALG 2010/05 ALG 07. Selection sort (Select sort) Insertion sort (Insert sort) Bubble sort deprecated. Quicksort.

Složitost algoritmů. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta a kol.

IB108 Sada 1, Příklad 1 Vypracovali: Tomáš Krajča (255676), Martin Milata (256615)

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

TGH07 - Chytré stromové datové struktury

Stromy. Jan Kybic.

ALGORITMIZACE 2010/03 STROMY, BINÁRNÍ STROMY VZTAH STROMŮ A REKURZE ZÁSOBNÍK IMPLEMENTUJE REKURZI PROHLEDÁVÁNÍ S NÁVRATEM (BACKTRACK)

Grafy. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 13.

STROMOVE ALGORITMY Prohledavani do sirky (level-order) Po vodorovnejch carach fronta

6. Tahy / Kostry / Nejkratší cesty

Dynamické datové struktury II.

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

Aplikovaná informatika. Podklady předmětu Aplikovaná informatika pro akademický rok 2013/2014 Radim Farana. Obsah. Strom

DobSort. Úvod do programování. DobSort Implementace 1/3. DobSort Implementace 2/3. DobSort - Příklad. DobSort Implementace 3/3

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

Zdůvodněte, proč funkce n lg(n) roste alespoň stejně rychle nebo rychleji než než funkce lg(n!). Symbolem lg značíme logaritmus o základu 2.

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

Stromy. Příklady. Rekurzivní datové struktury. Základní pojmy

vyhledávací stromové struktury

IB111 Úvod do programování skrze Python

Základy algoritmizace a programování

UNIVERZITA PARDUBICE DIPLOMOVÁ PRÁCE

8. Geometrie vrací úder (sepsal Pavel Klavík)

1 Nejkratší cesta grafem

Různé algoritmy mají různou složitost

VLASTNOSTI GRAFŮ. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze. BI-GRA, LS 2010/2011, Lekce 5

Obsah prezentace. Základní pojmy v teorii o grafech Úlohy a prohledávání grafů Hledání nejkratších cest

Rekurze a zásobník. Jak se vypočítá rekurzivní program? volání metody. vyšší adresy. main(){... fa(); //push ret1... } ret1

Transkript:

binární vyhledávání a bst Karel Horák, Petr Ryšavý 23. března 2016 Katedra počítačů, FEL, ČVUT

Příklad 1 Naimplementujte binární vyhledávání. Upravte metodu BinarySearch::binarySearch. 1

Příklad 2 Mysĺım si číslo mezi 1 a 10000. Navrhněte algoritmus, který uhodne číslo, které si mysĺım. Můžete pokládat pouze otázky, na které je odpověd ano/ne. Protože jsem ĺıný, snažte se co nejmenší počet otázek. Kolik otázek budete muset maximálně položit, než odhaĺıte číslo, které si mysĺım. 2

Řešení 2 Vhodným řešením je použít binární vyhledávání. Vždy máme k dispozici nějaký interval, ze kterého je myšlené číslo. Interval rozděĺıme na dvě poloviny a zeptáme se otázku, zda je myšlené číslo větší než prostřední bod intervalu. Podle odpovědi interval nahradíme jeho levou nebo pravou polovinou. K řešení je třeba log 2 10000 + 1 otázek, což je 15 otázek. 3

Příklad 3 Čísla ze zadané posloupnosti postupně vkládejte do prázdného binárního vyhledávacího stromu (BVS). Jak bude vypadat takto vytvořený BVS? Poté postupně odstraňte první tři prvky. Jak bude vypadat výsledný BVS? 1. 14, 24, 5, 13, 1, 3, 22, 10, 19, 11 2. 10, 16, 5, 17, 4, 15, 3, 1, 23, 13, 2, 11 4

Příklad 4 Mějme kĺıče 1, 2, 3,..., n. Číslo n je liché. Nejprve vložíme do BVS všechny sudé kĺıče v rostoucím pořadí a pak všechny liché kĺıče také v rostoucím pořadí. Jaká bude hloubka výsledného stromu? Změnil by se nějak tvar stromu, kdybychom lichá čísla vkládali v náhodném pořadí? 5

Řešení 4 Hloubka výsledného stromu bude n 1 2.1 Pokud vložíme všechny sudé uzly, bude hloubka n 1 2 1. Po přidání lichých uzlů se hloubka zvýší o jedna, protože n bude vždy napravo od n 1. Pokud bychom vkládali lichá čísla v náhodném pořadí, strom se nezmění. Jeho tvar je již určen vloženými sudými čísly. 1 Předpokládáme, že hloubka stromu o jednom uzlu je 0. 6

Příklad 5 V jakém pořadí vypíšeme prvky binárního vyhledávacího stromu, pokud ho projdeme inorder? 7

Řešení 5 Prvky budou seřazené podle velikosti. 8

Příklad 6 Předpokládejme, že binární vyhledávací strom obsahuje přirozená čísla mezi 1 a 1000. Které z následujících sekvencí navštívených uzlů nemohou nastat, pokud hledáme kĺıč 363? 1. 2, 252, 401, 398, 330, 363 2. 399, 387, 219, 266, 382, 381, 278, 363 3. 3, 923, 220, 911, 244, 898, 258, 362, 363 4. 4, 924, 278, 347, 621, 299, 392, 358, 363 5. 5, 925, 202, 910, 245, 363 [http://www.cs.princeton.edu/courses/archive/fall12/ cos126/precepts/bstex.pdf] 9

Řešení 6 Možnost 4 nemůže nastat. Hodnota 299 nemůže být po 621, protože to by pak byla v levém podstromě uzlu s kĺıčem 347. 10

Příklad 7 Jaká je asymptotická složitost operací insert, find a delete pro 1. vyvážený binární vyhledávací strom; 2. obecný binární vyhledávací strom. 11

Řešení 7 V případě vyváženého binárního vyhledávacího stromu všechny operace trvají Θ(log n). V případě obecného binárního vyhledávacího stromu mohou trvat až O(n). 12

Příklad 8 V jakém pořadí máme vkládat 2 n 1 prvků do binárního vyhledávacího stromu tak, aby byl vyvážený? Formulujte nutnou a postačující podmínku, aby byl výsledný vyhledávací strom vyvážený. 13

Řešení 8 Existuje právě jeden vyvážený strom o daných 2 n 1 prvcích. Pokud ho chceme vybudovat, je nutnou a postačující podmínkou, abychom získali stejný strom, že vkládáme vždy uzel dříve než jeho potomky. Takto docíĺıme toho, že strom budujeme odshora. Při vkládání je jen jedno možné místo, kam lze nový uzel vložit. Pokud vkládáme další uzel a jeho rodič a všechny uzly na cestě ke kořeni z vyváženého stromu jsou již vloženy do stromu, pak je uzel vložen na stejné místo jako ve vyváženém stromě. Protože uzel vkládáme vždy před jeho potomky, platí, že získáme vyvážený strom. 14

Příklad 9 Mějme binární vyhledávací strom. Jaká je asymptotická složitost operace, která spočte počet kĺıčů, jejichž hodnota je menší než x, pokud do uzlů nepřidáváme žádné pomocné informace? Navrhněte efektivnější algoritmus, pokud si můžete uložit pomocné informace. 15

Řešení 9 Pokud nepřidáváme žádné další informace do stromu, je nutné BST procházet v pořadí inorder, dokud nenarazíme na kĺıč, který je alespoň x. Počet navštívených uzlů je pak požadované číslo. Složitost operace je tedy O(n). Efektivnějším by mohlo být pamatovat si velikost každého podstromu. Pak by nám stačilo vyhledat prvek s hodnotou x a přičíst velikosti všech levých podstromů vrcholů cesty, které jsme nenavštívili plus počet navštívených uzlů, které měly kĺıče menší. Asymptotická složitost je O(n), ale v případě vyváženého stromu poklesne na Θ(log 2 n). 16

Příklad 10 Naimplementujte vyhledání minima v binárním vyhledávacím stromu a operaci delete. 17

Programovací úlohy k procvičení https://open.kattis.com/problems/insert 18