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

网络课程网站开发过程成品网站源码1688的优势

网络课程网站开发过程,成品网站源码1688的优势,安徽省建设信息网站,东莞专业微网站建设文章目录一、TopK问题是什么二、解决方法三、时间复杂度一、TopK问题是什么 TopK问题就是从1000个数中找出前K个最大的数或者最小的数这样的类似问题。 不过并不要求这k个数字必须是有序的,如果题目有要求,则进行堆排序即可。 还有比如求出全国玩韩信…

文章目录

  • 一、TopK问题是什么
  • 二、解决方法
  • 三、时间复杂度

一、TopK问题是什么

TopK问题就是从1000个数中找出前K个最大的数或者最小的数这样的类似问题。

不过并不要求这k个数字必须是有序的,如果题目有要求,则进行堆排序即可。

还有比如求出全国玩韩信前十名等等,排出班级前十名也是TopK问题。

二、解决方法

采用堆的方式可以较快解决。

思路:如果需要排前k个最大的数,则需要建一个小堆
如果需要排前k个最小的数,则需要建一个大堆

假设现在需要排序前k个最大的数,则需要建立一个小堆。
建立小堆是拿n个数的前k个数来建立的。

不能把n个数全部建立成一个小堆,这样效率会大打折扣,因为通过向下调整建堆的时间复杂度是O(N),假如要从10亿个数字中排前50个最大的,那么建立一个10亿个数大小的堆,开销还是比较大的。

建立了一个小堆后,此时堆顶元素是最小的,
从第k+1个数开始,只要第K+1个数大于堆顶元素,就将该数字于堆顶元素进行交换,然后再向下调整。

这样做的结果是:只要我比堆顶元素大,我就进堆,如果我在堆中是比较大的,我就会“下沉”到堆底,(因为这是一个小堆)。
这样遍历多次后,原来堆中的元素会被换成新的一批更大一点的元素。

当我们遍历完n个数后,留在堆中的一定是前k个最大的数。

代码如下:
随机生成10个1000以内的数字,求这10个数字的最大的3个:

void Find_TopK(int* a, int n ,int k)
{assert(a!=NULL);assert(k > 0);int* topk = (int*)malloc(sizeof(int) * k);assert(topk);for (int i = 0; i < k; ++i){topk[i] = a[i];}//1.先建堆,向下调整建堆,现在是建小堆,那就找最大的前k个//把前k个抓起来,建立一个k大小的堆for (int i = (k - 1 - 1) / 2; i >= 0; i--){AdjustDown(topk, k, i);}//2.然后从第k个开始,往堆里面插入int j = k;while (j < n){if (a[j] > topk[0]){topk[0] = a[j];AdjustDown(topk, k, 0);}j++;}printf("这10个数中最大的3个数为:\n");for (int i = 0; i < k; ++i){printf("%d ", topk[i]);}free(topk);topk = NULL;
}int main()
{srand(time(0));int a[100] = { 0 };printf("随机生成的10个1000以内的数为:\n");for (int i = 0; i < 10; ++i){a[i] = rand() % 1000;printf("%d ", a[i]);}printf("\n");int k = 3;int n = sizeof(a) / sizeof(a[0]);Find_TopK(a,n,k);return 0;
}

三、时间复杂度

建堆的时间复杂度:O(K)
遍历的时间复杂度:O(N-K)
每次遍历调整的时间复杂度:O(logK)
总的时间复杂度O(K+(N-K)logK) ≈ O(NlogK)

http://www.yayakq.cn/news/374134/

相关文章:

  • 企业门户网站设计广告推广代运营公司
  • 营销型网站应必备的七大功能全国免费发布广告信息
  • 怎样创建网站赚钱企业网站首页设计解析
  • 苏州网站设计深圳10大产品设计公司
  • 河南中安建设集团有限公司网站网络营销渠道的类型有哪些
  • 宝盒 网站开网店的流程和步骤
  • 临沂网站建设公司哪家好网站怎么做直播
  • 河南艾特 网站建设网络系统管理技能大赛考什么
  • 爱站网长尾关键词挖掘工具电脑版大麦网的网站建设
  • html5 php网站源码下载网站空间租赁费用
  • 山东省建设执业注册中心网站如何做网站的映射
  • 天河建设网站专家阳泉集团网站建设
  • 成都专业做游戏网站dhl做单网站
  • 企业网站建设需要哪些资料wordpress登录后台空白
  • 有云服务器怎么做网站crm系统开发
  • 简述网站制作的步骤免费视频素材网站有哪些
  • 数据库修改网站后台密码响应式网站有哪些2017
  • jsp网站建设模板下载做拍卖的网站有哪些
  • 营销网络是指公司在国内外寻找战略伙伴和同盟者外链优化方法
  • 大连网站建设咨询海南seo
  • 网站技术可行性手机怎么修改网页内容
  • 0元免费做代理关键词优化排名费用
  • php做的网站源代码在哪里济南百度代理
  • 监控视频怎么做直播网站google网站入口
  • 电脑做网页用什么软件沈阳网站关键词优化
  • 如何使用qq邮箱做网站网站设计制作的介绍
  • 查不到网站备案网站开发常用字体
  • 国外的建筑设计案例网站推广普通话奋进新征程宣传语
  • 深圳公司网站建设服务为先只做动漫的网站
  • 芜湖营销网站建设网站设计论文5000