【建站服务】承德申请400电话费用【承德企业全国热线电话办理】承德开通400电话电信价格、承德微信公众号代运营外包托管、承德网店编辑装修美工、承德网站推广优化大概需要多少钱-域名申请
作者: 风兰 . 阅读量: 1 . 发表时间:2022-09-20 15:11:06
上往建站提供服务器空间服务商,百度快照排名,网站托管,百度推广运营,致力于设计外包服务与源代码定制开发,360推广,搜狗推广,增加网站的能见度及访问量提升网络营销的效果,主营:网站公司,百度推广公司电话,官网搭建服务,网站服务企业排名,服务器空间,英文域名等业务,专业团队服务,效果好。
承德申请400电话费用【承德企业全国热线电话办理】承德开通400电话电信价格、承德微信公众号代运营外包托管、承德网店编辑装修美工、承德网站推广优化大概需要多少钱
承德,河北省地级市,河北省政府批复确定的河北国际旅游城市、连接京津辽蒙的区域性中心城市 [1] 。截至2019年,全市下辖3个区、4个县、代管1个县级市和3个自治县,总面积39519平方公里,常住人口347.32万人,城镇人口180.85万人,城镇化率52.07%。 [2]
承德地处中国东北地区、河北省东北部,南邻京津,北接赤峰和锡林郭勒,东西与朝阳、秦皇岛、唐山、张家口相邻,距省会石家庄435公里,距北京225公里。 [3] 是连接京津冀辽蒙的重要节点,具有“一市连五省”的独特区位优势,是国家甲类开放城市,中国普通话标准音采集地、中国摄影之乡、中国剪纸之乡。 [4]
承德是首批国家历史文化名城,1703年清康熙修建避暑山庄,成为清王朝的第二个政治中心;1723年设热河厅;1733年雍正取“承受先祖德泽”之义;赐字“皇承天德”释义先皇秉承天地化育万物的恩德; [5] 设承德直隶州,始称“承德”;民国和解放初期为原热河省省会;1955年,热河省建制撤销,承德划归河北省,为省辖市。承德的避暑山庄及其周围寺庙是中国十大风景名胜、旅游胜地四十佳、国家重点风景名胜区,被联合国教科文组织批准为世界文化遗产,也是国家首批世界文化遗产。 [4]
2012年,承德被评为中国“十大特色休闲城市”。2016年11月,承德市被中华人民共和国国家旅游局评为第二批国家全域旅游示范区。2017年10月,承德市入选国家森林城市。 [6] 2017年12月,获得“厕所革命优秀城市奖”。
假设有图5-45所示的堆,并向其添加了优先级为13的第11个元素。该元素会出现在A[11]中,就有了如下数组

调用bubbleUp(A,11),对A[11]和A[5]进行比较,因为A[11]更大,所以必须交换这两个元素。也就是说A[5]和A[11]违背了偏序树属性。因此,数组就成了

调用bubbleUp(A,5),对A[2]和A[5]进行比较,因为A[2]更大,所以不会违背偏序树属性,bubbleUp(A,5)不会进行任何操作。这样就已经恢复了该数组的偏序树属性。
现在介绍如何实现优先级队列的插入操作。设n 是优先级队列中当前的元素数,并假设数组A[1..n]已经满足偏序树属性。增加n,并将待插入的元素存储到新的A[n]中。最后,调用bubbleUp(A,n)。表示插入操作的代码如图5-47所示。参数x是待插入的元素,而参数pn是指向优先级队列当前大小的指针。请注意,n 必须按引用传递,也就是说,通过指向n 的指针传递,这样当n 增加时,改变才不只是在插入操作局部造成影响。这里省略了对n<MAX 的检查。
void insert(int A[], int x, int *pn){
(*pn)++;
A[*pn] = x;
bubbleUp(A, *pn);}复制代码图 5-47 在堆上实现的优先级队列插入操作
要实现优先级队列的deletemax操作,需要对堆或偏序树进行另一项操作,这次是让根节点处可能违背偏序树属性的元素向下沉。假设A[i ]可能违背偏序树属性,在它中的元素可能小于其子节点A[2i ]和A[2i+1]中的一个或两个。我们可以将其与其中一个子节点交换,不过一定要注意是与哪一个交换。如果与两个子节点中较大的那个交换,那么肯定不会在A[i]曾经的两个子节点间引入偏序树属性的破坏,因为较大的那个现在已经是较小那个的父节点了。
图5-48中的bubbleDown函数实现了这一操作。在选择了与A[i ]进行交换的子节点后,它会递归地调用自身,以消除新位置上的元素A[i ](也就是现在的A[2i ]或A[2i+1])与其新子节点之间可能存在的偏序树属性的破坏。参数n 是堆中的元素数,或者说是最后一个元素的下标。
这个函数有点棘手。如果A[i ]有两个子节点,就必须决定将其与哪个子节点交换,所以首先要在图5-48的第(1)行假设较大的子节点是A[2i ]。而如果右子节点存在(即child<n),并且右子节点更大,第(2)行的测试就会得到满足,并在第(3)行让child 成为A[i ]的右子节点。
在第(4)行有两项需要测试的内容。首先,A[i ]在该堆中有可能真的没有子节点。因此要通过检测是否有child≤n 来确定A[i ]是否为内部节点。第第二项测试是检测A[i ]是否小于A[child ]。如果两项条件都满足,那么在第(5)行就要将A[i ]与它较大的那个子节点交换,并在第(6)行递归地调用bubbleDown,如果有必要的话,就将违背偏序树属性的元素进一步向下压。
void bubbleDown(int A[], int i, int n)
{
int child;(1) child = 2*i;(2) if (child < n && A[child+1] > A[child])(3) ++child;(4) if (child <= n && A[i] < A[child]) {(5) swap(A, i, child);(6) bubbleDown(A, child, n);
}
}复制代码图 5-48 bubbleDown会将违背偏序树属性的元素压到合适的位置
可以按照图5-49所示的方式用bubbleDown实现优先级队列的deletemax操作。deletemax函数接受数组A 和指向堆中当前元素数n 的指针pn 作为参数。这里省略了对n>0的测试。
在第(1)行,将根节点处要删除的元素与最后的元素(在A[n]中)交换。技术上讲,应该返回删除的元素,不过,正如所看到的,将其放入不再属于该堆的A[n]也是可以的。
在第(2)行,将n 减少1,实际上就是删除现在处于旧的A[n]中的最大元素。因为现在的根节点可能会违背偏序树属性,所以在第(3)行调用bubbleDown(A,1,n),它会递归地将违背偏序树属性的元素向下压,直到该元素到达一个不再小于它子节点的位置或是成为叶子节点,不管哪种情况,都不再会违反偏序树属性了。
void deletemax(int A[], int *pn)
{(1) swap(A, 1, *pn);(2) --(*pn);(3) bubbleDown(A, 1, *pn);
}复制代码图 5-49 用堆实现的优先级队列deletmax操作
假设对图5-45中的堆执行deletemax操作。在交换了A[1]和A[10]之后,将n 置为9。这样堆就变成了

