1 / 27

CSCE350 Algorithms and Data Structure

CSCE350 Algorithms and Data Structure. Lecture 19 Jianjun Hu Department of Computer Science and Engineering University of South Carolina 2009.11. Hw5 summary . Average 39.97 Max:49 Common problems:. Pseudocode of Floyd’s Algorithm.

harmon
Download Presentation

CSCE350 Algorithms and Data Structure

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. CSCE350 Algorithms and Data Structure Lecture 19 Jianjun Hu Department of Computer Science and Engineering University of South Carolina 2009.11.

  2. Hw5 summary • Average 39.97 • Max:49 • Common problems:

  3. Pseudocode of Floyd’s Algorithm • The next matrix in sequence can be written over its predecessor

  4. Dijkstra’s Algorithm • Using greedy strategy to find the single-source shortest paths • In Floyd’s algorithm, we find the all-pair shortest paths, which may not be necessary in many applications • Single-source short path problem – find a family of shortest paths starting from a given vertex to any other vertex • Certainly, all-pair shortest paths contain the single-source shortest paths. But Floyd’s algorithm has O(|V|3) complexity! • There are many algorithms that can solve this problem, here we introduce the Dijkstra’s algorithm • Note: Dijkstra’s algorithm only works when all the edge-weight are nonnegative.

  5. Dijkstra’s Algorithm on Undirected Graph • Similar to Prim’s MST algorithm, with the following difference: • Start with tree consisting of one vertex • “grow” tree one vertex/edge at a time to produce spanning tree • Construct a series of expanding subtrees T1, T2, … • Keep track of shortest path from source to each of the vertices in Ti • at each stage construct Ti+1 from Ti: add minimum weight edge connecting a vertex in tree (Ti) to one not yet in tree • choose from “fringe” edges • (this is the “greedy” step!) • algorithm stops when all vertices are included edge (v,w) with lowest d(s,v) + d(v,w)

  6. 4 b c 5 6 2 3 7 4 a d e Example: Find the shortest paths starting from vertex a

  7. 4 b c 5 6 2 3 7 4 a d e Step 1: Tree vertices: a(-,0) Remaining vertices: b(a,3), c(-,∞), d(a,7), e (-,∞)

  8. 4 b c 5 6 2 3 7 4 a d e Step 2: Tree vertices: a(-,0), b(a,3), Remaining vertices: c(-,∞)c(b,3+4), d(a,7)d(b,3+2), e (-,∞)

  9. 4 b c 5 6 2 3 7 4 a d e Step 3: Tree vertices: a(-,0), b(a,3), d(b,5) Remaining vertices: c(b,3+4),e (-,∞)e(d,5+4)

  10. 4 b c 5 6 2 3 7 4 a d e Step 4: Tree vertices: a(-,0), b(a,3), d(b,5),c(b,7) Remaining vertices: e(d,9)

  11. 4 b c 5 6 2 3 7 4 a d e Step 5: Tree vertices: a(-,0), b(a,3), d(b,5),c(b,7),e(d,9) Remaining vertices: none  the algorithm is done!

  12. 4 b c 5 6 2 3 7 4 a d e Output the Single-Source Shortest Paths Tree vertices: a(-,0), b(a,3), d(b,5),c(b,7),e(d,9)

  13. Proof of the Correctness • Using the induction method • Assume the first i steps provide shortest path to first i vertices • Prove that the i+1 step generate the shortest path from the source this this i+1-th vertex

  14. Notes on Dijkstra’s algorithm • Doesn’t work with negative weights • Applicable to both undirected and directed graphs • Efficiency: • O(|E| log |V|) when the graph is represented by adjacency linked list and priority queue is implemented by a min-heap. • Reason: the whole process is almost the same as Prim’s algorithm. Following the same analysis in Prim’s algorithm, we can see that it has the same complexity as Prim’s algorithm. • The efficiency can be further improved if a more sophisticated data structure called Fibonacci heap is used.

  15. Huffman Trees – Coding Problem • Text consists of characters from some n-character alphabet • In communication, we need to code each character by a sequence of bits – codeword • Fixed-length encoding: code for each character has m bits and we know that m≥log2n (why?) • Standard seven-bit ASCII code does this • Using shorter bit string to code a text  variable-length encoding: using shorter codeword for more frequent characters and longer codeword for less frequent ones • For example, in Morse telegraph code, e(.), a(.-), q(--.-), z(--..) • How many bits represent the first character? – we want no confusion here.

  16. Huffman Tree – From coding to a binary tree • To avoid confusion, here we consider prefix codes, where no codeword is a prefix of a codeword of another character • This way, we can scan the bit string constructed from a text from the beginning until get the first group of bits that is a valid codeword (for some character) • It is natural to associate the alphabet’s characters with leaves of a binary tree in which all the left edges are labeled by 0 and all the right edges are labeled by 1 (or vice versa) • The codeword of a character (leaf) is the list of labels along the path from the root of the binary to the this leaf • Huffman tree can reduce the total bit string by assigning shorter codeword to frequent character and longer codeword to less frequent ones.

  17. Huffman Coding Algorithm • Step 1: Initialize n one node trees and label them with the characters of the alphabet. Record the frequency of each character in its tree’s root to indicate the tree’s weight • Step 2: Repeat the following operation until a single tree is obtained. Find two trees with the smallest weights. Make them the left and right subtrees of a new tree and record the sum of their weights in the root of the new tree as its weight • Example: alphabet {A, B, C, D, _} with frequency

  18. The Huffman Code is • Therefore, • ‘DAD’ is encoded as 011101 and • 100110110111010 is decoded as BAD_AD

  19. Notes on Huffman Tree (Coding) • The expected number of bits per character is then • 2x0.35 + 3x0.1+2x0.2+2x0.2+3x0.15 = 2.25 • Fixed-length encoding needs at 3 bits for each character • This is an important technique for file (data) compression • Huffman tree/coding has more general applications: • Assign n positive numbers w1, w2, …, wn to the n leaves of a binary tree • We want to minimize weighted path length with li be the depth of the leaf I • This has particular applications in making decisions – decision trees

  20. Examples of the Decision Tree

  21. Chapter 10: Limitations of Algorithm Power • Basic Asymptotic Efficiency Classes

  22. Polynomial-Time Complexity • Polynomial-time complexity: the complexity of an algorithm is • with a fixed degree b>0. • If a problem can be solved in polynomial time, it is usually considered to be theoretically computable in current computers. • When an algorithm’s complexity is larger than polynomial, i.e., exponential, theoretically it is considered to be too expensive to be useful. • This may not exactly reflect it’s usability in practice!

  23. List of Problems • Sorting • Searching • Shortest paths in a graph • Minimum spanning tree • Primality testing • Traveling salesman problem • Knapsack problem • Chess • Towers of Hanoi …

  24. Lower Bound • Problem A can be solved by algorithms a1, a2,…, ap • Problem B can be solved by algorithms b1, b2,…, bq • We may ask • Which algorithm is more efficient? This makes more sense when the compared algorithms solve the same problem • Which problem is more complex? We may compare the complexity of the best algorithm for A and the best algorithm for B • For each problem, we want to know the lower bound: the best possible algorithm’s efficiency for a problem  Ω(.) • Tight lower bound: we have found an algorithm of the this lower-bound complexity

More Related