算法模板——左偏树(可并堆)

本文深入探讨了左偏树在构建和维护最小堆中的应用,阐述了其实现原理、特点及与其他数据结构如队列的比较。通过具体代码实现,展示了在零散元素插入和预处理多个元素场景下,左偏树相较于其他数据结构的优势与局限。重点介绍了左偏树在合并堆时的高效性,并提供了实际应用案例。

实现的功能——输入1 x,将x加入小根堆中;输入2,输出最小值并去在堆中除掉

实现原理——左偏树,这里面维护的是一个小根堆,个人认为其还是没有发挥出左偏树的真正威力——其真正威力在于堆与堆之间可以直接合并,而且复杂度仅为O(logN),在零散插入元素时可以采用本程序中一个个加入的方法,但是当有些题目中预处理多个元素时,则建议通过队列进行合并(别忘了堆与堆之间可以直接合并哦~~~),这样子快一点(详见:《左偏树的特点及其应用》By黄源河),代码量嘛,估计是这几棵常用树里面最短的了,都快和最小生成树差不多了,甚至还可以更短

 1 var
 2    i,j,k,l,m,n,head:longint;
 3    a,lef,rig,fix:array[0..100000] of longint;
 4 function min(x,y:longint):longint;inline;
 5          begin
 6               if x<y then min:=x else min:=y;
 7          end;
 8 function max(x,y:longint):longint;inline;
 9          begin
10               if x>y then max:=x else max:=y;
11          end;
12 procedure swap(var x,y:longint);inline;
13           var z:longint;
14           begin
15                z:=x;x:=y;y:=z;
16           end;
17 procedure merge(var x,y:longint);
18           begin
19                if x=0 then swap(x,y);
20                if y=0 then exit;
21                if a[x]>a[y] then swap(x,y);
22                merge(rig[x],y);
23                fix[x]:=min(fix[lef[x]],fix[rig[x]])+1;
24                if fix[lef[x]]<fix[rig[x]] then swap(lef[x],rig[x]);
25           end;
26 function cuthead(var x:longint):longint;
27          var a1:longint;
28           begin
29                a1:=a[x];
30                merge(lef[x],rig[x]);
31                x:=lef[x];
32                exit(a1);
33           end;
34 begin
35      readln(n);m:=0;head:=0;
36      for i:=1 to n do
37          begin
38               read(j);
39               case j of
40                    1:begin
41                           readln(k);
42                           inc(m);a[m]:=k;l:=m;
43                           merge(head,l);
44                    end;
45                    2:begin
46                           readln;
47                           writeln(cuthead(head));
48                    end;
49               end;
50          end;
51 end.
52         

 

转载于:https://www.cnblogs.com/HansBug/p/4234971.html

标题基于Python的自主学习系统后端设计与实现AI更换标题第1章引言介绍自主学习系统的研究背景、意义、现状以及本文的研究方法和创新点。1.1研究背景与意义阐述自主学习系统在教育技术领域的重要性和应用价值。1.2国内外研究现状分析国内外在自主学习系统后端技术方面的研究进展。1.3研究方法与创新点概述本文采用Python技术栈的设计方法和系统创新点。第2章相关理论与技术总结自主学习系统后端开发的相关理论和技术基础。2.1自主学习系统理论阐述自主学习系统的定义、特征和理论基础。2.2Python后端技术栈介绍DjangoFlask等Python后端框架及其适用场景。2.3数据库技术讨论关系型和非关系型数据库在系统中的应用方案。第3章系统设计与实现详细介绍自主学习系统后端的设计方案和实现过程。3.1系统架构设计提出基于微服务的系统架构设计方案。3.2核心模块设计详细说明用户管理、学习资源管理、进度跟踪等核心模块设计。3.3关键技术实现阐述个性化推荐算法、学习行为分析等关键技术的实现。第4章系统测试与评估对系统进行功能测试和性能评估。4.1测试环境与方法介绍测试环境配置和采用的测试方法。4.2功能测试结果展示各功能模块的测试结果和问题修复情况。4.3性能评估分析分析系统在高发等场景下的性能表现。第5章结论与展望总结研究成果提出未来改进方向。5.1研究结论概括系统设计的主要成果和技术创新。5.2未来展望指出系统局限性提出后续优化方向。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值