当前位置: 首页 > news >正文

网站备案和域名备案区别营销公司取名字大全

网站备案和域名备案区别,营销公司取名字大全,网站如何做数据储存的,龙华、宝安最新通告摘要:本文简要介绍了使用堆实现求序列中最大的K个元素的算法,并提供了C源码关键字:top-k,二叉堆,数组堆本算法的具体思想为建立一个大小为K的最小堆(使用数组存储),然后将N个元素一次存于堆中,每…

摘要:本文简要介绍了使用堆实现求序列中最大的K个元素的算法,并提供了C++源码

关键字:top-k,二叉堆,数组堆

本算法的具体思想为建立一个大小为K的最小堆(使用数组存储),然后将N个元素一次存于堆中,

每存放一次元素调整一次对,即替换对中的最小元素,并保持二叉堆为最小堆。当N个元素全部处理完时,

堆中的K个元素即为所求的最大K个元素。需要注意的是,最先向堆中插入K个元素时,直接将每个元素放入

堆数组的末尾,然后向上调整(move up)该元素,当向对中插入K+1~N个元素时,替换堆数组的第一个元素

(即堆中的最小元素),并向下(move down)调整该元素!该算法的时间复杂度为O(N * log2K),特别适合

于数据不能全部装入内存的情形!

基于以上思想的top-k算法实现如下:

/*

* top-k算法的数组堆实现

* 使用数组存储的最小二叉堆,每次替换最小的元素

* 时间复杂度nlogk

* 不仅适用于数据全部在内存中的情形,

* 还特别适用于数据不能全部装入内存,但内存中可以放入K个元素的情形

* Compiler: VC++ 6.0

*/

#include

#include

using namespace std;

#define N 100000000

#define K 10

int array[N];

int heap[K];

void init_array(int n);

void print(int a[], int n);

int parent(int i);

void moveup(int i);

void movedown(int i);

void topk(int n, int k);

int main(int argc, char* *argv)

{

srand(time(NULL));

int n = 50;

init_array(n);

print(array, n);

topk(n, K);

print(heap, K);

system("pause");

return 0;

}

void init_array(int n)

{

for(int i = 0; i < n; ++i)

array[i] = rand() % 100;

}

void print(int a[], int n)

{

printf("array:\n");

for(int i = 0; i < n; ++i)

cout<

cout<

}

int parent(int i)

{

if(i % 2 == 0) return (i / 2 -1);

else return i / 2;

}

void moveup(int i)

{

int sn = i;

int prnt = parent(sn);

while(prnt > 0)

{

if(heap[prnt] > heap[sn])

{

swap(heap[prnt], heap[sn]);

sn = prnt;

prnt = parent(sn);

}

else break;

}

}

void movedown(int i, int len)

{

int j = i;

while(2 * j + 1 < len)

{

int child = 2 * j + 1;

if(child + 1 < len && heap[child + 1] < heap[child])

child++;

//与较小的儿子节点交换

if(heap[j] > heap[child])

{

swap(heap[j], heap[child]);

j = child;

}

else break;

}

}

void topk(int n, int k)

{

int pos = 0;

//将n个元素一次性放入堆中,每放一个的时间复杂度为logk

for(int i = 0; i < n; ++i)

{

if(pos < k)

{

heap[pos] = array[i];

moveup(pos++);

}

else

{

if(heap[0] < array[i])

{

heap[0] = array[i];

movedown(0, k);

}

}

}

}

http://www.lbrq.cn/news/2669869.html

相关文章:

  • 制作一个网站首页公司注册
  • wordpress视频缩略图插件班级优化大师的利和弊
  • 宁波网站建设公司排名广西壮族自治区在线seo关键词排名优化
  • 上海企业网站建设哪家好seo网站诊断分析报告
  • 知名企业网站搭建品牌深圳百度推广优化
  • 公司网站建设大概多少钱百度软件下载安装
  • 网站建设哪里好百度竞价点击软件
  • 郑州定制网站推广工具产品百度seo关键词排名优化
  • 中铁集团网站建设营销技巧和营销方法培训
  • dz网站收款即时到账怎么做的宁波seo软件
  • 河南建筑公司网站开鲁seo服务
  • 化妆品网站建设推广方案百度助手
  • 中国建设银行湖北省分行网站整站优化是什么意思
  • wordpress是否可以排版杭州seo代理公司
  • 海南网站优化百度手机助手免费下载
  • 兰州seo安安网站建设浙江seo外包费用
  • 深圳专业做网站服务网络营销成功案例有哪些
  • 浏览器正能量网站免费软件网店运营
  • 众创空间网站建设方案互联网登录的网站名
  • 青岛网站建设康之迅b站是哪个网站
  • 请别人做网站有风险吗全网seo优化电话
  • wordpress 社交插件襄阳网站seo
  • 河北住房和城乡建设网站国内最新的新闻
  • 网站首页动画效果太原seo快速排名怎么样
  • wordpress4.8.2优化分析
  • wordpress电话修改seo怎么发布外链
  • dede title 我的网站投放广告的渠道有哪些
  • 茶企业网站优化大师如何删掉多余的学生
  • 廊坊制作网站公司原画培训机构哪里好
  • 中企动力做的网站怎么样宁波seo入门教程
  • 【SpringBoot】持久层 sql 注入问题
  • AIStarter修复macOS 15兼容问题:跨平台AI项目管理新体验
  • 基于SpringBoot+Uniapp的血压监控小程序(Echarts图形化分析)
  • nginx-主配置文件
  • Radiology:经颅交流电刺激调节轻度阿尔茨海默病皮层与海马功能连接
  • 从Redisson源码角度深入理解Redis分布式锁的正确实现