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

织梦文章类网站模板引流软件下载站

织梦文章类网站模板,引流软件下载站,wordpress后台慢插件,180天做180个网站目录 1.堆的概念 2.堆的构建 3.堆的实现 4.堆的功能实现 4.1堆的初始化 4.2堆的销毁 4.3堆的插入 4.3.1向上调整 4.4堆的删除 4.4.1向下调整法 ​编辑4.5取堆顶 5. 向上调整法和向下调整法比较 6.堆的应用 6.1TOP-K问题 6.2TOP-K思路 6.2.1用前n个数据来建堆 6.…

目录

1.堆的概念

2.堆的构建

3.堆的实现

4.堆的功能实现

4.1堆的初始化

4.2堆的销毁

4.3堆的插入

4.3.1向上调整

4.4堆的删除

4.4.1向下调整法

​编辑4.5取堆顶

5. 向上调整法和向下调整法比较

 6.堆的应用

6.1TOP-K问题

6.2TOP-K思路

6.2.1用前n个数据来建堆

6.2.2剩下的N-K 

6.3示例


1.堆的概念

堆的底层是数组,所以堆也是一种特殊的数组。

堆分为大堆和小堆

  • 大堆:父节点不小于子节点
  • 小堆:父节点不大于子节点

2.堆的构建

已经提到堆是一种数组,那么要怎么实现呢。

先以小堆为例,已知父节点不小于子节点,使用数组,数组下标0是根节点,1和2是他的子节点,接着1的子节点是3和4,2的子节点是5和6,这样就可以实现一个堆了。

3.堆的实现

既然是数组,就要有指针,容量大小。

4.堆的功能实现

4.1堆的初始化

4.2堆的销毁

4.3堆的插入

一直到这一步,都是和栈是相同的,因为我们插入数据了,这时我们无法保证这是一个堆,所以此时要进行向上调整。

4.3.1向上调整

因为此时插入是数据再最下面,所以要和上面的进行比较调整。

4.4堆的删除

我们是删除堆的最后一个元素,要怎么删除呢,我们可以将最后一个元素和第一个元素进行交换,然后使堆向下调整即可。

        

4.4.1向下调整法

4.5取堆顶

5. 向上调整法和向下调整法比较

推导时间复杂度,由于用图来表示有些难度,这里直接用笔写出来

这是向下调整法的推导过程

向下调整建堆的时间复杂度如图

下面是向上调整建堆的时间复杂度推导

总结:向上调整算法建堆是优于向下调整建堆的。

 6.堆的应用

6.1TOP-K问题

这种问题通常是在较大的数据样本中取出其中的最值,这时就可以通过堆来完成。

通常这类问题样本较大,排序就不太可取,可以建堆来实现。

6.2TOP-K思路

6.2.1用前n个数据来建堆

求最大的前n个就建小堆

求最小的前n个就建大堆

6.2.2剩下的N-K 

用剩下的N-K个数据来和堆顶数据比较,不满足就替换堆顶元素

6.3示例

#define _CRT_SECURE_NO_WARNINGS 1
#include"Heap.h"
#include<time.h>
void test()
{HP hp;HPInit(&hp);HPPush(&hp, 2);HPPush(&hp, 4);HPPush(&hp, 1);HPPush(&hp, 1); printf("%d", HPTop(&hp));}
void CreateNDate()
{int n = 10000;srand(time(0));const char* file = "data.txt";FILE* fin = fopen(file, "w");if (file == NULL){perror("fopen fail");return;}for (int i = 0; i < n; i++){int x = (rand() + i) % 1000000;fprintf(fin, "%d\n", x);}fclose(fin);
}
void topk()
{int k = 0;printf("输入k的值\n");scanf("%d", &k);const char* file = "data.txt";FILE* fout = fopen(file, "r");int* arr = (int*)malloc(sizeof(int) * k);for (int i = 0; i < k; i++){fscanf(fout, "%d", &arr[i]);}//建堆for (int i = (k - 1 - 1) / 2; i >= 0; i--){AdjustDown(arr, i, k);}int x = 0;while (fscanf(fout, "%d", &x) != EOF){if (x > arr[0]){arr[0] = x;AdjustDown(arr, 0, k);}}for (int i = 0; i < k; i++) {printf("%d ", arr[i]);}fclose(fout);
}int main()
{CreateNDate();topk();return 0;
}

http://www.wangmingla.cn/news/11416.html

相关文章:

  • 网站开发的高级阶段包括新闻20条摘抄大全
  • 深圳网站建设者百度关键词排名技术
  • 用别的域名给网站做竞价最火的推广软件
  • 设计师如何做自己的个人网站nba西部排名
  • 优网营销网站建设贵阳网站建设公司
  • 网站建设品牌公司低价刷赞网站推广
  • 书店网站建设设计方案百度网盘app下载安装电脑版
  • 本地上海集团网站建设河南seo优化
  • 长沙个人做网站做网站优化推广
  • 日本做a的动画视频在线观看网站台州百度推广优化
  • 做企业网站报价百度关键词搜索排名帝搜软件
  • dw网页制作步骤图文cs6黑帽seo之搜索引擎
  • 怎么在别人网站上做锚文本链接今天最新新闻事件报道
  • 有哪些网站有收录做红酒的商行百度账号购买1元40个
  • 单位门户网站建设百度搜索排名与点击有关吗
  • 门户网站开发招标热搜关键词
  • 网站排名怎么做的seo sem关键词优化
  • 深圳模板网站建设深圳网络推广营销公司
  • 这样自己做网站本周热点新闻事件
  • 做商城类网站备案时需提供什么证件b站推广网站2024mmm
  • 上线了 建立网站今天发生的重大新闻内容
  • 智慧门店管理服务平台seo快速排名首页
  • 西部数码做网站无代码系统搭建平台
  • 怎么把搜到自己的网站最新国际新闻 大事件
  • wordpress网站使用他达拉非片
  • 网站个人备案和企业备案百度竞价外包
  • 网站怎么做全屏滚动app推广
  • 快速建站哪里好永久免费不收费的污染app
  • 做陶瓷公司网站吴中seo页面优化推广
  • 人狗大战java代码厦门seo服务