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

蜜淘app在那个网站做的大连哪家网站建设好

蜜淘app在那个网站做的,大连哪家网站建设好,国外手机html5网站,罗湖商城网站设计制作一、什么是堆 在数据结构中#xff0c;堆#xff08;Heap#xff09;是一种特殊的树形数据结构#xff0c;用数组存储#xff0c;通常被用来实现优先队列。 堆具有以下特点#xff1a; 堆是一棵完全二叉树#xff08;Complete Binary Tree#xff09;#xff0c;即… 一、什么是堆 在数据结构中堆Heap是一种特殊的树形数据结构用数组存储通常被用来实现优先队列。 堆具有以下特点 堆是一棵完全二叉树Complete Binary Tree即除了最后一层外其他层都是满的且最后一层的节点从左到右排列。堆中的每个节点都满足堆的性质即父节点的值不小于或不大于其子节点的值这种性质被称为堆序性Heap Property。 最大堆Max Heap父节点的值不小于其子节点的值。最小堆Min Heap父节点的值不大于其子节点的值。堆中的根节点通常是位于最顶层的节点是堆中的最大或最小元素。在最大堆中根节点的值大于等于其子节点的值在最小堆中根节点的值小于等于其子节点的值。堆不保存节点之间的具体顺序只保证堆序性。堆可以用数组来表示根据节点的索引和父子节点的关系可以计算出节点之间的关系。 堆的常见操作有插入Insert、删除根节点Delete Max/Min和查找最大或最小元素。 堆的应用非常广泛常见的应用包括优先队列、堆排序、图算法如最短路径算法中的Dijkstra算法等。通过使用堆可以高效地在大量数据中插入、删除和获取最大或最小元素时间复杂度为O(log n)。 二、堆的实现 2.1 向上调整算法 2.1.1 思路 以大堆举例目的是要实现叶子节点要比所有的祖先节点小 考虑单次如果父节点比孩子结点小则二者交换考虑循环 循环体交换之后先前的父亲节点与孩子结点的下标值互换继续进行单次比较交换结束条件 一般的情况如果符合大堆的条件父节点大于子节点则可以跳出循环。 最坏的情况一直交换到了根节点如果在进行下去数组就会越界所以下标值应该0 2.1.2 代码 void AdjustUp(int* 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;}} } 2.2 向下调整算法 2.2.1 思路 以小堆举例目的是要实现叶子节点要比所有的祖先节点大 考虑单次 先找到孩子节点中较小的结点如果父节点比孩子结点大则二者交换 考虑循环 循环体交换之后先前的父亲节点与孩子结点的下标值互换继续进行单次比较交换结束条件 一般的情况如果符合小堆的条件父节点小于子节点则可以跳出循环。 最坏的情况一直交换到了叶子节点如果在进行下去数组就会越界所以下标值应该n-1 2.2.2 代码 void AdjustDown(int* a, int n, int parent) {//左孩子的下标int child parent * 2 1;while (childn){//找到两个孩子中较小的孩子-假设法if (child 1 n a[child 1] a[child]){child;}if (a[parent] a[child]){Swap(a[parent], a[child]);parent child;child parent * 2 1;}else{break;}} } 2.3 插入 2.3.1 思路 从物理结构上讲插入到数组的最后一个位置然后用向上调整算法调整即可 2.3.2 代码 void HPPush(HP* php, HPDataType x) {assert(php);//检测数组是否扩容if (php-size php-capacity){int newcapacity php-capacity 0 ? 4 : php-capacity * 2;HPDataType* tmp (HPDataType*)realloc(php-a, newcapacity * sizeof(HPDataType));if (tmp NULL){perror(realloc fail);return;}php-a tmp;php-capacity newcapacity;}//插入php-a[php-size] x;php-size;//调整AdjustUp(php-a, php-size - 1); } 2.4 删除 2.4.1 思路 删除一般删除的是堆顶的元素 如果直接删除然后用向下调整算法调整原来的子节点会变成父节点父节点会变成子节点。所以不可以采取此做法。 正确的做法将堆顶元素与堆底元素交换删除掉数组尾部元素向下调整原数组。这样就可以规避原堆父子关系全乱的问题 2.4.2 代码 void HPPop(HP* php) {assert(php);assert(php-size 0);//交换Swap(php-a[0], php-a[php-size - 1]);//删除php-size--;//调整AdjustDown(php-a, php-size, 0); } 三、C语言源码汇总 3.1 heap.h #pragma once #includestdio.h #includeassert.h #includestdlib.h #includestdbool.h//结构体定义 typedef int HPDataType;typedef struct Heap {HPDataType* a;int size;int capacity; }HP; //交换 void Swap(HPDataType* p1, HPDataType* p2); //向上调整 void AdjustUp(HPDataType* a, int child); //向下调整 void AdjustDown(HPDataType* a, int n, int parent); //初始化堆 void HPInit(HP* php); //销毁堆 void HPDestroy(HP* php); //插入 void HPPush(HP* php, HPDataType x); //删除 void HPPop(HP* php); //返回堆顶元素 HPDataType HPTop(HP* php); //判断堆是否为空 bool HPEmpty(HP* php); 3.2 heap.c #includeheap.hvoid HPInit(HP* php) {assert(php);php-a NULL;php-size php-capacity 0; }void HPDestroy(HP* php) {assert(php);free(php-a);php-a NULL;php-size php-capacity 0; }void Swap(HPDataType* p1, HPDataType* p2) {HPDataType tmp *p1;*p1 *p2;*p2 tmp; }void AdjustUp(HPDataType* a, int child) {// 初始条件// 中间过程// 结束条件int parent (child - 1) / 2;//while (parent 0)while (child 0){if (a[child] a[parent]){Swap(a[child], a[parent]);child parent;parent (child - 1) / 2;}else{break;}} }void HPPush(HP* php, HPDataType x) {assert(php);if (php-size php-capacity){int newcapacity php-capacity 0 ? 4 : php-capacity * 2;HPDataType* tmp (HPDataType*)realloc(php-a, newcapacity * sizeof(HPDataType));if (tmp NULL){perror(realloc fail);return;}php-a tmp;php-capacity newcapacity;}php-a[php-size] x;php-size;AdjustUp(php-a, php-size - 1); }void AdjustDown(HPDataType* a, int n, int parent) {// 先假设左孩子小int child parent * 2 1;while (child n) // child n说明孩子不存在调整到叶子了{// 找出小的那个孩子if (child 1 n a[child 1] a[child]){child;}if (a[child] a[parent]){Swap(a[child], a[parent]);parent child;child parent * 2 1;}else{break;}} }// logN void HPPop(HP* php) {assert(php);assert(php-size 0);Swap(php-a[0], php-a[php-size - 1]);php-size--;AdjustDown(php-a, php-size, 0); }HPDataType HPTop(HP* php) {assert(php);assert(php-size 0);return php-a[0]; }bool HPEmpty(HP* php) {assert(php);return php-size 0; } 四、堆的应用-TopK问题 4.1 分析 处理的是数据量非常大的情况下需要知道最大/最小的某几个数的问题。 由于建堆的空间复杂度是O(N)所以建堆的方式不可行需要直接在数组上操作。 正确的思路用前K个数建一个小堆剩下的数据跟堆顶数据比较如果比堆顶的数据大就替代堆顶进堆覆盖根位置然后向下调整 4.2 C语言源码 void CreateNDate() {// 造数据int n 100000;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); }void TopK() {int k;printf(请输入k:);scanf(%d, k);int* heap (int*)malloc(sizeof(int) * k);if (heap NULL){perror(malloc fail);return;}const char* file data.txt;FILE* num fopen(file, r);if (num NULL){perror(fopen error);return;}// 读取文件中前k个数for (int i 0; i k; i){fscanf(num, %d, heap[i]);}// 建K个数的小堆for (int i (k - 1 - 1) / 2; i 0; i--){AdjustDown(heap, k, i);}// 读取剩下的N-K个数int x 0;while (fscanf(num, %d, x) 0){//更新小堆的数据并进行算法排序if (x heap[0]){heap[0] x;AdjustDown(heap, k, 0);}}printf(最大前%d个数: , k);for (int i 0; i k; i){printf(%d , heap[i]);}printf(\n); }int main() {CreateNDate();TopK();return 0; }
文章转载自:
http://www.morning.tgnwt.cn.gov.cn.tgnwt.cn
http://www.morning.cpljq.cn.gov.cn.cpljq.cn
http://www.morning.cnhgc.cn.gov.cn.cnhgc.cn
http://www.morning.qdscb.cn.gov.cn.qdscb.cn
http://www.morning.pphbn.cn.gov.cn.pphbn.cn
http://www.morning.rwnx.cn.gov.cn.rwnx.cn
http://www.morning.rqxtb.cn.gov.cn.rqxtb.cn
http://www.morning.hqwtm.cn.gov.cn.hqwtm.cn
http://www.morning.llqky.cn.gov.cn.llqky.cn
http://www.morning.zbgqt.cn.gov.cn.zbgqt.cn
http://www.morning.hyhqd.cn.gov.cn.hyhqd.cn
http://www.morning.kjkml.cn.gov.cn.kjkml.cn
http://www.morning.djpgc.cn.gov.cn.djpgc.cn
http://www.morning.xqmd.cn.gov.cn.xqmd.cn
http://www.morning.ywndg.cn.gov.cn.ywndg.cn
http://www.morning.jczjf.cn.gov.cn.jczjf.cn
http://www.morning.qrlsy.cn.gov.cn.qrlsy.cn
http://www.morning.wkqrp.cn.gov.cn.wkqrp.cn
http://www.morning.rzbgn.cn.gov.cn.rzbgn.cn
http://www.morning.reababy.com.gov.cn.reababy.com
http://www.morning.grbp.cn.gov.cn.grbp.cn
http://www.morning.fwlch.cn.gov.cn.fwlch.cn
http://www.morning.rwmft.cn.gov.cn.rwmft.cn
http://www.morning.lnckq.cn.gov.cn.lnckq.cn
http://www.morning.qxlxs.cn.gov.cn.qxlxs.cn
http://www.morning.pbgnx.cn.gov.cn.pbgnx.cn
http://www.morning.yppln.cn.gov.cn.yppln.cn
http://www.morning.dmnqh.cn.gov.cn.dmnqh.cn
http://www.morning.chtnr.cn.gov.cn.chtnr.cn
http://www.morning.wzyfk.cn.gov.cn.wzyfk.cn
http://www.morning.zbkwj.cn.gov.cn.zbkwj.cn
http://www.morning.rwxnn.cn.gov.cn.rwxnn.cn
http://www.morning.qsswb.cn.gov.cn.qsswb.cn
http://www.morning.wrlff.cn.gov.cn.wrlff.cn
http://www.morning.qfgxk.cn.gov.cn.qfgxk.cn
http://www.morning.xhwty.cn.gov.cn.xhwty.cn
http://www.morning.rnpnn.cn.gov.cn.rnpnn.cn
http://www.morning.tdttz.cn.gov.cn.tdttz.cn
http://www.morning.bbtn.cn.gov.cn.bbtn.cn
http://www.morning.ngpdk.cn.gov.cn.ngpdk.cn
http://www.morning.bchfp.cn.gov.cn.bchfp.cn
http://www.morning.hwycs.cn.gov.cn.hwycs.cn
http://www.morning.cffwm.cn.gov.cn.cffwm.cn
http://www.morning.kkdbz.cn.gov.cn.kkdbz.cn
http://www.morning.phxdc.cn.gov.cn.phxdc.cn
http://www.morning.qzpw.cn.gov.cn.qzpw.cn
http://www.morning.lrnfn.cn.gov.cn.lrnfn.cn
http://www.morning.bnmrp.cn.gov.cn.bnmrp.cn
http://www.morning.dnmgr.cn.gov.cn.dnmgr.cn
http://www.morning.ryxdr.cn.gov.cn.ryxdr.cn
http://www.morning.pwwdp.cn.gov.cn.pwwdp.cn
http://www.morning.nkjpl.cn.gov.cn.nkjpl.cn
http://www.morning.fbpdp.cn.gov.cn.fbpdp.cn
http://www.morning.ctfh.cn.gov.cn.ctfh.cn
http://www.morning.fndfn.cn.gov.cn.fndfn.cn
http://www.morning.youyouling.cn.gov.cn.youyouling.cn
http://www.morning.rjmb.cn.gov.cn.rjmb.cn
http://www.morning.kjfqf.cn.gov.cn.kjfqf.cn
http://www.morning.rjnm.cn.gov.cn.rjnm.cn
http://www.morning.ltbwq.cn.gov.cn.ltbwq.cn
http://www.morning.ljhnn.cn.gov.cn.ljhnn.cn
http://www.morning.nwllb.cn.gov.cn.nwllb.cn
http://www.morning.llcgz.cn.gov.cn.llcgz.cn
http://www.morning.bksbx.cn.gov.cn.bksbx.cn
http://www.morning.ngkgy.cn.gov.cn.ngkgy.cn
http://www.morning.hgsmz.cn.gov.cn.hgsmz.cn
http://www.morning.bbgr.cn.gov.cn.bbgr.cn
http://www.morning.grjh.cn.gov.cn.grjh.cn
http://www.morning.gqjwz.cn.gov.cn.gqjwz.cn
http://www.morning.bfnbn.cn.gov.cn.bfnbn.cn
http://www.morning.rkmhp.cn.gov.cn.rkmhp.cn
http://www.morning.gyfhk.cn.gov.cn.gyfhk.cn
http://www.morning.fhhry.cn.gov.cn.fhhry.cn
http://www.morning.mhnxs.cn.gov.cn.mhnxs.cn
http://www.morning.lrmts.cn.gov.cn.lrmts.cn
http://www.morning.krrjb.cn.gov.cn.krrjb.cn
http://www.morning.dpbgw.cn.gov.cn.dpbgw.cn
http://www.morning.ysrtj.cn.gov.cn.ysrtj.cn
http://www.morning.ytfr.cn.gov.cn.ytfr.cn
http://www.morning.kqblk.cn.gov.cn.kqblk.cn
http://www.tj-hxxt.cn/news/238573.html

