摘要: 最优合并问题Time Limit:1000MS Memory Limit:65536KTotal Submit:19 Accepted:8Description给定k 个排好序的序列s1, s2,……, sk, 用2 路合并算法将这k 个序列合并成一个序列。假设所采用的2 路合并算法合并2 个长度分别为m和n的序列需要m + n -1次比较。试设计一个算法确定合并这个序列的最优合并顺序,使所需的总比较次数最少。为了进行比较,还需要确定合并这个序列的最差合并顺序,使所需的总比较次数最多。对于给定的k个待合并序列,计算最多比较次数和最少比较次数合并方案。Input输入数据的第一行有1 个正整数k( 阅读全文
posted @ 2011-07-24 16:53 AC_Von 阅读(2524) 评论(0) 推荐(1) 编辑
摘要: 代码+注释:#include <stdio.h>#define N 10000int num[N], a[N];void heap_adjust(int x, int y){ int i = x, tmp = num[x]; int j = i<<1; //j左移一位,即i*2 while(j <= y) //当未超过堆底时 { if(j < y && num[j+1] < num[j]) j++; //如果右孩子比左孩子小,j++ if(tmp > num[j]) //升序 { num[i] = num[j]; i = j; j 阅读全文
posted @ 2011-07-24 15:43 AC_Von 阅读(210) 评论(0) 推荐(0) 编辑
摘要: View Code #include<stdio.h>#define N 100#define MAX 10000000void Merge(int a[], int low, int mid, int high){ int n1 = mid-low+1; int n2 = high-mid; int i; int x[N],y[N];//将要合并的两部分存放到两个数组中 for(i = 1; i <= n1; i++) { x[i] = a[i+low-1]; } for(i = 1; i <= n2; i++) { y[i] = a[low+n1+i-1]; } i 阅读全文
posted @ 2011-07-24 11:34 AC_Von 阅读(215) 评论(0) 推荐(0) 编辑
摘要: 递归建立二叉树,中序遍历。。。。View Code #include <stdio.h>#include <string.h>#include <stdlib.h>#define N 10000int l[N], r[N], key[N], flag;void insert(int index, int x){ if(x <= key[index]) { if(l[index] == -1) l[index] = flag; else insert(l[index], x); } else { if(r[index] == -1) r[index] = 阅读全文
posted @ 2011-07-24 10:03 AC_Von 阅读(288) 评论(0) 推荐(0) 编辑