ARBORI BINARI DE CĂUTARE

Slides:



Advertisements
Similar presentations
Prof.Briciu Daniela Sc.cu cls. I-VIII Luna de Sus
Advertisements

Adobe photoshop.  De multe ori ne facem fotografii si unele nu le facem publice pentru ca ori am avut un cos in acel moment sau un alt aspect negativ.
În general exist ă 2 forme mari de conservare : “in situ” şi “ex situ” 1. Conservarea “ in situ” Aceast ă metod ă de conservare const ă în.
Caracteristici ale corpurilor cu viata
-Modelul Entitate-Legatura (ER)-
-Limbajul SQL-Interogări complexe, Vederi-
Subinterogări multiple
Oracle Academy Lead Adjunct
Prof. Elena Răducanu, Colegiul Naţional Bănăţean,Timişoara
IntraShip inovatie, flexibilitate, rapiditate.
Probleme la metoda backtracking
Structura unui calculator
Prezentare 1.
Posibilităţi de analiză în timp real a parametrilor de calitate a apei cu ajutorul sistemului informatic de management SIVECO Business Analyzer September.
Să căutăm eficient cu Prezentare de Stephanie Lichtenauer
PROGRAM DISLEXIE
Cum foloseşti WordPress drept CMS?
Managementul serviciilor IT
Paxos Made Simple Autor: Puşcaş Radu George
FINANŢE PUBLICE. DEFINIŢIE, FUNCŢII, MECANISM FINANCIAR
DATABASE PROGRAMMING.
Aparatura auxiliară Generalităţi, clasificare
OPERAŢII CU FIŞIERE ŞI FOLDERE
EFECTUL LASER.
De la calitatea serviciilor la o bună guvernanţă
METODA BACKTRACKING Examenul de bacalaureat 2012
Proiect la “Aplicaţii ale Microcontrollerelor”
ASIRA COMMUNICATION.
Programare vizuală.
Conducător ştiinţific Prof. Dr. Ing. Radu VASIU
Generarea modelelor fractale
-Limbajul SQL-Interogări complexe. Subinterogări-
Problema rucsacului lacom
MANAGEMENT EDUCAŢIONAL PERFORMANT Limbajul de programare Borland Pacal
Tipuri structurate Tipul tablou
BAZE DE DATE RELATIONALE
Curs 2 1 Sistem de operare-concepte: 2 Apeluri de sistem
Modificarea structurii unei tabele
Curs 6: Introducere în programarea SAS
A F T E R VALENTINES' DAY... Elias el Rahbani Hopeless Love Click
Curs 2 Structuri de date avansate pentru cautare 2-3 arbori B-arbori
DETERMINAREA ALCALINITATII SI PH-UL APELOR NATURALE
REPETATE ŞI REPARABILE
Funcții C/C++ continuare
Impulsul mecanic Impulsul mecanic. Teorema conservarii impulsului mecanic.
Citește-mă Acest slide are rolul de a-ți explica modul în care să folosești umătoarele slide-uri. Șterge-l din prezentarea finală. În următoarele slide-uri.
Tehnoredactarea computerizată
Geo-reference of historical maps Georeferențierea hărților istorice
SOAP Simple Object Access Protocol
Eclipsele de soare si de luna
Forms (Formulare).
Scrierea ecuaţiilor în Microsoft Word
Universitatea POLITEHNICA din București - Curs de 16 ore – Curs 11
Îmbunătăţirea serviciilor publice prin intermediul Chartelor de Servicii: Elaborarea şi implementarea Planurilor de Acţiune pentru Îmbunătăţirea Serviciilor.
Sistemul de prognoză atmosferică RapidRefresh - WRF
Functia de documentare
Căutarea şi regăsirea informaţiei
Raspunsul la frecventa
Cum să particularizați Microsoft SharePoint Site web online
Sisteme integrate pentru -business
Utilizarea Internet in România
Circuite Combinaţionale Logice
Aplicaţii specializate pentru realizarea unei prezentări – PowerPoint
Configurarea metodelor de management al calităţii în sectorul public
Implementarea listelor simplu inlantuite
Cross Border Seminar (CBS) Euroguidance
- calitatea serviciului de internet -
Schimbă vieți, deschide minți
Funcții NULL.
Despre lamaie.net De ce sunt lamaile acre? Realizatori: Cristina Cazan
Presentation transcript:

