揭秘Top-K问题:算法探索、性能优化与应用场景深度解析

在线体验各类最新模型,更有模型 免费Token 额度领取!
立即体验
简介: 揭秘Top-K问题:算法探索、性能优化与应用场景深度解析

一、什么是 TOPK 问题?

Top-K 问题是一类常见的算法问题,其中目的是从一组元素中找到排名前K的元素。具体来说,对于给定的一组数据。

  • Top-K 问题要求找到其中最大(或最小)的K个元素。

二、日常生活中的 TOPK 问题

Top-K 问题要求找到其中最大(或最小)的K个元素,这类问题我们的生活中也经常遇到,例如排名问题?

  • 例如找出排名最高的 5 家店铺,这就要根据销量来算了
  • 淘宝效率最高的5个店铺这些都需要用到 TOPK 问题

2.1 美团店面排行

2.2 软件排行榜

2.3 富豪榜

三、TOPK 问题的实现代码

TOPK问题大家第一时间想到的当让当然就是 排序但排序的消耗太大了,我们只需要找到前 100 名但要把整个数据全部排序好。

  • 而我们刚好学了堆这个是数据结构
  • 每次 堆顶要不就是最大或者最小的

而需要前100名的时候就先把,前100 个数据建。然后再和堆顶进行比较进行向下调整,这样整个数据的前100是不就被排出来了。

3.1 TOK问题的核心思想

🔥 前 TOP 个数据建堆,每次拿堆顶和剩下数据进行比较,进行向下调整。

  • 这样我们建的堆就是 最大或最小的前 TOP个数

📚 代码演示:

void PrintTopK(const char* filename, int k)
{
  // 1. 打开数据文件建堆--用a中前k个元素建堆
  FILE* fout = fopen(filename, "r");
  if (fout == NULL)
  {
    perror("fopen fail");
    return;
  }
  //开辟堆空间
  int* minheap = (int*)malloc(sizeof(int) * k);
  if (minheap == NULL)
  {
    perror("malloc fail");
    return;
  }
  //录入数据
  for (int i = 0; i < k; i++)
  {
    fscanf(fout, "%d", &minheap[i]);
  }
  //建堆
  for (int i = (k - 2) / 2; i >= 0; --i)
  {
    adjustdown(minheap, k, i);
  }
  // 2. 将剩余n-k个元素依次与堆顶元素交换,不满则则替换
  int x = 0;
  while (fscanf(fout, "%d", &x) != EOF)
  {
    if (x > minheap[0])
    {
      minheap[0] = x;
      adjustdown(minheap, k, 0);
    }
  }
  free(minheap);
  fclose(fout);
}

🔥 注:这里采用的是文件打开方式有些书上可能给的是一个数组接收原理都是一样的!

3.2 数据文件的创建

📚 代码演示:

void TestTopk()
{
  // 造数据
  int n = 10000000;
  srand(time(0));
  const char* file = "data.txt";
  FILE* fin = fopen(file, "w");
  if (fin == NULL)
  {
    perror("fopen error");
    return;
  }
  for (int i = 0; i < n; ++i)
  {
    int x = (rand() + i) % 10000000;
    fprintf(fin, "%d\n", x);
  }
  fclose(fin);
  //PrintTopK(a, n, 10);
}

3.2 TOK问题的代码测试

这里拿了一千万个数据进行比较可以看到,只需要几秒钟就出来了大家可以去试验一下。

📝文章结语:

☁️ 把本章的内容全部掌握,铁汁们就可以熟练应用switch语句啦!

看到这里了还不给博主扣个:
⛳️ 点赞🍹收藏 ⭐️ 关注

💛 💙 💜 ❤️ 💚💓 💗 💕 💞 💘 💖

拜托拜托这个真的很重要!

你们的点赞就是博主更新最大的动力!

有问题可以评论或者私信呢秒回哦。

