
算法分析
算法分析是学习算法的策略,是算法的灵魂
算法的另一部分内容是数据结构,是算法的骨架
IronBull_Zhang
本博客做备份代码所用
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
算法分析 | 分支限界法 | 字符串移动匹配问题
网上遇到一个很有意思的题目一.问题描述1.2.分析解a.很明显是一颗解空间树.先来分析一下这个问题的结构比如待测字符串: s1="1234";目标字符串: s2="3124";待测字符串s1长度为4,有4*3*2*1=24种排列组合先思考最多需要几次修改,能 任一排列-->任一排列①穷举法: 1次:算上本身只...原创 2020-04-03 12:35:29 · 401 阅读 · 0 评论 -
算法分析 | 分支限界法 | (优先队列)优化后的旅行商问题
顺便复习了类的继承,派生类的写法如下:Derive (int _cl, int _rl, int _zl, int _id):Base(_cl, _id),rl(_rl),zl(_zl){}注意,1.基类的构造函数Base() 的两个参数是实参,Derive的形参传递给Base(),就是实参.如果写成Base(3,5),也不出错.2.基类构造函数的调用放在函数头部,不能放在函数体...原创 2020-03-07 22:10:29 · 1178 阅读 · 0 评论 -
算法分析 | 分支限界法 | (优先队列)旅行商问题
注意,旅行商问题一般有一个默认的起点.一.问题分析1.状态结点的数据类型:int cl; 表示已走的路程int id; 表示当前准备判断的结点序号int x[N]; 表示一个最佳策略2.约束条件:下一个结点和当前结点有通路,并且解 < 当前的最优解,并且终点和起点形成回路3.限界条件:当前状态的最大价值上界 > 当前最...原创 2020-02-25 22:33:38 · 3268 阅读 · 0 评论 -
算法分析 | 分支限界法 | (优先队列)01背包问题
先看一段代码queue<int>q;q.push(5); q.push(2); q.push(3);int* p= &q.front();q.pop();cout << *p;输出是5.元素5在pop()后仍存在于内存中,仅仅是出队了而已....原创 2020-02-21 23:11:56 · 1841 阅读 · 0 评论 -
算法分析 | 分支限界法 | 01背包问题
红色代表错误或者特别注意蓝色代表修复后的正确代码黄色表示变量一.问题分析1.问题的性质回溯法是对树的深度遍历,需要用到递归.分支限界法是对树的广度遍历,需要用到<queue>数据结构.而且每个状态都是一个数据结构实体状态应该表示如下几个属性:int cp //已放入物品总价值int rp //剩余物品的总价值int rw //剩...原创 2020-02-19 15:39:37 · 2987 阅读 · 0 评论 -
算法分析 | 回溯法 | 旅行商问题
一.问题分析1.问题描述:一个联通无向图中,求最短路径回路.也就是求出一个最佳序列,并且终点和起点有直接路径.2.问题分析: ① 约束条件:因为存在着两个结点不直接相连的情况,有些序列一开始就不可能出现.约束函数存在记录连接情况的二维数组 T[ t - 1 ][ i ] != // t-1表示上一个结点; i表示全部剩余节点 ...原创 2020-02-17 17:54:20 · 2488 阅读 · 0 评论 -
算法分析 | 回溯法 | 最佳加工顺序
一.问题分析1.问题描述:有n个机器零件,每个零件必须先由机器A处理,再由机器B处理。零件Pi需要机器1,2处理时间为P[i].Atime,P[i].Btime如何安排零件加工顺序,使第一个零件从机器1上加工开始到最后一个零件在机器2上加工完成,所需的总加工时间最短?2.A机可以连续不间断开动,B机第i个零件的加工完成时间为:B_end_time[ i ]=max(B_...原创 2020-02-15 22:01:04 · 1138 阅读 · 0 评论 -
算法分析 | 回溯法 | N皇后问题
一.问题分析N×N的棋盘上有N个皇后,皇后的攻击范围是同一行,同一列和对角线.N个皇后要如何安全排列?是在一个二维数组中,一行一行地看,观察第 i 行的第 i 个皇后能放在第几列.也就是说,默认每个皇后不可能出现在同一行.所以,在判断第t个皇后时,只需判断是否a.列冲突:x[t]==x[i] i的范围是1~t-1b.对角线...原创 2020-02-14 20:11:52 · 539 阅读 · 0 评论 -
算法分析 | 回溯法 | 地图着色
一.问题分析地图着色问题是01背包问题的推广,可以抽象看作无向连通图由0/1两种状态变成了{1,2,3....N} 这N种状态,逻辑结构也从二叉树->N叉树.这时就不能像之前那样:左子树写一段代码,右子树写一段代码.用for()遍历每一个状态并递归,而且因为没有"不涂色",也就是说没有0状态,所以也不存在限界条件二.代码分析分为4部分1.全局变...原创 2020-02-14 19:57:05 · 2266 阅读 · 0 评论 -
算法分析 | 回溯法 | 最大团问题
.原创 2020-02-14 17:17:32 · 742 阅读 · 0 评论 -
算法分析 | 回溯法 | 01背包问题
零.前言1.确立解空间回溯法需要用到树的概念 . 这个树就是问题的解空间{x1,x2,x3....xn}.其中,左右连线表示做出了某个选择;每个结点表示做出选择后的一个状态; 每一层代表一个数组元素2.搜索解空间①约束条件:满足某个条件才能向左子树扩展,表示放入物品.cw:已装入重量; w[i]:当前物品的重量; W:总容积cw + w[i...原创 2020-02-13 22:00:36 · 1719 阅读 · 0 评论 -
算法分析 | 动态规划 | 01背包问题
这个问题之前重复写过,本篇博客主要分析调试方法一.代码实现backpack.h//物品不可分割的背包问题, 可以用动态规划.//bestValue[i][j]=m 表示前i个物品放入容量为j的背包的最大价值vector<int>w{2,5,4,2,3};//重量数组vector<int>v{6,3,5,4,6};//价格数组int Cont = 11...原创 2020-02-10 22:56:39 · 320 阅读 · 0 评论 -
算法分析 | 动态规划 | 石子合并问题
一.问题描述在一条直线上有n堆石子, 要求每次将相邻的两堆石子合成一堆,花费=两堆石子的总数求最省总花费.因为存在相邻的限制条件,不能使用贪心算法将每次最小的2堆合起来.遂使用动态规划二.代码实现1.StoneMerge.h#pragma once#include"allh.h"//石子合并问题(直线型) 一条直线上只有相邻的石子堆可以合并.合并i堆和j堆的花...原创 2020-02-08 23:24:30 · 1708 阅读 · 0 评论 -
算法分析 | 动态规划 | 凸多边形的最优三角剖分问题
学习自https://www.jianshu.com/p/b97b0bb78b6c一.问题分析:将凸多边形内部划分成若干三角形,每一条线都带权哪一种划法,让三角形的权最小?因其具有最优子结构:所以,总问题的最优解=子问题的最优解+ 一个三角形的权即举例来说:当程序运行到i=0,j=5,k=3时:设: ...原创 2020-02-07 19:40:20 · 1038 阅读 · 0 评论 -
算法分析 | 动态规划 | 字符串编辑距离
一.问题分析将字符串s1 → s2需要的操作次数s1:aaa_ _s2:aaaab①插入a ②插入b, 所以dis=21.确定最优子结构设d [ i ] [ j ] 是串 { x1,x2,....., xi }和串 { y1,y2,....., yj }的最短编辑距离.无论两个字符串如何对齐,右侧只有3种对齐方式:①:可看作串 { x1,x2...原创 2020-02-05 21:59:34 · 306 阅读 · 0 评论