abstract data types adts
play

Abstract Data Types (ADTs) The Specification Language" for Data - PowerPoint PPT Presentation

Abstract Data Types (ADTs) The Specification Language" for Data Structures. An ADT Inf 2B: Sequential Data Structures consists of: I a mathematical model of the data; Lecture 3 of ADS thread I methods for accessing and modifying the


  1. Abstract Data Types (ADTs) The “Specification Language" for Data Structures. An ADT Inf 2B: Sequential Data Structures consists of: I a mathematical model of the data; Lecture 3 of ADS thread I methods for accessing and modifying the data. An ADT does not specify: Kyriakos Kalorkoti I How the data should be organised in memory (though the School of Informatics ADT may suggest to us a particular structure). University of Edinburgh I Which algorithms should be used to implement the methods. An ADT is what, not how. 1 / 22 2 / 22 Data Structures Stacks how . . . A Stack is an ADT with the following methods: A data structure realising an ADT consists of: I push ( e ) : Insert element e . I collections of variables for storing the data; I pop () : Remove the most recently inserted element and I algorithms for the methods of the ADT. return it; I an error occurs if the stack is empty. In terms of JAVA: I isEmpty () : Returns TRUE if the stack is empty, FALSE ADT JAVA interface ↔ otherwise. data structure JAVA class ↔ I Last-In First-Out ( LIFO ). Can implement Stack with worst-case time O ( 1 ) for all The data structure (with algorithms) has a large influence on methods, with either an array or a linked list. the algorithmic efficiency of the implementation. The reason we do so well? . . . Very simple operations. 3 / 22 4 / 22

  2. Applications of Stack s Queues I Executing Recursive programs. I Depth-First Search on a graph (coming later). A Queue is an ADT with the following methods: I Evaluating (postfix) Arithmetic expressions. I enqueue ( e ) : Insert element e . I dequeue () : Remove the element inserted the longest time ago and return it; Algorithm postfixEval ( s 1 . . . s k ) I an error occurs if the queue is empty. 1. for i ← 1 to k do I isEmpty () : Return TRUE if the queue is empty and FALSE 2. if ( s i is a number) then push ( s i ) otherwise. 3. else (s i must be a (binary) operator) I First-In First-Out ( FIFO ). 4. e 2 ← pop () ; e 1 ← pop () ; 5. Queue can easily be realised by a data structures based either 6. a ← e 1 s i e 2; on arrays or on linked lists. 7. push ( a ) Again, all methods run in O ( 1 ) time (simplicity). 8. return pop () I Example: 6 4 - 3 * 10 + 11 13 - * 5 / 22 6 / 22 Sequential Data Arrays and Linked Lists abstractly Mathematical model of the data: a linear sequence of An array, a singly linked list, and a doubly linked list storing elements. objects o 1 , o 2 , o 3 , o 4 , o 5: I A sequence has well-defined first and last elements. I Every element of a sequence except the last has a unique o1 o3 o2 o4 o5 successor . I Every element of a sequence except the first has a unique o1 o2 o3 o4 o5 predecessor . I The rank of an element e in a sequence S is the number of elements before e in S . o1 o2 o3 o4 o5 Stacks and Queues are sequential. 7 / 22 8 / 22

  3. Arrays and Linked Lists in Memory Vectors An array, a singly linked list, and a doubly linked list storing A Vector is an ADT for storing a sequence S of n elements that objects o 1 , o 2 , o 3 , o 4 , o 5: supports the following methods: I elemAtRank ( r ) : Return the element of rank r ; an error o1 o3 o2 o4 o5 occurs if r < 0 or r > n − 1. I replaceAtRank ( r , e ) : Replace the element of rank r with e ; an error occurs if r < 0 or r > n − 1. I insertAtRank ( r , e ) : Insert a new element e at rank r (this o2 o1 o5 o3 o4 increases the rank of all following elements by 1); an error occurs if r < 0 or r > n . I removeAtRank ( r ) : Remove the element of rank r (this reduces the rank of all following elements by 1); an error o3 o1 o2 o4 o5 occurs if r < 0 or r > n − 1. I size () : Return n , the number of elements in the sequence. 9 / 22 10 / 22 Array Based Data Structure for Vector Array Based Data Structure for Vector Methods Algorithm elemAtRank ( r ) 1. return A [ r ] Variables I Array A (storing the elements) Algorithm replaceAtRank ( r , e ) I Integer n = number of elements in the sequence 1. A [ r ] ← e Algorithm insertAtRank ( r , e ) 1. for i ← n downto r + 1 do 2. A [ i ] ← A [ i − 1 ] 3. A [ r ] ← e 4. n ← n + 1 insertAtRank assumes the array is big enough! See later . . . 11 / 22 12 / 22

  4. Array Based Data Structure for Vector Abstract Lists List is a sequential ADT with the following methods: I element ( p ) : Return the element at position p . Algorithm removeAtRank ( r ) I first () : Return position of the first element; error if empty. 1. for i ← r to n − 2 do I isEmpty () : Return TRUE if the list is empty, FALSE 2. A [ i ] ← A [ i + 1 ] otherwise. 3. n ← n − 1 I next ( p ) : Return the position of the element following the one at position p ; an error occurs if p is the last position. Algorithm size () I isLast ( p ) : Return TRUE if p is last in list, FALSE otherwise. 1. return n I replace ( p , e ) : Replace the element at position p with e . Running times (for Array based implementation) I insertFirst ( e ) : Insert e as the first element of the list. Θ ( 1 ) for elemAtRank , replaceAtRank , size I insertAfter ( p , e ) : Insert element e after position p . Θ ( n ) for insertAtRank , removeAtRank (worst-case) I remove ( p ) : Remove the element at position p . Plus: last () , previous ( p ) , isFirst ( p ) , insertLast ( e ) , and insertBefore ( p , e ) 13 / 22 14 / 22 Realising List with Doubly Linked Lists Realising List using Doubly Linked Lists Method (example) Variables I Positions of a List are realised by nodes having fields Algorithm remove ( p ) element , previous , next . 1. p . previous . next ← p . next I List is accessed through node-variables first and last . 2. p . next . previous ← p . previous Method (example) 3. delete p Algorithm insertAfter ( p , e ) Running Times (for Doubly Linked implementation). 1. create a new node q All operations take Θ ( 1 ) time ... 2. q . element ← e 3. q . next ← p . next ONLY BECAUSE of pointer representation ( p is a direct link) 4. q . previous ← p 5. p . next ← q O ( 1 ) bounds partly because we have simple methods. 6. q . next . previous ← q search would be inefficient in this implementation of List . 15 / 22 16 / 22

  5. Dynamic Arrays VeryBasicSequence VeryBasicSequence is an ADT for sequences with the following methods: What if we try to insert too many elements into a fixed-size array? I elemAtRank ( r ) : Return the element of S with rank r ; an error occurs if r < 0 or r > n − 1. The solution is a Dynamic Array. I replaceAtRank ( r , e ) : Replace the element of rank r with e ; Here we implement a dynamic VeryBasicSequence an error occurs if r < 0 or r > n − 1. (essentially a queue with no dequeue ()) . I insertLast ( e ) : Append element e to the sequence. I size () : Return n , the number of elements in the sequence. 17 / 22 18 / 22 Dynamic Insertion Analysis of running-time Worst-case analysis Algorithm insertLast ( e ) elemAtRank, replaceAtRank, and size have Θ ( 1 ) running-time. 1. if n < A . length then insertLast has Θ ( n ) worst-case running time for an array of 2. A [ n ] ← e length n (instead of Θ ( 1 ) ) ⇤ n = A . length , i.e., the array is full 3. else 4. N ← 2 ( A . length + 1 ) In Amortised analysis we consider the total running time of a Create new array A 0 of length N 5. sequence of operations. 6. for i = 0 to n − 1 do Theorem A 0 [ i ] ← A [ i ] 7. Inserting m elements into an initially empty VeryBasicSequence A 0 [ n ] ← e 8. using the method insertLast takes Θ ( m ) time. A ← A 0 9. 10. n ← n + 1 19 / 22 20 / 22

  6. Amortised Analysis Reading I m insertions I ( 1 ) , . . . , I ( m ) . Most are cheap (cost: Θ ( 1 ) ), some are expensive (cost: Θ ( j ) ). I Expensive insertions: I ( i 1 ) , . . . , I ( i ` ) , 1 ≤ i 1 < . . . < i ` ≤ m . I Java Collections Framework: Stack , Queue , i 1 = 1, i 2 = 3 , i 3 = 7 , . . . , i j + 1 = 2 i j + 1 , . . . Vector . (Also, Java ’s ArrayList behaves like a dynamic ⇒ 2 r � 1 ≤ i r < 2 r array). ⇒ ` ≤ lg ( m ) + 1. I Lecture notes 3 (handed out). ` ` I If you have [GT]: ⇣ ⌘ X X X O ( i j ) + O ( 1 ) O i j + O ( m ) ≤ Chapters on “Stacks, Queues and Recursion” and j = 1 1  i  m j = 1 “Vectors, Lists and Sequences”. i 6 = i 1 ,..., i ` ` I If you have [CLRS]: ⇣ 2 j ⌘ X O + O ( m ) ≤ “Elementary data Structures” chapter (except trees). j = 1 ⇣ ⌘ 2 lg ( m )+ 2 − 2 = O + O ( m ) = O ( 4 m − 2 ) + O ( m ) = O ( m ) . 21 / 22 22 / 22

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend