Searching

17
1 Searching Searching in a sorted linked list takes linear time in the worst and average case. Searching in a sorted array takes logarithmic time in the worst and average case. Can we get logarithmic search time in a linked memory structure? – Idea #1 : Skip List – Idea #2 : Binary Search Tree

description

Searching. Searching in a sorted linked list takes linear time in the worst and average case. Searching in a sorted array takes logarithmic time in the worst and average case. Can we get logarithmic search time in a linked memory structure? Idea #1 : Skip List - PowerPoint PPT Presentation

Transcript of Searching

Page 1: Searching

1

Searching

Searching in a sorted linked list takes linear time in the worst and average case.

Searching in a sorted array takes logarithmic time in the worst and average case.

Can we get logarithmic search time in a linked memory structure?– Idea #1 : Skip List– Idea #2 : Binary Search Tree

Page 2: Searching

2

Skip Lists

Linked lists have linear search time. Goal: improve the search time Idea: Modify the list structure in a way that

will allow the application of binary search.– Add a pointer to the middle element

• Add a pointer to the middle of each half• Add a pointer to the middle of each

quarter• etc.

– The result is a skip list

Page 3: Searching

3

NULL

NULL

NULL

NULL

2

2

2

2

3

3

3

3

5

5

5

5

7

7

7

7

8

8

8

8

119

9

9

9

11

11

11

17

17

17

17

21

21

21

21

Page 4: Searching

4

Skip Lists

The list is kept in sorted order Every 2ith node has a pointer 2i nodes ahead. This list is called a perfect skip list. A node with k pointers is called a level k node Level of list = maximum node level.

NULL

23

57

89

11

17

21

Page 5: Searching

5

Skip Lists

Every 2ith node has a pointer 2i nodes ahead – levels of nodes are distributed as follows:

• 50% nodes of level 1• 25% nodes of level 2• 12.5% nodes of level 3 • etc.

NULL

23

57

89

11

17

21

Page 6: Searching

6

Skip Lists

Extra pointers : O(n) Search time : O(lgn) Insert/Delete

– Problem : • The list will need extensive restructuring after a

delete or insert operation

– Solution?• Keep some advantages of skip list• Avoid restructuring

Page 7: Searching

7

Skip Lists

Idea :– Drop requirement about the position of the

nodes at each level– Instead, make sure we have the same number

of nodes at each level, regardless of how they are arranged

• In other words:– Choose node level randomly but in the same proportions:

50% level 1, 25% level 2, etc.

Page 8: Searching

8

Skip Lists

NULL

23

57

89

11

17

21

27

53

1711

9

8

21

instead of :

we may get :

NULL

Page 9: Searching

9

Skip Lists

Example:

if maxLevel == 4, then the list has at most 24-1 = 15 elementsOf these,

8 are level 14 are level 22 are level 31 is level 4

Come up with a function that generates1 with probability 1/22 with probability 1/43 with probability 1/84 with probability 1/16

Page 10: Searching

10

Skip Lists

SEARCH(target)– Start at the highest chain– As long as the target is greater than the next key,

• move forward along the chain.– When the target is less than the next key,

• move down one level.– Repeat this process until the target is found, or it is

determined (at level 1) that it is not in the list.

Time– best/average case : logarithmic– worst case : linear (the skip list has become a regular

list)

Page 11: Searching

11

Skip Lists

INSERT (key)– Do a search to find the insert location

• keep track of potential predecessor

– Select level of new node– Insert new node and, if necessary, increase maxLevel.

27

53

1711

9

8

21

NULL

Page 12: Searching

12

Skip Lists

DELETE (key)– Do a search to find the node to be deleted

• keep track of predecessor

– Delete node and, if necessary, decrease maxLevel.

27

53

1711

9

8

21

NULL

Page 13: Searching

13

ComparisonSorted Linked List

– Very easy to implement, but linear search/insert/delete

Skip list– More space but insert/delete are much simpler

to implement. Worst-case search/insert/delete is linear but in practice it is almost always logarithmic.

Page 14: Searching

14

Binary Search Trees

A binary search tree – Is a recursively defined structure:

• It contains no nodes, or • it is comprised of three disjoint sets of nodes:

– a root– a binary search tree called the left subtree of the root– a binary search tree called the right subtree of the root

– Satisfies the binary search property:• The key stored in the root is larger than any key in

the left subtree and smaller than any key in the right subtree.

Page 15: Searching

15

Binary Search TreesRoot

: leaves : internal nodes

branches

H

B I

A F

D

C

G

E

subtree rooted

at D

B is the parent of F

A, F are children of B

D is a descendant of B

B is an ancestor of G

Page 16: Searching

16

Binary Search TreesRootH

B I

A F

D

C

G

E

-- 0 --

-- 1 --

-- 2 --

-- 3 --

-- 4 --

height : 4

a path from the

root to a leaf

height = length of longest path from the root to a leaf

Page 17: Searching

17

Binary Search Trees

Used for storing and retrieving information Typical operations:

– insert– delete – search

Data structures that support these three operations are called dictionaries.