2013年10月10日
摘要: 15.5.1 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 using namespace std;10 11 #define MAX 11112 #define MAXIUM 111111113 float e[MAX][MAX];14 float w[MAX][MAX];15 int root[MAX][MAX];16 17 void optimal_bst(float *p, float *q, int n)18 {19 for (... 阅读全文
posted @ 2013-10-10 15:53 leiatpku 阅读(155) 评论(0) 推荐(0) 编辑
摘要: 。。 阅读全文
posted @ 2013-10-10 15:52 leiatpku 阅读(118) 评论(0) 推荐(0) 编辑
摘要: . 阅读全文
posted @ 2013-10-10 15:51 leiatpku 阅读(112) 评论(0) 推荐(0) 编辑
  2013年10月5日
摘要: 15.2.1为了计算,实现了书中的代码。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 using namespace std;10 11 #define MAX 11012 #define INFINITE 111111113 int m[MAX][MAX];14 int s[MAX][MAX];15 16 void matrix_chain_order(int *p, int len_p)17 {18 int len = len_p ... 阅读全文
posted @ 2013-10-05 11:47 leiatpku 阅读(192) 评论(0) 推荐(0) 编辑
  2013年10月4日
摘要: 15.1.1demo code 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 using namespace std;10 11 #define MAX 1010012 13 int l[2][MAX] = {{1, 2, 1, 1, 2}, {1, 2, 1, 2, 2}};14 int l_star = 1;15 16 void print_stations(int n)17 {18 int i = l_star;19 pri... 阅读全文
posted @ 2013-10-04 22:06 leiatpku 阅读(230) 评论(0) 推荐(0) 编辑
摘要: 这个题和算法书上的2.22题类似,因此y轴只要求出中位数,然后所有的点都要移动到中位数。x轴的情况有点不同, 想了好久终于想明白了。首先将x升序排序(因为最终的相对位置是不变的),然后设首个元素的基准点为P,则|x[0] - (p+0)| + |x[1] - (p+1)| + |x[2] - (p+2)| + ... + |x[n-1] - (p+n-1)| = |x[0]-0-P| + |x[1]-1-P| + |x[2]-2-P| +...+|x[n-1]-(n-1)-P|,设z[i] = x[i] - i; 这时候就和y类似了, 只要对z数组升序排序,然后找到中位数,再计算就可以了。ac 阅读全文
posted @ 2013-10-04 13:29 leiatpku 阅读(383) 评论(0) 推荐(0) 编辑
  2013年10月3日
摘要: 性质1: 如果存在主元素的话,主元素一定是中位数。方法1:使用快排O(nlogn)进行排序,找到中位数,然后判断首元素是否和中位数相等、以及尾元素是否和中位数相等。 如果有一个以上的相等,则存在主元素(中位数)。方法2:使用O(n)的选择算法找到中位数,然后再判断中位数是不是主元素。方法3:性质2:如果一个数组中有主元素,则同时删除两个不相等的值,这个主元素不会改变。因此下面的代码就是不断的删除两个不等的值。然后测试剩下的最后一个元素是不是主元素。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7... 阅读全文
posted @ 2013-10-03 19:14 leiatpku 阅读(1195) 评论(0) 推荐(0) 编辑
摘要: 算法书的作业题:2.5 设A是n个不同的数排好序的数组,给定L和U, L 10 #include 11 #include 12 #include 13 #include 14 #include 15 using namespace std; 16 17 #define MAX 100 18 int result[MAX], len = 0; 19 20 int lower = -1, higher = -1; 21 22 void lower_index(int *a, int start, int end, int l, int u) 23 { 24 //find t... 阅读全文
posted @ 2013-10-03 16:15 leiatpku 阅读(1285) 评论(4) 推荐(0) 编辑
  2013年10月1日
摘要: 实现了一下算法书上的例子, 在线性的时间内完成选择第k个元素。 1 /* 2 3 */ 4 #include 5 #include 6 #include 7 #include 8 #define MAX 111 9 10 int comp(const void *a, const void *b) 11 { 12 int *aa = (int *)a; 13 int *bb = (int *)b; 14 return *aa - *bb; 15 } 16 17 int selection(int *a, int len, int k) ... 阅读全文
posted @ 2013-10-01 21:14 leiatpku 阅读(871) 评论(0) 推荐(0) 编辑
摘要: /* */#include #include #include #include int partition(int *a, int start, int end, int key){ int i = start, j = end; while (1) { while (a[j] >= key) { j--; if (j == start) { return start; } } while (a[i] <= ke... 阅读全文
posted @ 2013-10-01 18:46 leiatpku 阅读(158) 评论(0) 推荐(0) 编辑