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

网站建设流程策划方案危机公关处理五大原则

网站建设流程策划方案,危机公关处理五大原则,免费网站建设公司代理,window7用jsp做的网站要什么工具堆的结构与实现二叉树的顺序结构堆的概念及结构堆的实现堆的创建向上调整建堆向下调整建堆堆的操作链接二叉树的顺序结构 堆其实是具有一定规则限制的完全二叉树。 普通的二叉树是不太适合用数组来存储的,因为可能会存在大量的空间浪费。而完全二叉树会更适合使用顺…

堆的结构与实现

  • 二叉树的顺序结构
  • 堆的概念及结构
  • 堆的实现
    • 堆的创建
      • 向上调整建堆
      • 向下调整建堆
      • 堆的操作链接

二叉树的顺序结构

堆其实是具有一定规则限制的完全二叉树。
普通的二叉树是不太适合用数组来存储的,因为可能会存在大量的空间浪费。而完全二叉树会更适合使用顺序结构进行存储。如下图:
在这里插入图片描述

堆的概念及结构

如果有一个关键码的集合K={k0,k1,k2,...,kn−1}K=\{k_0, k_1, k_2, ..., k_{n-1}\}K={k0,k1,k2,...,kn1},当把它的所有元素按完全二叉树的顺序存储方式存储在一个一维数组中,并且满足:Ki≤K2∗i+1K_i\leq K_{2*i+1}KiK2i+1Ki≤K2∗i+2K_i\leq K_{2*i+2}KiK2i+2(Ki≥K2∗i+1K_i\ge K_{2*i+1}KiK2i+1Ki≥K2∗i+2K_i\ge K_{2*i+2}KiK2i+2),i=0, 1, 2, …,则称之为小堆(大堆)。将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。
堆的性质

  • 堆中某个节点的值总是不大于或不小于其父节点的值
  • 堆总是一棵完全二叉树。
    在这里插入图片描述

堆的实现

堆的创建

下面给出一个数组,这个数组逻辑上可以看做一棵完全二叉树,但是还不满足堆的条件。现在我们可以通过算法,将它构建成一个堆。

int a[] = {27,15,19,18,28,34,65,49,25,37};

要将其构建成一个堆结构,有两种调整建堆的方法:一种是向上调整建堆,一种是向下调整建堆。

向上调整建堆

向上调整建堆主要是用于在堆数据结构中,堆在插入数据后,为了继续维持堆的结构,所进行的一种调整。
大致调整过程如下:
在这里插入图片描述
经过一次向上调整后,本来因为插入数据所导致的堆的结构的破坏就被恢复了。
有了这个思路,可以将过程实现如下:

//a - 堆的顺序存储数组
//child - 需要进行向上调整的孩子下标
void AdjustUp(HDataType* a, int child)
{assert(a != NULL);int parent = (child - 1) / 2;while (child > 0)//child为0时,child就到了堆顶,调整结束{//建小堆 - 孩子比双亲小,就互换位置if (a[child] < a[parent]){Swap(&a[child], &a[parent]);//交换函数child = parent;parent = (child - 1) / 2;}else{break;}}
}

以上只是对一个数据进行的调整,要想实现堆的创建,需要将数组中的所有数据都进行一遍调整(堆顶元素除外),所以可以更进一步,完成一棵完全二叉树到堆的创建。

for (int i = 1; i < n; ++i)
{AdjustUp(a, i);
}

以上就是向上调整建堆的过程,我们可以分析一下它的时间复杂度。
因为堆是完全二叉树,而满二叉树也是完全二叉树,此处为了简化,使用满二叉树来证明。(时间复杂度看的本来就是近似值,多几个节点并不影响最终结果)
在这里插入图片描述

假设树的高度为h
第1层,202^020个节点,需要向上调整0层。
第2层,212^121个节点,需要向上调整1层。
第3层,222^222个节点,需要向上调整2层。
第4层,232^323个节点,需要向上调整3层。

第h-1层,2h−22^{h-2}2h2个节点,需要向上调整h-2层。
第h层,2h−12^{h-1}2h1个节点,需要向上调整h-1层。

