#ifndef KMIN_H_
#define KMIN_H_ /************************************************************************/
/* min k values problem with maxheap data structure */
/* the computation cost is nlog(k) */
/*----------------------------------------------------------------------*/
/* void kmin_maxheap(Tnum * a,long int n,Tnum*b,int k) */
/* void kmin_idx_maxheap(Tnum * a,long int n,Tnum*b,int k,Tint *idx) */
/*----------------------------------------------------------------------*/
/* a is the input array of length n */
/* b stores the k maximum values */
/* idx stores the indice of entries of b corresponding to a */
/*----------------------------------------------------------------------*/
/* written by Zhao Keke. */
/* Aug 20, 2010. modified at December 15, 2010. */
/************************************************************************/ //----min k values problem by maxheap---//
template<typename Tnum>
void make_maxheap(Tnum*b,int k)
{
for (register int i=((k-1)-1)>>1;i>=0;i--){
down_maxheap(b,k,i);
}
} template<typename Tnum>
void down_maxheap(Tnum*b,int k,int parent=0)
{
Tnum tmp;register int i,j; i=parent;j=(i<<1)+1;
while(j+1<k){
if(b[j]<b[j+1])j++;
if(b[i]>=b[j])break;
tmp=b[i];b[i]=b[j];b[j]=tmp;
i=j;j=(j<<1)+1; // j=j*2+1;
}
if(j<k&&b[i]<b[j]){
tmp=b[i];b[i]=b[j];b[j]=tmp;
}
}
template<typename Tnum>
void sort_maxheap(Tnum*b,int k)
{
register int i;Tnum tmp;
while(k-->0){
tmp=b[0];b[0]=b[k];b[k]=tmp;
down_maxheap(b,k);
}
}
template<typename Tnum>
void kmax_maxheap(Tnum * a,long int n,Tnum*b,int k)
{
if (!(k<=n&&k>0)){return;} for (int j=0;j<k;j++){b[j]=a[j];}
make_maxheap(b,k);
for (register long int i=k;i<n;i++)
if(a[i]<b[0]){
b[0]=a[i];
down_maxheap(b,k);
}
//we may sort the resulting array
sort_maxheap(b,k);
} //----min k values problem with index----//
template<typename Tnum,typename Tint>
void make_maxheap_idx(Tnum*b,int k,Tint*idx){
for (register int i=((k-1)-1)>>1;i>=0;i--){
down_maxheap_idx(b,k,idx,i);
}
} template<typename Tnum,typename Tint>
void down_maxheap_idx(Tnum*b,int k,Tint*idx,int parent=0)
{
Tnum tmp;Tint tmp_idx;register int i,j; i=parent;j=(i<<1)+1;
while(j+1<k){
if(b[j]<b[j+1])j++;
if(b[i]>=b[j])break;
tmp=b[i];b[i]=b[j];b[j]=tmp;
tmp_idx=idx[i];idx[i]=idx[j];idx[j]=tmp_idx;
i=j;j=(j<<1)+1; // j=j*2+1;
}
if(j<k&&b[i]<b[j]){
tmp=b[i];b[i]=b[j];b[j]=tmp;
tmp_idx=idx[i];idx[i]=idx[j];idx[j]=tmp_idx;
}
}
template<typename Tnum,typename Tint>
void sort_maxheap_idx(Tnum*b,int k,Tint *idx)
{
register int i;Tnum tmp;Tint tmp_idx;
while(k-->0){
tmp=b[0];b[0]=b[k];b[k]=tmp;
tmp_idx=idx[0];idx[0]=idx[k];idx[k]=tmp_idx;
down_maxheap_idx(b,k,idx);
}
}
template<typename Tnum,typename Tint>
void kmax_idx_maxheap(Tnum * a,long int n,Tnum*b,int k,Tint *idx)
{
if (!(k<=n&&k>0)){return;} for (int j=0;j<k;j++){b[j]=a[j];idx[j]=j;}
make_maxheap_idx(b,k,idx);
for (register Tint i=k;i<n;i++)
if(a[i]<b[0]){
b[0]=a[i];idx[0]=i;
down_maxheap_idx(b,k,idx);
}
//we may sort the resulting array
sort_maxheap_idx(b,k,idx);
} #endif

