1 Lucrarea nr. 8 - Structuri de date de tip liste sortate O listă sortată reprezintă un aranjament al înregistrărilor din cadrul listei în funcţie de

Documente similare
Lucrarea nr. 9 - Liste dublu înlănţuite Breviar teoretic În cadrul elementelor studiate anterior s-a putut observa utilitatea listelor simplu înlănuit

Lucrarea nr. 4 - Algoritmi de sortare şi ordonare Breviar teoretic Un algoritm de sortare este o metoda prin care se aranjează elementele unui tablou

Poo Laboratoare 1 Contents Laborator7 2 1 Colecţii de obiecte în Java Interfaţa Iterator Interfaţa C

Laborator 2: Instrucţiuni Java şi lucru cu şiruri de caractere Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 18 octombrie 2011

PHP (II)

Metode de sortare - pregătire admitere - Conf.dr. Alexandru Popa Lect. dr. Andrei Pătraşcu Universitatea din Bucureşti 1

proiectarea bazelor de date

Diapositive 1

Laborator 4: Continuare Programare Orientată pe Obiecte Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 29 octombrie 2011

Microsoft Word _POO_Lab_1_Modificari_v01.htm

Laborator 3

Slide 1

Top

1. Operatii cu matrici 1 Cerinte: Sa se realizeze functii pentru operatii cu matrici patratice (de dimensiune maxima 10x10). Operatiile cerute sunt: A

Ingineria Sistemelor de Programare

Programarea şi utilizarea calculatoarelor

Microsoft PowerPoint - Curs_TPI_22_v01.ppt

1

-

Laborator 2 Incompatibilităţi/Diferenţe între C şi C++ Completări C++ Supraîncărcarea (redefinirea) numelui de funcţii În C nu este permisă existenţa

Algoritmi genetici paraleli. Implementari Java. Continut laborator: 1. Obiectivul lucrarii. 2. Notiuni teoretice: 3. Cerinte laborator. 4. Tema. 1. Ob

Microsoft PowerPoint - ImplementareLimbaj [Read-Only] [Compatibility Mode]

Microsoft PowerPoint - Curs_SDA_9_RO_2019_v2.pptx

Addendum Syllabus 6 Microsoft Access 2016 REF Syllabus 6.0 Cunoașterea domeniilor în care se utilizează bazele de date Datorită potenţialului ma

Tablouri (continuare)

Laborator 9: Fire de execuţie Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 20 noiembrie 2011

Manual de utilizare Room Booking System

Declararea variabilelor

Microsoft PowerPoint - Curs_SDA_10_RO_2019_v1.pptx

Microsoft Word - CarteC.doc

Paradigme de Programare

PROGRAMARE ORIENTATA PE OBIECTE

Object Oriented Programming

Procesarea Imaginilor - Laborator 1: Introducere în utilizarea bibliotecii OpenCV 1 1. Introducere în utilizarea bibliotecii OpenCV 1.1. Introducere S

1. Găsiți k numerele cele mai apropiate într-un şir nesortat Dându-se un şir nesortat și două numere x și k, găsiți k cele mai apropiate valori de x.

Slide 1

Slide 1

Procesarea de imagini folosind programarea paralela. Implementari Java. Continut laborator: 1. Obiectivul lucrarii. 2. Notiuni teoretice: 3. Cerinte l

Limbaje de programare. Laborator Clasa, obiect, abstractizare Clasa : descrie tipul obiectelor dintr-un program; poate fi asociată cu un şablon

Registrul Electronic National de Vaccinari (RENV) Descriere proiect: Proiectul urmareste crearea unui registru electronic de evidenta a vaccinarilor.

Algoritmi elementari Metode de căutare secvenţială binară Metode de ordonare metoda bulelor metoda inserţiei metoda selecţiei metoda numărării Intercl

INSTITUTUL DE DEZVOLTARE A SOCIETĂŢII INFORMAŢIONLE

Lecții de pregă,re la informa,că Admitere 2019 Tema: Discutarea problemelor date la ul,mele sesiuni de admitere Bogdan Alexe

Slide 1

Limbaje de Programare Curs 6 – Functii de intrare-iesire

Windows 7

EXCEL FĂRĂ SECRETE Grafice şi diagrame

SUBPROGRAME

