• 算法设计与分析笔记 by 国科大卜东波


    Lecture 1 2021.9.10 授课内容

    Algorithm 算法一词起源于 学者 Musa al-Khwarizmi(阿尔·花剌子米)。花剌子米是代数学之父,是代数和算术的创立人。算法(Algorism、Algorithm)出自「Algoritmi」,这是花剌子米(al-Khwārizmī)的拉丁文译名。

    基本算法策略

    求解问题一般可以分为三种情况

    1. 分治(Divide&Conquer):根据问题结构划分为子问题,根据问题性质,可能能进一步优化为动态规划(DP)、贪心算法
    2. 改进(Improvement):根据问题解的关系,从一个初始解不断改进
    3. 枚举(Enumeration):根据问题解的形式,使用搜索树枚举每一种解,可能用到剪枝

    旅行商问题(TSP)

    接触过图论的同学应该都熟悉TSP问题,即求解一条通过图 (G(V, E, w)) 上每一个节点刚好一次的最短回路。

    应用上面的问题求解策略,我们分别使用三种方式来解决该问题。

    分治

    原问题:对于 (n) 个城市,访问每个城市刚好一次的回路。

    显然,原问题无法被直接划分为两个更小的子问题,因为两个部分的城市回路无法直接合并。这里可以定义子问题为一条最短的路径:(M(s, S, x)) 表示从s出发访问城市集合S里每一个城市一次最后抵达x的最短路径的解。

    因此原问题等价于求解

    [min_{e in V, e eq s} M(s, V-{e}, e) + d_{es} ]

    M(s, S, x)也很容易划分为更小的子问题

    # Held-Karp algorithm [1962]
    function TSP(D)
      return mine∈V,e̸=s M(s, V − {e}, e) + des;
    function M(s, S, x)
      if S = {v} then
        M(s, S, x) = dsv + dvx;
        return M(s, S, x);
      end if
      return mini∈S, i̸=xM(s, S − {i}, i) + dxi;
    

    提升

    提升策略关注问题解之间的关系。可以设计以下通用的提升算法流程:

    # Improvement strategy
    function GenericImprovement(V, D)
    # Let s be an initial tour;
    while TRUE do
      Select a new tour s′ from the neighbourhood of s;
      if s′ is shorter than s then
        s = s′;
        end if
      if stopping(s) then
        return s;
      end if
    end while
    

     
    如果我们已经找到任意一条便利每一个城市的回路,如何改进使回路总距离缩短呢?现在问题转化为上述neighbourhood的定义。

    2-OPT:对于一条回路,可以选择两条边上(只改变一条边是不可能的)的四个端点,交换其中两个端点连边,从而形成一条新的回路。

    2-OPT可以扩展为3-OPT,这样新的转化方案总共有7种
    3-OPT

    枚举

    我们对图上的边编号,对于每一种方案,可以记录每一条边的使用情况,因此解可以表示为类似 X = [0,1,1,... 0,1]的形式,其中 (X[i]= 1) 表示通过第 (i) 条边, (0) 表示不通过。

    • 暴力搜索

    • 启发式搜索

      lower_bound: 剩余每个节点最短两条边之和

      best_so_far: 当前已经找到的最短路径

      如果当前路径长度已经大于 lower_boundbest_so_far,则停止扩展当前部分解

    SolutionTree
     
    对图上的节点编号,解可以表示为 X = [x1, x2, ... xn-1, xn=x1]。同样可以应用以上的搜索策略。

  • 相关阅读:
    随手vue笔记 (三)
    vue中如何使用定义好的变量设置css样式
    .net6 WebApi 之 Configuration
    .net6 webApi IoC SqlSugar的日常使用
    file Download 监听文件下载完成状态
    sqlserver数据库回滚
    git常用命令
    2018年以来互联网医院相关核心政策文件达23份
    Java 基础面试题20211228
    git add A 可以免于 git rm
  • 原文地址:https://www.cnblogs.com/izcat/p/15303946.html
Copyright © 2020-2023  润新知