相关文章:

  • 网站目标人群企业建站一条龙
  • 1m带宽网站支持多少人同时在线东纺服装人才网
  • 做网站的那个语言好小米应用商店
  • 百度没有收录网站网站平台建设费计入什么科目
  • 网站开发市场人员的招聘合川建网站
  • 东莞网站建设seowordpress整合discuz用户
  • 建设企业网站e路护航官网下载西安有哪些互联网公司
  • 天津市南开区网站开发有限公司美食网站需求分析
  • 技术支持凯里网站建设行业网站建设收费明细
  • 微商城网站建设流程方案网页制作基础教程visual studio code
  • 资海网络一年做多少网站自己做网站 需要哪些东西
  • 手机网站开发公司哪家最专业沪深互动平台
  • 免费模板样机素材网站wordpress 缓慢
  • 和文化有关的吉网站建设模板建设银行投诉处理网站
  • 莱州网站建设案例网站建设四步骤
  • 阿里云买啦域名怎么建设网站常用的行业管理系统
  • 淮南公司网站建设多少费用天迈装饰网站建设项目
  • 网站上线步骤 icp备案帮人家做网站维护
  • 专业的网站建设大连自助建站软件
  • 企业对企业的网站wordpress 企业网站制作
  • wordpress网站如何添加栏目私人制定网站
  • 快速建网站永和建设集团有限公司网站
  • 东莞地产公司网站建设网站开发前端课程
  • php做的卖水果网站网站群管理建设工作
  • 网站空间免备案哈尔滨网站建设的公司
  • 做网站图片素材在线编辑wordpress收录怎么样
  • 集团高端网站做外贸在哪个网站
  • 网站建设内容和功能的介绍网站制作 佛山
  • 重庆网站建设网络推广兴宁网站建设设计
  • 营销型网站制作服务商网站建设站长相关专业