Wykład X. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2016 Janusz Słupik

Podobne dokumenty
Wysokość drzewa Głębokość węzła

Drzewo. Drzewo uporządkowane ma ponumerowanych (oznaczonych) następników. Drzewo uporządkowane składa się z węzłów, które zawierają następujące pola:

Struktury Danych i Złożoność Obliczeniowa

ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 2014/2015. Drzewa BST c.d., równoważenie drzew, kopce.

WYKŁAD 10. Zmienne o złożonej budowie Statyczne i dynamiczne struktury danych: lista, kolejka, stos, drzewo. Programy: c5_1.c, c5_2, c5_3, c5_4, c5_5

Przypomnij sobie krótki wstęp do teorii grafów przedstawiony na początku semestru.

Wykład VI. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Algorytmy i struktury danych. Drzewa: BST, kopce. Letnie Warsztaty Matematyczno-Informatyczne

Drzewa wyszukiwań binarnych (BST)

Podstawy programowania 2. Temat: Drzewa binarne. Przygotował: mgr inż. Tomasz Michno

Teoretyczne podstawy informatyki

ALGORYTMY I STRUKTURY DANYCH

Dynamiczny przydział pamięci w języku C. Dynamiczne struktury danych. dr inż. Jarosław Forenc. Metoda 1 (wektor N M-elementowy)

Drzewa poszukiwań binarnych

Drzewa binarne. Drzewo binarne to dowolny obiekt powstały zgodnie z regułami: jest drzewem binarnym Jeśli T 0. jest drzewem binarnym Np.

Drzewa BST i AVL. Drzewa poszukiwań binarnych (BST)

Poprawność semantyczna

Algorytmy i struktury danych. wykład 5

Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Algorytmy i struktury danych Laboratorium 7. 2 Drzewa poszukiwań binarnych

WSTĘP DO INFORMATYKI. Drzewa i struktury drzewiaste

Drzewa poszukiwań binarnych

Wykład VII. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Wstęp. #define include include include include include include

Drzewo binarne BST. LABORKA Piotr Ciskowski

Wykład 2. Drzewa poszukiwań binarnych (BST)

Teoretyczne podstawy informatyki

wykład III uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - zarządzanie pamięcią, struktury,

Wykład 6. Drzewa poszukiwań binarnych (BST)

Wyszukiwanie w BST Minimalny i maksymalny klucz. Wyszukiwanie w BST Minimalny klucz. Wyszukiwanie w BST - minimalny klucz Wersja rekurencyjna

Wykład 7 Abstrakcyjne typy danych słownik (lista symboli)

Grafy (3): drzewa. Wykłady z matematyki dyskretnej dla informatyków i teleinformatyków. UTP Bydgoszcz

Podstawy Informatyki. Metody dostępu do danych

Algorytmy i Struktury Danych.

Algorytmy i. Wykład 5: Drzewa. Dr inż. Paweł Kasprowski

ALGORYTMY I STRUKTURY DANYCH

. Podstawy Programowania 2. Drzewa bst - część druga. Arkadiusz Chrobot. 12 maja 2019

Algorytmy i Struktury Danych

Sortowanie bąbelkowe

Drzewa czerwono-czarne.

Algorytmy i Struktury Danych

Tadeusz Pankowski

Każdy węzeł w drzewie posiada 3 pola: klucz, adres prawego potomka i adres lewego potomka. Pola zawierające adresy mogą być puste.

Ogólne wiadomości o grafach

Stos LIFO Last In First Out

. Podstawy Programowania 2. Drzewa bst - część pierwsza. Arkadiusz Chrobot. 22 maja 2016

Wstęp do programowania. Drzewa. Piotr Chrząstowski-Wachtel

Porządek symetryczny: right(x)

WYKŁAD 8. Funkcje i algorytmy rekurencyjne Proste przykłady. Programy: c3_1.c..., c3_6.c. Tomasz Zieliński

Wykład 2. Drzewa zbalansowane AVL i 2-3-4

Programowanie obiektowe

Wykład 3. Drzewa czerwono-czarne

ALGORYTMY I STRUKTURY DANYCH

Programowanie obiektowe

Abstrakcyjne struktury danych w praktyce

INFORMATYKA. Podstawy programowania w języku C. (Wykład) Copyright (C) 2005 by Sergiusz Sienkowski IME Zielona Góra

