编程语言
首页 > 编程语言> > 卜算法学习笔记-lecture1-绪论

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

作者:互联网

算法的概念

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

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

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

traveling salesman problem, TSP

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

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

可以看到在第二种尝试之下可以将这个问题分解为简单实例并可以合起来组成复杂实例。
以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)\).

逐步改进的算法设计流程

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

智能枚举算法设计流程

通过观察解的形式来枚举

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