回溯法之子集树的算法框架

  • 子集树可以认为是集合S分别对于每个元素进行选用操作而构成的二叉树,其叶节点为2^n个,其中n为集合S的元素个数。
  • 根据上述思路,其基本的代码框架如下所示。经过Leetcode测试,该框架实用性较好,但是算法效率比其他相同的算法(指回溯法的其他写法)要慢。
# nums为上述集合S,res为记录符合要求的集合
# path记录元素组合的路径,当符合要求则加入到res中
# step为遍历深度
# 在代码开始位置去讨论是否达到了遍历深度
# 在决定是否加入该元素部分,讨论是否需要继续加入元素进行遍历
# 以下框架实现查找非重复子集树

def dfs(self,nums,res,path,step):
    if step==len(nums):
        if path not in res:
            res.append(path.copy())
        return
    else:
        # 决定不加入nums[step]元素
        self.dfs(nums,res,path,step+1)
        # 决定加入nums[step]元素
        path.append(nums[step]) 
        self.dfs(nums,res,path,step+1)
        path.pop()
    原文作者:回溯法
    原文地址: https://blog.csdn.net/guyanbeifei/article/details/80048046
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