ARBORI BINARI DE CĂUTARE Proiect realizat de micu ana

DEFINIȚIE Arborii binari de căutare sunt arbori binari cu proprietatea că există o relație de ordine definită pe valorile asociate fiecărui nod, iar pentru fiecare nod, subarborele stâng conține valori mai mici decât cea a nodului, iar cel drept conține valori mai mari decât cea a nodului. Utilizarea cea mai importantă a lor este în dicționare, folosind o cheie de sortare (cheie de căutare).

Exemplu: Rădăcina (20) are ca fii pe 13 în stânga sa (13 < 20) și pe 45 în dreapta sa (45 > 20). La rândul lor, 13 și 45 au aceeași proprietate: în stânga lui 13 este 5 și în dreapta 17, iar în stânga lui 45 este 33 și în dreapta este 90.

aRBOrII BINARI DE CĂUTARE IMPLementează eficient următoarele operații: căutare(arbore, k) – determină dacă un element specificat prin cheia de sortare k există în arbore și-l returnează dacă există. inserție(arbore, x) - inserează în arbore elementul x. ștergere(arbore, k) - șterge un element specificat prin cheia k. listare – parcurgerea arborelui binar de căutare

Crearea arborilor de căutare  se realizează aplicând de un număr de ori operația de inserare, realizată astfel: -se compară valoarea k de inserat cu cheia asociată nodului curent. Există următoarele posibilități: - cheia coincide cu valoarea de inserat și se renuntă la inserare - cheia este mai mică decât k caz în care se încearcă inserarea în subarborele drept - cheia este mai mare decât k caz în care se incearcă inserarea în subarborele stâng inserarea propriu-zisă se realizează atunci când subarborele stâng , respectiv drept, este vid, altfel se reia. Mecanismul descris este tipic metodei Divide et Impera. INSERAREA

Inițial nu avem niciun nod. Luăm primul nod, cu valoarea 13, și îl punem în arbore ca fiind rădăcina. 13 Următoarea valoare pe care dorim să o punem este 59. Vedem că 59 > 13, deci îl adăugăm în dreapta sa. 12 59 Următoarea cheie introdusă este 92. Parcurgând arborele, observăm că 92 > 13, deci va fi în dreapta sa, dar și 92 > 59. Cum 59 nu mai are alți fii, îl adăugăm în dreapta sa. 36 92 Se introduce cheia 62. 62 > 13, 62 > 59, dar 62 < 92, așa că va fi situată în stânga lui 92. 62 68 Pentru cheia 68, verificăm 68>13, >59, <92, >62, deci o punem în dreapta lui 62. Se introduce 12, și ajunge imediat în stânga lui 13, fiind mai mic decât acesta. INSERAREA La introducerea cheii 36, mergem în dreapta lui 13, dar cum 36 < 59, îl situăm în stânga lui.

CĂUTAREA 13 Să presupunem că vrem să căutăm cheia 62. Parcurgerea este mult mai ușoară datorită criteriului de plasare al cheilor în funcție de valoarea reținută. Odată creat, un arbore de căutare permite regăsirea mai rapidă a informației decât în cazul în care ar fi memorate secvențial. Numărul de comparații este mai mic sau egal cu numărul de niveluri ale arborelui de căutare. Dacă în procesul de căutare s-a ajuns să se caute cheia într-un subarbore vid, înseamnă că nodul cu cheia respectivă lipsește. 12 59 36 92 62 68

