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

做一张简单的app网站多钱绿色食品网站模板

做一张简单的app网站多钱,绿色食品网站模板,海外访问国内网站 dns,杭州精品网站建设公司本篇会解决一下几个问题#xff1a; 1.堆是什么#xff1f; 2.如何形成一个堆#xff1f; 3.堆的应用场景 堆是什么#xff1f; 堆总是一颗完全二叉树堆的某个节点总是不大于或不小于父亲节点 如图#xff0c;在小堆中#xff0c;父亲节点总是小于孩子节点的。 如图 1.堆是什么 2.如何形成一个堆 3.堆的应用场景   堆是什么 堆总是一颗完全二叉树堆的某个节点总是不大于或不小于父亲节点 如图在小堆中父亲节点总是小于孩子节点的。 如图在大堆中父亲节点总是大于孩子节点的。 堆和二叉树还是有很大区别的堆是用数组来实现的尽管逻辑结构上是一颗二叉树但在内存上要比二叉树好普通的二叉树你要用链表来存储他们的左右孩子还要给他们分配空间但堆只是用数组来表示。 如何形成一个堆 堆的创建有向上调整和向下调整两种方式。 向上调整从第一个非叶子节点开始向上调整一直调整到根节点。 用int a[] {1,5,3,8,7,6};来做例子 如图所示 向下调整从根节点开始和左右孩子中小或者大的节点比较交换直到小于数组元素。 堆的插入 堆的删除 删除堆是删除堆顶的元素将堆顶的元素根据最后一个数据一换然后删除数组中最后一个元素再进行向下调整算法。 这里想一想为什么要这样 1.因为堆是有数组来创建的如果直接删除堆顶的数据第一个缺点就是会造成移动从后往前覆盖这样就会造成一个问题。兄弟节点变成父子节点而且这样也不能很好的利用数组的优点。 2.如果是交换第一个和最后一个元素这样有2个优点 第一个是不会破坏除了堆顶的左右堆的结构。第二个就是会利用数组的优点数组读取速度很快这样每次最后或最小的元素就放在了后面。 堆的时间复杂度 向下调整时间复杂度 则要移动节点的总步数为 向上调整时间复杂度 则要调整的节点总数为 堆的应用场景 堆排序可以用堆的建立和堆的删除来实现排序堆排序十分稳定相同元素的相对位置不会发生交换而且时间复杂度都是ON*logNTOP-K问题我们想一想王者荣耀中前100的玩家是怎么实现的或者专业前10名...问题 1.先回答一下TOP-K问题即求数据结合中前K个最大的元素或最小的元素一把情况下数据很大。 2.对于这种场景首先想到的就是排序但是数据非常大排序就不可取了因为内存大小的原因不会全部加载到内存这时堆就发生了巨大的优势。 思路利用K个元素建堆如果是求最大的K个元素就建立小堆求最小的K歌元素就建立大堆。然后用N-K个元素与堆顶元素比较满足条件就交换。 下面是源码 void HeapInit(Heap* php) {assert(php);php-a NULL;php-size php-capacity 0; }void HeapDestroy(Heap* php) {assert(php);free(php-a);php-a NULL;php-capacity php-size 0; }void Swap(HeapDateType* child, HeapDateType* parent){HeapDateType tmp *child;*child *parent;*parent tmp; }void AdjustUp(HeapDateType* a,int child){int parent (child-1)/2;while(child 0){if(a[child] a[parent]){Swap(a[child],a[parent]);child parent;parent (child-1)/2;}else{break;} }}void HeapPush(Heap* php,HeapDateType x) {assert(php);if(php-size php-capacity){int newCapacity php-capacity 0?4:php-capacity*2;HeapDateType* tmp (HeapDateType*)realloc(php-a,sizeof(HeapDateType)*newCapacity);if(tmp NULL){perror(realloc fail\n);}php-a tmp;php-capacity newCapacity;}php-a[php-size] x;php-size;AdjustUp(php-a,php-size-1); }void HeapPrint(Heap* php) {assert(php);for(size_t i 0; iphp-size; i){std::cout php-a[i] ;}std::cout std::endl; }void AdjustDown(HeapDateType* a,int n, int parent) {int child parent*21;while(child n){if(child1 n a[child1] a[child]){child;}if(a[child] a[parent]){Swap(a[child],a[parent]);parent child;child parent*21;}else{break;}} }HeapDateType HeapTop(Heap* php) {assert(php);assert(php-size 0);return php-a[0]; }void HeapPop(Heap* php) {assert(php);assert(php-size 0);Swap(php-a[0],php-a[php-size-1]);--php-size;AdjustDown(php-a,php-size,0);}bool HeapEmpty(Heap* php) {assert(php);return php-size 0; } void HeapSort(int* a, int n) {//向上调整 O(n*logn) // for(size_t i 1; in; i){ // AdjustUp(a,i); // } ////向下调整 O(n)for(int i (n-2)/2; i0; i--){AdjustDown(a,n,i);}//时间复杂度O(N*logN)int end n-1;while(end 0){Swap(a[0],a[end]);AdjustDown(a,end,0);--end;} }void PrintTopK(const char* filename,int k) {FILE* fout fopen(filename,r);if(fout NULL){perror(fopen fail);exit(-1);}int* minHeap (int*)malloc(sizeof(int)*k);if(minHeap NULL){perror(malloc fail);exit(-1);}for(int i 0; ik; i){fscanf(fout,%d,minHeap[i]);}for(int i (k-2)/2; i0; i){AdjustDown(minHeap,k,0);}int x 0;while(fscanf(fout,%d,x)! EOF){if(x minHeap[0]){minHeap[0] x;AdjustDown(minHeap,k,0);}}for(int i 0; ik; i){std::cout minHeap[i] ;}std::cout std::endl; }
http://www.zqtcl.cn/news/744838/

相关文章:

  • 网站设置英文怎么说广州优质网站建设案例
  • 外贸怎样做网站临汾花果街网站建设
  • 专业集团门户网站建设方案南昌医院网站建设
  • 用php做美食网站有哪些新建网站如何做关键词
  • 企业网站建设招标微信公众平台官网登录入口网页版
  • 网站宣传图网站程序预装
  • 网站设计论文选题seo排名优化推广报价
  • wordpress图床网站百度链接收录
  • 八年级信息网站怎么做电商网站的支付接入该怎么做呢
  • wordpress 的应用大兴安岭地网站seo
  • 网站建站作业做直播网站赚钱
  • 网站建设虍金手指花总简单免费制作手机网站
  • 京东网站是刘强冬自己做的吗献县网站建设价格
  • 余姚什么网站做装修比较好邢台企业做网站哪儿好
  • 网站建设后端国外购物平台排行榜前十名
  • 西安做百度推广网站 怎样备案简述商务网站建设
  • 如何建设本地网站东莞常平限电通知2021
  • 成都网站建设cdajcx重庆推广网站排名价格
  • 建网站的价格网店设计方案计划书
  • 长沙做公司网站如何制作个人网站教程
  • 做一个网站怎么做的仿qq网站程序
  • 曲靖市建设局网站官网织梦可以放两个网站
  • 网站建设方案ppt模板网站怎么做用户登录数据库
  • 做3d图的网站有哪些软件有哪些专业设计企业网站
  • 青海省wap网站建设公司做美工比较好的网站
  • 1个云虚拟主机怎么做多个网站网站规划与建设实验心得
  • led视频网站建设公众号代运营平台
  • 北京微信网站开发费用软件开发做平台
  • 平面设计师必备网站精湛的赣州网站建设
  • 上海市住房和城乡建设部网站官网wordpress页面点赞