求剧情
《算法的乐趣》封面

算法的乐趣

王晓华 著共 77 节

《算法的乐趣》(王晓华)的分节剧情梳理,每节一篇精简梗概。

共 76 章 · 已整理 75 章

章节目录

一章一页,已整理的按顺序列在这里。

第二节用户提供的内容主要是书籍目录和序言,正文部分几乎没有实质内容,仅有序言中有一定信息。阅读第三节本节先给出算法的规范定义,并用通俗说法解释它就是解决问题的思路和办法,进而说明算法之所以被一些学生和从业者认为没用,根源在于缺少应用场景、不知道为何而学。阅读第四节本节探讨"程序员是否必须会算法"。作者以网友质疑为例:有人认为遗传算法、蚁群算法才高深,作者用几十行代码的遗传算法求解0-1背包问题、以及不超过100行的井字棋博弈树搜索程序作答……阅读第五节作者讲述了自己编写第一个算法的经历:为光栅图像矢量化软件做预处理时,需消除二值位图上的污点。阅读第六节本节介绍算法设计的基础,重点讲解程序的三大基本结构。顺序执行结构中各步骤依次依赖、不可颠倒,具有确定性和封闭性;循环结构由初始化、循环体和循环条件三部分组成……阅读第七节本节首先承接前文,说明将动作存入函数表可省去循环体代码,新增动作只需加条目;并指出分支跳转虽是基础结构,但用一致性处理逻辑(如函数表、环形队列取模)避免分支,算法结构更好。阅读第八节本节介绍几种常用数据结构。树是表达层次关系的结构,每个节点只有一个父节点,按子节点大小分为有序树与无序树,按子节点数量分为二叉树与多叉树。阅读第九节本节首先介绍了广度优先搜索的流程:从初始点开始,依次访问其邻接点,再按顺序访问这些邻接点的邻接点,为保证顺序需用队列管理。阅读第十节贪婪法的设计分三步:建立最优解的数学模型、把问题分解为一系列子问题并定义其最优解结构、用贪心原则逐个求子问题的局部最优解再堆叠成全局解。阅读第十一节本节首先阐述了递归与分治法的关系:分治法产生的子问题与原问题性质相同,只是规模不同,这天然适合用递归实现,通过参数控制规模即可复用同一函数。阅读第十二节本节讲解动态规划的后两个设计步骤:定义决策与状态转换方程,以及确定边界条件。阅读第十三节当候选解之间存在关联时,无法预先确定全部状态,只能从初始状态出发,依据状态间的演化关系逐步扩展,最终形成一棵状态树,或用图来组织解空间。阅读第十四节本节介绍中文数字与阿拉伯数字相互转换的算法。中文数字同为十进制,但用“数字+权位”直接表示,常用权位有十、百、千、万、亿等;现代不再使用“兆”及更大单位,改用“万亿”等堆叠方式。阅读第十五节本节首先补充了中文数字转换的实现细节:SectionToChinese()函数通过中文数字表和权位表将数字转为中文,其中0的处理是关键——小节末尾的0不转换……阅读第十六节本节讨论用穷举算法解决倒水问题的状态建模与搜索方法。倒水动作与静止状态结合产生状态变化,持续变化形成一棵状态树,以[8,0,0]为根,树上所有状态构成解空间……阅读第十七节本节先总结了上一章的水桶分水问题:手工画状态图推演到第六种方法就放弃了,改用算法穷举,最终找到16种倒水方法,其中最快的一种只需7步。阅读第十八节本节讲述和尚与妖怪过河问题的状态树搜索。状态树遍历靠动作模型驱动,算法定义了10种过河动作,逐一处理动作列表即可完成搜索。阅读第十九节本节首先用反证法证明了Gale-Shapley算法的正确性:算法结束后不可能有人单身,因为单身的男人必然求过婚,而单身的女人不可能拒绝任何求婚;同样……阅读第二十节本节先给出穷举所有完美匹配的递归算法:按男孩顺序逐个从其偏爱列表中挑选尚未有舞伴的女孩,配对后递归处理下一个男孩,末位配对完成即得到一个完美匹配,每级搜索后需回溯重置关系。阅读第二十一节本节先总结了匈牙利算法的实现要点:以顶点集合为基础,从X集合逐个选点用DFS或BFS搜索增广路径,单次搜索耗时O(E),整体复杂度O(V*E)……阅读第二十二节本节给出Kuhn-Munkres算法的实现代码说明:Kuhn_Munkres_Match()函数依次完成顶标初始化、匈牙利算法求完美匹配、顶标调整三个步骤……阅读第二十三节本节继续探讨爱因斯坦谜题的求解,重点是数据结构优化、线索建模与算法设计。阅读第二十四节本节总结了前文的穷举算法:近2亿个组合中只有一组通过全部线索,验证了答案的唯一性;该算法属于多维度穷举,即对每个维度分别穷举再按关系组合。阅读第二十五节本节讲带开始时间的拓扑排序:用优先级队列管理同时入度为0的顶点,既按先进先出,又按开始时间小的先出。阅读第二十六节CriticalPath()函数按事件顶点的拓扑顺序逐个处理,搜索每个顶点发出的有向边以找出关键活动并输出关键路径;图中的虚拟活动虽不影响结果但会被输出……阅读第二十七节本节介绍256色PCX文件的格式与RLE压缩应用。PCX文件分文件头、图像数据和256色调色板三个域:128字节的文件头存放图像尺寸、分辨率等信息……阅读第二十八节计算星期几的关键是求出两个日期相隔的天数,常用三种方法。阅读第二十九节本节先讲历法变更:儒略历四年一闰,每年比天文时间多0.0078天,从公元前46年到1582年累计多出10天,教皇格里十三世遂将1582年10月5日直接改为10月15日,启用格里历。阅读第三十节本节介绍用天文算法计算二十四节气时间的思路:即求出太阳地心黄经等于各节气黄经度数的时刻,这需要计算地球、太阳、月亮的运行参数,而VSOP-82/87行星理论使计算变得可行。阅读第三十一节本节介绍黄经章动、光行差修正以及用牛顿迭代法计算二十四节气时间的方法。阅读第三十二节本节介绍如何计算日月合朔的时刻,即太阳与月亮地心视黄经差为0的时刻。阅读第三十三节本节介绍中国农历的历法规则与推算方法。农历是阴阳合历,以朔日为月首,因朔望月总长与回归年不等,需通过置闰月来协调。阅读第三十四节农历基本规则:以日月合朔时刻为月首定初一,按两次合朔间隔定大小月;月以中气得名,冬至所在月为十一月,含雨水中气者为正月,无中气者为闰月;从冬至到次年冬至若有十三个朔望月则置闰……阅读第三十五节公历与农历周期长度不同,二者没有固定的对应关系,无法用公式直接转换,只能按历法规则推算。阅读第三十六节本章介绍实验数据的曲线拟合。曲线拟合是用连续曲线或解析表达式逼近一组离散数据点,以反映数据的函数关系,便于分析和估算。阅读第三十七节本节首先给出样条函数的数学定义:若函数在整个区间上具有m-1阶连续导数,且在每个子区间上是m次多项式,则称为m次样条函数;若它在各节点处与原函数值相等,则为样条插值函数。阅读第三十八节本节先给出追赶法求解方程组的三个前提条件,即系数矩阵为对三角矩阵且对角线占优。阅读第三十九节本节介绍牛顿迭代法及其在非线性方程求根中的应用。牛顿法基于函数在某点的切线来逼近零点,通过迭代公式不断更新近似解。阅读第四十节本节介绍矢量点积及其在计算几何中的应用。点积定义为对应坐标乘积之和,其结果的正负可判断两矢量夹角为钝角、锐角还是直角。阅读第四十一节本节讲解光栅图形扫描转换的概念:由于点阵设备的像素有大小且位置固定,只能用像素近似显示数学意义上的直线,这一构造最逼近图形的像素直线的过程即扫描转换。阅读第四十二节本节介绍计算机图形学中实用的圆与椭圆生成算法。直角坐标法与极坐标法因计算量大,仅作理论存在。阅读第四十三节本节首先完成中点画椭圆算法的推导:根据中点在椭圆内外,判别式 d 的增量分别为 b(2x+2)+a(-2y+3) 和 a(-2y+3),起点为 (0,b)……阅读第四十四节本节先总结了扫描线种子填充算法的实现要点:FillLineRight()和FillLineLeft()从种子点向两侧填充并返回点数,以调整当前区间……阅读第四十五节本节先讲解原始扫描线填充算法的实现:InitScanLineNewEdgeTable()根据前后相邻顶点判断左、右顶点,对边的ymax做减一修正,水平边不处理……阅读第四十六节本节介绍边缘填充算法的两个处理步骤:先将背景初始化为填充色的取补色,再对每条非水平边上的每个像素向右取补。阅读第四十七节本节讲解快速傅里叶变换(FFT)的核心原理与实现思路。FFT利用旋转因子的周期性和对称性,采用分治策略,将N点离散傅里叶变换(DFT)递归分解为多个N/2点的DFT……阅读第四十八节本节讲解音频频谱计算与显示,以及利用频谱分析破解DTMF拨号音的原理。阅读第四十九节本节介绍离散傅里叶逆变换(IDFT)及其快速算法(IFFT)。阅读第五十节本节收束了离散傅里叶变换(FFT)一章,指出其在工业与信号处理领域应用广泛,本章算法虽非最高效,但适合研究算法原理,目的是让读者了解生活中隐藏的算法、消除对算法的神秘感。阅读第五十一节本节介绍遗传算法的三个关键要素。首先是适应度评估函数,它衡量个体与最优解的接近程度,评估过程包括基因解码、用目标函数计算结果、再转换为适应度。阅读

全部 76 章

蓝色可点开阅读,灰色的还在整理中。