算法设计与分析笔记
LiAnG小炜
Everything became much clearer when I started writing code.
展开
-
再谈数据结构(一):栈和队列
1 - 前言栈和队列是两种非常常用的两种数据结构,它们的逻辑结构是线性的,存储结构有顺序存储和链式存储。在平时的学习中,感觉虽然栈和队列的概念十分容易理解,但是对于这两种数据结构的灵活运用及代码实现还是比较生疏。需要结合实际问题来熟练队列和栈的操作。2 - 例题分析2.1 - 铁轨(Rails, ACM/ICPC CERC 1997, UVa 514)某城市有一个火车站,铁轨铺设如图6-1...原创 2018-11-12 11:55:08 · 480 阅读 · 0 评论 -
C++ STL初步
1 - STL简介STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称。它是由Alexander Stepanov、Meng Lee和David R Musser在惠普实验室工作时所开发出来STL的代码从广义上讲分为三类:algorithm(算法)、container(容器)和iterator(迭代器),几乎所有的代码都采用了模板类和模版函...原创 2018-11-17 12:10:17 · 371 阅读 · 0 评论 -
再谈数据结构(二)数和二叉树
1 - 引言关于树和二叉树,我们需要达到的能力有:熟悉树和二叉树的有关概念熟悉二叉树的性质熟练掌握遍历二叉树的递归算法,并灵活运用知道线索二叉树,会对二叉树进行线索化递归遍历二叉树及其应用构造赫夫曼树和赫夫曼编码树和二叉树的转换森林和二叉树的转换遍历树和森林本文着重在树和二叉树实际应用与代码实现基本操作,对概念就不再赘述2 -...原创 2018-11-29 10:49:48 · 518 阅读 · 0 评论 -
贪心算法
1 - 引言贪心法是一种解决问题的策略。如果策略正确,那么贪心法往往是易于描述、易于实现的。2 - 背包相关问题最优装载问题。给出n个物体,第i个物体重量为wiw_iwi。选择尽量多的物体,使得总重量不超过C。【分析】由于只关心物体的数量,所以装重的没有装轻的划算。只需把所有物体按重量从小到大排序,依次选择每个物体,直到装不下为止。这是一种典型的贪心算法,它只顾眼前,但却能得到最...原创 2018-12-13 11:19:12 · 443 阅读 · 0 评论 -
再谈数据结构(三)图
1 - 引言图(Graph)描述的是一些个体之间的关系。与线性表和二叉树不同的是:这些个体之间既不是前驱后继的顺序关系,也不是祖先后代的层次关系,而是错综复杂的网状关系。图也是数据结构中经常使用的一种结构,让我们来学习一下使用图的算法吧2 - 用DFS求连通块例题6-12 油田(Oil Deposits, UVa 572)输入一个m行n列的字符矩阵,统计字符“@”组成多少个八连块。如果...原创 2018-12-07 12:04:09 · 386 阅读 · 0 评论 -
动态规划
1 - 引言动态规划是一种用途很广的问题求解方法,它本身并不是一个特定的算法,而是一种思想,一种手段,下面通过一道题目阐述动态规划的基本思路和特点2 - 数字三角形数字三角形问题。有一个由非负整数组成的三角形,第一行只有一个数,除了最下行之外每个数的左下方和右下方各有一个数从第一行的数开始,每次可以往左下或右下走一格,直到走到最下行,把沿途经过的数全部加起来。如何走才能使得这个和尽量...原创 2018-12-15 09:28:07 · 185 阅读 · 0 评论 -
再谈数据结构(四):排序与查找
1 - 引言虽然C++中的STL库中提供了许多排序和查找的方法。但是我们还是需要了解一下排序和查找内部的原理,下面让我们学习一下各类排序与查找算法2 - 归并排序第一种高效的排序算法是归并排序,按照分治三步法,对归并排序算法介绍如下:划分问题:把序列分成元素个数尽量相等的两半。递归求解:把两半元素分别排序合并问题:把两个有序表合并成一个前两部分是很容易完成的,关键在于如何把两个有...原创 2018-12-12 12:05:46 · 390 阅读 · 0 评论