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

安乡网站制作网站前端 设计

安乡网站制作,网站前端 设计,wordpress离线文章发布,wordpress文章浏览数堆排序 思路 堆排序思路是#xff1a; 将数组以二叉树的形式分析#xff0c;令根节点索引值为0#xff0c;索引值为index的节点#xff0c;子节点索引值分别为index*21、index*22#xff1b;对二叉树进行维护#xff0c;使得每个非叶子节点的值#xff0c;都大于或者…堆排序 思路 堆排序思路是 将数组以二叉树的形式分析令根节点索引值为0索引值为index的节点子节点索引值分别为index*21、index*22对二叉树进行维护使得每个非叶子节点的值都大于或者小于其子节点的值两种分别称为大根堆、小根堆其中二叉树根节点的值就是数组的最大值或最小值将二叉树根节点取出维护后的数组最后一个元素移至根节点再重新进行上述维护循环上述步骤直到数组所有元素均被取出则取出的所有元素组成的序列有序从而实现排序的目的。 代码实例 实现代码如下 hlist(map(int,input().split()))def heapSort(root):# 本质上heapSort实现的是根据小根堆的规则将二叉树根节点root的值h[root]向下移动# 直到h[root]到达某处该处root的两个子节点值均大于h[root]。# 如果root下面两边的子二叉树均符合小根堆那么处理之后以root为根节点的二叉树同样符合小根堆。aroot# 节点root的左子结点是root*21右子节点是root*22if root*21len(h) and h[a]h[root*21]:aroot*21# 如果是则此时a就是左子节点索引否则a仍是根节点索引if root*22len(h) and h[a]h[root*22]:aroot*22# 此时a就是root节点以及其两个子节点里面最小值的索引if a!root: # a此时是子节点索引值h[a],h[root]h[root],h[a] # 保证根节点值最小heapSort(a) # 从上往下递归处理else: # 要么根节点已经是最小的了要么根节点没有子节点不用排序returnfor i in range(len(h)//2,-1,-1):heapSort(i)# 从二叉树的底部开始处理保证每次处理某个节点时下面的子二叉树已经符合小根堆。 # print(h)lengthlen(h) for _ in range(length):if len(h)!1:h[0],h[-1]h[-1],h[0]print(h.pop(),end )heapSort(0)else:print(h.pop(),end ) heapSort函数维护的是小根堆此时代码输出内容就是列表h中元素从小到大排序的序列。 堆排序实质上很容易获取当前列表中最值因此topK问题输出列表中前K个最大/小值很适合用堆排序处理。 python内置模块——heapq 常用函数 heappush(heap,item)向列表heap中添加元素item添加时会保证heap仍然是小根堆时间复杂度为O(log(len(heap))) heapify(heap)以线性时间将列表heap转化为小根堆 heappop(heap)从堆heap中弹出并返回最小的值 注意点 1. 如果要建立大根堆可以考虑所有元素取负值此时堆本身为小根堆但我们自己希望的元素存储形式上是大根堆。 2. 调用heappush时添加的item可以是一个数此时就是根据item值维护小根堆但是item也可以是元组此时维护标准是元组中第0个元素当不同元组间前一个元素相同则参考下一个元素。 代码实例 AcWing:Dijkstra求最短路 II 实例题目中有向边的数量与节点数量相近可见此时该图为稀疏图。Dijkstra算法求最短路中在获取当前与1号点最短距离的节点时一般是选择遍历所有节点获取但是本题的图为稀疏图且节点数量众多此时会导致代码获取节点时间复杂度为O()显然时间复杂度过高。 此时换另一个思路不选择遍历所有节点而是存储已处理的节点并且每次直接获取到最短距离的节点。该方式可以联想到小根堆小根堆堆顶元素刚好可以符合要求。此时即可调用heapq库使用其中的函数维护小根堆便能实现本题目标。 代码 import heapq #本题需要使用到堆排序n,mmap(int,input().split()) edge[[] for _ in range(n1)] # edge[i][j][节点i的第j个邻接有向边指向的节点编号,该边长度] distance[1000000000 for _ in range(n1)] # distance[i]当前最短通路长度 visited[False for _ in range(n1)] for _ in range(m):a,b,dmap(int,input().split())edge[a].append([b,d]) distance[1]0 heapDis[(0,1)] while len(heapDis):#print(edge[now])dis,nowheapq.heappop(heapDis)if visited[now]:continuevisited[now] Truefor next, edgeDis in edge[now]:if distance[now]edgeDisdistance[next]:distance[next]distance[now]edgeDisheapq.heappush(heapDis, (distance[next], next))# 总计有m条边最多会向heapDis中添加m次元素# 每次添加元素最大时间复杂度为O(logn)# 因此总的时间复杂度为O(mlogn)if distance[n]10e9:print(-1) else:print(distance[n])
http://www.hkea.cn/news/14553260/

相关文章:

  • 国外服装图案设计网站企业网站会涉及到的版权问题
  • 网站美工培训学校网站的版式设计
  • 网站开发方案怎么写网站做301跳转
  • 公司怎么做网站建站网站排行
  • 黄页哪个网站好手机网站制作代码
  • 重庆知名网站中国建筑校园招聘
  • 租房网站南通网站制作专家
  • 济南网站建设正规公司crm管理系统登录入口官网
  • 酒店网站建设策划南昌企业网站建设公司哪个好
  • 深圳做营销网站制作淮安app开发公司
  • 网站视频开发平台app开发制作
  • 娱乐网站排行榜网站小程序制作公司
  • 焦作市建设银行网站网站后台图片传不上去怎么办
  • 自适应网站建设案例长沙多地发布最新通告
  • 企业网站建设费计入网页游戏开发教程
  • 网站建设模板源代码视频网站 移动 模板
  • 网络网站制作技巧百度百科官网首页
  • 鞍山网站设计公司wordpress外贸模板下载
  • 一键网站提交动漫制作专业报告
  • 网站优化套餐天津企业做网站
  • 男男做的视频网站好数商云网络
  • 北京网站设计成功a刻江苏省建设网站首页
  • 微信商城网站建设视频如何在局域网上做网站
  • 帝国网站管理系统前台我想花钱做网站
  • 东莞网站建设曼哈顿信科西安网站维护托管
  • iis 浏览网站超短网址生成
  • 做app网站的公司名称哔哩哔哩网页版下载视频
  • 招远网站服务哪家好网站制作
  • 毕设做网站答辩一般问什么网站推广的心得
  • 门户网站有哪些局限性学习php网站开发怎么样