2012年9月22日

摘要: 题目:(见于《算法导论》原书第二版P23,2.3-7请给出一个运行时间为O(nlgn)的算法,使之能在给定的一个由n个整数构成的集合S和另一个整数x时,判断出S中是否存在两个其和等于x的元素。分析:题目明确给出要求运行时间为O(nlgn),这样的话,首先想到的枚举算法行不通,因为在不存两数之和为x的时候,其时间复杂度为O(n^2)。再考虑另外的算法,对于这个问题,不妨首先对数组进行排列,而排列可以做到运行时间为O(nlgn)的时间界,排序好,然后再来个二分搜索,二分搜索的时间复杂度也是O(nlgn),这样看来,总的看来,时间的复杂度可以满足题目要求。具体的代码如下: 1 #include< 阅读全文
posted @ 2012-09-22 21:11 kaka_ 阅读(635) 评论(0) 推荐(0) 编辑
摘要: 题目:(见于《算法导论》原书第二版P22,2.3-4)插入排序可以如下改成一个递归过程:为排序A[1…n],首先递归地排序A[1…n-1],然后再将A[n]插入到已排序的数组A[1…n-1]中去。对于插入排序的这一递归版本,为它的运行时间写个递归式。在看《算法导论》之前,从来没有想过使用递归的方式实现插入排序。此前对于插入排序,很容易就想到了这段代码: 1 void insertsort(vector<int> a, int n) 2 { 3 int i,j,temp; 4 for(i=1; i<n; i++) 5 { 6 temp=a[i]; 7 ... 阅读全文
posted @ 2012-09-22 19:27 kaka_ 阅读(989) 评论(0) 推荐(0) 编辑

导航