Algorytmy i struktury danych. Wykład 6 Tablice rozproszone cz. 2

Podobne dokumenty
Algorytmy i struktury danych. Wykład 4 Tablice nieporządkowane i uporządkowane

Haszowanie. dr inż. Urszula Gałązka

struktury danych dla operacji słownikowych

Wykład 4. Tablice z haszowaniem

Tablice z haszowaniem

Tablice z haszowaniem

Algorytmy i złożoności Wykład 5. Haszowanie (hashowanie, mieszanie)

Haszowanie (adresowanie rozpraszające, mieszające)

Algorytmy i Struktury Danych, 9. ćwiczenia

wykład Organizacja plików Opracował: dr inż. Janusz DUDCZYK

Lista, Stos, Kolejka, Tablica Asocjacyjna

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

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

Zazwyczaj rozmiar bloku jest większy od rozmiaru rekordu, tak więc. ich efektywna lokalizacja kiedy tylko zachodzi taka potrzeba.

Przykładowe B+ drzewo

Techniki wyszukiwania danych haszowanie

Porządek symetryczny: right(x)

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

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

Algorytmy i Struktury Danych.

Algorytmy i struktury danych

Algorytmy i złożoność obliczeniowa. Wojciech Horzelski

Podstawy Informatyki Metody dostępu do danych

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

Informatyka A. Algorytmy

Wstęp do programowania

Zaawansowane algorytmy i struktury danych

Podstawy Informatyki. Metody dostępu do danych

Tabela wewnętrzna - definicja

Algorytmy i struktury danych. wykład 5

Twój wynik: 4 punktów na 6 możliwych do uzyskania (66,67 %).

Dynamiczne struktury danych

Algorytmy równoległe: ocena efektywności prostych algorytmów dla systemów wielokomputerowych

Podstawowe struktury danych

Podstawowe algorytmy i ich implementacje w C. Wykład 9

Drzewa poszukiwań binarnych

Matematyka dyskretna - wykład - część Podstawowe algorytmy kombinatoryczne

Wstęp do programowania. Procedury i funkcje. Piotr Chrząstowski-Wachtel

Wykład 2. Poprawność algorytmów

Wstęp do Informatyki

< K (2) = ( Adams, John ), P (2) = adres bloku 2 > < K (1) = ( Aaron, Ed ), P (1) = adres bloku 1 >

Tadeusz Pankowski

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

Wyzwalacze. do automatycznego generowania wartości kluczy głównych. Składnia instrukcji tworzacej wyzwalacz

Algorytmy i Struktury Danych.

Jeszcze o algorytmach

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

Podstawy programowania skrót z wykładów:

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

Algorytmy i język C++

Algorytmy równoległe: ocena efektywności prostych algorytmów dla systemów wielokomputerowych

Algorytmy równoległe. Rafał Walkowiak Politechnika Poznańska Studia inżynierskie Informatyka 2010

Ataki na RSA. Andrzej Chmielowiec. Centrum Modelowania Matematycznego Sigma. Ataki na RSA p. 1

FUNKCJA REKURENCYJNA. function s(n:integer):integer; begin if (n>1) then s:=n*s(n-1); else s:=1; end;

Algorytm. a programowanie -

operacje porównania, a jeśli jest to konieczne ze względu na złe uporządkowanie porównywanych liczb zmieniamy ich kolejność, czyli przestawiamy je.

Algorytmy równoległe: prezentacja i ocena efektywności prostych algorytmów dla systemów równoległych

1. Nagłówek funkcji: int funkcja(void); wskazuje na to, że ta funkcja. 2. Schemat blokowy przedstawia algorytm obliczania

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

Temat: Liniowe uporzdkowane struktury danych: stos, kolejka. Specyfikacja, przykładowe implementacje i zastosowania. Struktura słownika.

Teoretyczne podstawy informatyki

Struktury Danych i Złożoność Obliczeniowa

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

Sieci Mobilne i Bezprzewodowe laboratorium 2 Modelowanie zdarzeń dyskretnych

Algorytm selekcji Hoare a. Łukasz Miemus

Algorytmy i Struktury Danych. Co dziś? Drzewo decyzyjne. Wykład IV Sortowania cd. Elementarne struktury danych

Teoretyczne podstawy informatyki

PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy.

Sortowanie przez scalanie

sprowadza się od razu kilka stron!

Algorytmy i Struktury Danych.

Wstęp do Programowania potok funkcyjny

Algorytmy i złożoności. Wykład 3. Listy jednokierunkowe

