美文网首页
回溯算法

回溯算法

作者: MasterXiao | 来源:发表于2019-01-07 10:03 被阅读98次

定义

回溯算法也可以理解为穷举法,是穷举法的一个巧妙实现,也可以叫试探法,是一种系统搜索问题的解决办法,是暴力搜索的一种。

基本思想

回溯法使用的是试错的思想,他通过分步骤的方式来解决问题,在不同的步骤上尝试,在分步解答的过程中,如果发现分步答案得不到正确的解答,它将退回到上一步或者上几步的计算,在通过其他的分步解答再次尝试寻找答案,回溯算法通常通过简单的递归来实现,在重复上述过程中可能出现两种结果:

  • 查找到可能存在的答案
  • 尝试了所有的情况宣告没有正确答案

通俗的来说就是在一条路上一直走,如果能进则进,不能进则退回来,换一条路继续走,直到找到正解,或者走完所有的路为止。

问题

我们通过解决一个问题来学习回溯算法;

现在有列表 nums = [1,2,3] 要你求出该列表所有可能的排列并存储在另一个列表中。

我们将可能的组合方式看做一棵树;

image.png

可以发现总共有 3^3 种组合方式,符合条件的结果是[[1,2,3],[1,3,2],......[3,2,1]],关键在于咱们如何使用代码来筛选出符合条件的结果并存入到列表中。

代码编写:

nums = [1,2,3]
result = []

def back(tempList,nums):
    if len(tempList) == len(nums):
        result.append(tempList.copy()) #满足条件的回溯点
    for i in nums:  #遍历
        if i in tempList:
            continue
        else:
            tempList.append(i)
            back(tempList,nums) #回溯
            tempList.pop() 

for n in nums:
    tempList = []
    tempList.append(n)
    back(tempList,nums)
print(result)

相关文章

  • 回溯算法

    回溯算法 回溯算法介绍   回溯算法并不是非常复杂的算法, 很多人接触过但是未必知道这是回溯算法; 典型的回溯算法...

  • 回溯算法:八皇后问题和0-1背包问题

    文章结构 如何理解回溯算法 回溯算法的经典应用 完整源码 图片来源 1. 如何理解回溯算法 1.1 什么是回溯算法...

  • Algorithm进阶计划 -- 回溯算法

    滑动窗口算法回溯算法框架回溯算法运用 1. 回溯算法框架 回溯算法,是类似枚举的搜索尝试过程,主要是在搜索尝试过程...

  • 回溯算法总结

    回溯法学习总结 回溯算法也是算法导论中常用的算法,回溯算法类似于暴力求解算法,经常用在求可能解的问题。下面我将从三...

  • 77. Combinations.go

    回溯算法

  • 递归2-回溯与递归

    I. 回溯算法基础 回溯与递归的区别和联系  很多人不理解回溯与递归到底是什么关系。其实很简单,回溯算法是一种算法...

  • 回溯算法之-组合总和

    回溯算法模版 首先上一套回溯算法模版,很多回溯算法都可以使用该模版解决 leetcode 39 组合总和 给定一个...

  • 17. Letter Combinations of a Pho

    使用回溯算法

  • 「回溯算法」专题介绍

    「回溯算法」专题介绍 第 1 节:从全排列问题开始理解回溯搜索算法 引言 大家好,今天要和大家分享的主题是“回溯算...

  • 450,什么叫回溯算法,一看就会,一写就废

    什么叫回溯算法 对于回溯算法的定义,百度百科上是这样描述的:回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索...

网友评论

      本文标题:回溯算法

      本文链接:https://www.haomeiwen.com/subject/dhsrrqtx.html