资源简介
最优合并问题
给定k个有序序列s1 , s2,... , sk ,
用2路合并算法将这k个序列合并成一个序列。
假设所采用的2路合并算法合并2个长度分别为m和n的序列需要m + n -1次比较。
试设计一个算法确定合并这个序列的最优合并顺序,
使所需的总比较次数最少。
代码片段和文件信息
#include
#include
#include
#define MAXSIZE 1000
/*/**最优合并问题
给定k个有序序列s1 s2... sk
用2路合并算法将这k个序列合并成一个序列。
假设所采用的2路合并算法合并2个长度分别为m和n的序列需要m + n -1次比较。
试设计一个算法确定合并这个序列的最优合并顺序,
使所需的总比较次数最少。*/
/*先进行排序在进行入队列:
申请两个队列P和Q,先判断两个是不是非空队列,(如果两个都非空,就比较队列大小,小的出队列,最小两个进行合并)
排序之后把数字放在Q,合并之后把数字放在P 。
定义min1,min2为最小的两个数。在数组P,Q里面找到一个最小的数min1
在数组P,Q里面找到另一个最小的数min2 。把两个小数想家summin入队列P,即已合并的数字放在队列P
加起来 循环得到最后输出sum*/
/***********相关定义****************/
typedef struct
{
int data[MAXSIZE];
int length;
}SqList;
//打印当前L数组的顺序
void print(SqList *L)
{
for(int i=0;ilength;i++)
{
printf(“%4d “L->data[i]);
}
printf(“\n“);
}
typedef int datatype;
//链式队列
typedef struct node
{
datatype data;
struct node *next;
} QNode*L
- 上一篇:点格棋C++运行程序
- 下一篇:c++四叉树地理文本搜索
评论
共有 条评论