Podstawy Programowania. Przetwarzanie napisów, drzewa binarne

część 16 struktury rekurencyjne i ich zastosowania drzewa binarne, algorytmy rekurencyjne dla drzew binarnych

Programowanie obiektowe i C++ dla matematyków

Wykład 8. Drzewa AVL i 2-3-4

Ćwiczenie nr 6. Poprawne deklaracje takich zmiennych tekstowych mogą wyglądać tak:

Laboratorium 1. Programowanie II - Kierunek Informatyka. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej

Programowanie komputerów. Jacek Lach Zakład Oprogramowania Instytut Informatyki Politechnika Śląska

Listy, kolejki, stosy

Podstawy Informatyki. Wykład 6. Struktury danych

prowadzący dr ADRIAN HORZYK /~horzyk tel.: Konsultacje paw. D-13/325

Ogólne wiadomości o drzewach

np. dla p=1 mamy T1(N) N/2 średni czas chybionego wyszukiwania z prawdopodobieństwem q:

Lista liniowa dwukierunkowa

Wykład 6_1 Abstrakcyjne typy danych stos Realizacja tablicowa i za pomocą rekurencyjnych typów danych

Zasady programowania Dokumentacja

Programowanie Proceduralne

Algorytmy i Struktury Danych

Podstawy programowania 1

Podstawy Programowania

Podstawy Programowania. Przetwarzanie napisów, drzewa binarne

Matematyka dyskretna - 7.Drzewa

Wykład 1_2 Algorytmy sortowania tablic Sortowanie bąbelkowe

TEORETYCZNE PODSTAWY INFORMATYKI

Wstęp do programowania 1

Programowanie obiektowe i C++ dla matematyków

Algorytm selekcji Hoare a. Łukasz Miemus

Koszt zamortyzowany. Potencjał - Fundusz Ubezpieczeń Kosztów Algorytmicznych

TEORETYCZNE PODSTAWY INFORMATYKI

Wstęp do programowania 1

4. Tablica dwuwymiarowa to jednowymiarowa tablica wskaźników do jednowymiarowych tablic danego typu.

Algorytmy i Struktury Danych. (c) Marcin Sydow. Słownik. Tablica mieszająca. Słowniki. Słownik uporządkowany. Drzewo BST.

dr inż. Paweł Myszkowski Wykład nr 11 ( )

Struktury czyli rekordy w C/C++

Pliki w C/C++ Przykłady na podstawie materiałów dr T. Jeleniewskiego

STRUKTURY DANYCH I ZŁOŻONOŚĆ OBLICZENIOWA STRUKTURY DANYCH I ZŁOŻONOŚĆ OBLICZENIOWA. Część 3. Drzewa Przeszukiwanie drzew

Drzewa AVL definicje

ŁAŃCUCHY W JĘZYKU C/C++

Podstawy programowania w języku C++

struct Student { char nazwisko[30]; int wiek; float ocena; }; #define MAX_ROZMIAR 3 Student lista_studentow[max_rozmiar];

Wstęp do programowania

0-0000, , , itd

Wykład II. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Drzewa podstawowe poj

UNIWERSYTET GDAŃSKI MATERIAŁY DYDAKTYCZNE DO PRZEDMIOTU MATEMATYKA DYSKRETNA. pod redakcją: Hanna Furmańczyk Karol Horodecki Paweł Żyliński

Kompresja danych Streszczenie Studia Dzienne Wykład 10,

Transkrypt:

Wykład X Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2016 c Copyright 2016 Janusz Słupik

Drzewa binarne

Drzewa binarne Drzewo binarne - to drzewo (graf spójny bez cykli) z korzeniem (wyróżnionym wierzchołkiem), w którym każdy wierzchołek rodzic ma co najwyżej dwóch potomków, tzn. korzeń jest stopnia co najwyżej 2, a wszystkie inne wierzchołki są stopnia co najwyżej 3. Pojęcia: - poziomy drzewa, - liście (wierzchołki końcowe), - wysokość drzewa (tj. długość najdłuższej ścieżki od korzenia do liścia), - poddrzewo.

Wyszukiwanie Drzewa binarne są sposobem zorganizowania zbioru danych tak, aby ułatwić wyszukiwanie elementów tego zbioru (ang. BST - binary search tree). W zbiorze danych musi być zadany porządek. Np.: w zbiorze liczb relacja, w zbiorze słów porządek leksykograficzny. Niech BST ma wysokość h. Algorytm wyszukiwania musi wykonać pesymistycznie h porównań, aby znaleźć element, albo wykluczyć przynależność elementu do zbioru.

