Download Algorithm - 天府学院数据结构精品课程

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
Data Structures(数据结构)
Course 5:Queue
Vocabulary
queue
队列
enqueue 进队
dequeue 出队
queue front 队头
queue rear 队尾
Queuing theory排队论
西南财经大学天府学院
2
5.1 Queue Operations
A queue is a linear list in which data can be inserted at
one end, called the rear, and deleted from the other
end, called the front. It is a first in-first out (FIFO) data
structure.
Remove
(dequeue)
(Enqueue)
front
rear
A computer queue
西南财经大学天府学院
3
Enqueue: Enqueue inserts an element at the rear
of the queue.
data
plum
kiwi
front
rear
Enqueue
kiwi
grape
front
rear
Operation
Dequeue: Dequeue deletes an element at
the front of the queue.
plum
plum
Queue
Queue

grape
kiwi
front
Queue
grape
rear
Dequeue
Operation
西南财经大学天府学院
plum
data
kiwi
grape
front
rear
Queue
4
Queue Front: Queue front examines the element
at the front of the queue.
plum
kiwi
front
grape
rear
data
plum
kiwi
grape
front
Operation
Queue

Queue
front
plum
rear
Queue
Queue Rear: Queue rear examines the
element at the rear of the queue.
grape
data
plum
kiwi
front
Queue
grape
rear
Queue
rear
Operation
西南财经大学天府学院
plum
kiwi
front
grape
rear
Queue
5
5.2 Queue Linked List Design
Data structure: For the linked list implementation of a
queue, we use tow types of structures: a head and a
node.
Queue head: The queue head contains the two pointers and a
count of the queue.
Queue data node: The queue data node contains the user data
and a link field pointing to the next node .
西南财经大学天府学院
6
plum
front
kiwi
grape
fig
rear
Conceptual queue
rear
front
4
plum
kiwi
front
front
grape
rear
Physical queue
count
Head structure
rear
fig
data
next
Node structure
西南财经大学天府学院
7
Queue Algorithms
Create queue: set the metadata pointers to null and the count to
0.
No queue
front
count
rear
?
?
?
front
count
rear
0
Before
After
Algorithm createQueue (ref
1
queue.fornt = null
2
Queue.rear = null
3
Queue.count = 0
End createQueue
queue <metadata>
西南财经大学天府学院
8
Enqueue: Three conditions need to be
considered:
1.insert into an empty queue.
2. Insert into a queue with data.
3. Insertinto a queue when there is no memory
left in the heap.
front
count
rear
front
0
newPtr
data
plum
count
rear
1
next
newPtr
Before
Insert into empty queue
西南财经大学天府学院
data
plum
next
After
9
front
count
rear
newPtr
1
data
next
plum
data
next
kiwi
Before
front
count
rear
newPtr
2
data
plum
next
data
kiwi
Algorithm enqueue (ref queue<metadata>
dataIn <dataType>
1
If (queue full)
1 return false
There are four
2
End if
ways to test if
3
Allocate (newPtr)
the queue is
4
newPtr->data = dataIn null 1.Front
5
newPtr->next = null pointer
null
6
If (queue.count zero) 2.Rear null
// inserting into 3.Count
null queue
0
1 queue.front = newPtr4.Emptyqueue
7
Else // insert data
1 queue.rear->next = newPtr
8
End if
9
Queue.rear = newPtr
10 Queue.count = queue.count + 1
11 Return true
End enqueue
next
After
Insert into queue with data
西南财经大学天府学院
10
Dequeue:
1. Ensure that the queue contains data.
2. Pass the data back through the parameter list and then
set the front pointer to the next item in the queue.
3. If the queue is now empty, set the rear pointer to null.
front
count
rear
front
count
1
data
plum
rear
0
next
(recycled)
deleteLoc
Before
After
Delete only item in queue
西南财经大学天府学院
11
front
count
rear
2
data
plum
data
kiwi
next
next
count
1 queue.rear = null pointer
6
End if
7
Queue.front = queue.front->next
8
Queue.count = queue.count – 1
9
Recycle (deleteLoc)
10 Return true
End dequeue
rear
1
data
plum
data
kiwi
next
<metadata>
<dataType>)
// Delete only item in queue
Before
front
Algorithm dequeue (ref queue
ref item
1
If (queue.count is 0)
1 return false
2
End if
3
Item = queue.front->data
4
deleteLoc = queue.front
5
If (queue.count 1)
next
(recycled)
deleteLoc
After
西南财经大学天府学院
12
Retrieving Queue Data: the logic of retrieving
data is the same to that of dequeue except that
the data are not deleted from the queue.
Algorithm queueFront ( val queue
ref dataOut
1
If (queue.count is 0)
1 return false
2
End if
3
dataOut = queue.front->data
4
Return true
End queueFront
<metadata>,
<dataType>)
西南财经大学天府学院
13
Empty Queue: it returns true if the queue is empty and
Algorithm emptyQueue ( val queue
<metadata>)
false1 if the
queue
contains
data.
Return (queue.count equal 0)
End emptyQueue
Full Queue: By allocating a node and then releasing the memory we can
determine whether there is room for at least one more node.
Algorithm fullQueue ( val queue
1
Allocate (tempPtr)
2
If (allocate successful)
1 recycle (tempPtr)
2 return false
3
Else
1 return true
4
End if
End fullQueue
<metadata>)
西南财经大学天府学院
14
Queue Count: it returns the number of elements
Algorithm Queuecount
( val queue
<metadata>)the count found
currently
in the queue
by returning
Return (queue.count)
in1End
the
queue head node.
queueCount
Destroy Queue: it deletes all data in the queue and recycles their memory.
Algorithm destroyQueue ( ref queue <metadata>)
1
pWalker = queue.front
2
Loop (pWalker not null)
1 deletePtr = pWalker
2 pWalker = pWalker.next
3 recycle (deletePtr)
3
End loop
4
Queue.front = null
5
Queue.rear = null
6
Queue.count = 0
7
return
End destroyQueue
西南财经大学天府学院
15
5.3 Queuing Theory
Queuing theory is a field of applied
mathematics that is used to predict the
performance of queues.
A Single-server queue can provide service to only one
customer at a time.
Example: the hot-food vendor.
A Multi-server queue can provide service to many customers at
a time.
Example: a bank in which there is one line with
many bank tellers providing service.
西南财经大学天府学院
16
Two elements to all queues
A customer is any person or thing needing service. Such as
jobs in computer, packages being sent…
The service is any activity needed to accomplish the required
result.
Two factors affect the queue
The arriving rate(比率) is the rate at which customers arrive in
the queue for service. Depending on the service being
provided, the arrival rate may be random or regular.
Service time is the average time required to complete the
processing of a customer request.
The arriving rate and service time are the factors that most
affect the performance of queues.
西南财经大学天府学院
17
The faster customers arrive and the higher the service time, the
longer the queue will be.
The ideal is arrival rate matches service time
The importance of queuing theory: it can predict the queue
patterns including queue time(that is, the average length of
time customers wait in the queue), the average size of the
queue, and the maximum queue size. So, we can build a model
of queue and used the model to study proposed changes to the
system.
For example, In the banking queue, if we were able to add
automation improvements that would reduce the average
service by 15%,how many fewer tellers would we need?
西南财经大学天府学院
18
Queue
Queue
time
Server
Service
time
Response
time
A queuing theory model
西南财经大学天府学院
19
5.4 Queue Applications
Two queue implementations: Queue simulation
and categorizing data
Queue simulation: a modeling activity used to
generate statistics about the performance of
queues.
An example: a saltwater taffy store on a beach
boardwalk. The store has one window and a
clerk can service only one customer at a time.
The store also ships boxes of taffy anywhere in
the country.The time to serve customers varies
between 1 and 10 minutes.(8hs per day, 7 days
a week)
西南财经大学天府学院
20
Events:
completed process new customer module: determine the
arrival of a new customer. The owner found that, on average , a
customer arrives every 4 minutes. An arrival rate is simulated
by using a random number generator that returns a values
between 1 and 4.
If = 4, customer arrived; 1,2,3 customer not arrived.
server free module: determine whether the clerk is busy or
idle. If the clerk is idle, then the next waiting customer in line
can be served. If the clerk is busy, then the waiting customers
remain in the queue.
Completed processing: determine whether it has completed
processing for the current customer. Then processing time for
the current customer is determined by a random number
generator when the processing is started. When customers has
been completely served, we gather statistics about sale and set
server to an idle state
西南财经大学天府学院
21
Data structures:
Four data structure are required for the queue simulation
Queue head: It contains two node pointers – front and rear –
and a count of the number of elements currently in the queue.
Queue node: It contains the customer data and a next node
pointer. The customer data consist of a sequential customer
number and the arrival time.
Current Customer status: We use customer’s number, arrival
time, the start time and the processing time to describe
customer status.(random generator to calculate)
Simulation statistics: It stores the total number of customers
processed in the simulation, the total and average service time,
the total and average wait time, and the maximum number of
customers in the queue at one time.
西南财经大学天府学院
22
front
count
rear
2
head
arriveTime
custNum
next
node
custNum
arriveTime
startTime
svcTime
custStatus
numCust
totSvcTime
totWaitTime
maxQueueSize
simStats
Figure 5-13 queue data structures
西南财经大学天府学院
23
Output: the statistics gathered during the simulation
and the average queue wait time and average queue
service time, the basic statistics for each customer:
arrival time, start time, wait time, service time etc.
Simulator
Create
queue
New
customer
Server
free
Service
complete
Print
stats
Figure 5-14 design for queue simulation
西南财经大学天府学院
24
Simulation Algorithm
Algorithm taffySimulation
Simulator Data Structures
data
number
<integer>
arrivalTime <integer>
end data
head
front <node pointer>
count <integer>
rear <node pointer>
end head
node
custData <data>
next
<node pointer>
end node
西南财经大学天府学院
custStatus
custNum <integer>
arriveTime <integer>
startTime <integer>
svcTime
<integer>
end custstatus
simStats
numCust <integer>
totSvcTime <integer>
totWaitTime <integer>
maxQueueSize <integer>
end simstats
25
Statements
1
CreateQueue (queue)
2
Clock = 1
3
endTime = 8*60
4
custNum = 0
5
Loop (clock <=endTime or moreCusts)
1 newCustomer (queue, clock, custNum)
2 serverFree (queue, clock, custStatus, moreCusts)
3 svcComplete (queue, clock, custStatus, runStats, moreCusts)
4 if ( not emptyQueue (queue))
1 moreCusts = true
5 end if
6 clock = clock + 1
6
End loop
7
printStats (runStats)
8
return
end taffySimulation
Algorithm 5-9 queue simulation: driver
西南财经大学天府学院
26
New customer
Algorithm newCustomer (ref queue
< metadata >,
val clock
<integer>,
ref custNum <integer>)
1
Arrival = (random number modulo 4) + 1
2
If (arrival equal 4)
// new customer has arrived
1 custNum = custNum + 1
2 custData.number = custNum
3 custData.arriveTime = clock
4 enqueue (queue, custData)
3
End if
4
Return
End newCustomer
西南财经大学天府学院
27
Server free
Algorithm serverFree ( ref queue
<metadata>,
val clock
<integer> ,
ref status
<custStastus>,
ref moreCusts <Boolean> )
1
If (clock > status.startTime + status.svcTime – 1) // server is idle
1 if (not emptyQueue (queue))
1 dequeue (queue,custData)
2 status.custNum = custData.number
3 status.arriveTime = custData.arriverTime
4 status.startTime = clock
5 status.svcTime = random service time
6 moreCusts = true
2 end if
2
End if
3
Return
End serverFreestatus
西南财经大学天府学院
28
Service complete
Algorithm svcComplete (ref queue
<metadata>,
val clock
<integer>,
ref status
<custStatus>,
ref stats
<simStats>,
ref moreCusts <Boolean>)
1
If (clock equal status.startTime + status.svcTime – 1) //current call complete
1 waitTime = status.startTime – status.arriveTime
2 stats.numCust = stats.numCust + 1
3 stats.totSvcTime = stats.totSvcTime + status.svcTime
4 stas.totWaitTime = stats.totWaitTime + waitTime
5 queueSize = queueCount (queue)
6 if (stas.maxQueueSize < queueSize)
1 stats.maxQueueSize = queueSize
7 end if
8 print ( status.custNum status.arriveTime
status.startTime status.svcTime
waitTime
queueCount(queue))
9 moreCusts = false
2
Return
End svcComplete
西南财经大学天府学院
29
Print stats
Algorithm printStats ( stats <simStats> )
1
Print (Simulation Statistics: )
2
Print (Total customers: stats.numCust)
3
Print (Total service time: stats.totSvcTime)
4
avrgSvcTime = stats.totSvcTime / stats.numCust
5
Print (Average service time: arvgSvcTime)
6
avrgWaitTime = stats.totWaitTime / stats.numCust
7
Print (Average wait time: avrgWaitTime)
8
Print (,Maximum queue size: stats.maxQueueSize)
9
return
End printstats
西南财经大学天府学院
30
Categorizing Data: It is often necessary to
rearrange data without destroying their basic
sequence.
For example, given the following list of
numbers
then categorize them into four different groups:
Group1: less than 10
Group2: between 10 and 19
Group3: between 20 and 29
Group4: 30 and greater
3 22 12 6 10 34 65 29 9 30 81 4 5 19 20 57 44 99
3 6 9 4 5 12 10 19 22 29 20 34 65 30 81 57 44 99
西南财经大学天府学院
31
Algorithm categorize
1
CreateQueue (q0to9)
2
createQueue (q10to19)
3
createQueue (q20to29)
4
createQueue (qOver29)
5
fillQueues (q0t09, q10to19,q20to29, qOver29)
6
printQueues (q0to9, q10to19, q20to29,qOver29)
7
Return
End categorize
西南财经大学天府学院
32
Algorithm fillQueues (ref q0to9
<metadata>,
ref q10to19 <metadata>,
ref q20to29 <metadata>,
ref qOver29 <metadata>)
1
Loop (not EOF)
1 read (number)
2 if (number < 10)
1 enqueue (q0to9, number)
3 elseif (number<20)
1 enqueue (q10to19, number)
4 elseif (number<30)
1 enqueue (q20to29, number)
5 else
1 enqueue (qOver29, number)
6 end if
2
End loop
3
Return
End fillQueue
西南财经大学天府学院
33
5.8 Summary
A queue is a linear list in which data can only be
inserted at one end, called the rear, and deleted from
the other end, called the front.
A queue is a first in-first out (FIFO) structure.
There are four basic queue operations: enqueue,
dequeue, queue front, and queue rear.
The enqueue operation inserts an element at the rear
of the queue.
The dequeue operation deletes the element at the
front of the queue.
The queue front operation examines the element at
the front of the queue without deleting it.
The queue rear operation examines the element at
the rear of the queue without deleting it.
西南财经大学天府学院
34
To implement the queue using a linked list, we use two types of
structures: a head and a node.
Queuing theory is a field of applied mathematics that is used to
predict the performance of queues.
Queue applications can be divided into single servers and multiservers.
A single-server queue application provides service to only one
customer at a time.
A multi-server queue application provides service to only
several customers at a time.
The two features that most affect the performance of queues are
the arrival rate and the service time.
The rate at which the customers arrive in the queue for service
is known as the arrival rate.
Service time is the average time required to complete the
processing of a customer request.
西南财经大学天府学院
35
The queue time is the average length of time customers
wait in the queue.
The response time is a measure of average time from
the point at which customers enter the queue until the
moment they leave the server. It is queue time plus
service time.
One application of queues is queue simulation, which is
a modeling activity used to generate statistics about the
performance of a queue.
Another application of queues is categorization.
Queues are used to categorize data into different
groups without losing the original ordering of the data.
Queues can be implemented suing linked lists or
arrays.
西南财经大学天府学院
36
Exercise
Imagine you have a stack of integers,S ,and a queue of
integers,Q. Draw a picture of S and Q after the
following operation:
PushStack(S,3)
PushStack(S,12)
Enqueue(Q,5)
Enqueue(Q,8)
PopStack(S,x)
pushStack(S,2)
Enqueue(Q,x)
Dequeue(Q,y)
PushStack(S,x)
PushStack(S,y)
西南财经大学天府学院
37
Exercise
What would be the contents of queue Q1 and Q2 after
the following code is executed and the following data
are entered?
Q1=createQueue
Q2=createQueue
Loop (not end of file)
read number
enqueue(Q1,number)
enqueue(Q2,number)
loop (Not empty Q1)
dequeue(Q1,x)
enqueue(Q2,x)
End loop
End loop
The data are 5,7,12,4,0,4,6
西南财经大学天府学院
38