450 likes | 635 Vues
CSC 202 Analysis and Design of Algorithms Lecture 06: Analysis of Algorithm using List, Stack and Queues. Asst.Prof.Dr.Surasak Mungsing E-mail: surasak.mu@spu.ac.th. Stacks. Stack Operation: Push. Stack Operation: Pop. Stack Operation: Top. Stacks.
E N D
CSC 202Analysis and Design of AlgorithmsLecture 06:Analysis of Algorithm using List,StackandQueues Asst.Prof.Dr.SurasakMungsing E-mail: surasak.mu@spu.ac.th
Stacks • Stack operation isLIFO (Last-In, First-Out) • Basic operations of Stack - Adding an element to Stack (Push) - Removing an element from Stack (Pop) - Using an element of Stack (Top) • CreatingaStack - using an array to represent a stack - using a Linked list to represent a Stack
Operationsพื้นฐานของStackที่สร้างด้วยLinked list 1.Create stack: allocate memory for stack head node 2.Push stack: add an element to a stack 3.Pop stack: remove an element from a stack 4.Stack top: using the value on the top of stack 5.Empty stack: check whether the stack is empty 6.Full stack:check whether the stack is full 7.Stack count:return number of elements in stack 8.Destroy stack:return all nodes of stack to system
Stack Applications: Infix to Postfix conversion The conversion time is O(n)
Postfix expression evaluation The evaluation time is O(n)
Backtracking backtracking is a general algorithm for finding all (or some) solutions to some computational problem, that incrementally builds candidates to the solutions, and abandons each partial candidate c ("backtracks") as soon as it determines that c cannot possibly be completed to a valid solution. classic example of the use of backtracking is the eight queens puzzle, that asks for all arrangements of eight queens on a standard chessboard so that no queen attacks any other. an important tool for solving constraint satisfaction problems, such as crosswords, verbal arithmetic, Sudoku, and many other puzzles.
Print path to goal Algorithm seekGoal (val map <linked list>) This algorithm determines the path to a desired goal. Pre a graph containing the path Post path printed 1 Stack=createStack 2 pMap= pMap 3 loop (pMap not null AND goalNotFound) 1 if (pMap is goal) 1 set goalNoFound to false 2 else 1 pushStack (stack,pMap) 2 if (pMapis a branch point) 1 loop (more branch point) 1 create branchPoint node 2 pushStack (stack, branchPoint) 3 advance to next node 4 if (emptyStack (stack)) 1 print (There is no path to your goal) 5 else 1 print (The path to your goal is: ) 2 loop (not emptyStack (stack)) 1 popStack (stack, pMap) 2 if (pMap notbranchPoint) 1 print (pMAp->nodeName) 3 print (End of File) 6 destroyStack (stack) end seekGoal Running time is O(|E|+|V|)
Eight queens problem Algorithm queen8 (boardSize <integer>) Position chess queens on a game board so that no queen can capture any other queen. Pre boardSize is number of rows & collumns on board Post Queen’ position pointed createStack (stack) Set row to 1 Set col to 0 loop (row <= boardSize) loop(col <= boardSize AND row <= boardSize) add 1 to col if (not garded (row, col)) place queen at board [row] [col] pushStack(stack, [row, col]) add 1 to row set col to 0 loop (col >= boardSize) popStack(stack, [row, col]) remove queen at board[row] [col] printBoard (stack)
Tail Recursion: bad use of recursion /** * Print List from ListNode p onwards. */ Public static void printlist (ListNode p) { /* 1*/ if (p== nul) /* 2*/ return; /* 3*/ system.out.println(p.element); /* 4*/ printList(p.next); } If the list contains 20,000 elements to print, there will be a stack of 20,000 activation records representing the nested calls of line 4. Activation records are typically large, so the program is likely to run out of stack space.
Printing a list without recursion /** * Print List from ListNode p onward */ Public static void printList (ListNode p) { while (true) { if (p== null) return; system.out.println (p.element); p = p.next; { } Removal of tal recursion is so simple that some compilers do it automatically.
Queue • QueueusesFIFO (First-In, First-Out) • Basic operationsofQueue -Enqueue :adding an element to Queue() - Dequeue:removing an element fromQueue() - QueueFront: Returns a reference to the value at the front of a non-empty queue - QueueRear: Returns a reference to the value at the rear of a non-empty queue Implementing a Queue - by an Array - by Linked list
Operation algorithmson Queue 1.Create queue:create queue head based on dynamic memory 2.Enqueue:add an element on queue 3.Dequeue: remove an element from queue 4.Queue front:return an element at the front of queue 5.Queue rear: return an element at the rear of queue 6.Empty queue:returns true if queue is empty, else returns false 7.Full queue:returns true if queue is full, else returns false8.Queue count:returns number of elements in queue 9.Destroy queue:returns memory allocated to queue to system
Applications of Queue • Queue simulation • Categorizing Data