Algorytmy i struktury danych. wykład 5

Podobne dokumenty
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:

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

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

WSTĘP DO INFORMATYKI. Drzewa i struktury drzewiaste

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

Kolejka priorytetowa. Często rozważa się kolejki priorytetowe, w których poszukuje się elementu minimalnego zamiast maksymalnego.

Podstawy Informatyki. Metody dostępu do danych

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

Drzewa poszukiwań binarnych

ALGORYTMY I STRUKTURY DANYCH

PODSTAWY INFORMATYKI wykład 6.

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

Tadeusz Pankowski

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

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

Porządek symetryczny: right(x)

ALGORYTMY I STRUKTURY DANYCH

Sortowanie. Kolejki priorytetowe i algorytm Heapsort Dynamiczny problem sortowania:

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)

Wykład 3. Złożoność i realizowalność algorytmów Elementarne struktury danych: stosy, kolejki, listy

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

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

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

Algorytmy i struktury danych

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

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

Struktury danych: stos, kolejka, lista, drzewo

Listy, kolejki, stosy

Struktury Danych i Złożoność Obliczeniowa

Drzewa czerwono-czarne.

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

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

Sortowanie bąbelkowe

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

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

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

liniowa - elementy następują jeden za drugim. Graficznie możemy przedstawić to tak:

Drzewa poszukiwań binarnych

Dynamiczne struktury danych

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

Wykład 3. Drzewa czerwono-czarne

Podstawy Informatyki. Wykład 6. Struktury danych

Drzewa podstawowe poj

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

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

Drzewa AVL definicje

Lista liniowa dwukierunkowa

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

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

Teoretyczne podstawy informatyki

Algorytmy i Struktury Danych

Abstrakcyjne struktury danych - stos, lista, drzewo

Algorytmy i Struktury Danych

Wstęp do programowania

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

Teoretyczne podstawy informatyki

Definicja pliku kratowego

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

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

Sortowanie - wybrane algorytmy

Dynamiczne struktury danych

EGZAMIN - Wersja A. ALGORYTMY I STRUKTURY DANYCH Lisek89 opracowanie kartki od Pani dr E. Koszelew

Stos LIFO Last In First Out

BAZY DANYCH. Microsoft Access. Adrian Horzyk OPTYMALIZACJA BAZY DANYCH I TWORZENIE INDEKSÓW. Akademia Górniczo-Hutnicza

ALGORYTMY I STRUKTURY DANYCH

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

Podstawy programowania. Wykład PASCAL. Zmienne wskaźnikowe i dynamiczne. dr Artur Bartoszewski - Podstawy prograowania, sem.

Drzewo binarne BST. LABORKA Piotr Ciskowski

PLAN WYKŁADU BAZY DANYCH INDEKSY - DEFINICJE. Indeksy jednopoziomowe Indeksy wielopoziomowe Indeksy z użyciem B-drzew i B + -drzew

Algorytmy i Struktury Danych, 9. ćwiczenia

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

Algorytmy i Struktury Danych.

Podstawowe struktury danych

Podstawy programowania. Wykład 7 Tablice wielowymiarowe, SOA, AOS, itp. Krzysztof Banaś Podstawy programowania 1

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

Algorytmy i struktury danych

Egzaminy i inne zadania. Semestr II.

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

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

Bazy danych - BD. Indeksy. Wykład przygotował: Robert Wrembel. BD wykład 7 (1)

Algorytmy i Struktury Danych.

Przykładowe B+ drzewo

Kompresja danych Streszczenie Studia Dzienne Wykład 10,

Podstawy Informatyki Metody dostępu do danych

Wstęp do programowania

Algorytmy i struktury danych

Zofia Kruczkiewicz, Algorytmu i struktury danych, Wykład 14, 1

AiSD zadanie drugie. Gliwiński Jarosław Marek Kruczyński Konrad Marek Grupa dziekańska I5. 10 kwietnia 2008

Programowanie i struktury danych. Wykład 4 Dr Piotr Cybula

Programowanie w VB Proste algorytmy sortowania

Programowanie obiektowe

Wykład 5. Sortowanie w czasie liniowologarytmicznym

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

Algorytm obejścia drzewa poszukiwań i zadanie o hetmanach szachowych

BAZY DANYCH. Microsoft Access. Adrian Horzyk OPTYMALIZACJA BAZY DANYCH I TWORZENIE INDEKSÓW. Akademia Górniczo-Hutnicza

Programowanie obiektowe

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

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

TEORETYCZNE PODSTAWY INFORMATYKI

Transkrypt:

Plan wykładu: Wskaźniki. : listy, drzewa, kopce.

Wskaźniki

- wskaźniki Wskaźnik jest to liczba lub symbol który w ogólności wskazuje adres komórki pamięci. W językach wysokiego poziomu wskaźniki mogą również wskazywać na abstrakcyjne struktury danych.

- wskaźniki Wskaźnik jest to liczba lub symbol który w ogólności wskazuje adres komórki pamięci. W językach wysokiego poziomu wskaźniki mogą również wskazywać na abstrakcyjne struktury danych. Pamięć RAM... wskaźnik...

- wskaźniki Wskaźnik jest to liczba lub symbol który w ogólności wskazuje adres komórki pamięci. W językach wysokiego poziomu wskaźniki mogą również wskazywać na abstrakcyjne struktury danych. Pamięć RAM... wskaźnik...

- wskaźniki Wskaźnik jest to liczba lub symbol który w ogólności wskazuje adres komórki pamięci. W językach wysokiego poziomu wskaźniki mogą również wskazywać na abstrakcyjne struktury danych. Pamięć RAM... wskaźnik Rekord...

- wskaźniki Wskaźnik jest to liczba lub symbol który w ogólności wskazuje adres komórki pamięci. W językach wysokiego poziomu wskaźniki mogą również wskazywać na abstrakcyjne struktury danych. Pamięć RAM... wskaźnik Rekord... Uwagi: wskaźnik to adres j lub danych w pamięci, wskaźnik może wskazywać na inny wskaźnik, rozmiar wskaźnika jest równy rozmiarowi adresu fizycznego pamięci obowiązującym w danym systemie komputerowym.

