《程序设计解题策略》——1.7 本章小结

简介:
+关注继续查看

本节书摘来自华章计算机《程序设计解题策略》一书中的第1章,第1.7节,作者:吴永辉 王建德 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

1.7 本章小结

树是一个具有层次结构的集合,一种没有回路的连通图,在程序设计竞赛中,许多试题的数据关系呈现树型结构。为了拓宽读者对树的认识、拓展树的应用范围、掌握更多利用树型结构解题的处理方法,我们在本章中介绍了以往竞赛曾涉及的一些前沿知识:
1) 探讨了如何利用划分树求解整数区间内第k大的值:即先离线构建出整个查询区间的划分树,然后在划分树中查找某子区间中第k大值。这个算法保证能在O(logn)的时间复杂度内快速求出问题解。
2) 通过分析一些蕴涵最小生成树性质的试题,给出了应用最小生成树原理优化算法的一般思路和方法,在此基础上引入了最小生成树的两个拓展——最小度限制生成树和k小生成树,并列举了这两个拓展形式的应用范例。
3) 阐释了用于区间计算的线段树,提出了构建和维护一维线段树的一般方法,并指出避免区间重复操作的一种有效方法是把子树收缩为叶子或让叶子释放出儿子。对这些线段树的时空复杂度、优缺点、适用范围做了比较客观的比较和分析,为读者在什么情况下应该选择什么样的线段树,提供了借鉴思路。
4) 引入了两种“近似平衡”的二叉查找树——伸展树和红黑树,介绍了这两种改进型二叉查找树的基本操作和应用范例,在时间复杂度、空间复杂度、编程复杂度三个方面,比较了它们与其他同类树的优劣。
5) 介绍了一种能够维护一个带权森林、支持边的插入与删除、支持树的合并与分离、支持寻找路径上费用最小边的数据结构——动态树。由于这种树的所有操作的均摊复杂度均为O(logN),且树中所有节点或者部分节点可随需要而动态变动,因此具备了一般静态树无法企及的功能。
6) 推荐了一种可与Fibonacci堆、二叉堆和二项堆“媲美”的优先队列——左偏树,通过介绍左偏树的基本操作和应用范例来展现其编程简单、效率较高的优势。
7) 展示了一种可取代树结构的链接表——跳跃表。跳跃表作为一种新兴的数据结构,以相当高的时空效率显示其魅力。与同样以编程复杂度低而被人喜好的“伸展树”相比,跳跃表的效率不但不会比它差,甚至优于前者。
我们每介绍一种新的树结构或树结构的替代物,就在空间要求、时间效率和编程复杂度三个方面比较其他树结构。之所以要这样做,是因为在程序设计竞赛中,不能一味追求算法有很高的时间效率,而需要在时间复杂度、空间复杂度、编程复杂度三者之间,寻找一个满足竞赛要求和现场条件的“平衡点”。只有在对各种树结构的原理和应用做更广泛地考察、更深入地研究后,才能真正使选中的树结构或树结构的替代物成为帮助你成功解题的一个“利器”。

相关文章
|
12天前
|
机器学习/深度学习 算法 图计算
【再谈动态规划】
【再谈动态规划】
|
16天前
|
算法
贪心算法的思路和典型例题
贪心算法的思路和典型例题
|
20天前
|
机器学习/深度学习 算法 Java
「程序员必须掌握的算法」动态规划「中篇」
「程序员必须掌握的算法」动态规划「中篇」
|
20天前
|
算法 程序员
「程序员必须掌握的算法」动态规划「上篇」
「程序员必须掌握的算法」动态规划「上篇」
|
3月前
|
机器学习/深度学习 存储 缓存
力扣70爬楼梯:思路分析+优化思路+代码实现+补充思考
力扣70爬楼梯:思路分析+优化思路+代码实现+补充思考
29 0
|
8月前
|
算法 C语言
08【C语言 & 趣味算法】再识:冒泡排序(问题分析、算法设计与分析、程序流程图以及完整代码)
08【C语言 & 趣味算法】再识:冒泡排序(问题分析、算法设计与分析、程序流程图以及完整代码)
08【C语言 & 趣味算法】再识:冒泡排序(问题分析、算法设计与分析、程序流程图以及完整代码)
|
10月前
|
算法
代码随想录刷题|回溯算法理论 LetCode 77.组合
代码随想录刷题|回溯算法理论 LetCode 77.组合
代码随想录刷题|回溯算法理论 LetCode 77.组合
|
10月前
|
机器学习/深度学习 人工智能 算法
从频度引发的c语言多重for循环乃至编写算法思路的思考
首先需要声明的是,笔者是一名有C语言基础并正在为考研而复习数据结构的大学生,本篇文章中的for循环代码来自于清华大学严蔚敏教授出版的《数据结构》。 本篇博客适用于初学者理解C语言for循环,多重for循环、数据结构频度、线性代数矩阵等知识点。 整篇文章从频度开始,讲述两个矩阵相乘算法,最后讲述整个算法的设计原理
96 4
从频度引发的c语言多重for循环乃至编写算法思路的思考
|
算法 Java 开发者
位运算的惯用套路,都在这儿!(算法 NO.2)
本文所列题目来自 LeetCode 中国网站,属于算法面试中关于位运算的经典高频考题。题解由 Doocs 开源社区 leetcode 项目维护者提供。
109 0
位运算的惯用套路,都在这儿!(算法 NO.2)
|
算法 定位技术
拓扑排序原理与解题套路 | 算法必看知识十九
拓扑排序其实就是图类问题当中的一个简单应用,它其实是有固定的实现方式的,我们只需要掌握这些实现方式中的算法思想,相信它不再是一个难题。
拓扑排序原理与解题套路 | 算法必看知识十九
热门文章
最新文章
推荐文章
更多