当年写的C代码的更多相关文章

  1. 不写1行代码,在Mac上体验ASP.NET 5的最简单方法

    昨天微软发布了ASP.NET 5 beta2(详见ASP.NET 5 Beta2 发布),对ASP.NET 5的好奇心又被激发了. 今天下午在Mac OS X上体验了一下ASP.NET 5,而且借助Y ...

  2. 只写104行代码!在nopCommerce中如何实现自动生成网站地图

    表告诉我说你不知道nopCommerce是什么.它是目前.NET中最流行的完全开源网上商城,由俄罗斯的团队在2008年开始立项一直开发到现在已经是3.3版本了.代码目前托管在codeplex上,有兴趣 ...

  3. 写出优美代码的两个方式:一步到位VS迭代优化

    最近把手头这个安卓APP的所有事务性方法都写完了,有了以下体会,新手体会,老鸟轻拍   想写成优美代码的人一般都会有这样的想法: 一定要在写每一句代码,写每一个方法,构造每一个类的时候,都要记得优化: ...

  4. jQuery Validate 表单验证插件----通过name属性来关联字段来验证,改变默认的提示信息,将校验规则写到 js 代码中

    一.下载依赖包 网盘下载:https://yunpan.cn/cryvgGGAQ3DSW  访问密码 f224 二. 添加一个另外一个插件jquery.validate.messages_cn.js. ...

  5. 程序员的恶性循环:加班->没空学习->老是写同等水平代码->无法提升代码质量->老是出BUG->老是需要修改->加班->...

    程序员的恶性循环:加班->没空学习->老是写同等水平代码->无法提升代码质量->老是出BUG->老是需要修改->加班->...

  6. 将自己写的Python代码打包放到PyPI上

    如果是开源的Python代码,为了能够让大家更方便的使用,放到PyPI上也许是个非常不错的主意(PyPI:Python Package Index).刚开始我以为要将代码打包放到PyPI上是一件非常复 ...

  7. 瞧一瞧,看一看呐,用MVC+EF快速弄出一个CRUD,一行代码都不用写,真的一行代码都不用写!!!!

    瞧一瞧,看一看呐用MVC+EF快速弄出一个CRUD,一行代码都不用写,真的一行代码都不用写!!!! 现在要写的呢就是,用MVC和EF弄出一个CRUD四个页面和一个列表页面的一个快速DEMO,当然是在不 ...

  8. NASA关于如何写出安全代码的10条军规

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:NASA关于如何写出安全代码的10条军规.

  9. javascript 写一段代码,判断一个字符串中出现次数最多的字符串,并统计出现的次数

    javascript 写一段代码,判断一个字符串中出现次数最多的字符串,并统计出现的次数 function test(){ var bt = document.getElementById(" ...

随机推荐

  1. Java compare方法和compareTo方法

    Java Comparator接口排序用法,详细介绍可以阅读这个链接的内容:https://www.cnblogs.com/shizhijie/p/7657049.html 对于 public int ...

  2. c++ opencv 动态内存

    1.CvMemStorage定义动态内存存储器   内存存储器是一个用来存储诸如序列.轮廓.图形和子划分等动态增长数据结构的底层结构 2.示例 CvMemStorage *mems = cvCreat ...

  3. 不要对md5file.read()计算md5值

    最近遇到的一个问题,我使用以下代码对备份文件计算MD5值: # md5file=open("%s" % outputpath, 'rb') # md5=hashlib.md5(md ...

  4. cf 730J. Bottles

    搞一个背包,233 要求用的瓶数最少,那么就业瓶数为第一关键,当瓶数相当后再以a[i] #include<bits/stdc++.h> #define N 100005 #define L ...

  5. jar包-循环遍历-开机启动服务-微服务-多项目拷贝-pid杀死进程-mysql备份脚本-防火墙检测脚本

    vi /root/serverkaiji.sh #!/bin/bash ls /tlvnksc/ | egrep -v "^c|^f" > /root/service.lis ...

  6. 吴裕雄--天生自然JAVA SPRING框架开发学习笔记:Spring框架的基本思想

    EJB的学习成本很高,开发效率却不高,需要编写很多重复的代码,这些问题阻止了EJB的继续发展.就在EJB技术止步不前的时候,Spring框架在合适的时机出现了,Spring框架和EJB不同,Sprin ...

  7. SpringMVC:提交参数名与接收参数名问题

    1.提交的域名称和处理方法的参数名一致 提交数据 : http://localhost:8080/hello?name=111 处理方法 : @RequestMapping("/hello& ...

  8. 关于域名转发proxy_pass

    在配置nginx的时候,有一个需求,访问m.XXX.com的时候,需要实际访问www.YYY.com/m,并且域名不能发生变化. 达成这个需求有两种做法: 第一种就是301跳转,使用rewrite来跳 ...

  9. Delphi流的操作_文件合并

    unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ...

  10. Map的6种遍历方法

    声明:迁移自本人CSDN博客https://blog.csdn.net/u013365635 探讨有几种遍历Map的方法其实意义并不大,网上的文章一般讲4种或5种的居多,重要的是知道遍历的内涵,从遍历 ...