应用C++ STL以最小堆方法解决Top K 问题.doc_第1页
应用C++ STL以最小堆方法解决Top K 问题.doc_第2页
应用C++ STL以最小堆方法解决Top K 问题.doc_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

应用C+ STL以最小堆方法解决Top K问题问题的来源我想不必多言了,很多的面试题中,以及中都有对问题的描述,以及相关的解法,写本文的目的是以C+ STL的方式用最小堆解法解决这个问题。那么什么是最小堆呢?其实最小堆是一颗特殊二叉树,其父节点的key小于其孩子节点,对!最小堆不是堆,是二叉树!最小堆解法其实可以将问题的时间复杂度缩减到nlgK,但是本文由于没有在C+ STL中找到合适的函数保持最小堆(如果用自己写代码可以做到lgk),所以必须每次重建最小堆(如果您有更好的建议,欢迎指点),因此,时间复杂度为nk,另外本文假设kn.#include#include#include#includeusingnamespacestd;voidTopKAlgorithm(intinputArray,intnInputLength,intnOutputLength )/construct the minimum heap the size is K vector vec(inputArray,inputArray+nOutputLength); make_heap (vec.begin(),vec.end(), greater();for(inti=nOutputLength; i= vec0) vec0 = inputArrayi;/此处其实只需要保持堆的性质即可,并不需要重建堆 make_heap (vec.begin(),vec.end(), greater(); for(inti=0; inOutputLength; i+) inputArrayi=veci; intmain ()intInputValues = 10,200,30,5,15,110,2,42,6,36;TopKAlgorithm(InputValues, 10, 3);cout The top K Values are:;for(unsignedi=0; i3; i+) cout InputValuesi;cout endl;return0;总结本文以最小堆解法解决了TOP K问题,完全采用C+的STL原生函数加以实现,其中没有手动加入任何操作最小堆的代码,另外,本文的一个遗憾是第二次

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论