码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 回溯总结二:子集问题&排列问题&性能分析


    78. 子集、90. 子集 II、491. 递增子序列_清榎的博客-CSDN博客

    78是最基本的子集问题,90题在78的基础上进行了同层去重

    两种去重方法,used数组标记 和 i>start

    491.递增子序列就有点复杂了,树状图如下:

    491. 递增子序列1 

    要注意它的去重方法。 

    46. 全排列、47. 全排列 II_清榎的博客-CSDN博客

    排列问题相比组合问题的不同在于次序需要考虑,因此表现在程序中就是每次开始都需要从头寻找 

    对于排列问题的去重可以见 47.全排列Ⅱ,当然47题不仅可以树层去重也可以进行树枝上的去重,树的图如下:

    47.全排列II3

    但是树层去重效率更高,因为没有继续往下递归。

    性能分析(来自carl)

    子集问题分析:

    • 时间复杂度:$O(n × 2^n)$,因为每一个元素的状态无外乎取与不取,所以时间复杂度为$O(2^n)$,构造每一组子集都需要填进数组,又有需要$O(n)$,最终时间复杂度:$O(n × 2^n)$。
    • 空间复杂度:$O(n)$,递归深度为n,所以系统栈所用空间为$O(n)$,每一层递归所用的空间都是常数级别,注意代码里的result和path都是全局变量,就算是放在参数里,传的也是引用,并不会新申请内存空间,最终空间复杂度为$O(n)$。

    排列问题分析:

    • 时间复杂度:$O(n!)$,这个可以从排列的树形图中很明显发现,每一层节点为n,第二层每一个分支都延伸了n-1个分支,再往下又是n-2个分支,所以一直到叶子节点一共就是 n * n-1 * n-2 * ..... 1 = n!。每个叶子节点都会有一个构造全排列填进数组的操作(对应的代码:result.push_back(path)),该操作的复杂度为$O(n)$。所以,最终时间复杂度为:n * n!,简化为$O(n!)$。
    • 空间复杂度:$O(n)$,和子集问题同理。

    组合问题分析:

    • 时间复杂度:$O(n × 2^n)$,组合问题其实就是一种子集的问题,所以组合问题最坏的情况,也不会超过子集问题的时间复杂度。
    • 空间复杂度:$O(n)$,和子集问题同理。

    一般说道回溯算法的复杂度,都说是指数级别的时间复杂度,这也算是一个概括吧!

  • 相关阅读:
    声明式HTTP客户端-Feign 使用入门详解
    【图像分割】基于布谷鸟算法实现二维Tsallis熵、kapur、oust多阈值图像分割附matlab代码
    jFinal框架之拦截器的使用
    spark的资源调度与任务调度
    科技型中小企业有哪些?
    flask框架初学-07-数据库映射关系
    LeetCode 2596. 检查骑士巡视方案
    Google Earth Engine APP——在线计算23类植被指数app代码
    972信息检索 | 第八章 移动搜索
    亳州市的自然风光与旅游资源:欣赏安徽省中部的壮丽景色
  • 原文地址:https://blog.csdn.net/weixin_41997940/article/details/126477583
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号