美文网首页
算法实验二

算法实验二

作者: mdbbm | 来源:发表于2016-10-09 20:15 被阅读11次

2016-10-09#

参考题目

败者树k路归并(可运行)

第一次成功发表博客!!O(∩_∩)O哈!

#include <iostream>  
using namespace std;  
 
#define LEN 10          //最大归并段长  
#define MINKEY -1     //默认全为正数  
#define MAXKEY 100    //最大值,当一个段全部输出后的赋值  
 
struct Array  
{  
   int arr[LEN];  
   int num;  
   int pos;  
}*A;  
 
   int k,count;  
   int *LoserTree,*External;  
 
void Adjust(int s)  
{  
   int t=(s+k)/2;  
   int temp;  
   while(t>0)  
   {  
       if(External[s] > External[LoserTree[t]])  
       {  
           temp = s;  
           s = LoserTree[t];  
           LoserTree[t]=temp;  
       }  
       t=t/2;  
   }  
   LoserTree[0]=s;  
}  
 
void CreateLoserTree()  
{  
   External[k]=MINKEY;  
   int i;  
   for(i=0;i<k;i++)LoserTree[i]=k;  
   for(i=k-1;i>=0;i--)Adjust(i);  
}  
 
void K_Merge()  
{  
   int i,p;  
   for(i=0;i<k;i++)  
   {  
       p = A[i].pos;  
       External[i]=A[i].arr[p];  
       //cout<<External[i]<<",";  
       A[i].pos++;  
   }  
   CreateLoserTree();  
   int NO = 0;  
   while(NO<count)  
   {  
       p=LoserTree[0];  
       cout<<External[p]<<",";  
       NO++;  
       if(A[p].pos>=A[p].num)External[p]=MAXKEY;  
       else   
       {  
           External[p]=A[p].arr[A[p].pos];  
           A[p].pos++;  
       }  
       Adjust(p);  
   }  
   cout<<endl;  
}  
 
int main()  
{  
   freopen("in.txt","r",stdin);  
 
   int i,j;  
   count=0; 
   cin>>k;  
   A=(Array *)malloc(sizeof(Array)*k);  
   for(i=0;i<k;i++)  
   {  
       cin>>A[i].num;  
       count=count+A[i].num;  
       for(j=0;j<A[i].num;j++)  
       {  
           cin>>A[i].arr[j];  
       }  
       A[i].pos=0;  
   }  
   LoserTree=(int *)malloc(sizeof(int)*k);  
   External=(int *)malloc(sizeof(int)*(k+1));  
 
   K_Merge();  
 
   return 0;  
}  

相关文章

  • K-means算法学习(17-4-26)

    一、实验目的 1、学习K-means算法,理解算法的原理及其过程。 2、选择合适的实验,进行算法的仿真重现。 二、...

  • 算法实验二

    任务调度问题:在单处理器上具有期限和惩罚的单位时间任务调度问题;平衡树问题:实现3种树中的两种:红黑树,AVL树,...

  • 算法实验二

    2016-10-09# 参考题目 败者树k路归并(可运行) 第一次成功发表博客!!O(∩_∩)O哈!

  • 实验二 圆的生成算法

    实验二 圆的生成算法 一、实验目的 1、 通过实验,进一步理解和掌握中点画圆算法的基本原理; 2、 掌握以上算...

  • 二叉树遍历(递归算法和非递归算法)

    实验三 二叉树遍历(递归算法和非递归算法) 一.实验目的 1.掌握二叉树的存储结构与基本操作 2.掌握二叉树的遍历...

  • 安全算法实验(二)

    具体要求 使用openssl工具完成如下操作:(1)RSA 2048位 密钥生成;(2)导出公钥;(3)生成数字证...

  • DES加密算法 设计与实现

    一、实验目的 1、理解DES算法原理 2、掌握DES的实现 二、实验环境 Windows XP、VC6.0/Ecl...

  • AES

    一、实验目的 1、理解AES算法原理2、掌握AES的实现 二、实验环境 Windows XP、VC6.0/Ecli...

  • 3、LSB随机替换嵌入算法-2016年6月26

    LSB随机替换嵌入算法-2016年6月26一:代码 二、实验结果展示:

  • Huffman树及Huffman编码

    Huffman树及Huffman编码 一.实验目的 掌握哈夫曼树的构造算法、哈夫曼编码原理。 二.实验要求与内容 ...

网友评论

      本文标题:算法实验二

      本文链接:https://www.haomeiwen.com/subject/ztcmyttx.html