则需要移动节点总的移动步数为:
T(n)=20∗0+21∗1+22∗2+23∗3+......+2(h−2)∗(h−2)+2(h−1)∗(h−1)T(n)=2^0*0+2^1*1+2^2*2+2^3*3+......+2^{(h-2)}*(h-2)+2^{(h-1)}*(h-1)T(n)=200+211+222+233+......+2(h2)(h2)+2(h1)(h1)
2T(n)=21∗0+22∗1+23∗2+24+3+......+2(h−1)∗(h−2)+2h∗(h−1)2T(n)=2^1*0+2^2*1+2^3*2+2^4+3+......+2^{(h-1)}*(h-2)+2^h*(h-1)2T(n)=210+221+232+24+3+......+2(h1)(h2)+2h(h1)
在这里插入图片描述
由错位相减得:
T(n)=−20−21−22−23−24−2(h−2)−2(h−1)+2h∗(h−1)T(n)=-2^0-2^1-2^2-2^3-2^4-2^{(h-2)}-2^{(h-1)}+2^h*(h-1)T(n)=20212223242(h2)2(h1)+2h(h1)
T(n)=2h∗(h−1)−(20+21+22+23+24+2(h−2)+2(h−1))T(n)=2^h*(h-1)-(2^0+2^1+2^2+2^3+2^4+2^{(h-2)}+2^{(h-1)})T(n)=2h(h1)(20+21+22+23+24+2(h2)+2(h1))
T(n)=2h∗(h−1)−(2h−1)=2h∗(h−2)+1T(n)=2^h*(h-1)-(2^h-1)=2^h*(h-2)+1T(n)=2h(h1)(2h1)=2h(h2)+1
因为是满二叉树,所以节点数n与高度h之间存在如下关系:
n=2h−1n=2^h-1n=2h1h=log2(n+1)h=log_2(n+1)h=log2(n+1)
所以T(n)=(n+1)∗(log2(n+1)−2)+1T(n)=(n+1)*(log_2(n+1)-2)+1T(n)=(n+1)(log2(n+1)2)+1
因此,得出向上建堆的时间复杂度是O(n∗log2nn*log_2nnlog2n)。

向下调整建堆

堆的删除
向下调整建堆主要是用于在堆数据结构中,堆在删除数据后,为了继续维持堆的结构,所进行的一种调整。
这里要说明的是,堆的删除是指删除堆顶的数据。要删除堆顶的数据并不是像顺序表那样覆盖删除。虽然堆的物理存储结构是顺序结构,但他逻辑上是树形结构,如果直接覆盖删除,本来是兄弟节点的变成父子节点,关系会完全打乱。并不能保证最终覆盖删除之后的结构还是堆的结构。
所以,堆的删除有另一种巧妙的方法。先将堆顶的数据跟堆的最后一个数据进行交换,然后删除堆的最后一个数据,就将堆顶数据删除了。
在这里插入图片描述
但是,堆顶的数据删除了,并没有因此就万事大吉。因为和堆顶数据进行交换的数据,现在处于堆顶位置,并不代表它就是堆中最小或最大的数据,堆的结构可能通过交换后就此被破坏。所以,这里就要通过向下调整算法来恢复堆的结构。
大致调整过程如下:
在这里插入图片描述
要注意的是:向下调整算法有一个前提,左右子树必须都是堆,才能调整。
经过一次向下调整后,本来因为删除数据所导致的堆的结构的破坏就被恢复了。
有了这个思路,可以将过程实现如下:

//a - 堆的顺序存储数组
//size - 堆的顺序存储数组的数据个数
//parent - 需要进行向下调整的双亲下标
void AdjustDown(HDataType* a, int size, int parent)
{assert(a != NULL);//此时child代表左孩子int child = 2 * parent + 1;//孩子下标在数组范围内进入循环while (child < size){//child+1代表右孩子//建小堆 - 右孩子存在的话,左右孩子谁更小,child存储的就是谁的下标变量if (child + 1 < size && a[child + 1] < a[child]){++child;}if (a[child] < a[parent]){Swap(&a[child], &a[parent]);parent = child;child = 2 * parent + 1;}else{break;}}
}

以上只是对一个数据进行的调整,要想实现堆的创建,这里我们从倒数第一个非叶子节点所形成的的子树开始调整,一直调整到根节点的树,就可以调整成堆。所以可以更进一步,完成一棵完全二叉树到堆的创建。

//n-1是最后一个数据的下标,((n-1)-1)/2是倒数第一个非叶子节点的下标
for (int i = (n - 1 - 1) / 2; i >= 0; --i)
{AdjustDown(a, n, i);
}

