!!!Chapter 10 Algorithm Design Techniques

10.1 Greedy Algorithms

There are three greedy algorithms in chapter 9: Dijkstra's, Prim's, and Kruskal's algorithms.

In greedy algorithms, in each phase, a decision is made that appears to be good, without regard for future consequences.

When the algorithm terminates, we hope the local optimum is equal to the global optimum. If this is the case, then the algorithm is correct; otherwise, the algorithm has produced a suboptimal solution.

If the absolute best answer is not required, then simple greedy algorithm are sometimes used to generate approximate answers, rather than using the more complicated algorithms generally required to generate an exact answer.

Examples:

1. coin-changing problem: works for American monetary system

2. traffic problems: does not always work

10.1.1 A Simple Scheduling Problem

We are given jobs j1, j2, ..., jN, all with the known running times t1, t2, tN, respectively. What is the best way to schedule these jobs in order to minimize the average completion time? (we assume nonpreemptive scheduling: once a job start, it must run to completion) P349

Answer: We always process the shortest job first.

This result indicates the reason the operating system scheduler generally gives precedence to shorter jobs.

The Multiprocess Case

We are given jobs j1, j2, ..., jN, all with the known running times t1, t2, tN, respectively. And we have a number P of processors. What is the best way to schedule these jobs in order to minimize the average completion time?

Answer: A simple, often-used algorithm is the LPT algorithm (Longest Processing Time) which sorts the jobs by its processing time and then assigns them to the machine with the earliest end time so far. This algorithm achieves an upper bound of 4/3 - 1/(3m) OPT.

Wiki: http://en.wikipedia.org/wiki/Multiprocessor_scheduling

Minimizing the Final Completion Time(Left)

10.1.2 Huffman Codes (Left)

In file compression, if the size of the character set is C, then |logC| bits are needed in a standard encoding.

To save space, the general strategy is to allow the code length to vary from character to character and to ensure that the frequently occurring characters have short codes.

10.1.3 Approximate Bin Packing (Left)

10.2 Divide and Conquer

Divide and conquer algorithm consist of two parts:

Divide: Smaller problems are solved recursively (except base cases).

Conquer: The solution to the original problem is then formed from the solutions to the subproblems.

Traditionally, routines in which the text contains at least two recursive calls are called divide and conquer algorithms, while routines whose text contains only one recursive call are not.

We generally insist that the subproblems be disjoint (that is, essentially nonoverlapping).

10.2.1 Running Time of Divide and Conquer Algorithms

E.G.

For merge sort, we operates on two problems, each of which is half the size of the original, and then use O(N) additional work.

T(N) = 2T(N/2) + O(N)

The solution to the above equation is O(NlogN)

10.2.2 Closest-Points Problem

10.2.3 The Selection Problem

10.3 Dynamic Programming

Any recursive mathematical formula could be directly translated to a recursive algorithm, but the underlying reality is that often the compiler will not do justice to the recursive algorithm, and an inefficient program results.

We can rewriting the recursive algorithm as a nonrecursive algorithm that systematically records the answers to the subproblems in a table. One technique that makes use of this approach is known asdynamic programming.

10.3.1 Using a Table Instead of Recursion

How to solve the recurrence C(N) = (2/N)∑C(i) + N, with C(0) = 1.

Recursive program:

