ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

卜算法学习笔记-lecture1-绪论

2022-09-10 20:32:13  阅读:70  来源: 互联网

标签:结点 lecture1 绪论 可以 枚举 问题 算法 实例


算法的概念

算法是指给出解决问题的操作步骤之后,无论是人还是机器都可以按照步骤机械性的执行得到问题的结果。
我们在日常生活中回遇到各种的实际问题遇到之后的解决流程如下:

首先在一系列世纪问题中找到一个特定的topic,得到一个实际问题,在这个实际问题的基础之上我们可以抽象出数学问题,之后通过对该数学问题的观察,特别是对输入输出结构的观察,得到解决问题的算法。
面对一个数学问题,我们首先问自己以下几个问题。

  • 这个问题的最简单版本是否可以解决,假如不可以,我们可以降低问题的难度直到简单版本可以解决;
  • 问题是否可以拆分为小问题,假如可以拆分,那么采用devide and
    conquer方法,如果有最优子结构,可以尝试动态规划,还有短视的策略贪心可以使用;
  • 可行解的形式是什么,是否采用枚举办法,枚举时需要注意剪枝;
  • 问题的解是否可以通过微小扰动变为另一种形式,这种可以采用逐步改进的办法解决问题,包括线性规划、局部搜索和半退火、网络流等;

基于旅行商问题介绍三种算法设计过程

traveling salesman problem, TSP

  • 输入:结点集合\(V=\{v_1,...,v_n\}\),以及结点之间的距离矩阵\(D = (d_{i,j}) \in R^{n\times n}\),其中\(d_{i,j}\)表示节点\(i\)与节点\(j\)之间的距离;
  • 输出:最短的环游路线,即从任意节点作为出发点,经过每个节点一次且仅一次,最终返回出发点的里程最短的环游;

分而治之算法设计过程简介

我们需要观察这个问题是否可以分解成简单实例,并且简单实例的解是否可以组合出复杂实例的解。

  • 第一种尝试,我们尝试减少结点数,可以看到,我们可以很容易的将五个结点的实例变为四个结点的实例,但是简单实例不太容易组合成复杂实例;
  • 第二种尝试,求解一个辅助问题,计算从起始结点\(s\)出发,经过中间结点集合\(S\),最终达到目的节点\(x\)的最短路径,其长度计为\(M(s,S, x)\);

可以看到在第二种尝试之下可以将这个问题分解为简单实例并可以合起来组成复杂实例。
以5个结点的实例为例,包含结点\(a,b,c,d,e\),以\(a\)为起始节点,那么可以从\(b,c,e\)返回起点,最短里程可以表示为\(min\{d_{b,a} + M(a,\{c,d\},b), d_{c,a} + M(a,\{b,d\},c), d_{e,a} + M(a,\{c,b\},e)\}\)
这个算法可以表示为以下伪代码
在这里插入图片描述
计算\(M(s,S,x)\)的伪代码
在这里插入图片描述
算法的复杂度计算如下,我们需要枚举所有的结点子集\(S\),所以总共有\(2^n\)个子集,路线起点确定,但是终点\(x\)有\(n\)种可能,所以总共要\(O(2^nn)\)才能计算出\(M(s,S,x)\)表格的值,计算出来之后还要经过\(n\)次比较的到最终的结果,Bellman-held-karp的复杂度为\(O(2^n n^2)\).

逐步改进的算法设计流程

基本过程是从问题的一个粗糙的,质量不太高的完整可行解开始,不断改进,直到获得满意的解为止,一般性框架为。
在这里插入图片描述
求解过程中需要关注三个方面:

  • 初始粗糙可行解的选择;
  • 可行解的改进办法,也即扰动办法;
  • 算法的终止条件,常见的终止条件包括当前的可行解无法进一步改进;迭代次数超过预先定义的值;当前可行解的质量超过预先定义的阈值;

智能枚举算法设计流程

通过观察解的形式来枚举

  • 枚举边的各种情况,最终的解的形式是边的集合,枚举各种边是否存在的情况,在这个过程中可以进行剪枝
  • 枚举点的各种情况,也就是将环游表示成\(X=x_1,x_2,...,x_{n-2},x_i \in V (1\leq i \leq n - 2)\).

标签:结点,lecture1,绪论,可以,枚举,问题,算法,实例
来源: https://www.cnblogs.com/eryoyo/p/16678279.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有