Drzewo zrównoważone Drzewo jest zrównoważone gdy różnica wysokości lewego i prawego poddrzewa każdego z wierzchołków wynosi co najwyżej jeden. Drzewo jest doskonale zrównoważone, gdy dodatkowo wszystkie liście znajdują się na co najwyżej dwóch poziomach. Algorytm DSW - równoważy BST poprzez szereg rotacji.

Reprezentacja drzewa binarnego Drzewa binarne są równoważne łańcuchom binarnym, które: - mają o jeden więcej bitów 0 niż bitów 1, - dla dowolnej pozycji k liczba bitów 0 występujących na lewo od tej pozycji jest nie większa niż liczba bitów 1 występujących na lewo od tej pozycji.

Własności omawianej reprezentacji Drzewo binarne jest zerem lub konkatenacją dwóch łańcuchów reprezentujących poddrzewa poprzedzonych jedynką. Ilość jedynek to ilość wierzchołków drzewa. Długość łańcucha reprezentującego drzewo to: 2*ilość wierzchołków + 1

Implementacja słownika z częstością słów oparta na drzewie binarnym

#include <stdio.h> #include <stdlib.h> #include <string.h> struct wierzcholek char *slowo; int ilosc; struct wierzcholek *lewy; struct wierzcholek *prawy; }; typedef struct wierzcholek* Wierzcholek;

Główną częścią naszej implementacji będzie funkcja o prototypie: Wierzcholek dodajslowo( Wierzcholek k, char *w ); której zadaniem będzie dodanie słowa w do poddrzewa o korzeniu k. Funkcja ta zwróci adres korzenia tego poddrzewa, tzn. jeśli k istniał to funkcja zwróci k, natomiast jeśli k ma wartość NULL, to funkcja zwróci adres nowo powstałego wierzchołka.

Wierzcholek dodajslowo( Wierzcholek k, char *w ) int wynik; if( k == NULL ) /* w to nowe slowo */ k = malloc( sizeof( struct wierzcholek ) ); if( k == NULL ) return NULL; k->slowo = malloc( strlen( w ) + 1 ); if( k->slowo!= NULL ) strcpy( k->slowo, w ); k->ilosc = 1; k->lewy = NULL; k->prawy = NULL; return k; } wynik = strcmp( k->slowo, w ); if( wynik == 0 ) k->ilosc++; else if( wynik < 0 ) k->lewy = dodajslowo( k->lewy, w ); else k->prawy = dodajslowo( k->prawy, w ); return k; }

void wypisz( Wierzcholek k ) if( k!= NULL ) wypisz( k->lewy ); printf("%s %d\n", k->slowo, k->ilosc ); wypisz( k->prawy ); } } void zwolnij( Wierzcholek k ) if( k!= NULL ) zwolnij( k->lewy ); zwolnij( k->prawy ); free( k->slowo ); free( k ); } }

main() Wierzcholek korzen = NULL; char slowo[20]; while(1) fgets( slowo, 20, stdin ); slowo[ strlen(slowo)-1 ] = \0 ; if( strcmp( slowo, "STOP" ) == 0 ) break; korzen = dodajslowo( korzen, slowo ); } wypisz( korzen ); zwolnij( korzen ); } system("pause"); return 0;

Zadanie Uzupełnij powyższą implementację BST o definicję funkcji o prototypie: int szukaj( Wierzcholek k, char *w ); która w poddrzewie o korzeniu k będzie wyszukiwała słowa w. Funkcja ta zwróci częstość zapisaną w wierzchołku odpowiadającym słowu w, lub 0 gdy takiego słowa nie ma w drzewie.

Wyszukiwanie z wykorzystaniem funkcji mieszającej Funkcja mieszająca (hash function) - jest to funkcja przyporządkowująca danym (ustalonego rodzaju) liczbę. Liczba ta jest interpretowana jako adres lub indeks. f : egzemplarz danych liczba Oczekiwane własności: - musi być łatwa do obliczenia, - ma w miarę równomiernie pokrywać przestrzeń adresów, - brak kolizji wartości (lub minimalna liczba kolizji), f (dane 1 ) = f (dane 2 ).

Koniec