随笔分类 -  算法分析与设计

摘要:《算法图解》读书笔记 本书作者:Aditya Bhargava 目录: 第一章:二分查找;时间复杂度计算 第二章:数组和链表 第三章:递归;栈 第四章:快速排序 第五章:散列表 第六章:广度优先算法 第七章:狄克斯特拉算法 第八章:贪婪算法 第九章:动态规划(背包问题,最长公共子串) 第十章:K最近 阅读全文
posted @ 2021-06-17 02:59 Caecae_with_island 阅读(165) 评论(0) 推荐(0)
摘要:1. 问题 给定一个源串和目标串,能够对源串进行如下操作: (1)在任意位置上插入一个字符; (2)替换任意字符; (3)删除任意字符。 例如:kitten —> sitting 操作 源串 目标串 替换:k —> s kitten sitten 替换:e —> i sitten sittin 插入 阅读全文
posted @ 2021-06-07 02:27 Caecae_with_island 阅读(311) 评论(0) 推荐(0)
摘要:1. 问题 图的 m 着色问题。给定无向连通图 G 和 m 种颜色,用这些颜色给图的顶点着色,每个顶点一种颜色。如果要求 G 的每条边的两个顶点着不同颜色。给出所有可能的着色方案;如果不存在,则回答“NO”。 2. 解析 设 G 有 n 个顶点,将顶点编号为1 ,2 ,... ,n ,则搜索空间为深 阅读全文
posted @ 2021-05-31 20:49 Caecae_with_island 阅读(358) 评论(0) 推荐(0)
摘要:1. 问题 给定字符集C={x1,x2,...,xn}和每个字符的频率f(xi),求关于C的一个最优前缀码。 2. 解析 ①二元前缀码 :任何字符的代码不能作为其他字符代码的前缀 ②利用二元前缀码译码 :从第一个字符开始一次读入每个字符(0 或 1),如果发现读到的子串与某个码字相等,就将这个子串译 阅读全文
posted @ 2021-05-24 18:12 Caecae_with_island 阅读(807) 评论(0) 推荐(0)
摘要:1. 问题 设A1,A2,A3,…,An为 n 个矩阵的序列,其中Ai为Pi-1*Pi阶矩阵,这个矩阵链的输入用向量P=<P0,P1,…,Pn>给出。给定向量 P,确定一种乘法次序,使得基本运算的总次数达到最小。 2. 解析 蛮力法 枚举所有可能的乘法次序,针对每种次序计算基本运算的次数,从中找出具 阅读全文
posted @ 2021-05-23 03:04 Caecae_with_island 阅读(200) 评论(0) 推荐(0)
摘要:1. 问题 2. 解析 价值密度pi/wi 贪婪算法,这种选择准则为:从剩余物品中选择可装入包的pi/wi值最大的物品。 思路:轻者先装,直到再装任何集装箱将使轮船载重量超过 C 时停止。 定理:对于任何正整数 k, 算法 (轻者先装)对 k 个集装箱的实例得到 最优解。 证明(数学归纳法): (1 阅读全文
posted @ 2021-05-23 02:04 Caecae_with_island 阅读(253) 评论(0) 推荐(0)
摘要:1. 问题 给定序列 X=<x1,x2,...,xm> Y=<y1,y2,...,yn> 求 X 和 Y 的最长公共子序列Z 2. 解析 Xi=<x1,x2,...,xi> Yj=<y1,y2,...,yj> Zk=<z1,z2,...,zk> 如果Zk是Xi和Yj的最长公共子序列 (1) xi=y 阅读全文
posted @ 2021-05-22 18:23 Caecae_with_island 阅读(162) 评论(0) 推荐(0)
摘要:1. 问题 一个旅行者准备随身携带一个背包。可以放入背包的物品有n种,物品j的重量的价值分别为 wj,vj,j=1,2,...,n 如果背包的最大重量限制是b,怎么选择放入背包物品以使得背包的价值最大。 目标函数(价值) 约束条件(总量),其中xj表示放入背包的第j种物品的数量 2. 解析 当前Fk 阅读全文
posted @ 2021-05-22 18:19 Caecae_with_island 阅读(206) 评论(0) 推荐(0)
摘要:1. 问题 设m万元钱,n项投资,函数 表示将 x 万元投入第 i 项项目所产生的效益,i=1,2,…,n.问:如何分配这m元钱,使得投资的总效益最高? 2. 解析 设 表示 x 万元投给前 k 个项目的最大效益,k=1,2,…,n,x=1,2,…,m k=1 x=1,F1(1)=11; x=2,F 阅读全文
posted @ 2021-05-08 19:26 Caecae_with_island 阅读(162) 评论(0) 推荐(0)
摘要:1. 问题 设L是n个元素的集合,从L中选取第k小的元素,其中1<=k<=n.这里的第k小元素是指,当L按从小到大排好序之后,排在第k个位置的元素。 2. 解析 ①k=|S1|+1,m*就是所要找的第k小的数;(以m*为划分标准后,比m*小的有|S1|个,如果恰巧k=|S1|+1,则m* 就是所要找 阅读全文
posted @ 2021-05-08 19:22 Caecae_with_island 阅读(393) 评论(0) 推荐(0)
摘要:1. 问题 在一个平面上,有n个点,每两个点称作一个点对,在所有点对中,求解出其中最小点对距离。 2. 解析 3. 设计 struct Node { double x, y;//X轴坐标,Y轴坐标 //优先以X轴坐标升序,依次以Y轴坐标升序 friend bool operator < (const 阅读全文
posted @ 2021-04-19 16:30 Caecae_with_island 阅读(387) 评论(0) 推荐(0)
摘要:1.问题 二分归并排序:对n个不同的数构成的数组A[1..n]进行排序,其中n=2^k 2.解析 3.设计 1 //归并 2 void Merge(int left, int mid, int right) { 3 int i = left, j = mid + 1; 4 int k = left; 阅读全文
posted @ 2021-04-07 15:49 Caecae_with_island 阅读(210) 评论(0) 推荐(0)
摘要:1. 问题 用Floyd算法求解下图各个顶点的最短距离。写出Floyd算法的伪代码和给出距离矩阵(顶点之间的最短距离矩阵),按实验报告模板编写算法。 对于下图使用Dijkstra算法求由顶点a到顶点h的最短路径,按实验报告模板编写算法。 2. 解析 3. 设计 Floyd: Dijkstra: 4. 阅读全文
posted @ 2021-03-28 22:11 Caecae_with_island 阅读(145) 评论(0) 推荐(0)
摘要:1. 问题 写出两种检索算法:在一个排好序的数组T[1..n]中查找x,如果x在T中,输出x在T的下标j;如果x不在T中,输出j=0.按实验模板编写,“分析”部分仅给出复杂度结果即可。 2. 解析 3. 设计 4. 分析 顺序查找:T(n)=O(n) 二分查找:T(n)=O(log2n) 5. 源码 阅读全文
posted @ 2021-03-22 16:33 Caecae_with_island 阅读(106) 评论(0) 推荐(0)
摘要:1.问题 给定一个带权图G(V,E),使用Kruskal和Prim算法得出该图的最小生成树和最小权值和。 2.解析 Prim构树过程 Kruskal构树过程 3.设计 Kruskal伪代码: 并查集 找根节点 连接两个根节点 初始化G(v,e) d{起点,终点,权值} 据权值,对d升序 count 阅读全文
posted @ 2021-03-12 14:35 Caecae_with_island 阅读(246) 评论(0) 推荐(0)