Differences
This shows you the differences between two versions of the page.
| Next revision | Previous revision | ||
| courses:cs211:winter2018:journals:donohuem:chapter4 [2018/02/26 22:39] – created donohuem | courses:cs211:winter2018:journals:donohuem:chapter4 [2018/03/11 21:59] (current) – [4.8 Huffman Codes] donohuem | ||
|---|---|---|---|
| Line 2: | Line 2: | ||
| - | ===== Section | + | ===== 4.1 Interval Scheduling ===== |
| The motivation for interval scheduling is to schedule as many jobs as possible with no overlap between the intervals of time for each job. When designing a greedy algorithm for this problem, we base the algorithm on one simple rule; e.g. selecting jobs that start the earliest, or jobs with smallest interval times. In this problem, the simple rule that produces an optimal solution is selecting jobs that finish the earliest. The greedy algorithm looks like such: | The motivation for interval scheduling is to schedule as many jobs as possible with no overlap between the intervals of time for each job. When designing a greedy algorithm for this problem, we base the algorithm on one simple rule; e.g. selecting jobs that start the earliest, or jobs with smallest interval times. In this problem, the simple rule that produces an optimal solution is selecting jobs that finish the earliest. The greedy algorithm looks like such: | ||
| - | | + | R = set of all jobs, A is an empty set |
| + | while R != empty | ||
| + | choose a job R(i) that has smallest finishing time | ||
| + | add i to A | ||
| + | delete all jobs from R that are not compatible with i | ||
| + | | ||
| + | |||
| + | In this algorithm, we simply add the job i that ends as soon as possible, then remove all jobs that conflict with i. We then repeat this until there are no more jobs, resulting in a run time of O(n). We prove this algorithm returns a globally optimal solution using a Greedy Stays Ahead proof. Essentially, | ||
| + | |||
| + | A similar problem is the Interval Partitioning Problem, where we want to schedule all lectures in as few classrooms as possible. An important note about this problem is that the number of classrooms needed is at least the depth of the set of lecture intervals. Overall, the readability of this section was 7/10. | ||
| + | |||
| + | |||
| + | |||
| + | ===== 4.2 Scheduling to Minimize Lateness ===== | ||
| + | The motivation for this problem is to schedule jobs with corresponding deadlines in a way such that there is minimal lateness. Jobs are allowed to be late (scheduled so that they will end past their deadline), but this must happen as little as possible. Again, we must design a greedy algorithm based on a simple rule; e.g. schedule longest jobs first. The best rule in this problem is earliest job first. Algorithm: | ||
| + | |||
| + | order jobs in order of their deadline | ||
| + | f = s | ||
| + | | ||
| + | assign job i to the time interval from s(i) = f to f(i) = f + ti | ||
| + | let f = f + ti | ||
| + | | ||
| + | |||
| + | The schedule produced has no gaps in between jobs. On a different note, an inversion can occur in a schedule if there is a job i with deadline di that is scheduled before job j where dj < di. To prove that this greedy algorithm does not produce any inversions, we do an exchange proof, swapping inversions in an optimal schedule O until eventually we have a schedule that is identical to the one our greedy algorithm would have produced. Overall, the readability of this section is 6/10. | ||
| + | |||
| + | |||
| + | |||
| + | ===== 4.4 Shortest Paths in Graphs ===== | ||
| + | The motivation is simple, to find the shortest path between two points s and t. The greedy algorithm for this solution is Dijkstra' | ||
| + | |||
| + | |||
| + | |||
| + | ===== 4.5 The Minimum Spanning Tree Problem ===== | ||
| + | Motivation: We have a set of nodes and we want to build a connected graph with these nodes as cheaply as possible. The edges of this graph will have non-negative weights. There are three optimal algorithms that can solve this problem: Prim's Algorithm, Reverse-Delete Algorithm, and Kruskal' | ||
| + | |||
| + | |||
| + | |||
| + | ===== 4.6 Implementing Kruskal' | ||
| + | In order to implement Kruskal' | ||
| + | |||
| + | |||
| + | |||
| + | ===== 4.7 Clustering ===== | ||
| + | Motivation: We wish to organize groups of data into coherent groups. One such way to categorize data, in the context of geographical points, is differentiating clusters by distance. This gives way to the Clusterings of Maximum Spacing problem. Given a set of U objects, we divide U into k groups. The spacing of a k-clustering is defined as the minimum distance between any pair of points lying in different clusters (this makes absolutely no sense to me). The algorithm is similar to the Minimum Spanning Tree algorithms, specifically Kruskal' | ||
| + | |||
| + | |||
| + | |||
| + | ===== 4.8 Huffman Codes ===== | ||
| + | Our problem is to encode symbols (letters of the alphabet) into bits. However, there are two important stipulations we must meet. First, we want our encoding to be as concise as possible (minimize ABL). This means that frequently used letters like e, t, a, o, and i should be smaller in size than less frequently used letters. Second, there should be no ambiguity in our encoding. Encoded symbols should be unique and not confusable with other symbols. To meet these two requirements, | ||
| + | |||
| + | |||
| + | if S has two letters: | ||
| + | Encode one letter as 0 and the other letter as 1 | ||
| + | | ||
| + | Let y* and z* be the two lowest-frequency letters | ||
| + | Form a new alphabet S’ by deleted y* and z* and replacing | ||
| + | them with a new letter w of freq fy* + fz* | ||
| + | Recursively construct a prefix code y’ for S’ with tree T’ | ||
| + | Define a prefix code for S as follows: | ||
| + | Start with T’ | ||
| + | Take the leaf labeled w and add two children below it | ||
| + | | ||
| + | |||
| + | The run time of this algorithm can be O(klogk) when it uses a priority queue, where k is the number of letters in the alphabet. The readability of this section is 6/10. | ||
| + | |||
| + | |||