目录
相关文章
|
机器学习/深度学习 文字识别 监控
安全监控系统:技术架构与应用解析
该系统采用模块化设计,集成了行为识别、视频监控、人脸识别、危险区域检测、异常事件检测、日志追溯及消息推送等功能,并可选配OCR识别模块。基于深度学习与开源技术栈(如TensorFlow、OpenCV),系统具备高精度、低延迟特点,支持实时分析儿童行为、监测危险区域、识别异常事件,并将结果推送给教师或家长。同时兼容主流硬件,支持本地化推理与分布式处理,确保可靠性与扩展性,为幼儿园安全管理提供全面解决方案。
672 3
|
10月前
|
运维 算法 搜索推荐
基于天牛须(BAS)与NSGA-Ⅱ混合算法的交直流混合微电网多场景多目标优化调度(Matlab代码实现)
基于天牛须(BAS)与NSGA-Ⅱ混合算法的交直流混合微电网多场景多目标优化调度(Matlab代码实现)
471 1
|
11月前
|
机器学习/深度学习 人工智能 算法
【两阶段鲁棒微网】【不确定性】基于关键场景辨别算法的两阶段鲁棒微网优化调度(Matlab代码实现)
【两阶段鲁棒微网】【不确定性】基于关键场景辨别算法的两阶段鲁棒微网优化调度(Matlab代码实现)
184 3
|
10月前
|
机器学习/深度学习 分布式计算 算法
【风场景生成与削减】【m-ISODATA、kmean、HAC】无监督聚类算法,用于捕获电力系统中风场景生成与削减研究(Matlab代码实现)
【风场景生成与削减】【m-ISODATA、kmean、HAC】无监督聚类算法,用于捕获电力系统中风场景生成与削减研究(Matlab代码实现)
328 0
|
10月前
|
机器学习/深度学习 数据采集 算法
【风光场景生成】基于改进ISODATA的负荷曲线聚类算法(Matlab代码实现)
【风光场景生成】基于改进ISODATA的负荷曲线聚类算法(Matlab代码实现)
211 0
|
10月前
|
机器学习/深度学习 算法 安全
小场景大市场:猫狗识别算法在宠物智能设备中的应用
将猫狗识别算法应用于宠物智能设备,是AIoT领域的重要垂直场景。本文从核心技术、应用场景、挑战与趋势四个方面,全面解析这一融合算法、硬件与用户体验的系统工程。
832 0
|
10月前
|
机器学习/深度学习 存储 算法
基于密集型复杂城市场景下求解无人机三维路径规划的Q-learning 算法研究(Matlab代码实现)
基于密集型复杂城市场景下求解无人机三维路径规划的Q-learning 算法研究(Matlab代码实现)
212 0
|
11月前
|
机器学习/深度学习 算法 数据挖掘
基于自适应遗传算法风光场景生成的电动汽车并网优化调度【IEEE33节点】(Matlab代码实现)
基于自适应遗传算法风光场景生成的电动汽车并网优化调度【IEEE33节点】(Matlab代码实现)
262 0
|
存储 监控 算法
企业上网监控场景下布隆过滤器的 Java 算法构建及其性能优化研究
布隆过滤器是一种高效的数据结构,广泛应用于企业上网监控系统中,用于快速判断员工访问的网址是否为违规站点。相比传统哈希表,它具有更低的内存占用和更快的查询速度,支持实时拦截、动态更新和资源压缩,有效提升系统性能并降低成本。
572 0
|
人工智能 API 开发者
HarmonyOS Next~鸿蒙应用框架开发实战:Ability Kit与Accessibility Kit深度解析
本书深入解析HarmonyOS应用框架开发,聚焦Ability Kit与Accessibility Kit两大核心组件。Ability Kit通过FA/PA双引擎架构实现跨设备协同,支持分布式能力开发;Accessibility Kit提供无障碍服务构建方案,优化用户体验。内容涵盖设计理念、实践案例、调试优化及未来演进方向,助力开发者打造高效、包容的分布式应用,体现HarmonyOS生态价值。
982 27

热门文章

最新文章

推荐镜像

更多
  • DNS