Laborator Activities În sistemul Android activitățile reprezintă echivalentul ferestrelor din Windows, fiind clase care extind clasa Activity. Spre de

Limbaje de programare Pointeri. Alocare dinamică (continuare) 26 noiembrie 2012

Facultatea de Matematica si Informatica Universitatea din Bucuresti Structuri liniare Liste. Stive. Cozi - Inserare, cautare, stergere - Lectii de pre

Tablouri unidimensionale Problema 1 Să se determine mulţimea cifrelor unui număr natural n > 0, dat. Exemplu: n= Cifre = {1,2,3,7} Se cere să s

PCLPII-C16(9)

LABORATOR 1. Stocarea si partajarea fisierelor online cu ajutorul Dropbox, WeTransfer.com PREZENTAREA LUCRĂRII DE LABORATOR Lucrarea de laborator îşi

LUCRAREA NR

Ingineria Sistemelor de Programare

Laborator 2 - Încapsularea Programare Orientată pe Obiecte Tema 2.1 Să se analizeze programul EX2.C Indicatii 2.1 A nu se uita de fisierul EX2.H Tema

Microsoft Word - lab4.doc

Microsoft Word - Curs_07.doc

Microsoft PowerPoint - Curs_SDA_4_RO_2019_v2.pptx

Metode de programare Proiectarea algoritmilor

Resurse (Resources) Aspecte generale Utilizând unealta Resurse (Resources) puteți stoca pe serverul portalului Danubius Online diferite fișiere care c

L7

Limbaje de Programare Curs 5 – Siruri de caractere

Matrici și vectori în VBA În VBA, o matrice este un grup de variabile de același tip. De ce ar trebui să utilizați o matrice? Presupunem că ați vrut s

C++ Probleme

Limbaje de Programare Curs 8 – Fisiere

Curs 10

