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

网站制作动济南一哥网站建设公司

网站制作动,济南一哥网站建设公司,免费ppt模板免费网站,哪个平台可以随便发广告💖💖💖欢迎来到我的博客,我是anmory💖💖💖 又和大家见面了 欢迎来到动画详解数据结构系列 作为一个程序员你不能不掌握的知识 先来自我推荐一波 个人网站欢迎访问以及捐款 推荐阅读 如何低成本搭…

💖💖💖欢迎来到我的博客,我是anmory💖💖💖
又和大家见面了
欢迎来到动画详解数据结构系列
作为一个程序员你不能不掌握的知识
先来自我推荐一波
个人网站欢迎访问以及捐款
推荐阅读
如何低成本搭建个人网站
专栏:动画详解leetcode算法题
C语言知识
玉桂狗听音乐

前导知识:求二叉树的节点个数

满二叉树的节点个数

对于一个满二叉树,每一层都满足等比数列,所以其节点个数总和我们可以使用等比数列求和公式来计算
我们假设满二叉树的高度是 h h h,节点个数是 N N N
满二叉树的节点个数

因此,满二叉树的节点个数是 N = 2 h − 1 N = 2^h-1 N=2h1
满二叉树的高度是 h = l o g 2 ( N + 1 ) h = log_2(N+1) h=log2(N+1)

最后一层只有一个节点的二叉树的节点个数

最后一层仅有一个节点的二叉树
公式推导

这样的二叉树的节点个数为 N N N= 2^h-1
高度为 h = l o g 2 N h=log_2N h=log2N


向下建堆的时间复杂度推导

向下建堆代码

// 向下调整函数
// n是指堆中有效元素的数量, parent是指堆顶的元素
// 需要比较子节点哪个大哪个小
void AdjustDown(HPDataType* a, int n,int parent)
{// 先假设左孩子大int child = parent * 2 + 1;while (child < n)// 当child>=n时就说明child已经到达叶子节点了{// 先找出左右孩子节点中大的那个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;}}
}

向下建堆的时间复杂度推导

首先我们需要明白的是向下建堆是从倒数第一个非叶子节点开始建堆的
从何处开始建堆操作
知道了这个之后,我们就可以开始考虑最坏的建堆情况,也就是每一次都要向下调整
依旧假设高度为 h h h,我们可以算出每一层需要调整的次数
需要调整的次数
因此我们不难列出总的调整次数的公式
推导公式
那么,要想算出 T ( N ) T(N) T(N),我们就可以使用错位相减法来对其进行求和
错位相减法求和
因此,向下调整的总次数为:
结果
因此我们可以得到向下调整建堆的时间复杂度是
O ( N ) O(N) O(N)
除此之外,我们还可以发现
节点数多的调整的次数就少
节点数少的调整的次数就多


向上建堆的时间复杂度推导

向上建堆代码

// 向上调整函数
void AdjustUp(HPDataType* a, int child)
{int parent = (child - 1) / 2;while (child){// 大堆调整if (a[child] > a[parent]){Swap(&a[child], a[parent]);child = parent;parent = (child - 1) / 2;}// 若已经满足大堆,那么就跳出循环else{break;}}
}

向上建堆复杂度推导

向上调整建堆是从第二层开始的
从何处开始
因此我们可以算出调整的总次数
调整次数
结果
因此我们可以算出向上调整建堆的时间复杂度为
O ( N l o g N ) O(NlogN) O(NlogN)
除此之外我们可以发现
节点数少的层调整次数少
节点数多的层调整次数多


堆排序的时间复杂度推导

堆排序代码

// 对数组进行堆排序,需要建堆
void HeapSort(int* a, int n)
{// 降序,建小堆// 升序,建大堆for (int parent = (n-1-1)/2; parent > 0; parent--){AdjustDown(a, n, parent);}int end = n - 1;while (end > 0){Swap(&a[0], &a[end]);AdjustDown(a, end, 0);end--;}
}

堆排序的时间复杂度推导

我们可以发现,第一个for循环使用了向下调整建堆,其复杂度为 O ( N ) O(N) O(N)
第二个循环按理来说应该是 O ( N 2 ) O(N^2) O(N2)
但因为第二个循环并非是最坏的情况,所以我们认为其时间复杂度为 O ( N l o g N ) O(NlogN) O(NlogN)
因此,堆排序的时间复杂度就为
O ( N l o g N ) O(NlogN) O(NlogN)


💖💖💖非常感谢各位的支持💖💖💖
我们共同进步
本系列持续更新,关注我,带你了解更多数据结构知识
下期再见
玉桂狗听音乐

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

相关文章:

  • 音乐网站建设方案长沙网站seo推广
  • 做环评工作的常用网站创业邦使用什么网站模板
  • 网站升级改版简单的html网站模板下载
  • 苏州网站建设kgwl河南工程建设网
  • 衡水网站建设03181688建设库官网查询系统
  • 如网站性质为公司 请以企业备案永年区住房和城乡建设局网站
  • 免费手机网站模板下载哪里有做空包网站的
  • 中国建设部网站官网营销技巧第一季无删减
  • 做文字图片的网站怎么做游戏测评视频网站
  • 做外快的网站百度网站安全检测
  • 果洛电子商务网站建设哪家快外贸电商网站制作
  • 怎么做网页版手机版网站python写网页
  • 雄安建设投资集团网站网络推广渠道有哪些哪些
  • 怎么做网站代码阿里云学生认证免费服务器
  • 银川市做网站的公司公司网站建设前期情况说明
  • 房屋租赁网站建设如何给客户定位服务营销理论
  • 衡水做wap网站价格住房和城乡建设厅施工员证
  • 阿里云对象存储做静态网站吉林智能建站系统价格
  • 如果搭建网站口碑营销相关案例
  • 做本地旅游网站网站一般在哪里找
  • 网站建设项目执行进度表电影网站建设需求分析
  • 一个门户网站的建设流程网站用空间还是服务器
  • 株洲网站建设费用网站开发与维护视频教程
  • 营销网站建设有哪些公司h5在哪里制作
  • html 路径 网站根路径wordpress 文章属性
  • 阿里网站年费续费怎么做分录门头沟网站开发
  • 网站建设方面的文章重庆seo顾问服务
  • 建设网站八大员成绩查询南山建网站公司
  • 现在公司做网站还需要域名吗平顶山市建设局网站
  • 吉林做网站多少钱网站推广类型