当年写的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(" ...
随机推荐
- 创建简单web项目
Intellij Idea直接安装(可根据需要选择自己设置的安装目录),jdk使用1.6/1.7/1.8都可以,主要是配置好系统环境变量,tomcat7上tomcat的官网下载压缩包解压即可. 一.创 ...
- 二十三、CI框架之post
一.在控制器里面代码如下: 二.在View里面写好按钮和需要post的代码 三.效果如下,点击按钮之前: 点击按钮之后, 不忘初心,如果您认为这篇文章有价值,认同作者的付出,可以微信二维码打赏任意金额 ...
- 吴裕雄--天生自然 JAVASCRIPT开发学习:事件
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- STL学习顺序
仅供参考,大家要学会自己制作,很有成就感的啊! 先看<c++标准程序库>这本书很厚,但是其实很简单,然后再看effective stl,注意顺序,我初学的时候stl还没了解多少就看effe ...
- Scheduled定时任务器在Springboot中的使用
Scheduled定时任务器是Spring3.0以后自带的一个定时任务器. 使用方式: 1.添加依赖 <!-- 添加 Scheduled 坐标 --> <dependency> ...
- 动态改变tableHeaderView的显示隐藏及高度
改变tableHeaderView的高度: UIView *headerView = _tableView.tableHeaderView; headerView.height = 10; 当设置高度 ...
- 哈希表hashTable的Java设计
1:哈希表的概念 2:设计原理 3:哈希表的Java设计
- 关于DSP仿真软件CCS中断点和探针的简单理解
关于DSP仿真软件CCS中断简单理解 (郑州大学姬祥老师编写) CCS中的2.0版本(实验所用)断点(Break Point) 和探针(Probe Point)之所以能组合使用,是因为我们在实现硬件仿 ...
- 1)warning LNK4233
名称 test.exe 包含非 ASCII 字符,在具有除 936 以外的 ANSI 代码页的系统上可能不能加载 DLL 名称 练习动态库.dll 包含非 ASCII 字符,如果系统没有与用于链接此 ...
- 【leetcode困难】968. 监控二叉树
968. 监控二叉树 瞎**分析评论区Rui大佬的答案,这题想直接递归return min还是有坑的,分计数和状态.有个状态转换的思想