ang. file) Pojęcie pliku (ang( Typy plików Atrybuty pliku Fragmentacja wewnętrzna w systemie plików Struktura pliku

Algorytmy i struktury danych. wykład 9

Wstęp do programowania

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

Algorytmy i Struktury Danych, 2. ćwiczenia

Struktury danych (I): kolejka, stos itp.

Dynamiczne struktury danych

Sortowanie. Kolejki priorytetowe i algorytm Heapsort Dynamiczny problem sortowania:

Wstęp do programowania

Wstęp do programowania

Kryptografia. z elementami kryptografii kwantowej. Ryszard Tanaś Wykład 7

- - Ocena wykonaniu zad3. Brak zad3

Oracle11g: Wprowadzenie do SQL

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

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

PLAN WYKŁADU BAZY DANYCH HIERARCHIA MECHANIZMÓW SKŁADOWANIA PRZECHOWYWANIA BAZ DANYCH

1. Znajdowanie miejsca zerowego funkcji metodą bisekcji.

Zaawansowane algorytmy i struktury danych

Analiza algorytmów zadania podstawowe

Optymalizacja. Przeszukiwanie lokalne

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne

Bazy danych - BD. Organizacja plików. Wykład przygotował: Robert Wrembel. BD wykład 5 (1)

Algorytm i złożoność obliczeniowa algorytmu

Podstawy systemów kryptograficznych z kluczem jawnym RSA

Macierze - obliczanie wyznacznika macierzy z użyciem permutacji

Metody numeryczne w przykładach

Transkrypt:

Algorytmy i struktury danych Wykład 6 Tablice rozproszone cz. 2

Na poprzednim wykładzie Wiele problemów wymaga dynamicznych zbiorów danych, na których można wykonywać operacje: wstawiania (Insert) szukania (Search) usuwania (Delete)

Na poprzednim wykładzie Taki abstrakcyjny typ danych nazywamy słownikiem.

Na poprzednim wykładzie Efektywnym sposobem implementacji takich typów danych są tablice z techniką dostępu nazywaną rozproszoną (hash tables).

Na poprzednim wykładzie Polega one na obliczaniu adresu danego elementu (rekordu) na podstawie fragmentu tego rekordu zwanego kluczem. Umożliwia to (zazwyczaj) odnalezienie danego rekordu w jednej próbie.

Na poprzednim wykładzie 1. Zbiór kluczy 2. Funkcja rozpraszająca (haszującą) 3. Tablica adresów

Na poprzednim wykładzie Jeżeli dla dwóch (lub kilku) rekordów ich klucze zwracają tą samą wartość funkcja rozpraszającej to dochodzi do kolizji.

Na poprzednim wykładzie Techniki rozwiązywania kolizji: 1. Łańcuchowanie oddzielne 2. Łańcuchowanie bezpośrednie

Na poprzednim wykładzie Do analizy przydatny będzie parametr n N Gdzie n to liczba rekordów a N to liczba komórek tablicy

Na poprzednim wykładzie Analiza (poszukiwanie zakończone sukcesem): 1. Łańcuchowanie oddzielne (1+ ) <- wyprowadzenie 2. Łańcuchowanie bezpośrednie (1+e 2 /(8 ) )

Na poprzednim wykładzie Analiza (poszukiwanie zakończone sukcesem): Przykład: Łańcuchowanie oddzielne 1000 rekordów, 500 komórek tablicy. Ilu sondowań spodziewamy się przed znalezieniem rekordu?

Adresowanie otwarte 1. Nie ma listy synonimów (przestrzeni w pamięci dodatkowej). 2. Jeżeli występuje kolizja to obliczany jest nowy adres rekordu.

Adresowanie otwarte 2. Jeżeli występuje kolizja to obliczany jest nowy adres rekordu (początkowo dla i=1). h H ( k) 0 h i [H(k) G(i)]mod N dla i 1,2,..., N 1

Adresowanie otwarte Uwaga: w łańcuchowaniu bezpośrednim potrzebny był wskaźnik do adresu następnego synonimu. Jego brak pozwala zaoszczędzić miejsce w pamięci. Zaoszczędzone miejsce może być wykorzystane do implementacji większej tablicy adresów.

Adresowanie otwarte W zależności od postaci funkcji G(i) wyróżniamy różne typy adresowania otwartego: Z sondowaniem liniowym Z sondowaniem kwadratowym Z sondowaniem sześciennym Z sondowaniem losowym Z podwójnym rozpraszaniem h [h G(i)]mod N dla i 1,2,..., N 1 i 0

Adresowanie z sondowaniem liniowym W tym przypadku funkcja G(i) =i czyli h H( k) 0 h i [H(k) i]mod N dla i 1,2,..., N 1 Przykład: wstawianie kluczy do tablicy k={9,13,19,27,23,7,17,8,2,11} H(k) = k mod 10

Adresowanie z sondowaniem liniowym Uwagi: 1. Stosunkowo proste w implementacji 2. Dochodzi do grupowania rekordów, wydłużając wyszukiwanie. Jeżeli i komórek jest zajętych, zajęcie następnej pustej następuje z prawdopodobieństwem (i+1)/n

Adresowanie z sondowaniem liniowym Uwagi: 2. Cd: grupowanie jest spowodowane faktem, że sondowanie liniowe nie rozprasza po tablicy.

Adresowanie otwarte Uwagi ogólne Zamiast pisać h H( k) 0 h i [K(k) i]mod N dla i 1,2,..., N 1 Można zapisać: h(k,i) Gdzie h jest funkcją zdefiniowaną dla zbioru k,i U {0,1,..., N 1} {0,1,..., N 1}

Adresowanie otwarte Algorytm wstawiania klucza do tablicy i 0 while(i m) j h(k,i) if T[j] T[j] NULL k else i i 1 if i m then "Nie ma miejsca"

Adresowanie otwarte Algorytm wyszukiwania klucza w tablicy Kiedy algorytm powinien się zatrzymać (w przypadku gdy nie ma klucza w tablicy)?

Adresowanie otwarte Algorytm wyszukiwania klucza w tablicy i 0 while(i m and T[j]! Null) j h(k,i) if T[j] k return j else i i 1 if i m or T[j] NULL then "Nie ma rekordu"

Adresowanie z sondowaniem kwadratowym W tym przypadku funkcja G(i) =b*i+a*i^2 czyli h H( k) 0 h i [H(k) i]mod N dla i 1,2,..., N 1 Przykład k={9,13,19,27,23,7,17,8,2,11} H(k) = k mod 10

Uwagi: Adresowanie z sondowaniem kwadratowym 1. By wykorzystać wszystkie adresy w tablicy wartości a,b i N muszą być odpowiednio dobrane (np. a =1,b=0,N=11 dla h(k,0)=3 ) 2. Dochodzi do tak zwanego wtórnego grupowania rekordów (jeżeli h(k,0)=h(k,0) to h(k,i)=h(k,i)).

Adresowanie z sondowaniem sześciennym W tym przypadku funkcja G(i) =i^3 czyli h H( k) 0 h i [H(k) i]mod N dla i 1,2,..., N 1 Przykład k={9,13,19,27,23,7,17,8,2,11} H(k) = k mod 10

Adresowanie otwarte z sondowaniem Funkcja G(i): losowym 1. Generuje liczby z przedziału [0,,N-1] z jednakowym prawdopodobieństwem 2. W kolejnych N wywołaniach zwraca tę samą liczbę 3. Dla tego samego klucza k zwraca tę samą sekwencję liczb

Adresowanie otwarte z sondowaniem losowym Uwagi: trudno skonstruować dobrą funkcję generującą liczby losowe.

Adresowanie otwarte z podwójnym rozpraszaniem h H( k) 0 h i [H(k) ih '(k)]mod N dla i 1,2,..., N 1 Przykład K={18,41,22,31,8,7,11,3,9,17} H(k)=k mod 10 H (k)=1 + k mod 7

Adresowanie otwarte z podwójnym rozpraszaniem Co zrobić by sondowana była cała tablica? H (k) musi być względnie pierwsza do N np. N jest potęgą 2 a H (k) zwraca liczbę nieparzystą N jest liczbą pierwszą a H (k) zawsze zwraca liczbę mniejszą od N

Adresowanie otwarte z podwójnym rozpraszaniem N jest liczbą pierwszą a H (k) zawsze zwraca liczbę mniejszą od N Hk ( ) k mod N H'( k) 1 (k mod N') np. N' N 1

Adresowanie otwarte z podwójnym rozpraszaniem Jest to jedna z najlepszych metod adresowania otwartego (ciągi przewidywanych miejsc w tablicy mają wiele cech losowych permutacji).

Adresowanie otwarte z podwójnym rozpraszaniem Przewidywane miejsce w tablicy zależy od wartości klucza na dwa sposoby.

Adresowanie otwarte z podwójnym rozpraszaniem Analiza: 1. Wyszukiwanie zakończone porażką 1/(1- ) Przykład: 500 rekordów, 1000 komórek tablicy. Jakiej liczby sondowań spodziewamy się zanim nie ustalimy tego, że rekordu nie ma w tablicy?

Adresowanie otwarte z podwójnym rozpraszaniem Analiza: 1. Wyszukiwanie zakończone porażką 1/(1- ) Przykład: 900 rekordów, 1000 komórek tablicy. Jakiej liczby sondowań spodziewamy się zanim nie ustalimy tego, że rekordu nie ma w tablicy?

Adresowanie otwarte z podwójnym Analiza: 2. Wstawianie 1/(1- ) rozpraszaniem

Adresowanie otwarte z podwójnym rozpraszaniem Analiza: 3. Wyszukiwanie zakończone sukcesem 1/ log e 1/(1- )

Adresowanie otwarte z podwójnym rozpraszaniem Analiza: 3. Wyszukiwanie zakończone sukcesem 1/ log e (1/(1- )) Ilu sondowań spodziewamy się przed Znalezieniem rekordu? rekordów 500, komórek tablicy 1000 rekordów 900, komórek tablicy 1000

Porównanie metod

Porównanie metod

Porównanie metod Dlaczego w takim razie używa się adresowania otwartego? Mniej kosztowne w implementacji.