double Eval(int N)
{
    int i;
    double Sum;
    if( N == 0 )
        return 1.0;
    else
    {
        Sum = 0.0;
        for(i=0;i<N;++i)
            Sum += Eval(i);
        return 2.0*Sum/N + N;
}

Evaluate with a table:

double Eval( int N )
{
    int i, j;
    double Sum, Answer;
    double *C;
    
    C = malloc( sizeof(double)*(N+1)); // check space 
  
    C[0] = 1.0;
    for(i=1;i<=N;++i)
    {
        Sum = 0.0;
        for(j=0;j<i;++j)  //C[x] is available when we calc C[x+1]
            Sum +=C[j];
        C[i] = 2.0 * Sum/i + i;
    }
    Answer = C[N];
    free( C );
    return Answer;
}
Time Complexity: O(N^2)                                   O(N)???

10.3.2 Ordering Matrix Multiplications

10.3.3 Optimal Binary Search Tree

10.3.4 All-pairs Shortest Path

10.4 Randomized Algorithms

10.5 Backtracking Algorithms

A backtracking algorithm amounts to a clever implementation of exhaustive search, with generally unfavorable performance. It normally will not affect time complexity!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Practice 1 Date: Monday, March 18th, 2013 We highly encourage being environment friendly and trying all problems on your own. Implement exercise 2.3-7. Implement priority queue. Implement Quicksort and answer the following questions. (1) How many comparisons will Quicksort do on a list of n elements that all have the same value? (2) What are the maximum and minimum number of comparisons will Quicksort do on a list of n elements, give an instance for maximum and minimum case respectively. Give a divide and conquer algorithm for the following problem: you are given two sorted lists of size m and n, and are allowed unit time access to the ith element of each list. Give an O(lg m + lgn) time algorithm for computing the kth largest element in the union of the two lists. (For simplicity, you can assume that the elements of the two lists are distinct). Practice 2 Date: Monday, April 1st, 2013 We highly encourage being environment friendly and trying all problems on your own. Matrix-chain product. The following are some instances. Longest Common Subsequence (LCS). The following are some instances. X: xzyzzyx Y: zxyyzxz X:MAEEEVAKLEKHLMLLRQEYVKLQKKLAETEKRCALLAAQANKESSSESFISRLLAIVAD Y:MAEEEVAKLEKHLMLLRQEYVKLQKKLAETEKRCTLLAAQANKENSNESFISRLLAIVAG Longest Common Substring. The following are some instances. X: xzyzzyx Y: zxyyzxz X:MAEEEVAKLEKHLMLLRQEYVKLQKKLAETEKRCALLAAQANKESSSESFISRLLAIVAD Y:MAEEEVAKLEKHLMLLRQEYVKLQKKLAETEKRCTLLAAQANKENSNESFISRLLAIVAG Max Sum. The following is an instance. (-2,11,-4,13,-5,-2) Shortest path in multistage graphs. Find the shortest path from 0 to 15 for the following graph.   A multistage graph is a graph (1) G=(V,E) with V partitioned into K >= 2 disjoint subsets such that if (a,b) is in E, then a is in Vi , and b is in Vi+1 for some subsets in the partition; and (2) | V1 | = | VK | = 1.     Practice 3 Date: Monday, April 15th, 2013 We highly encourage being environment friendly and trying all problems on your own. Knapsack Problem. There are 5 items that have a value and weight list below, the knapsack can contain at most 100 Lbs. Solve the problem both as fractional knapsack and 0/1 knapsack. A simple scheduling problem. We are given jobs j1, j2… jn, all with known running times t1, t2… tn, respectively. We have a single processor. What is the best way to schedule these jobs in order to minimize the average completion time. Assume that it is a nonpreemptive scheduling: once a job is started, it must run to completion. The following is an instance. (j1, j2, j3, j4) : (15,8,3,10) Single-source shortest paths. The following is the adjacency matrix, vertex A is the source.  A B C D E A -1 3 B 3 2 2 C D 1 5 E -3 All-pairs shortest paths. The adjacency matrix is as same as that of problem 3.(Use Floyd or Johnson’s algorithm)     Practice 4 Date: Monday, May 8th, 2013 We highly encourage being environment friendly and trying all problems on your own. 0/1 Knapsack Problem. There are 5 items that have a value and weight list below, the knapsack can contain at most 100 Lbs. Solve the problem using back-tracking algorithm and try to draw the tree generated. Solve the 8-Queen problem using back-tracking algorithm.    

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值