1. Trang chủ
  2. » Công Nghệ Thông Tin

Lecture Java methods: Object-oriented programming and data structures (2nd AP edition): Chapter 26 - Maria Litvin, Gary Litvin

16 23 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 16
Dung lượng 337,14 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Chapter 26 - Heaps and priority queues. This chapter completes our tour of data structures. After you have mastered the material in this chapter, you will be able to: Learn about heaps, review the java.util.PriorityQueue class, learn about heapsort.

Trang 1

Heaps and Priority Queues

2

H C

R E

T P

Copyright © 2011 by Maria Litvin, Gary Litvin, and Skylight Publishing All

rights reserved.

Java Methods

Object-Oriented Programming

and Data Structures

Maria Litvin ● Gary Litvin

2nd AP edition with GridWorld

Trang 2

Objectives:

• Learn about heaps

• Review the java.util.PriorityQueue class

• Learn about Heapsort

Trang 3

Priority Queues

• A priority queue is a data structure for

temporary storage that delivers the stored items in order of their priority: an item with higher priority is delivered first

• The objects in a priority queue are

Comparable (or a comparator is provided)

• According to a convention, the smaller item has higher priority

Trang 4

Possible Implementations

• A sorted list: items are

stored in order of

priority

O(1), but add is O(n).

• An unsorted list: items are stored in order of their arrival

add is O(1) but remove

and peek are O(n).

Either way, one of the methods creates a bottleneck.

Trang 5

Heaps

A heap is a particular kind of a binary tree.

• Heaps provide a way to implement priority queues in such a way that both add and

remove take O(log n) time.

• A heap can be stored in an array (or in an

ArrayList)

Trang 6

Full and Complete Binary Trees

Full tree:

all levels are filled; a

full tree with h levels

Complete tree:

all levels are filled, except perhaps the bottom one

Trang 7

1

     8        9    10      11    12

Complete Trees

• Nodes can be numbered in

level-by-level order:

The parent of the i-th node is the node i / 2

The left child of the i-th node is the node 2*i

and the right child is

the node 2*i + 1

Trang 8

Complete Trees (cont’d)

• It is convenient to store a complete

binary tree in an array in the order of

nodes, starting at index 1:

 

Argentina 

items[0]: <null> items[1]: Argentina

items[4]: Egypt items[5]: Dominica

items[8]: Haiti items[9]: France 

1  

Trang 9

Heaps (cont’d)

A (min) heap is a complete binary tree

• The value in each node does not exceed any

of the values in that node’s left and right

subtrees

• In a heap, the root holds the smallest value

3 / \

12 8 / \

12 20

3 / \

/ \

Trang 10

Heaps (cont’d)

• The algorithm for add

uses the reheap-up

procedure

• The algorithm for remove

uses the reheap-down

procedure

• Either adding or removing an item takes

O(log n) time.

Remove the root and place the last leaf at the root

Starting at the root, swap the node with its smaller child, as many times as needed to repair the heap.

Add a leaf Starting at the last leaf, swap the node with its parent as many times as needed to repair the heap.

Trang 11

Step 1: the new value is added as the rightmost leaf

at the bottom level, keeping the tree complete

Step 2: “reheap up”: the new value keeps swapping

places with its parent until it falls into place

 

Brazil 

Haiti 

China 

 

Brazil 

Haiti 

Egypt 

 

Brazil 

Haiti 

8  Egypt 

Trang 12

 

France 

Haiti 

 

 

    Egypt 

 

Argentina 

 

Brazil 

Haiti 

 

Brazil 

Haiti 

Step 1: the root

is removed

Step 2: the rightmost leaf from the bottom level replaces the root

Step 3: “reheap down”: the new root value keeps swapping

places with its smaller child until it falls into place

Trang 13

java.util.PriorityQueue<E>

• Implements java.util.Queue<E> with

methods:

The implementation is a heap.

• add and remove are O(log n); peek is O(1).

Trang 14

Heapsort

• A relatively fast algorithm for sorting

 Place all values into a heap

 Remove values one by one (they come out in ascending order) and add them to the output list

• Heapsort can be implemented in the same array, without a temporary heap:

1 Rearrange the values to make a max-heap

2 Rearrange the values again to get a sorted array

The running time is O(n log n).

Trang 15

Review:

• What is a priority queue?

• What is wrong with implementing a priority queue as a sorted list?

• What is a complete binary tree?

• If a complete tree is stored in an array with the first node in items [1], where can we find the parent of the 5-th node? Its left and right children?

Trang 16

Review (cont’d):

• What is a heap?

• Describe the main steps in the algorithm for removing the smallest value from a heap

• Describe the main steps in the algorithm for adding a value to a heap

• What is the main idea of Heapsort?

Ngày đăng: 04/11/2020, 23:20

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN