Top Banner
CS 310 - Advanced Data Structures and Algorithms Basic Data Structures June 5, 2017 Tong Wang UMass Boston CS 310 June 5, 2017 1 / 22
22

CS 310 - Advanced Data Structures and Algorithmstwang/cs310/slides/basicdata...Basic Data Structures Array Dynamic Array (amortized analysis) LinkedList Stack Queue Set Map Tong Wang

Jul 04, 2020

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: CS 310 - Advanced Data Structures and Algorithmstwang/cs310/slides/basicdata...Basic Data Structures Array Dynamic Array (amortized analysis) LinkedList Stack Queue Set Map Tong Wang

CS 310 - Advanced Data Structures and Algorithms

Basic Data Structures

June 5, 2017

Tong Wang UMass Boston CS 310 June 5, 2017 1 / 22

Page 2: CS 310 - Advanced Data Structures and Algorithmstwang/cs310/slides/basicdata...Basic Data Structures Array Dynamic Array (amortized analysis) LinkedList Stack Queue Set Map Tong Wang

Basic Data Structures

Array

Dynamic Array (amortized analysis)

LinkedList

Stack

Queue

Set

Map

Tong Wang UMass Boston CS 310 June 5, 2017 2 / 22

Page 3: CS 310 - Advanced Data Structures and Algorithmstwang/cs310/slides/basicdata...Basic Data Structures Array Dynamic Array (amortized analysis) LinkedList Stack Queue Set Map Tong Wang

Array

Many advantages over linked list

Constant-time access for any indexSpace efficiency: all space is used for data

Restriction:

Inserting a new element in an array of elements is expensiveOnce allocated, an array has a fixed length

Solution: dynamic array

Tong Wang UMass Boston CS 310 June 5, 2017 3 / 22

Page 4: CS 310 - Advanced Data Structures and Algorithmstwang/cs310/slides/basicdata...Basic Data Structures Array Dynamic Array (amortized analysis) LinkedList Stack Queue Set Map Tong Wang

Dynamic Array

Initialize an array with one element

Before inserting a new element (at the end), if the array is full

Allocate a new array of twice the lengthCopy the existing elements to the new array

Then proceed with insertion

Tong Wang UMass Boston CS 310 June 5, 2017 4 / 22

Page 5: CS 310 - Advanced Data Structures and Algorithmstwang/cs310/slides/basicdata...Basic Data Structures Array Dynamic Array (amortized analysis) LinkedList Stack Queue Set Map Tong Wang

Amortized analysis

What is the time complexity of insertion for a dynamic array?

Amortized analysis is a strategy for analyzing a sequence ofoperations to show that the average cost per operation is small,even though a single operation within the sequence might beexpensive.

It gives us a worst-case bound on the cost of an algorithm.

Aggregate method

Accounting method

Tong Wang UMass Boston CS 310 June 5, 2017 5 / 22

Page 6: CS 310 - Advanced Data Structures and Algorithmstwang/cs310/slides/basicdata...Basic Data Structures Array Dynamic Array (amortized analysis) LinkedList Stack Queue Set Map Tong Wang

Aggregate method

The cost of the i-th insertion is

ci =

