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

dw使用模板做网站教程全网营销外包

dw使用模板做网站教程,全网营销外包,web前端开发技术第三版课后答案,用muse做网站文章目录 TopK问题大小根堆算法大根堆小根堆代码实现 快排分割算法代码实现 TopK问题 能够在O(n)线性时间复杂度找到海量数据的前k个元素(top k),可以采用大小根堆算法、快排分割算法解决。应用:TOP10热词推荐、TOP店铺推荐、外卖评分最低的10家等等。 大…

文章目录

  • TopK问题
  • 大小根堆算法
    • 大根堆
    • 小根堆
    • 代码实现
  • 快排分割算法
    • 代码实现

TopK问题

能够在O(n)线性时间复杂度找到海量数据的前k个元素(top k),可以采用大小根堆算法、快排分割算法解决。应用:TOP10热词推荐、TOP店铺推荐、外卖评分最低的10家等等。

大小根堆算法

举例说明大小根堆算法解决TopK问题思想:给出一个随机序列
在这里插入图片描述
1、求出序列中值最小前3个元素(大根堆)
2、求出序列中值最大前3个元素(小根堆)

大根堆

1、求出序列中值最小前3个元素(大根堆)
大根堆堆顶元素的值是最大的,思想:利用k个元素构建大根堆,把大根堆的堆顶最大值不断淘汰,放入最小值。

在这里插入图片描述

小根堆

2、求出序列中值最大前3个元素(小根堆)
小根堆堆顶元素的值是最小的,思想:利用k个元素构建小根堆,把小根堆的堆顶最小值不断淘汰,放入最大值。

在这里插入图片描述

堆内调整的时间复杂度为常数级。 所以能在线性时间内完成。

代码实现

1、随机实现序列,求其中的low5、top5。

#include<iostream>
#include<vector>
#include<stdlib.h>
#include<time.h> 
#include<queue>
#include<functional>
using namespace std;int main(){vector<int> vec;srand(time(NULL));for(int i = 0 ; i < 100 ; ++i){vec.push_back(rand() % 10000);}//求vec中值最小的前五个元素  定义一个优先队列 priority_queue<int> low5;int k = 5; //前k个元素构建一个大根堆 for(int i = 0 ; i < k ; ++i){low5.push(vec[i]);}//剩下的元素遍历for(int i = k ; i < vec.size() ; ++i){//当前元素小于堆顶元素时 调整 if(low5.top() > vec[i]){		low5.pop();low5.push(vec[i]);}} //输出low5while(!low5.empty()){cout<< low5.top() << " ";low5.pop();}cout<<endl;//求vec中值最大的前五个元素 定义一个从小到大排序的优先队列priority_queue<int, vector<int>, greater<int>> top5;//前k个元素构建一个小根堆 for(int i = 0 ; i < k ; ++i){top5.push(vec[i]);}//剩下的元素遍历for(int i = k ; i < vec.size() ; ++i){//当前元素大于堆顶元素时 调整 if(top5.top() < vec[i]){		top5.pop();top5.push(vec[i]);}} //输出low5while(!top5.empty()){cout<< top5.top() << " ";top5.pop();}cout<<endl;//	for(auto val : vec){
//		cout<< val <<" ";
//	}
//	cout<<endl;return 0;
} 

2、查重问题结合topK综合:统计重复次数最小的前三个元素。

#include<iostream>
#include<vector>
#include<stdlib.h>
#include<time.h> 
#include<queue>
#include<functional>
#include<unordered_map>
using namespace std;int main(){vector<int> vec;srand(time(NULL));for(int i = 0 ; i < 10000 ; ++i){vec.push_back(rand() % 100);}//统计重复次数 求出现次数最小的前三个数字unordered_map<int ,int> map;int k = 3;for(auto val : vec){map[val]++;} //大根堆中放入key-value  自定义排序 using _type = pair<int,int>;// 大根堆比较函数auto cmp = [](const _type& a, const _type& b) { return a.second < b.second; };
//	 using Comp = functional<bool(_type&, _type&)>; priority_queue<_type, vector<_type> , decltype(cmp)> low3(cmp);auto it = map.begin();for(int i = 0 ; i < k ; ++i, ++it){low3.push(*it);} for(; it != map.end() ; ++it){if(low3.top().second > it->second){low3.pop();low3.push(*it);}}while(!low3.empty()){cout<<"key:" << low3.top().first<<"ans"<<low3.top().second<<endl;low3.pop();}return 0;
} 

快排分割算法

举例说明快排分割算法解决TopK问题思想:给出一个随机序列求前三最小值;
在这里插入图片描述

在这里插入图片描述

代码实现

#include <iostream>
using namespace std;
//快排分割函数
int Partation(int arr[], int begin, int end)
{int val = arr[begin];int i = begin;int j = end;while (i < j){while(i < j && arr[j] > val)j--;if (i < j){arr[i] = arr[j];i++;}while (i < j && arr[i] < val)i++;if (i < j){arr[j] = arr[i];j--;}}arr[i] = val;return i;
}
//求top k的函数
void SelectTopK(int arr[], int begin, int end, int k)
{int pos = Partation(arr, begin, end);if (pos == k - 1){return;}else if (pos > k - 1){SelectTopK(arr, begin, pos - 1, k);}else{SelectTopK(arr, pos + 1, end, k);}
}
int main()
{int arr[] = { 64, 45, 52, 80, 66, 68, 0, 2, 18, 75 };int size = sizeof arr / sizeof arr[0];//求值最小的前3个元素int k = 3;SelectTopK(arr, 0, size - 1, k);for (int i = 0; i < k; i++){cout << arr[i] << " ";}cout << endl;
}
http://www.dtcms.com/wzjs/470866.html

相关文章:

  • 深圳最新疫情防控动态沈阳专业seo排名优化公司
  • 网站建设算什么行业人力资源培训网
  • 如何设计服装网站规划网络广告营销案例
  • html网站的规划与建设6百度信息流广告推广
  • 重庆响应式网站网络销售有哪些
  • 阜新公司做网站网络营销外包网络推广
  • 张家港早晨网站建设竞价托管哪家便宜
  • 微信小程序上线需要多少钱汕头seo建站
  • 免费软件的源代码公开吗东莞百度快速优化排名
  • 做网站 站内搜索引擎如何进行百度推广
  • 做网站规避什么百度收录站长工具
  • 网站中的ppt链接怎么做太原自动seo
  • 宁波住房和城乡建设培训网站扬州整站seo
  • 网站建设时间表301313龙虎榜
  • 梁山网站建设哪家好营销型网站建设哪家好
  • 临平做网站企业网站优化价格
  • 北京企业建设网站成都网站设计公司
  • 自己电脑做服务器搭建网站如何创建个人网页
  • 酷家乐网站做墙裙教程百度广告销售
  • 快速搭建小程序汕头seo收费
  • 肇庆网站制作系统谷歌网站网址
  • 福田网站制作各大搜索引擎入口
  • wordpress 首页logoseo搜索引擎优化试题及答案
  • 上国外网站的host推广app大全
  • 做网站做丝袜美女的能行吗武汉百度推广外包
  • 手机网站建设域名空间做互联网项目怎么推广
  • 网站建设工作会议.企业网站推广有哪些
  • 网站没有备案信息该怎么做小说网站排名免费
  • 做网站工作怀孕2023年8月新冠疫情
  • 网站建设技术杭州谷歌推广