14.复杂度理论与分治
复杂度理论与分治
本章探讨了算法分析的核心概念,通过求解最大连续和问题展示了不同算法设计策略的效率差异,并引入了复杂性理论、分治法以及它们在优化算法时间复杂度上的应用。从简单的枚举方法到高效的动态规划与分治策略,逐步揭示了解决问题时算法选择的重要性及其对计算资源消耗的深远影响。
本章探讨了算法分析的核心概念,通过求解最大连续和问题展示了不同算法设计策略的效率差异,并引入了复杂性理论、分治法以及它们在优化算法时间复杂度上的应用。从简单的枚举方法到高效的动态规划与分治策略,逐步揭示了解决问题时算法选择的重要性及其对计算资源消耗的深远影响。
通过编程模拟生活中的活动、现象,是解决各种问题的基础。很多问题并不需要特定的算法去解决,往往有效利用各种数据类型,根据问题的背景建模为数据的表达,按部就班地操作,就可以得到答案。
超出 long long (\(2^64\)) 范围的数字的加减乘除就是一类典型的模拟,称为高精度问题。
本章介绍图的基本概念、存储方式以及两种基本图搜索算法——深度优先搜索(DFS)和广度优先搜索(BFS),涵盖图的定义、分类、存储结构及其在代码中的实现,并提供DFS和BFS的典型模板代码。
哈希(Hash)也叫散列,记录存储位置与关键字之间存在对应关系 \(Loc(i)=H(key_{i})\),从而在查找数据时可以接近 \(O(1)\) 的效率直接找到位置,而不需要顺序摸排或二分查找。
二叉树作为一种基础的数据结构,其独特的递归定义和多样化的类型,如满二叉树、完全二叉树等,为解决诸如查找、排序及编码等问题提供了强大的支持,而哈夫曼编码通过构建最优二叉树实现了数据的高效压缩。
将无序数据变为有序,不明确指定顺序的情况下默认从小到大排序。
排序需要具体的方案来实现,不同的方案执行效率不同,通常用元素的“比较次数”与“移动次数”作为执行的代价来衡量不同排序算法的效率。
字符串生活中最常见的数据类型,任何显示出来可查看的文本内容都是字符串,比如“123456
”、“abcdefg!@#$
”。
在一个网页上快速地查找某个内容,在一个名单里快速确定某个同学是否存在以及在第几行,都是字符串处理的任务。