{i if i − 1 is a power of 21 otherwise

i 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17ci 1 2 3 1 5 1 1 1 9 1 1 1 1 1 1 1 17

The total cost of n insertions is

n∑i=1

ci ≤ n +

blog nc∑j=0

2j

< n + 2n

= 3n

The average cost of one insertion is 3

Tong Wang UMass Boston CS 310 June 5, 2017 6 / 22

Page 7: CS 310 - Advanced Data Structures and Algorithmstwang/cs310/slides/basicdata...Basic Data Structures Array Dynamic Array (amortized analysis) LinkedList Stack Queue Set Map Tong Wang

Accounting Method

We will say that the amortized cost for the ith insertion is 3 dollars,and this works as follows:

One dollar pays for inserting the element itself.One dollar is stored to move the element later when the array is doubledOne dollar is stored to move an element in the array that was alreadymoved from previous array

For instance, the size of the array is m immediately after expansion.So the number of elements in the array is m/2. If we charge 3 dollarsfor each insertion, then by the time the array is filled up again, we willhave 2(m/2) extra dollars, which pays for moving all the elements tothe new array.

Tong Wang UMass Boston CS 310 June 5, 2017 7 / 22

Page 8: CS 310 - Advanced Data Structures and Algorithmstwang/cs310/slides/basicdata...Basic Data Structures Array Dynamic Array (amortized analysis) LinkedList Stack Queue Set Map Tong Wang

Time Complexities of Array Operations

Let n be the length of the array

Access element of index i , O(1)

Insert at the end

Amortized O(1) by using dynamic array

Insert anywhere (to maintain the array as sorted)

Best case O(1)Worst case O(n)Average case O(n)

Delete at the end

O(1)

Delete anywhere

Best case O(1)Worst case O(n)Average case O(n)

Tong Wang UMass Boston CS 310 June 5, 2017 8 / 22

Page 9: CS 310 - Advanced Data Structures and Algorithmstwang/cs310/slides/basicdata...Basic Data Structures Array Dynamic Array (amortized analysis) LinkedList Stack Queue Set Map Tong Wang

Linked List

A linked list is an ordered sequence of elements: A0,A1,A2, . . . ,An−1Simplest form: singly linked, with a pointer to the head of the list,not sorted

Rarely maintained as sorted

Variations: doubly linked, two pointers (head and tail), circular

If the size of an element is large, a linked list may be a better choicethan an array

Tong Wang UMass Boston CS 310 June 5, 2017 9 / 22

Page 10: CS 310 - Advanced Data Structures and Algorithmstwang/cs310/slides/basicdata...Basic Data Structures Array Dynamic Array (amortized analysis) LinkedList Stack Queue Set Map Tong Wang

Definition for singly-linked list

/* Java version */

public class ListNode {int val;

ListNode next;

ListNode(int x) val = x;

}/* Python version */

class ListNode(object): {def init (self, x):

self.val = x

self.next = None

}

Tong Wang UMass Boston CS 310 June 5, 2017 10 / 22

Page 11: CS 310 - Advanced Data Structures and Algorithmstwang/cs310/slides/basicdata...Basic Data Structures Array Dynamic Array (amortized analysis) LinkedList Stack Queue Set Map Tong Wang

Basic Operations

Insertion

Inserting B between A and C: B.next = C A.next = B

Deletion

Deleting B: A.next = B.next

Find

while(head != null){if(head.val == val) return head;

head = head.next; }Reverse

while(currNode != null) {nextNode = curNode.next

curNode.next = prevNode

prevNode = curNode

curNode = nextNode }

Tong Wang UMass Boston CS 310 June 5, 2017 11 / 22

Page 12: CS 310 - Advanced Data Structures and Algorithmstwang/cs310/slides/basicdata...Basic Data Structures Array Dynamic Array (amortized analysis) LinkedList Stack Queue Set Map Tong Wang

Time Complexities of Linked List Operations

Insert (at the front): O(1)

Find

Best case O(1)Worst case O(n)Average case O(n)

Delete

Best case O(1)Worst case O(n)Average case O(n)

Tong Wang UMass Boston CS 310 June 5, 2017 12 / 22

Page 13: CS 310 - Advanced Data Structures and Algorithmstwang/cs310/slides/basicdata...Basic Data Structures Array Dynamic Array (amortized analysis) LinkedList Stack Queue Set Map Tong Wang

Remove the Nth node from end of list

//two pointers

def removeNthFromEnd(head, n):

fast = slow = head

for in range(n):

fast = fast.next

if not fast: return head.next

while fast.next:

fast = fast.next

slow = slow.next

slow.next = slow.next.next

return head

Tong Wang UMass Boston CS 310 June 5, 2017 13 / 22

Page 14: CS 310 - Advanced Data Structures and Algorithmstwang/cs310/slides/basicdata...Basic Data Structures Array Dynamic Array (amortized analysis) LinkedList Stack Queue Set Map Tong Wang

Stacks

Stacks support two operations

PushPopRetrieval from stacks is last-in, first-out (LIFO)

Stacks can be easily implemented by either arrays or linked lists

Applications: reversing a word, ”undo” mechanism in text editors,matching braces, etc.

Tong Wang UMass Boston CS 310 June 5, 2017 14 / 22

Page 15: CS 310 - Advanced Data Structures and Algorithmstwang/cs310/slides/basicdata...Basic Data Structures Array Dynamic Array (amortized analysis) LinkedList Stack Queue Set Map Tong Wang

Example: Valid Parentheses

Given a string containing just the characters ’(’, ’)’, ’{’, ’}’, ’[’ and ’]’,determine if the input string is valid.

Valid: ’{[()]}()’

Invalid: ’[(])’

Tong Wang UMass Boston CS 310 June 5, 2017 15 / 22

Page 16: CS 310 - Advanced Data Structures and Algorithmstwang/cs310/slides/basicdata...Basic Data Structures Array Dynamic Array (amortized analysis) LinkedList Stack Queue Set Map Tong Wang

Valid Parentheses

def isValid(s):

stack = []

for x in s:

if x == ’(’ or x == ’{’ or x == ’[’:

stack.append(x)

else: # )]}if not stack: return False

else:

top = stack.pop()

if not (top == ’(’ and x == ’)’

or top == ’[’ and x == ’]’

or top == ’{’ and x == ’}’):return False

return stack = []

Tong Wang UMass Boston CS 310 June 5, 2017 16 / 22

Page 17: CS 310 - Advanced Data Structures and Algorithmstwang/cs310/slides/basicdata...Basic Data Structures Array Dynamic Array (amortized analysis) LinkedList Stack Queue Set Map Tong Wang

Queues

Queues support two operations

EnqueueDequeueRetrieval from queues is first-in, first-out (FIFO)

Queues can be easily implemented by either arrays or linked lists

Applications: Breadth first search, CPU scheduling, resource is sharedamong multiple consumers

Tong Wang UMass Boston CS 310 June 5, 2017 17 / 22

Page 18: CS 310 - Advanced Data Structures and Algorithmstwang/cs310/slides/basicdata...Basic Data Structures Array Dynamic Array (amortized analysis) LinkedList Stack Queue Set Map Tong Wang

Sets

A set contains a number of elements, with no duplicates and no order

Examples

A = { 1, 5, 3, 96 }B = { 17, 5, 1, 96 }C= { “Mary”, “contrary”, “quite” }Incorrect: {“Mary”, “contrary”, “quite”, “Mary” }

Tong Wang UMass Boston CS 310 June 5, 2017 18 / 22

Page 19: CS 310 - Advanced Data Structures and Algorithmstwang/cs310/slides/basicdata...Basic Data Structures Array Dynamic Array (amortized analysis) LinkedList Stack Queue Set Map Tong Wang

Map

Also known as dictionary,associative array

Given two sets, Domain andRange, like a math function,each domain element hasexactly one range elementassociated with it

Two arrows can land on thesame range element, but onedomain element cannot havetwo arrows out of it

Domain Range

Tong Wang UMass Boston CS 310 June 5, 2017 19 / 22

Page 20: CS 310 - Advanced Data Structures and Algorithmstwang/cs310/slides/basicdata...Basic Data Structures Array Dynamic Array (amortized analysis) LinkedList Stack Queue Set Map Tong Wang

Basic operations

Mapping creates pairs of <DomainType, RangeType>

<key, value> pairs

Basic operations

put: add a key-value pair to a Mapget: look up the value of a key

Tong Wang UMass Boston CS 310 June 5, 2017 20 / 22

Page 21: CS 310 - Advanced Data Structures and Algorithmstwang/cs310/slides/basicdata...Basic Data Structures Array Dynamic Array (amortized analysis) LinkedList Stack Queue Set Map Tong Wang

Map Example

Descriptions of grades:’A’ → “excellent”’B’ → “good”’C’ → “ok”

DomainType is char, and RangeType is string

Each of these is a key-value pair, or just pair

(’A’, “excellent”) is a pair of the grade ’A’ (key) and the phrase“excellent” (value)

The whole mapping is the set of these 3 pairs

M = { (’A’, “excellent”), (’B’, “good”), (’C’, “ok”) } – a map is aset of pairs, or “associations”

Note that not every collection of pairs makes a proper map: Mqualifies as a map only if the collection of keys has no duplicates

Tong Wang UMass Boston CS 310 June 5, 2017 21 / 22

Page 22: CS 310 - Advanced Data Structures and Algorithmstwang/cs310/slides/basicdata...Basic Data Structures Array Dynamic Array (amortized analysis) LinkedList Stack Queue Set Map Tong Wang

Map Example

In almost all natural langue processing (NLP) tasks, it is common tohave these maps:

id2word: map id to a wordword2id: map a word to its idword2count: map a word to its count in the corpus

Example:

Words: “NLP is a field of CS ”Ids: [1098, 17, 1, 922, 390, 2001]Words: “NLP is also a field of AI”Ids: [1098, 17, 9, 1, 922, 390, 1922]

Tong Wang UMass Boston CS 310 June 5, 2017 22 / 22