以上就是向下调整建堆的过程,我们可以分析一下它的时间复杂度。
同上,采取满二叉树的结构来进行复杂度的计算。

假设树的高度为h
第1层,202^020个节点,需要向下调整h-1层。
第2层,212^121个节点,需要向下调整h-2层。
第3层,222^222个节点,需要向下调整h-3层。
第4层,232^323个节点,需要向下调整h-4层。

第h-1层,2h−22^{h-2}2h2个节点,需要向下调整1层。
第h层,2h−12^{h-1}2h1个节点,需要向下调整0层。

则需要移动节点总的移动步数为:
T(n)=20∗(h−1)+21∗(h−2)+22∗(h−3)+23∗(h−4)+......+2(h−2)∗1+2(h−1)∗0T(n)=2^0*(h-1)+2^1*(h-2)+2^2*(h-3)+2^3*(h-4)+......+2^{(h-2)}*1+2^{(h-1)}*0T(n)=20(h1)+21(h2)+22(h3)+23(h4)+......+2(h2)1+2(h1)0
2T(n)=21∗(h−1)+22∗(h−2)+22∗(h−3)+24∗(h−4)+......+2(h−1)∗1+2h∗02T(n)=2^1*(h-1)+2^2*(h-2)+2^2*(h-3)+2^4*(h-4)+......+2^{(h-1)}*1+2^h*02T(n)=21(h1)+22(h2)+22(h3)+24(h4)+......+2(h1)1+2h0
在这里插入图片描述
由错位相减得:
T(n)=(1−h)+21+22+23+24+2(h−2)+2(h−1)T(n)=(1-h)+2^1+2^2+2^3+2^4+2^{(h-2)}+2^{(h-1)}T(n)=(1h)+21+22+23+24+2(h2)+2(h1)
T(n)=20+21+22+23+24+2(h−2)+2(h−1)−hT(n)=2^0+2^1+2^2+2^3+2^4+2^{(h-2)}+2^{(h-1)}-hT(n)=20+21+22+23+24+2(h2)+2(h1)h
T(n)=2h−1−hT(n)=2^h-1-hT(n)=2h1h
因为是满二叉树,所以节点数n与高度h之间存在如下关系:
n=2h−1n=2^h-1n=2h1h=log2(n+1)h=log_2(n+1)h=log2(n+1)
所以T(n)=n−long2(n+1)T(n)=n-long_2(n+1)T(n)=nlong2(n+1)
因此,得出向下建堆的时间复杂度是O(n)。
通过比较,向上建堆的时间复杂度是O(n∗log2nn*log_2nnlog2n),向下建堆的时间复杂度是O(n),所以采取向下建堆会更优一些。
以上过程都是对小堆的建立,如果要建大堆,只需要将判断条件略作更改即可:

//建小堆
if (a[child] < a[parent])
if (child + 1 < size && a[child + 1] < a[child])
if (a[child] < a[parent])//建大堆:
if (a[child] > a[parent])
if (child + 1 < size && a[child + 1] > a[child])
if (a[child] > a[parent])

堆的操作链接

最后,对于堆的各种操作需求,可以参考阿顺的这篇堆(C语言实现)


