当年写的C代码
#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行代码,在Mac上体验ASP.NET 5的最简单方法
昨天微软发布了ASP.NET 5 beta2(详见ASP.NET 5 Beta2 发布),对ASP.NET 5的好奇心又被激发了. 今天下午在Mac OS X上体验了一下ASP.NET 5,而且借助Y ...
- 只写104行代码!在nopCommerce中如何实现自动生成网站地图
表告诉我说你不知道nopCommerce是什么.它是目前.NET中最流行的完全开源网上商城,由俄罗斯的团队在2008年开始立项一直开发到现在已经是3.3版本了.代码目前托管在codeplex上,有兴趣 ...
- 写出优美代码的两个方式:一步到位VS迭代优化
最近把手头这个安卓APP的所有事务性方法都写完了,有了以下体会,新手体会,老鸟轻拍 想写成优美代码的人一般都会有这样的想法: 一定要在写每一句代码,写每一个方法,构造每一个类的时候,都要记得优化: ...
- jQuery Validate 表单验证插件----通过name属性来关联字段来验证,改变默认的提示信息,将校验规则写到 js 代码中
一.下载依赖包 网盘下载:https://yunpan.cn/cryvgGGAQ3DSW 访问密码 f224 二. 添加一个另外一个插件jquery.validate.messages_cn.js. ...
- 程序员的恶性循环:加班->没空学习->老是写同等水平代码->无法提升代码质量->老是出BUG->老是需要修改->加班->...
程序员的恶性循环:加班->没空学习->老是写同等水平代码->无法提升代码质量->老是出BUG->老是需要修改->加班->...
- 将自己写的Python代码打包放到PyPI上
如果是开源的Python代码,为了能够让大家更方便的使用,放到PyPI上也许是个非常不错的主意(PyPI:Python Package Index).刚开始我以为要将代码打包放到PyPI上是一件非常复 ...
- 瞧一瞧,看一看呐,用MVC+EF快速弄出一个CRUD,一行代码都不用写,真的一行代码都不用写!!!!
瞧一瞧,看一看呐用MVC+EF快速弄出一个CRUD,一行代码都不用写,真的一行代码都不用写!!!! 现在要写的呢就是,用MVC和EF弄出一个CRUD四个页面和一个列表页面的一个快速DEMO,当然是在不 ...
- NASA关于如何写出安全代码的10条军规
博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:NASA关于如何写出安全代码的10条军规.
- javascript 写一段代码,判断一个字符串中出现次数最多的字符串,并统计出现的次数
javascript 写一段代码,判断一个字符串中出现次数最多的字符串,并统计出现的次数 function test(){ var bt = document.getElementById(" ...
随机推荐
- UVA - 11925 Generating Permutations(生成排列)(构造)
题意:将序列1,2,3,……,n,用不超过2n^2次操作,通过下列操作变成给定序列.(1<=n<=300) 1.交换前两个元素 2.将第一个元素移到最后 分析:因为将序列变成升序更容易操作 ...
- PHP ~ 通过程序删除图片,同时删除数据库中的图片数据 和 图片文件
删除单张图片 <?php require_once '../../conn.php'; //连接数据库 $ID = $_GET['ID' ...
- C++基础--string转
有时候除了要将数值型转为string外,可能也需要将一些string转为数值型,这个时候也还是可以用sstream字符串流来实现,同时也可以用C++标准库得到函数来实现. 1.字符串流 这个时候使用i ...
- svg教程
实例 <html> <body> <h1>My first SVG</h1> <svg style="border: 1px solid ...
- mysql行级锁和表级锁的区别
表级锁:开销小,加锁快:不会出现死锁:锁定粒度大,发生锁冲突的概率最高,并发度最低:行级锁:开销大,加锁慢:会出现死锁:锁定粒度最小,发生锁冲突的概率最低,并发度也最高:
- Spring(5) -(14) pointcut 语法
AOP的规范本应该由SUM公司提出,但是被AOP联盟捷足先登.AOP联盟指定AOP规范,首先就要解决一个问题,怎么表示切入点,也就是在哪些方法上增强(where) AspectJ 是一个面向切面的框架 ...
- StringUtils.format用法
String.format()字符串常规类型格式化的两种重载方式 format(String format, Object… args) 新字符串使用本地语言环境,制定字符串格式和参数生成格式化的新字 ...
- 全面掌握Nginx配置+快速搭建高可用架构 一 开启status页面检测服务状态
输入命令Nginx -V 打开conf.d/default.conf 配置模块,配置位置在server或者location 配置完成后测试语法正确 nginx -tc /etc/nginx/nginx ...
- Swift 3必看:从使用场景了解GCD新API
https://www.jianshu.com/p/fc78dab5736f 2016.10.06 21:59* 在学习Swift 3的过程中整理了一些笔记,如果想看其他相关文章可前往<Swif ...
- soupui--替换整个case的url
添加新的URL 随便进入一个case的[REST]step,添加新的url 更换URL 添加完之后双击想要更换url的case,在弹出的窗口中点击URL按钮 在弹出的set endpoint窗口中选择 ...