ȘTERGEREA 1 Exemplu 1: vrem să ștergem cheia 46. 22 13 46 51 72 Pentru a șterge un nod din arbore, atâta timp cât acesta nu e frunză, vor fi necesare și alte modificări astfel încât condiția de arbore de căutare să nu fie încălcată. Se disting două cazuri: Dacă nodul șters are un singur fiu Dacă nodul șters are doi fii Pentru primul caz, nodul șters este înlocuit cu singurul său fiu. 1 Exemplu 1: vrem să ștergem cheia 46. 22 13 46 51 72

ȘTERGEREA 1 Exemplu 2: vrem să ștergem cheia 22. 22 13 46 51 72 Pentru a șterge un nod din arbore, atâta timp cât acesta nu e frunză, vor fi necesare și alte modificări astfel încât condiția de arbore de căutare să nu fie încălcată. Se disting două cazuri: Dacă nodul șters are un singur fiu Dacă nodul șters are doi fii Pentru primul caz, nodul șters este înlocuit cu singurul său fiu. Pentru al doilea caz, nodul șters va fi înlocuit cu cel mai mare nod din subarborele stâng. 1 Exemplu 2: vrem să ștergem cheia 22. 22 13 46 51 72

Listarea este parcurgerea în inordine a arborelui binar de căutare. 13 12 59 36 92 62 68 12 13 36 59 68 62 92 LISTAREA

IMPLEMENTARE C++ #include <iostream> using namespace std; struct Nod { int info; Nod *st, *dr; }; Nod* root; void init(Nod* &root){ root = NULL; } Nod* &find(Nod* &p, int x){ if (p == NULL || p -> info == x) return p; if (x <= p -> info) return find(p -> st, x); return find(p -> dr, x);

IMPLEMENTARE C++ Nod* &minim(Nod* &p){ if (p -> st == NULL) return p; return minim(p -> st); } Nod* &maxim(Nod* &p){ if (p -> dr == NULL) return maxim(p -> dr); void insert(Nod* &p, int x){ if (p == NULL) { p = new Nod; p -> info = x; p -> st = p -> dr = NULL; return; if (x <= p -> info) insert(p -> st, x); else insert(p -> dr, x);

IMPLEMENTARE C++ void erase(Nod* &root, int x){ Nod* &p = find(root, x); if (p -> st == NULL || p -> dr == NULL){ Nod* aux = p -> st; if (p -> st == NULL) aux = p -> dr; delete p; p = aux; return; } Nod* &q = maxim(p -> st); p -> info = q -> info; delete q; void print(Nod* &p){ if (p == NULL) print(p -> st); cout << p -> info << " "; print(p -> dr);

IMPLEMENTARE C++ int main() { char c; int x; while (true) { cin >> c; if (c != 'm' && c != 'M' && c != 'P') cin >> x; if (c == 'I') insert(root, x); if (c == 'E') erase(root, x); if (c == 'F') cout << (find(root, x) != NULL) << "\n"; if (c == 'm') cout << minim(root) -> info << "\n"; if (c == 'M') cout << maxim(root) -> info << "\n"; if (c == 'P') print(root); } return 0;

EXERCIȚIU Se citește un cuvânt de la tastatură. Să se genereze un arbore de căutare cu literele cuvântului și să se răspundă la următoarele cerințe: a) să se parcurgă svd, vsd, sdv arborele b) să se afișeze care vocale se găsesc și care nu se găsesc în arbore c) să se determine suma codurilor ascii a caracterelor din arbore d) să se afișeze frunzele arborelui e) să se determine suma codurilor ascii a caracterelor de pe nivelul x și nivelul cu cea mai mare sumă f) să se determine dacă două caractere sunt „frați”

Vă mulțumesc pentru atenție! Proiect realizat de Micu Ana Clasa a XI-a C Colegiul Național de Informatică “Tudor Vianu”