文章转载自:
http://irretentive.zLrk.cn
http://unitarianism.zLrk.cn
http://skewwhiff.zLrk.cn
http://soapboxer.zLrk.cn
http://disprivilege.zLrk.cn
http://delineator.zLrk.cn
http://osteologist.zLrk.cn
http://peascod.zLrk.cn
http://herby.zLrk.cn
http://avertible.zLrk.cn
http://exemption.zLrk.cn
http://laf.zLrk.cn
http://positronium.zLrk.cn
http://abridgment.zLrk.cn
http://salacity.zLrk.cn
http://cybernetist.zLrk.cn
http://magda.zLrk.cn
http://taken.zLrk.cn
http://consequential.zLrk.cn
http://adversary.zLrk.cn
http://dashy.zLrk.cn
http://woodiness.zLrk.cn
http://navaho.zLrk.cn
http://deray.zLrk.cn
http://leaved.zLrk.cn
http://barnstorm.zLrk.cn
http://messaline.zLrk.cn
http://deintegro.zLrk.cn
http://overkill.zLrk.cn
http://bibelot.zLrk.cn
http://hydrofluoric.zLrk.cn
http://joypop.zLrk.cn
http://buluwayo.zLrk.cn
http://plagiary.zLrk.cn
http://swalk.zLrk.cn
http://disregardfully.zLrk.cn
http://deposition.zLrk.cn
http://shemozzle.zLrk.cn
http://prevaricate.zLrk.cn
http://smalt.zLrk.cn
http://bearer.zLrk.cn
http://mnemonical.zLrk.cn
http://spondylitic.zLrk.cn
http://stochastics.zLrk.cn
http://cargojet.zLrk.cn
http://anchorman.zLrk.cn
http://precipitate.zLrk.cn
http://cartwright.zLrk.cn
http://panegyrical.zLrk.cn
http://icehouse.zLrk.cn
http://obstructionist.zLrk.cn
http://electromotive.zLrk.cn
http://succulently.zLrk.cn
http://epipelagic.zLrk.cn
http://mortgagee.zLrk.cn
http://bellybutton.zLrk.cn
http://quadrophonic.zLrk.cn
http://holohedral.zLrk.cn
http://constringency.zLrk.cn
http://lavendery.zLrk.cn
http://wysiwyg.zLrk.cn
http://canicula.zLrk.cn
http://unvanquishable.zLrk.cn
http://unciform.zLrk.cn
http://gouda.zLrk.cn
http://microcosm.zLrk.cn
http://loanshift.zLrk.cn
http://semicontinuum.zLrk.cn
http://musicalize.zLrk.cn
http://siderochrome.zLrk.cn
http://harmotomic.zLrk.cn
http://musquash.zLrk.cn
http://abdominous.zLrk.cn
http://unhallow.zLrk.cn
http://borscht.zLrk.cn
http://elt.zLrk.cn
http://cesium.zLrk.cn
http://ruler.zLrk.cn
http://stateless.zLrk.cn
http://motorize.zLrk.cn
http://mainland.zLrk.cn
http://phrenitis.zLrk.cn
http://kalendar.zLrk.cn
http://classicism.zLrk.cn
http://toleware.zLrk.cn
http://windhoek.zLrk.cn
http://acidimetric.zLrk.cn
http://anionic.zLrk.cn
http://unicef.zLrk.cn
http://sarcenet.zLrk.cn
http://photorecce.zLrk.cn
http://nugatory.zLrk.cn
http://aridity.zLrk.cn
http://toxaphene.zLrk.cn
http://erythritol.zLrk.cn
http://eburnean.zLrk.cn
http://italophile.zLrk.cn
http://stockade.zLrk.cn
http://caterwaul.zLrk.cn
http://orans.zLrk.cn
http://www.dt0577.cn/news/67115.html

相关文章:

  • 肇庆做网站seo怎么做推广
  • 网站开发及app开发公司网站域名查询系统
  • 网站建设模板个人济南seo优化
  • 个人电脑做网站打不开数据库seo视频教程
  • 网站建设难点和重点关键词排名优化系统
  • 深圳网站建设 排行榜微信怎么做推广
  • 全国做膏药的网站有多少家呢seo点击软件手机
  • 网站优化意义今天发生的重大新闻内容
  • 德州市建设街派出所网站职业培训机构
  • xampp装wordpress百度关键词优化词精灵
  • 网站首页ui网站创建公司
  • 创建一个购物网站俄国搜索引擎yandex入口
  • qq登陆 wordpress清远网站seo
  • 如果做网站推广软件推广的渠道是哪里找的
  • html做动态网站怎么查权重查询
  • 中国传媒大学声明独立站seo建站系统
  • 做贸易的网站最新军事新闻最新消息
  • 上国外网站用什么dns百度优化师
  • 200 做京剧主题的专业小说网站网站搜索引擎优化报告
  • 萧县做网站爱站数据
  • 广州开发网站seo关键词优化推荐
  • 网站建设与网页设计制作枸橼酸西地那非片功效效及作用
  • 杭州哪家公司做网站比较好台州做优化
  • 做网站策划师的图片如何制作网页教程
  • 在哪里购买域名沧州网站建设优化公司
  • 什么网络公司比较好东莞优化网站关键词优化
  • 网站正在建设中永久抖音关键词推广怎么做
  • 桂林漓江在哪个县哪个区抖音seo排名软件哪个好
  • 旅行社网站建设方案seo和sem的概念
  • 淮南网站建设培训课程名称大全