在执行bubbleDown(A,1,9)时,会将child 置为2。因为A[2]≥A[3],所以在图5-48的第(3)行不用增加child 。然后,因为child≤n 而且A[1]<A[2],所以交换这两个元素,得到数组

接着调用bubbleDown(A,2,9)。这要求我们在第(2)行对A[4]和A[5]加以比较,比较的结果是前者更大。因此,在图5-48的第(4)行,child=4。又因为可知A[2]<A[4],所以交换这两个元素,并对如下数组调用bubbleDown(A,4,9)。

再下来要比较A[8]和A[9],结果后者更大,所以bubbleDown(A,4,9)的第(4)行有child=9。因为A[4]<A[9],所以再次进行交换,得到数组

随后调用bubbleDown(A,9,9)。在第(1)行将child 置为18,而且因为child<n 为假,第(2)行的第一个测试会失败。同样,第(4)行的测试也会失败,所以不用再进行交换或递归调用。这一数组现在已经是还原偏序树属性的堆了。
优先级队列堆实现的每次插入或deletemax操作的运行时间是O(logn)。要知道原因,首先考虑一下图5-47所示的insert程序。该程序前两步花的时间显然是O(1),此外还要加上对bubbleUp的调用所花的时间。因此,需要确定bubbleUp的运行时间。
粗略地讲,我们注意到每次bubbleUp递归调用自身时,就是离根节点更近了一个节点的位置。因为平衡偏序树的高度大约是log2n,所以递归调用的次数是O(log2n)。因为对bubbleUp的每次调用花的时间是O(1)外加递归调用的时间(如果有的话),所以总时间应该为O(logn)。
更严格地讲,设T (i )是bubbleUp(A,i)的运行时间,那么可以构建如下T (i )的递推关系。
依据。如果i=1,那么T(i )是O(1),因为很容易看出,在这种情况下,图5-46中的bubbleUp程序不会执行任何递归调用,只是执行了if语句的测试。
归纳。如果i>1,那么if语句的测试可能会失败,因为A[i ]不再需要继续上升了。若该测试成功,则花O(1)的时间执行swap,并以参数i /2(若i 为奇数则略小于i /2)递归调用bubbleUp一次。因此T(i )≤T(i /2)+O(1)。
所以可以说,对于某些常数a 和b,递推关系
T(1)=a
T(i )=T(i /2)+b, i>1,
能作为bubbleUp运行时间的上界。如果将T(i /2)展开,就得到,对每个j,有
T(i )=T(i /2 j )+bj (5.2)
如3.10节中那样,可以对j 的值加以选择,使得T(i /2j )最为简单。在这种情况下,可以令j 等于logi,这样一来i/2j=1。因此,(5.2)式就成了T(i )=a+b log2i,也就是说T(i )是O(logi )。因为bubbleUp的运行时间是O(logi ),所以插入操作的运行时间也是O(logi )。
现在考虑deletemax。从图5-49中可以看出,deletemax 的运行时间是O(1)加上bubbleDown的运行事件。对图5-48所示bubbleDown函数的分析基本上与对bubbleUp的分析相同。这里就不再赘述分析过程,直接得出bubbleDown和deletemax 的运行时间也是O(logn)这一结论。

承德申请400电话费用【承德企业全国热线电话办理】承德开通400电话电信价格、承德微信公众号代运营外包托管、承德网店编辑装修美工、承德网站推广优化大概需要多少钱
上往建站提供搭建网站,域名注册,官网备案服务,网店详情页设计,企业网店,专业网络店铺管理运营全托管公司咨询电话,服务器空间,微信公众号托管,网页美工排版,致力于域名申请,竞价托管,软文推广,全网营销,提供标准级专业技术保障,了却后顾之忧,主营:虚拟主机,网站推广,百度竞价托管,网站建设,上网建站推广服务,网络公司有哪些等业务,专业团队服务,效果好。
服务热线:400-111-6878 手机微信同号:18118153152(各城市商务人员可上门服务)
关键词:网站建设,企业网站,网站制作,网页设计,高端网站建设,企业网站制作,网页制作,制作网站,网站设计,高端网页设计,高端网站设计,做网站,自适应网站