- wskaźniki Zmienne wskaźnikowe w językach programowania: Język Pascal Język C deklaracja: type PWsk = ^Wsk; var W: PWsk; W: ^Wsk; TWsk *Wsk; wskaźnik na zmienną: @nazwa_zmiennej; &nazwa_zmiennej; wartość zmiennej wskazywanej: nazwa_zmiennej^ nazwa_zmiennej wskazanie puste: nil NULL alokacja i zwalnianie pamięci: New(nazwa_zmiennej); Dispose(nazwa_zmiennej);... GetMem(nazwa_zmiennej, rozmiar); FreeMem(nazwa_zmiennej, rozmiar); typ ; nazwa_zmiennej nazwa_zmiennej = (typ ;( mallok(rozmiar (... free(nazwa_zmiennej);

Dynamiczne struktury danych

- węzeł Węzeł struktura w pamięci, zawierająca oraz zmienne wskazujące, pozwalające na określenie położenia innego węzła w pamięci. wskaźnik wskaźnik... Uwagi: węzeł powinien zawierać co najmniej jedno pole wskaźnikowe, węzeł może wskazywać na samego siebie, węzeł nie musi zawierać pól danych, konstrukcja węzła wpływa na wydajność algorytmów.

Listy

- lista Lista jest to liniowa struktura będąca kontenerem danych, w której węzły wskazują co najwyżej jeden element następujący i co najwyżej jeden element poprzedzający dany węzeł. Rodzaje list: jednokierunkowa prosta, jednokierunkowa cykliczna, dwukierunkowa prosta, dwukierunkowa cykliczna.

- lista Lista jest to liniowa struktura będąca kontenerem danych, w której węzły wskazują co najwyżej jeden element następujący i co najwyżej jeden element poprzedzający dany węzeł. Rodzaje list: jednokierunkowa prosta, jednokierunkowa cykliczna, dwukierunkowa prosta, dwukierunkowa cykliczna. Każdy węzeł wskazuje na następny, ostatni węzeł nie wskazuje na nic. Przeglądanie listy może odbywać się tylko w jednym kierunku.

- lista Lista jest to liniowa struktura będąca kontenerem danych, w której węzły wskazują co najwyżej jeden element następujący i co najwyżej jeden element poprzedzający dany węzeł. Rodzaje list: jednokierunkowa prosta, jednokierunkowa cykliczna, dwukierunkowa prosta, dwukierunkowa cykliczna. Każdy węzeł wskazuje na następny, ostatni węzeł nie wskazuje na nic. Przeglądanie listy może odbywać się tylko w jednym kierunku. Każdy węzeł wskazuje na następny, ostatni węzeł wskazuje na początek listy. Przeglądanie listy może odbywać się tylko w jednym kierunku.

- lista Lista jest to liniowa struktura będąca kontenerem danych, w której węzły wskazują co najwyżej jeden element następujący i co najwyżej jeden element poprzedzający dany węzeł. Rodzaje list: jednokierunkowa prosta, jednokierunkowa cykliczna, dwukierunkowa prosta, dwukierunkowa cykliczna. Każdy węzeł wskazuje na następny, ostatni węzeł nie wskazuje na nic. Przeglądanie listy może odbywać się tylko w jednym kierunku. Każdy węzeł wskazuje na następny, ostatni węzeł wskazuje na początek listy. Przeglądanie listy może odbywać się tylko w jednym kierunku. Każdy węzeł wskazuje na następny i poprzedni węzeł. Pierwszy węzeł nie wskazuje na żaden poprzedni, ostatni węzeł nie wskazuje na żaden następny. Przeglądanie listy może odbywać się w dwóch kierunkach.

- lista Lista jest to liniowa struktura będąca kontenerem danych, w której węzły wskazują co najwyżej jeden element następujący i co najwyżej jeden element poprzedzający dany węzeł. Rodzaje list: jednokierunkowa prosta, jednokierunkowa cykliczna, dwukierunkowa prosta, dwukierunkowa cykliczna. Każdy węzeł wskazuje na następny i poprzedni węzeł. Pierwszy węzeł wskazuje na koniec listy, ostatni węzeł wskazuje na jej początek. Przeglądanie listy może odbywać się w dwóch kierunkach. Każdy węzeł wskazuje na następny, ostatni węzeł nie wskazuje na nic. Przeglądanie listy może odbywać się tylko w jednym kierunku. Każdy węzeł wskazuje na następny, ostatni węzeł wskazuje na początek listy. Przeglądanie listy może odbywać się tylko w jednym kierunku. Każdy węzeł wskazuje na następny i poprzedni węzeł. Pierwszy węzeł nie wskazuje na żaden poprzedni, ostatni węzeł nie wskazuje na żaden następny. Przeglądanie listy może odbywać się w dwóch kierunkach.

- lista Lista jest to liniowa struktura będąca kontenerem danych, w której węzły wskazują co najwyżej jeden element następujący i co najwyżej jeden element poprzedzający dany węzeł. Rodzaje list: jednokierunkowa prosta, jednokierunkowa cykliczna, dwukierunkowa prosta, dwukierunkowa cykliczna. Każdy węzeł wskazuje na następny i poprzedni węzeł. Pierwszy węzeł wskazuje na koniec listy, ostatni węzeł wskazuje na jej początek. Przeglądanie listy może odbywać się w dwóch kierunkach. Każdy węzeł wskazuje na następny, ostatni węzeł nie wskazuje na nic. Przeglądanie listy może odbywać się tylko w jednym kierunku. Każdy węzeł wskazuje na następny, ostatni węzeł wskazuje na początek listy. Przeglądanie listy może odbywać się tylko w jednym kierunku. Każdy węzeł wskazuje na następny i poprzedni węzeł. Pierwszy węzeł nie wskazuje na żaden poprzedni, ostatni węzeł nie wskazuje na żaden następny. Przeglądanie listy może odbywać się w dwóch kierunkach. Uwagi: pierwszy węzeł w liście nazywany jest jej początkiem, lista może składać się z tylko jednego węzła, listy mogą być uporządkowane.

Lista jednokierunkowa

- lista jednokierunkowa prosta Struktura listy jednokierunkowej: Początek listy

- lista jednokierunkowa prosta Struktura listy jednokierunkowej: Początek listy

- lista jednokierunkowa prosta Struktura listy jednokierunkowej: Początek listy Koniec listy...

- lista jednokierunkowa prosta Struktura listy jednokierunkowej: Początek listy Koniec listy... Dodawanie węzła:

- lista jednokierunkowa prosta Struktura listy jednokierunkowej: Początek listy Koniec listy... Dodawanie węzła: Utworzenie nowego węzła.

- lista jednokierunkowa prosta Struktura listy jednokierunkowej: Początek listy Koniec listy... Dodawanie węzła: Rozerwanie listy.

- lista jednokierunkowa prosta Struktura listy jednokierunkowej: Początek listy Koniec listy... Dodawanie węzła:

- lista jednokierunkowa prosta Struktura listy jednokierunkowej: Początek listy Koniec listy... Dodawanie węzła: Powiązanie listy z nowym węzłem.

- lista jednokierunkowa prosta Struktura listy jednokierunkowej: Początek listy Koniec listy... Dodawanie węzła: Połączenie nowego węzła z pozostałą częścią listy.

- lista jednokierunkowa prosta Struktura listy jednokierunkowej: Początek listy Koniec listy... Usuwanie węzła:

- lista jednokierunkowa prosta Struktura listy jednokierunkowej: Początek listy Koniec listy... Usuwanie węzła: Rozerwanie listy.

- lista jednokierunkowa prosta Struktura listy jednokierunkowej: Początek listy Koniec listy... Usuwanie węzła:

- lista jednokierunkowa prosta Struktura listy jednokierunkowej: Początek listy Koniec listy... Usuwanie węzła: Połączenie pozostałych w liście węzłów.

- lista jednokierunkowa prosta Struktura listy jednokierunkowej: Początek listy Koniec listy... Usuwanie węzła: Usunięcie zbędnego węzła.

Lista dwukierunkowa

- lista dwukierunkowa prosta Struktura listy dwukierunkowej: Początek listy

- lista dwukierunkowa prosta Struktura listy dwukierunkowej: Początek listy Koniec listy...

- lista dwukierunkowa prosta Struktura listy dwukierunkowej: Początek listy Koniec listy... Uwagi: dodawanie elementu jest podobne do czynności związanych z listą jednokierunkową wymaga rozerwania listy, ale dodatkowo należy uzupełnić wskazania w sąsiednich węzłach, usuwanie elementu z listy także wymaga uzupełnienia wskazań w węźle poprzedzającym i węźle następującym po węźle usuwanym.

Listy cykliczne

- lista jednokierunkowa cykliczna Struktura listy jednokierunkowej cyklicznej: Początek listy

- lista dwukierunkowa cykliczna Struktura listy dwukierunkowej cyklicznej: Początek listy

Listy w językach programowania

- listy w językach programowania Lista w językach programowania: deklaracja typu listy jednokierunkowej prostej: type PElementListy = ^TElementListy; TElementListy = record wartosc: Integer; nast_elem: PElementListy; end;

- listy w językach programowania Lista w językach programowania: deklaracja typu listy jednokierunkowej prostej: type PElementListy = ^TElementListy; TElementListy = record wartosc: Integer; nast_elem: PElementListy; end; wartosc

- listy w językach programowania Lista w językach programowania: deklaracja typu listy jednokierunkowej prostej: type PElementListy = ^TElementListy; TElementListy = record wartosc: Integer; nast_elem: PElementListy; end; nast_elem wartosc

- listy w językach programowania dodanie elementu do listy jednokierunkowej prostej na jej końcu: var Lista: PElementListy;... function dodaj_element_do_listy(lista: PElementListy; wartosc: Integer): PElementListy; var L, P: PElementListy; begin New(L); L^.wartosc := wartosc; L^.nast_elem := nil; if Lista <> nil then begin P := Lista; while P^.nast_elem <> nil do P := P^.nast_elem; P^.nast_elem := L; dodaj_element_do_listy := Lista end else dodaj_element_do_listy := L end;

- listy w językach programowania dodanie elementu do listy jednokierunkowej prostej na jej końcu: var Lista: PElementListy;... function dodaj_element_do_listy(lista: PElementListy; wartosc: Integer): PElementListy; var L, P: PElementListy; begin Deklaracja zmiennej New(L); przechowującej L^.wartosc := wartosc; początek listy. L^.nast_elem := nil; if Lista <> nil then begin P := Lista; while P^.nast_elem <> nil do P := P^.nast_elem; P^.nast_elem := L; dodaj_element_do_listy := Lista end else dodaj_element_do_listy := L end;

- listy w językach programowania dodanie elementu do listy jednokierunkowej prostej na jej końcu: var Lista: PElementListy;... function dodaj_element_do_listy(lista: PElementListy; wartosc: Integer): PElementListy; var L, P: PElementListy; begin New(L); Deklaracja funkcji dodającej węzeł do listy. L^.wartosc := wartosc; Parametr Lista jest wskaźnikiem na początek L^.nast_elem := nil; listy, parametr wartosc jest daną, która ma być if Lista <> nil then begin zapamiętana w węźle listy. P := Lista; while P^.nast_elem <> nil do P := P^.nast_elem; P^.nast_elem := L; dodaj_element_do_listy := Lista end else dodaj_element_do_listy := L end;

- listy w językach programowania dodanie elementu do listy jednokierunkowej prostej na jej końcu: var Lista: PElementListy;... function dodaj_element_do_listy(lista: PElementListy; wartosc: Integer): PElementListy; var L, P: PElementListy; begin New(L); L^.wartosc := wartosc; L^.nast_elem := nil; Zmienne w funkcji będą wykorzystane podczas if Lista <> nil then begin dodawania węzła do listy. P := Lista; while P^.nast_elem <> nil do P := P^.nast_elem; P^.nast_elem := L; dodaj_element_do_listy := Lista end else dodaj_element_do_listy := L end;

- listy w językach programowania dodanie elementu do listy jednokierunkowej prostej na jej końcu: var Lista: PElementListy;... function dodaj_element_do_listy(lista: PElementListy; wartosc: Integer): PElementListy; var L, P: PElementListy; begin Utworzenie nowego, New(L); pustego węzła... L^.wartosc := wartosc; L^.nast_elem := nil; if Lista <> nil then begin P := Lista; while P^.nast_elem <> nil do P := P^.nast_elem; P^.nast_elem := L; dodaj_element_do_listy := Lista end else dodaj_element_do_listy := L end;

- listy w językach programowania dodanie elementu do listy jednokierunkowej prostej na jej końcu: var Lista: PElementListy;... function dodaj_element_do_listy(lista: PElementListy; wartosc: Integer): PElementListy; var L, P: PElementListy; begin New(L);... oraz wprowadzenie j i zainicjowanie adresu następnego węzła na L^.wartosc := wartosc; L^.nast_elem := nil; wskazanie puste. if Lista <> nil then begin P := Lista; while P^.nast_elem <> nil do P := P^.nast_elem; P^.nast_elem := L; dodaj_element_do_listy := Lista end else dodaj_element_do_listy := L end;

- listy w językach programowania dodanie elementu do listy jednokierunkowej prostej na jej końcu: var Lista: PElementListy;... function dodaj_element_do_listy(lista: PElementListy; wartosc: Integer): PElementListy; var L, P: PElementListy; begin New(L); L^.wartosc := wartosc; L^.nast_elem := nil; if Lista <> nil then begin P := Lista; while P^.nast_elem <> nil do P := P^.nast_elem; P^.nast_elem := L; dodaj_element_do_listy := Lista end else dodaj_element_do_listy := L end; Jeśli lista istnieje (czyli Lista jest różna od nil) to nastąpi odszukanie końca listy.

- listy w językach programowania dodanie elementu do listy jednokierunkowej prostej na jej końcu: var Lista: PElementListy;... function dodaj_element_do_listy(lista: PElementListy; wartosc: Integer): PElementListy; var L, P: PElementListy; begin New(L); L^.wartosc := wartosc; L^.nast_elem := nil; if Lista <> nil then begin P := Lista; while P^.nast_elem <> nil do P := P^.nast_elem; P^.nast_elem := L; dodaj_element_do_listy := Lista end else dodaj_element_do_listy := L end; Po wykonaniu wyróżnionego fragmentu funkcji zmienna P wskazuje na koniec listy.

- listy w językach programowania dodanie elementu do listy jednokierunkowej prostej na jej końcu: var Lista: PElementListy;... function dodaj_element_do_listy(lista: PElementListy; wartosc: Integer): PElementListy; var L, P: PElementListy; begin New(L); L^.wartosc := wartosc; L^.nast_elem := nil; if Lista <> nil then begin P := Lista; while P^.nast_elem <> nil do P := P^.nast_elem; P^.nast_elem := L; dodaj_element_do_listy := Lista end else dodaj_element_do_listy := L end; P wskazuje na koniec listy, zatem dodanie nowego węzła do listy będzie polegało na dopisaniu jego adresu do aktualnego końca listy. Wstawiany element został już wcześniej poprawnie zainicjowany.

- listy w językach programowania dodanie elementu do listy jednokierunkowej prostej na jej końcu: var Lista: PElementListy;... function dodaj_element_do_listy(lista: PElementListy; wartosc: Integer): PElementListy; var L, P: PElementListy; begin New(L); L^.wartosc := wartosc; L^.nast_elem := nil; if Lista <> nil then begin P := Lista; while P^.nast_elem <> nil do P := P^.nast_elem; P^.nast_elem := L; dodaj_element_do_listy := Lista end else dodaj_element_do_listy := L end; Po dodaniu elementu do listy funkcja zwraca jako wynik wskaźnik na początek listy.

- listy w językach programowania dodanie elementu do listy jednokierunkowej prostej na jej końcu: var Lista: PElementListy;... function dodaj_element_do_listy(lista: PElementListy; wartosc: Integer): PElementListy; var L, P: PElementListy; begin New(L); L^.wartosc := wartosc; L^.nast_elem := nil; if Lista <> nil then begin P := Lista; while P^.nast_elem <> nil do P := P^.nast_elem; P^.nast_elem := L; dodaj_element_do_listy := Lista end else dodaj_element_do_listy := L end; Jeśli lista nie istniała (czyli Lista posiadała wartość nil), to funkcja zwraca jako wynik węzeł utworzony na początku funkcji. Jednocześnie będzie to początek listy.

- listy w językach programowania dodanie elementu do listy jednokierunkowej prostej na jej końcu: var Lista: PElementListy;... function dodaj_element_do_listy(lista: PElementListy; wartosc: Integer): PElementListy; var L, P: PElementListy; begin New(L); L^.wartosc := wartosc; L^.nast_elem := nil; if Lista <> nil then begin P := Lista; while P^.nast_elem <> nil do P := P^.nast_elem; P^.nast_elem := L; dodaj_element_do_listy := Lista end else dodaj_element_do_listy := L end; Funkcja dodająca węzeł do listy powinna mieć możliwość jego dodania w dowolnym miejscu listy.

- listy w językach programowania usuwanie elementu z listy jednokierunkowej prostej: function usun_element_z_listy(lista: PElementListy; wartosc: Integer): PElementListy; var L, P: PElementListy; begin L := Lista; P := Lista; while (P <> nil) and (P^.wartosc <> wartosc) do begin L := P; P := P^.nast_elem; end; if P <> nil then begin if P = L then begin L := L^.nast_elem; usun_element_z_listy := L end else begin L^.nast_elem := P^.nast_elem; usun_element_z_listy := Lista end; Dispose(P); end end;

- listy w językach programowania usuwanie elementu z listy jednokierunkowej prostej: function usun_element_z_listy(lista: PElementListy; wartosc: Integer): PElementListy; var L, P: PElementListy; begin L := Lista; P := Lista; while (P <> nil) and (P^.wartosc <> wartosc) do begin L := P; P := P^.nast_elem; end; if P <> nil then begin if P = L then begin L := L^.nast_elem; usun_element_z_listy := L end else begin L^.nast_elem := P^.nast_elem; usun_element_z_listy := Lista end; Dispose(P); end end; Funkcja będzie usuwała z listy wskazanej przez zmienną Lista pierwszy znaleziony węzeł z daną równą zmiennej wartosc.

- listy w językach programowania usuwanie elementu z listy jednokierunkowej prostej: function usun_element_z_listy(lista: PElementListy; wartosc: Integer): PElementListy; var L, P: PElementListy; begin L := Lista; P := Lista; while (P <> nil) and (P^.wartosc <> wartosc) do begin L := P; P := P^.nast_elem; end; if P <> nil then begin if P = L then begin L := L^.nast_elem; usun_element_z_listy := L end else begin L^.nast_elem := P^.nast_elem; usun_element_z_listy := Lista end; Dispose(P); end end; Na początku trzeba odszukać węzeł, który ma zostać usunięty. Zmienna L będzie wskazywała węzeł poprzedni, zmienna P będzie wskazywała węzeł bieżący.

- listy w językach programowania usuwanie elementu z listy jednokierunkowej prostej: function usun_element_z_listy(lista: PElementListy; wartosc: Integer): PElementListy; var L, P: PElementListy; begin L := Lista; P := Lista; while (P <> nil) and (P^.wartosc <> wartosc) do begin L := P; P := P^.nast_elem; end; if P <> nil then begin if P = L then begin L := L^.nast_elem; usun_element_z_listy := L end else begin L^.nast_elem := P^.nast_elem; usun_element_z_listy := Lista end; Dispose(P); end end; Funkcja uwzględnia przypadek, gdy lista nie istnieje tj. P = nil. Ten sam warunek powoduje zakończenie wyszukiwania, gdy zostanie osiągnięty koniec listy.

- listy w językach programowania usuwanie elementu z listy jednokierunkowej prostej: function usun_element_z_listy(lista: PElementListy; wartosc: Integer): PElementListy; var L, P: PElementListy; begin L := Lista; P := Lista; while (P <> nil) and (P^.wartosc <> wartosc) do begin L := P; P := P^.nast_elem; end; if P <> nil then begin if P = L then begin L := L^.nast_elem; usun_element_z_listy := L end else begin L^.nast_elem := P^.nast_elem; usun_element_z_listy := Lista end; Dispose(P); end end; Odnajdywanie właściwego węzła zakończy się również, gdy zostanie taki znaleziony. Jeśli P nie wskazuje tego węzła, to kolejne wykonanie pętli powoduje przypisanie do P następnego węzła z listy. Zmienna L będzie wtedy wskazywać węzeł poprzedzający P.

- listy w językach programowania usuwanie elementu z listy jednokierunkowej prostej: function usun_element_z_listy(lista: PElementListy; wartosc: Integer): PElementListy; var L, P: PElementListy; begin L := Lista; P := Lista; while (P <> nil) and (P^.wartosc <> wartosc) do begin L := P; P := P^.nast_elem; end; if P <> nil then begin if P = L then begin L := L^.nast_elem; usun_element_z_listy := L end else begin L^.nast_elem := P^.nast_elem; usun_element_z_listy := Lista end; Dispose(P); end end; Jeśli P jest różne od nil, to oznacza, że właściwy węzeł został znaleziony i można przystąpić do jego usunięcia.

- listy w językach programowania usuwanie elementu z listy jednokierunkowej prostej: function usun_element_z_listy(lista: PElementListy; wartosc: Integer): PElementListy; var L, P: PElementListy; begin L := Lista; P := Lista; while (P <> nil) and (P^.wartosc <> wartosc) do begin L := P; P := P^.nast_elem; end; if P <> nil then begin if P = L then begin L := L^.nast_elem; usun_element_z_listy := L end else begin L^.nast_elem := P^.nast_elem; usun_element_z_listy := Lista end; Dispose(P); end end; Jeśli P = L to oznacza, że usuwany będzie pierwszy węzeł listy. Zatem funkcja zwróci nowy początek listy, będący następnym elementem po węźle P (L).

- listy w językach programowania usuwanie elementu z listy jednokierunkowej prostej: function usun_element_z_listy(lista: PElementListy; wartosc: Integer): PElementListy; var L, P: PElementListy; begin L := Lista; P := Lista; while (P <> nil) and (P^.wartosc <> wartosc) do begin L := P; P := P^.nast_elem; end; if P <> nil then begin if P = L then begin L := L^.nast_elem; usun_element_z_listy := L end else begin L^.nast_elem := P^.nast_elem; usun_element_z_listy := Lista end; Dispose(P); end end; Jeśli P <> L to oznacza, że usuwany będzie węzeł z środka lub końca listy.

- listy w językach programowania usuwanie elementu z listy jednokierunkowej prostej: function usun_element_z_listy(lista: PElementListy; wartosc: Integer): PElementListy; var L, P: PElementListy; begin L := Lista; P := Lista; while (P <> nil) and (P^.wartosc <> wartosc) do begin L := P; P := P^.nast_elem; end; if P <> nil then begin if P = L then begin L := L^.nast_elem; usun_element_z_listy := L end else begin L^.nast_elem := P^.nast_elem; usun_element_z_listy := Lista end; Dispose(P); end end; Jeśli P <> L to oznacza, że usuwany będzie węzeł z środka lub końca listy: rozerwanie listy i jednoczesne połączenie listy z pominięciem wyłączonego węzła P.

- listy w językach programowania usuwanie elementu z listy jednokierunkowej prostej: function usun_element_z_listy(lista: PElementListy; wartosc: Integer): PElementListy; var L, P: PElementListy; begin L := Lista; P := Lista; while (P <> nil) and (P^.wartosc <> wartosc) do begin L := P; P := P^.nast_elem; end; if P <> nil then begin if P = L then begin L := L^.nast_elem; usun_element_z_listy := L end else begin L^.nast_elem := P^.nast_elem; usun_element_z_listy := Lista end; Dispose(P); end end; Ponieważ początek listy nie uległ zmianie, to funkcja zwróci ten sam początek, jaki otrzymała podczas wywołania.

- listy w językach programowania usuwanie elementu z listy jednokierunkowej prostej: function usun_element_z_listy(lista: PElementListy; wartosc: Integer): PElementListy; var L, P: PElementListy; begin L := Lista; P := Lista; while (P <> nil) and (P^.wartosc <> wartosc) do begin L := P; P := P^.nast_elem; end; if P <> nil then begin if P = L then begin L := L^.nast_elem; usun_element_z_listy := L end else begin L^.nast_elem := P^.nast_elem; usun_element_z_listy := Lista end; Dispose(P); end end; Usunięcie z pamięci wyłączonego węzła P.

- listy w językach programowania Czynności dodatkowe funkcji obsługujących listy: funkcja dodająca elementy do listy powinna ją także tworzyć, funkcja dodająca elementy może porządkować listę lub wstawiać elementy w wybrane miejsca listy, funkcja usuwająca elementy z listy powinna także usuwać listę, jeśli to konieczne, w listach dwukierunkowych mechanika rozrywania listy wymaga większej liczby operacji, w listach cyklicznych dodawanie węzłów wymaga uwzględnienia specyfiki listy, w listach cyklicznych usuwanie węzłów również wymaga uwzględnienia specyfiki listy.

- listy w językach programowania Czynności dodatkowe funkcji obsługujących listy: funkcja dodająca elementy do listy powinna ją także tworzyć, funkcja dodająca elementy może porządkować listę lub wstawiać elementy w wybrane miejsca listy, funkcja usuwająca elementy z listy powinna także usuwać listę, jeśli to konieczne, w listach dwukierunkowych mechanika rozrywania listy wymaga większej liczby operacji, w listach cyklicznych dodawanie węzłów wymaga uwzględnienia specyfiki listy, w listach cyklicznych usuwanie węzłów również wymaga uwzględnienia specyfiki listy. Należy pamiętać, że powyższe funkcje wykonane nieprawidłowo bez uwzględnienia przypadków brzegowych mogą powodować tzw. efekt memory leak.

Drzewa

- drzewa Drzewo to rodzaj kontenera danych, którego struktura logiczna jest odzwierciedleniem struktury drzewa matematycznego.

- drzewa Drzewo to rodzaj kontenera danych, którego struktura logiczna jest odzwierciedleniem struktury drzewa matematycznego. Budowa drzewa:

- drzewa Drzewo to rodzaj kontenera danych, którego struktura logiczna jest odzwierciedleniem struktury drzewa matematycznego. Budowa drzewa: Drzewo,składa się z węzłów i krawędzi.

- drzewa Drzewo to rodzaj kontenera danych, którego struktura logiczna jest odzwierciedleniem struktury drzewa matematycznego. Budowa drzewa: Drzewo,składa się z węzłów i krawędzi. W ogólnym przypadku węzeł może wskazywać od 2 do n następników.

- drzewa Drzewo to rodzaj kontenera danych, którego struktura logiczna jest odzwierciedleniem struktury drzewa matematycznego. Budowa drzewa: ( korzeń ) Węzeł drzewa, jeśli nie ma poprzedników nazywany jest korzeniem drzewa.

- drzewa Drzewo to rodzaj kontenera danych, którego struktura logiczna jest odzwierciedleniem struktury drzewa matematycznego. Budowa drzewa: ( korzeń ) Węzeł nie mający następników nazywany jest liściem.

- drzewa Drzewo to rodzaj kontenera danych, którego struktura logiczna jest odzwierciedleniem struktury drzewa matematycznego. Budowa drzewa: ( korzeń ) Węzeł nie mający następników nazywany jest liściem. Dane przechowywane są w korzeniu, węzłach i liściach.

- drzewa Drzewo to rodzaj kontenera danych, którego struktura logiczna jest odzwierciedleniem struktury drzewa matematycznego. Budowa drzewa: Ciąg krawędzi łączącej dwa węzły nazywany jest ścieżką. ( korzeń )

- drzewa Drzewo to rodzaj kontenera danych, którego struktura logiczna jest odzwierciedleniem struktury drzewa matematycznego. Budowa drzewa: Liczba krawędzi od korzenia do dowolnego węzła nazywana jest długością drzewa. ( korzeń )

- drzewa Drzewo to rodzaj kontenera danych, którego struktura logiczna jest odzwierciedleniem struktury drzewa matematycznego. Budowa drzewa: Liczba krawędzi od korzenia do dowolnego węzła nazywana jest długością drzewa i określa liczbę jego poziomów. ( korzeń ) poziom 1 poziom 2

- drzewa Drzewo to rodzaj kontenera danych, którego struktura logiczna jest odzwierciedleniem struktury drzewa matematycznego. Budowa drzewa: Liczba krawędzi od korzenia do dowolnego węzła nazywana jest długością drzewa i określa liczbę jego poziomów. ( korzeń ) Największa długość drzewa nazywana jest wysokością. poziom 1 wysokość = 2 poziom 2

Rodzaje drzew w informatyce

- rodzaje drzew w informatyce Drzewo binarne jest to drzewo w którym stopień każdego węzła nie jest większy niż 3. 9 11 3 1 2 8 7 3 5

- rodzaje drzew w informatyce Drzewo binarne poszukiwań jest to drzewo binarne w którym wartość klucza w węzłach lewego poddrzewa jest mniejsza niż w prawym poddrzewie. 12 6 16 3 8 11 18 1 4 Złożoność wyszukiwania: O(log n)

- rodzaje drzew w informatyce Drzewo AVL jest to zrównoważone drzewo binarne poszukiwań. Właściwości: każdy węzeł posiada współczynnik wyważenia, różnica wysokości między lewym i prawym poddrzewem musi wynosić +1, 0 lub -1, jeśli dodanie lub usunięcie węzła spowoduje, że współczynnik wyważenia przyjmie wartość niedozwoloną, to wykonuje się rotacje węzłów, która przywraca zrównoważenie, pesymistyczna złożoność wyszukiwania wynosi 1.44(log 2 n). 33 22 3 27 54 36 67 0 7 55 Zrównoważanie drzewa BST można uzyskać stosując algorytm DSW.

- rodzaje drzew w informatyce Drzewo czerwono-czarne jest to samoorganizujące się drzewo binarne poszukiwań. Zasady tworzenia: każdy węzeł jest czerwony lub czarny, korzeń jest czarny i każdy liść jest czarny (wskazanie puste traktuje się jak liść), jeśli węzeł jest czerwony, to jego potomkowie muszą być czarni, każda ścieżka z korzenia do wybranego liścia zawiera tyle samo czarnych węzłów.

- rodzaje drzew w informatyce Drzewo czerwono-czarne jest to samoorganizujące się drzewo binarne poszukiwań. Zasady tworzenia: każdy węzeł jest czerwony lub czarny, korzeń jest czarny i każdy liść jest czarny (wskazanie puste traktuje się jak liść), jeśli węzeł jest czerwony, to jego potomkowie muszą być czarni, każda ścieżka z korzenia do wybranego liścia zawiera tyle samo czarnych węzłów. Właściwości: drzewo BR jest strukturą danych powiązaną z odpowiednimi algorytmami, operacje elementarne wymagają złożoności równej O(log n), dla n węzłów głębokość drzewa h wyniesie maksymalnie 2 log(n+1), przywrócenie właściwości drzewa wymaga co najwyżej dwóch operacji rotacji.

- rodzaje drzew w informatyce Drzewo czerwono-czarne jest to samoorganizujące się drzewo binarne poszukiwań. Zasady tworzenia: każdy węzeł jest czerwony lub czarny, korzeń jest czarny i każdy liść jest czarny (wskazanie puste traktuje się jak liść), jeśli węzeł jest czerwony, to jego potomkowie muszą być czarni, każda ścieżka z korzenia do wybranego liścia zawiera tyle samo czarnych węzłów. Właściwości: drzewo BR jest strukturą danych powiązaną z odpowiednimi algorytmami, operacje elementarne wymagają złożoności równej O(log n), dla n węzłów głębokość drzewa h wyniesie maksymalnie 2 log(n+1), przywrócenie właściwości drzewa wymaga co najwyżej dwóch operacji rotacji. Operacja rotacji: X rotacja w lewo Y a Y rotacja w prawo X c b c a b

- rodzaje drzew w informatyce Drzewo czerwono-czarne jest to samoorganizujące się drzewo binarne poszukiwań. 23 6 66 1 20 43 71 3 367 73

- rodzaje drzew w informatyce Drzewo BSP ang. Binary Space Partition jest to rodzaj drzewa binarnego stosowanego do przechowywania informacji o kształcie wielokąta. Zastosowanie: przechowywanie informacji o wielokącie, upraszczanie detekcji przynależności punktu do wielokąta, upraszczanie wykonywanie operacji logicznych na siatkach brył, przechowywanie informacji o scenie trójwymiarowej, co pozwala na uproszczenie: detekcji kolizji, śledzenia promienia (ang. ray tracing), usuwania niewidocznych powierzchni.

- rodzaje drzew w informatyce Drzewo BSP ang. Binary Space Partition jest to rodzaj drzewa binarnego stosowanego do przechowywania informacji o kształcie wielokąta. Zastosowanie: przechowywanie informacji o wielokącie, upraszczanie detekcji przynależności punktu do wielokąta, upraszczanie wykonywanie operacji logicznych na siatkach brył, przechowywanie informacji o scenie trójwymiarowej, co pozwala na uproszczenie: detekcji kolizji, śledzenia promienia (ang. ray tracing), usuwania niewidocznych powierzchni. Tworzenie drzewa: wielokąt (bryłę) należy podzielić na rozłączne części przy pomocy hiperpłaszczyzn prosta w 3D, płaszczyzna w 3D, do go węzła dodaje się obiekt leżący na hiperpłaszczyźnie, następnie: w lewym poddrzewie znajdują się obiekty w całości znajdujące się po odpowiedniej stronie hiperpłaszczyzny, w prawym poddrzewie znajdują się obiekty w całości znajdujące się po drugiej stronie hiperpłaszczyzny niż w lewym poddrzewie, jeśli obiektu nie można zakwalifikować do żadnego z poddrzew to należy go podzielić najczęściej z wielokątów wydzielane są trójkąty. proces dodawania obiektów do węzłów wykonuje się rekurencyjnie.

- rodzaje drzew w informatyce Drzewo BSP ang. Binary Space Partition jest to rodzaj drzewa binarnego stosowanego do przechowywania informacji o kształcie wielokąta. h i a b d c g e e 1 f e 2

- rodzaje drzew w informatyce Drzewo BSP ang. Binary Space Partition jest to rodzaj drzewa binarnego stosowanego do przechowywania informacji o kształcie wielokąta. h i a b d c a g e e 1 f e 2

- rodzaje drzew w informatyce Drzewo BSP ang. Binary Space Partition jest to rodzaj drzewa binarnego stosowanego do przechowywania informacji o kształcie wielokąta. h i a b d c a g e e 1 f e 2

- rodzaje drzew w informatyce Drzewo BSP ang. Binary Space Partition jest to rodzaj drzewa binarnego stosowanego do przechowywania informacji o kształcie wielokąta. h i a b d c a g e e 1 f e 2

- rodzaje drzew w informatyce Drzewo BSP ang. Binary Space Partition jest to rodzaj drzewa binarnego stosowanego do przechowywania informacji o kształcie wielokąta. g h f i e e 2 a e 1 b d c e 2 a out b c out d e 1 in out in

- rodzaje drzew w informatyce Drzewo BSP ang. Binary Space Partition jest to rodzaj drzewa binarnego stosowanego do przechowywania informacji o kształcie wielokąta. h 2 g h 1 h f i e e 2 a e 1 b d c e 2 a out b c out d e 1 in out in

- rodzaje drzew w informatyce Drzewo BSP ang. Binary Space Partition jest to rodzaj drzewa binarnego stosowanego do przechowywania informacji o kształcie wielokąta. h 2 g h 1 h f i e e 2 a e 1 b d c out e 2 f a out b c g h 1 out d out h 2 out i e 1 in out in out in out in

- rodzaje drzew w informatyce Drzewo ósemkowe ang. octree, jest to rodzaj drzewa, w którym każdy węzeł ma osiem następników. Zastosowanie: stosowane do podziału przestrzeni na regularne części, jako efektywna metoda przechowywania voxeli, do wykrywania kolizji obiektów, w kwantyzacji kolorów, w renderingu do usuwania obiektów niewidocznych.

- rodzaje drzew w informatyce Drzewo ósemkowe ang. octree, jest to rodzaj drzewa, w którym każdy węzeł ma osiem następników. Zastosowanie: stosowane do podziału przestrzeni na regularne części, jako efektywna metoda przechowywania voxeli, do wykrywania kolizji obiektów, w kwantyzacji kolorów, w renderingu do usuwania obiektów niewidocznych.

- rodzaje drzew w informatyce Drzewo ósemkowe ang. octree, jest to rodzaj drzewa, w którym każdy węzeł ma osiem następników. Zastosowanie: stosowane do podziału przestrzeni na regularne części, jako efektywna metoda przechowywania voxeli, do wykrywania kolizji obiektów, w kwantyzacji kolorów, w renderingu do usuwania obiektów niewidocznych.

- rodzaje drzew w informatyce Drzewo ósemkowe ang. octree, jest to rodzaj drzewa, w którym każdy węzeł ma osiem następników. Zastosowanie: stosowane do podziału przestrzeni na regularne części, jako efektywna metoda przechowywania voxeli, do wykrywania kolizji obiektów, w kwantyzacji kolorów, w renderingu do usuwania obiektów niewidocznych.

- rodzaje drzew w informatyce Drzewo ósemkowe ang. octree, jest to rodzaj drzewa, w którym każdy węzeł ma osiem następników. Zastosowanie: stosowane do podziału przestrzeni na regularne części, jako efektywna metoda przechowywania voxeli, do wykrywania kolizji obiektów, w kwantyzacji kolorów, w renderingu do usuwania obiektów niewidocznych.

- rodzaje drzew w informatyce Kopiec ang. heap, jest to rodzaj drzewa spełniającego tzw. warunek kopca każdy potomek jest w stałej relacji ze swoim rodzicem.

- rodzaje drzew w informatyce Kopiec ang. heap, jest to rodzaj drzewa spełniającego tzw. warunek kopca każdy potomek jest w stałej relacji ze swoim rodzicem. Kopiec binarny zupełny: zbudowany jest w oparciu o drzewo zupełne, na poziomie n jest jest 2n węzłów (poza ostatnim poziomem) łatwa implementacja w postaci tablicy, wysokość kopca jest logarytmiczna względem jego wielkości.

- rodzaje drzew w informatyce Kopiec ang. heap, jest to rodzaj drzewa spełniającego tzw. warunek kopca każdy potomek jest w stałej relacji ze swoim rodzicem. Kopiec binarny zupełny: zbudowany jest w oparciu o drzewo zupełne, na poziomie n jest jest 2n węzłów (poza ostatnim poziomem) łatwa implementacja w postaci tablicy, wysokość kopca jest logarytmiczna względem jego wielkości. Drzewo jest zupełne jeśli wszystkie jego poziomy z wyjątkiem ostatniego są zapełnione, a na ostatnim poziomie liści są spójnie ułożone wg relacji kopca.

- rodzaje drzew w informatyce Kopiec ang. heap, jest to rodzaj drzewa spełniającego tzw. warunek kopca każdy potomek jest w stałej relacji ze swoim rodzicem. Kopiec binarny zupełny: zbudowany jest w oparciu o drzewo zupełne, na poziomie n jest jest 2n węzłów (poza ostatnim poziomem) łatwa implementacja w postaci tablicy, wysokość kopca jest logarytmiczna względem jego wielkości. Drzewo jest zupełne jeśli wszystkie jego poziomy z wyjątkiem ostatniego są zapełnione, a na ostatnim poziomie liści są spójnie ułożone wg relacji kopca. Kolejnym elementom drzewa nadaje się numery (od 1), zaczynając od szczytu, a następnie od lewej do prawej w każdym z poziomów, wtedy: - jeśli potomek na numer n, to jego rodzic n/2, - jeśli rodzic ma numer n, to jego lewy potomek ma numer 2n, a prawy 2n+1.

- rodzaje drzew w informatyce Kopiec ang. heap, jest to rodzaj drzewa spełniającego tzw. warunek kopca każdy potomek jest w stałej relacji ze swoim rodzicem. Kopiec binarny zupełny: zbudowany jest w oparciu o drzewo zupełne, na poziomie n jest jest 2n węzłów (poza ostatnim poziomem) łatwa implementacja w postaci tablicy, wysokość kopca jest logarytmiczna względem jego wielkości. Drzewo jest zupełne jeśli wszystkie jego poziomy z wyjątkiem ostatniego są zapełnione, a na ostatnim poziomie liści są spójnie ułożone wg relacji kopca. Kolejnym elementom drzewa nadaje się numery (od 1), zaczynając od szczytu, a następnie od lewej do prawej w każdym z poziomów, wtedy: - jeśli potomek na numer n, to jego rodzic n/2, - jeśli rodzic ma numer n, to jego lewy potomek ma numer 2n, a prawy 2n+1. 10 7 6 3 20 16 8 15 1 2 3 4 5 6 7 8 9 10 2 5 nr 1 2 3 4 5 6 7 8 9 10 W 20 16 8 10 15 2 5 7 6 3

- rodzaje drzew w informatyce Kopiec ang. heap, jest to rodzaj drzewa spełniającego tzw. warunek kopca każdy potomek jest w stałej relacji ze swoim rodzicem. Kopiec binarny zupełny: zbudowany jest w oparciu o drzewo zupełne, na poziomie n jest jest 2n węzłów (poza ostatnim poziomem) łatwa implementacja w postaci tablicy, wysokość kopca jest logarytmiczna względem jego wielkości. Dla kopca binarnego operacje wstawiania i usuwania mają złożoność czasową równą O(log n). Drzewo jest zupełne jeśli wszystkie jego poziomy z wyjątkiem ostatniego są zapełnione, a na ostatnim poziomie liści są spójnie ułożone wg relacji kopca. Kolejnym elementom drzewa nadaje się numery (od 1), zaczynając od szczytu, a następnie od lewej do prawej w każdym z poziomów, wtedy: - jeśli potomek na numer n, to jego rodzic n/2, - jeśli rodzic ma numer n, to jego lewy potomek ma numer 2n, a prawy 2n+1. 10 7 6 3 20 16 8 15 1 2 3 4 5 6 7 8 9 10 2 5 nr 1 2 3 4 5 6 7 8 9 10 W 20 16 8 10 15 2 5 7 6 3

Koniec wykładu