RZOLVARE EXERCITIU ZODII declare cursor distributie_zodie is select nume_zodie, count(*) distributie from zodiac z join utilizatori u on to_date(to_ch

Structuri de date pentru partiţii de mulţimi O partiţie finită a unei mulţimi nevide S este o mulţime finită de submulţimi ale lui S: {S 1, S 2,..., S

PROGRAMARE OBIECT-ORIENTATA LABORATOR 1 INTRODUCERE IN CLASE SI OBIECTE Introducere teoretica Prin intermediul unei Clase ne dorim sa construim tipuri

Microsoft Word - Curs 11 - PHP.doc

Laborator 7: PROIECTAREA BAZELOR DE DATE SUBPROGRAME in PL/SQL (partea I - proceduri) Un subprogram este un bloc PL/SQL cu nume (spre deosebire de blo

Microsoft Word - Istoric Modificari declaratii WM.doc

Microsoft Word - Algoritmi genetici.docx

Laborator 10 - Paradigme de Programare Corutine - suport nativ pentru paralelism în Kotlin Înainte de a trece la realizarea unei aplicații utilizând c

Proceduri stocate Syntax: CREATE PROCEDURE <Name> type1,...] AS -- secventa de comenzi SQL GO O procedura stocata se ruleaza cu EXEC: EXEC <N

Microsoft Word - lab_access.doc

Interfețe și Protocoale de Comunicații Arduino-Port Paralel Arduino. Laborator 1- Portul Paralel 1 Caracteristici generale Arduino UNO este o placă de

Metode avansate de gestiune a documentelor și a sistemelor de calcul - LABORATOR 1 -

Aggregating Data

Ingineria Sistemelor de Programare

MANUAL UTILIZARE ANGAJATORI PISA 2.0 Aplicatia este accesibila de pe siteurile: respectiv de la buto

ALGORITMICĂ. Seminar 3: Analiza eficienţei algoritmilor - estimarea timpului de execuţie şi notaţii asimptotice. Problema 1 (L) Să se determine număru

Slide 1

Procesarea Imaginilor Laborator 3: Histograma nivelurilor de intensitate 1 3. Histograma nivelurilor de intensitate 3.1. Introducere În această lucrar

Capitole Speciale de Informatică Curs 4: Calculul scorurilor în un sistem complet de extragere a informaţiilor 18 octombrie 2018 Reamintim că în cursu

Proiectarea Sistemelor Software Complexe

Microsoft Word - Curs 7 - JavaScript.doc

Programarea şi utilizarea calculatoarelor

Ghid utilizare aplicație PARKING BUCUREȘTI Aplicație PARKING BUCUREȘTI 1

Sistemul de Gestiune a Bazelor de Date Access

Capitole Speciale de Informatică Curs 1: Extragerea informaţiilor. Modelul boolean şi modelul boolean extins 27 septembrie 2018 Extragerea informaţiil

Baze de date-Anul 2 (semestrul 2)

Curs 6 Fragments Un fragment reprezintă o porțiune dintr-un Activity. Într-un activity se pot combina mai multe fragmente ți un fragment se poate reut

Baze de date - Anul 2 Laborator 8 Limbajul de definire a datelor (LDD) (partea I) În general, instrucţiunile LDD sunt utilizate pentru definirea struc

Testare manuala: situatia in care o persoana initiaza fiecare test, interactioneaza cu el si interpreteaza, analizeaza si raporteaza rezultatele. Test

Gestiunea serviciilor de recuperare a sănătăţii în sanatorii şi preventorii

Transcriere:

1 Lucrarea nr. 8 - Structuri de date de tip liste sortate O listă sortată reprezintă un aranjament al înregistrărilor din cadrul listei în funcţie de o anumită valoare a unei chei. Pentru operaţiile asupra unei astfel de liste se folosesc două metode: find() şi delete(). Avantajul unei liste sortate, în cazul ştergerii sau inserării unui element, constă în faptul că nu mai este nevoie să se intervină asupra celorlalte elemente ale listei. Găsirea locaţiei unde noul element trebuie introdus, sau extras, este suficientă, alături de refacerea câmpurilor next. Spre exemplu metoda de inserţie a unei înregistrări va avea următorul cod: public void insert(double key) Link newlink = new Link(key); Link previous = null; while(current!= null && key > current.ddata) previous = current; if(previous==null) first = newlink; else previous.next = newlink; newlink.next = current; După cum se vede în analiza acestei metode sunt 3 zone destinate celor 3 situaţii particulare: Inserţia elementului la începutul listei: caz în care previous ar fi fost null, First va fi iniţializat cu înregistrarea inserată newlink Inserţia elementului în corpul listei: înregistrarea curentă (newlink) este legată de înregistrarea anterioară (previous.next), iar câmpul next al înregistrării inserate este conectat cu înregistrarea existentă (current) Eficienţa listelor înlănţuite sortate Inserarea sau ştergerea unor itemi arbitrari în lista sortată necesită O(N) comparări (N/2 la majoritatea), deoarece locaţia potrivită trebuie găsită parcurgand lista pas cu pas. Totuşi, valoarea minimă poate fi găsită sau ştearsă, în O(1) timpi deoarece este la începutul listei. Dacă o aplicaţie accesează frecvent itemul minim şi inserarea rapidă nu este imperativă, atunci o listă sortată este o alegere eficientă. Sortarea prin inserarea în listă O listă sortată poate fi folosită ca un mecanism eficient de sortare. Să presupunem că aveţi un vector de date nesortate. Dacă luaţi itemii din vector şi îi inseraţi unul câte unul în lista sortată, ei vor fi plasaţi automat în ordine. Dacă îi scoateţi din listă şi îi puneţi înapoi în vector, vectorul va fi sortat. Programul

2 urmator realizeaza acest lucru, începepand prin a insera dintr-un vector itemii nesortaţi (folosind un constructor) şi apoi îi aşează iar în vector. Acest lucru se dovedeşte a fi mult mai eficient decât inserarea obişnuită într-un vector. Asta deoarece sunt necesare mai puţine copii. Este tot un proces de tip O(n 2 ) deoarece inserarea fiecarui item presupune compararea unui nou item cu jumătate din itemii care sunt deja în listă şi sunt n itemi de inserat, rezultând în n 2 /4 comparări. Totuşi, fiecare item este copiat decât de doua ori: o dată din vector în listă şi încă o dată din listă în vector. n*2 copii sunt un avantaj faţă de inserarea sortată într-un vector, unde sunt necesare n 2 copii. Aplicatie: Proiectul SortedListApp implementează o listă înlănţuită sortată: import java.io.*; class Link public double ddata; public Link next; public Link(double dd) ddata = dd; public void displaylink() System.out.print(dData + " "); class SortedList private Link first; public SortedList() first = null; public boolean isempty() return (first==null); public void insert(double key) Link newlink = new Link(key); Link previous = null; while(current!= null && key > current.ddata) previous = current; if(previous==null) first = newlink; else previous.next = newlink; newlink.next = current; public Link remove()

3 Link temp = first; first = first.next; return temp; public void displaylist() System.out.print("List (first-->last): "); while(current!= null) current.displaylink(); class SortedListApp public static void main(string[] args) SortedList thesortedlist = new SortedList(); thesortedlist.insert(20); thesortedlist.insert(40); thesortedlist.insert(10); thesortedlist.insert(30); thesortedlist.insert(50); thesortedlist.remove(); Aplicatie: Sortarea prin inserarea în listă import java.io.*; class Link public double ddata; // elementul data public Link next; // urmatorul element in lista public Link(double dd) // constructor ddata = dd; // sfârşit class Link class SortedList private Link first; // face referinţă la primul element din listă public SortedList() // constructor (fara args) first = null;

4 public SortedList(Link[] linkarr) //constructor (array ca argument) first = null;; // iniţializează lista for(int j=0; j<linkarr.length; j++) // copiază vectorul insert( linkarr[j] ); // în listă public void insert(link k) // inserează, în ordine Link previous = null; // începe cu primul item // si parcurge toata lista while(current!= null && k.ddata > current.ddata) // or key > current, previous = current; // trece la următorul item if(previous==null) // începutul listei first = k; // first --> k else // nu la început previous.next = k; // vechiul prev --> k k.next = current; // k --> vechiul current // sfârşit insert() public Link remove() // returnează şi şterge primul element Link temp = first; // salvează primul element first = first.next; // şterge primul element return temp; // returnează valoare // sfârşit SortedList class ListInsertionSortApp public static void main(string[] args) int size = 10; // crează vector de linkuri Link[] linkarray = new Link[size]; // ocupă vectorul cu elemente // numar aleator int n = (int)(java.lang.math.random()*99); Link newlink = new Link(n); linkarray[j] = newlink; //

5 // afişează vectorul System.out.print("Unsorted array: "); System.out.print( linkarray[j].ddata + " " ); // crează listă nouă, // iniţializată cu vectorul SortedList thesortedlist=new SortedList(linkArray); linkarray[j] = thesortedlist.remove(); // afişează vectorul System.out.print("Sorted Array: "); System.out.print(linkArray[j].dData + " "); // sfârşit main() // sfârşit ListInsertionSortApp Acest program afişează valorile vectorului înainte de sortare şi apoi după sortare. Vector nesortat: 59 69 41 56 84 15 86 81 37 35 Vector sortat: 15 35 37 41 56 59 69 81 84 86 Ieşirea va fi diferită de fiecare dată din cauza valorilor iniţiale care sunt generate la întamplare. Un nou constructor pentru SortedList ia un vector de obiecte tip Link ca argument şi inserează întregul conţinut al acestui vector într-o listă nou creată. Se face de asemenea o modificare în metoda insert()a acestui program. Acum acceptă obiecte Link ca argument, spre deosebire de double. Facem acest lucru pentru a stoca obiectele Link în vector şi a le insera direct în listă. În programul sortedlist.java,este mai convenabil să avem metoda insert()pentru a crea fiecare obiect Link, folosind valoarea double ca argument. Dezavantajul este că ocupă de două ori mai multă memorie: vectorul şi lista trebuie să fie în memorie în acelaşi timp. Totuşi, această metodă este convenablă atunci când vrem să sortăm vectori care nu sunt prea mari. Probleme propuse 1. Modificaţi programul ListInsertionSortApp astfel încât să realizaţi o metodă sortare() care să aranjeze lista în ordine crescătoare (puteţi folosi orice metodă de ordonare). 2. Modificaţi programul SortedListApp astfel încât să pentru lucrul cu caractere de tip litere. 3. Realizati un program in care itemii din lista sa fie studentii dintr-o grupa, iar poinetrii utilizati sa fie notele de la disciplina Java. Realizati ordonarea acestora de la nota cea mai mica la nota cea mai mare