首页 > 其他分享 >知识点

知识点

时间:2023-06-28 15:46:02浏览次数:36  
标签:知识点 方程 定义 迭代 子结构 问题 最优

循环不变量

用于证明迭代算法

image-20230627092857590

例题:用循环不变量证明选择排序正确性

  • 循环不变量:在第\(j\)次迭代执行前,\(A[1,2,...,j-1]\)已经有序
  • 初始步:在第一次迭代之前,已排序的子序列为空,因此循环不变量成立。
  • 归纳步:假设在第\(j=k\)个迭代前,\(A[1,2,..,k-1]\)有序。当执行迭代\(j=k\)时,从\(A[k,,,n]\)中选出最小的元素放在已排序序列的末尾,则在第\(k\)次迭代后,\(A[1,2,...,k]\)将包含第k个最小元素并且保证\(A[k-1]<=A[k]\),因此\(A[1,2,...,k]\)有序。
  • 终止步:当\(j=n+1\)时,循环终止,此时\(A[1,2,...,n]\)有序,算法正确。

渐进符号

  1. 同阶、渐进紧界

    • 定义

    image-20230627100937706

    image-20230627101043495

    • 证明

      • 定义

        image-20230627101149026

      • 极限

        image-20230627101213908

  2. 低阶、渐进上界

    • 定义

      image-20230627101332870

      image-20230627101354837

    • 证明

      • 定义

      • 极限

        image-20230627101435130

  3. 高阶、渐进下界

    • 定义

      image-20230627101522567

      image-20230627101531957

    • 证明

      • 定义

      • 极限

        image-20230627101617665

  4. 例题

    • 相加取大

      image-20230627101656163

    • 定理2.1

      image-20230627101856039

      image-20230627101902976

算法分析方法

概率分析

  • 优点:概率分析基于概率论和随机性质,可以在平均情况下评估算法的性能。它考虑了输入的可能分布情况,对于涉及随机性的算法特别有用。

  • 缺点:概率分析通常需要对输入的概率分布进行假设,并且在某些情况下可能难以准确估计概率。此外,它可能忽略最坏情况下的性能。

  • 例子

    • 线性搜索

      image-20230627102755552

    • 插入排序

      image-20230627102848555

    • 聘用秘书

      image-20230627102920041

分摊分析

  • 优点:不需要复杂的概率分析且更符合实际情况,保证了最坏情形下每个运算的平均性能。

  • 缺点:分摊分析假设每个操作的开销都是均摊到所有操作中的,但实际情况可能有所不同。对于特定输入,某些操作的实际开销可能会超过平均开销。

  • 方法

    • 合计方法:求出每一次运算的费用,加起来得到总费用关于\(n\)的表达式\(T(n)\),则分摊费用就是\(T(n)/n\)

    • 记账方法:想出来要给每次运算分配的费用是多少,列出运算序列、分摊费用、实际费用、存款这四个数列,发现存款始终非负,则分摊费用就是想出来的那个

    • 势能方法

    • 重要不等式

      \(\sum_{j=0}^{lgn}2^j=2n-1\)

  • 例子

    • multipop

      image-20230627104056368

    • 二进制累加

      image-20230627104210131

实验分析

  • 优点:简单实用
  • 缺点:容易受所选测试实例、计算模型、实验参数等的影响

递归

例子

  1. 计算\(2^k\)问题

    image-20230627112049243

    image-20230627113640765

    image-20230627112104264

  2. 汉诺塔问题

    image-20230627112433191

    image-20230627112158689

    求时间复杂度就是把\(T(n)\)解出来,这里\(T(n)=O(2^n)\)

  3. 选择排序

    image-20230627113734222

    image-20230627112700814

    image-20230627113109499

  4. 排列问题

    方法一:

    image-20230627114934191

    方法二:

    image-20230627115749799

    时间复杂度递推关系式:

    image-20230627115934256

设计原则

image-20230627120202030

公式法解递归方程

image-20230627120601774

这里的结果是同阶(渐进紧界)的,用\(\Theta\)符号

动态规划

与分治的关系

image-20230627122437271

装配线调度

  • 求解思路

    1. 先分析出最优子结构性质是什么

      image-20230627160857502

      image-20230627160927852

    2. 然后说根据这个可以构造出状态转移方程

      image-20230627160019522

  • 为什么能DP

    • 证明最优子结构性质

      image-20230627161010275

    • 递归方程

      image-20230627155532463

      image-20230627155548911

    • 说明重叠子问题

      image-20230627155506474

  • 伪代码

    image-20230627155642272

  • 时间复杂度分析

    image-20230627155746145

矩阵链乘法

  1. 问题描述

    image-20230627163953190

  2. 最优子结构性质

    image-20230627164043397

  3. 状态转移方程(区间DP)

    image-20230627164128842

  4. 填表

    image-20230627164252517
    \(i>j\),即对角线以下不填

    \(i = j\),副对角线填0

    之后沿着平行对角线方向从下往上填

最长公共子序列

  1. 问题描述

    image-20230627171055381

  2. 最优子结构性质

    image-20230627171130013

  3. 状态转移方程

    image-20230627171159511

  4. 填表

    image-20230627171217651

    例子:

    image-20230627171310491

0/1背包

  1. 问题描述

    image-20230627172214975

  2. 最优子结构性质

    image-20230627173209926

  3. 状态转移方程

    image-20230627173250235

  4. 填表

    image-20230627173313437

    image-20230627173605140

    例子

    image-20230627173624111

做题

  1. 求解思路

    • 最优子结构性质是什么
      • 原问题的一个最优解要用到哪些子问题
      • 包含在原问题里的这些子问题的解是它们的最优解
    • 由最优子结构性质,描述状态转移方程的构造思路
  2. 为什么能DP

    • 证明最优子结构性质

      • 定义:原问题的最优解中所包含的子问题的解是子问题的最优解

      • 证明方法

        反证法

        已知当前解是原问题的最优解。假定当前解中的\(p\)不是子问题的最优解,则子问题存在最优解\(p^{'}\),将\(p^{'}\)替换\(p\),则可以得到原问题的更优解,矛盾。故假设不成立,则\(p\)就是子问题的最优解。

    • 说明重叠子问题

      • 定义:重复出现的子问题
      • 从递归方程可知,划分后的子问题都需要求解相同的“子子问题”
    • 写状态转移方程

  3. 伪代码

  4. 时间复杂度分析

回溯和分支限界

标签:知识点,方程,定义,迭代,子结构,问题,最优
From: https://www.cnblogs.com/zhengzirui/p/17511543.html

相关文章

  • Android知识笔记:记录 2 个 “容易误解” 的Android 知识点
    今天分享两个之前我们可能都搞错的Android知识点,我们还是要追求极致,把不懂的问题搞懂的~1.事件到底是先到DecorView还是先到Window的?有天早上看到事件分发的一个讨论:那么事件到底是先到DecorView还是先到Window(Activity,Dialog)的呢,引发出两个问题:1.touch相关事件在DecorView,Phon......
  • 知识点总结--6月27日
    JDK提供的编译器是什么?javac.exe标识符的概念是什么?标识符的概念:给类、接口、方法、变量取名字时使用到的字符序列组成部分:大小写字母、数字、_、$、中文例如:注意事项:不能以数字开头 譬如:123name就是不合法的区分大小写但是可以包含关键字和保留字。如:不可以使用void......
  • 【5.0】知识点小结(协程进阶)
    【5.0】知识点小结(协程进阶)【一】IO模型简介我们研究的IO都是基于网络IO的Stevens在文章中一共比较了五种IOModel:blockingIOnonblockingIOIOmultiplexingsignaldrivenIO---(忽略)asynchronousIO由signaldrivenIO(信号驱动IO)在实际中并不常用,所以主要介绍......
  • java知识点
           ......
  • 【3.0】知识点小结(线程相关)
    【3.0】知识点小结(线程相关)【一】什么是线程进程资源单位线程执行单位将操作系统比喻成大的工厂进程相当于工厂里面的车间线程相当于车间里面的流水线每一个进程必定自带一个线程进程:资源单位​ 起一个进程仅仅只是在内存空间中开辟出一块独立的空间......
  • 【4.0】知识点小结(线程进阶)
    【4.0】知识点小结(线程进阶)【一】什么是死锁与递归锁死锁是指两个或多个进程,在执行过程中,因争夺资源而造成了互相等待的一种现象。即两个或多个进程持有各自的锁并试图获取对方持有的锁,从而导致被阻塞,不能向前执行,最终形成僵局。在这种情况下,系统资源利用率极低,系统处于一种......
  • Python 知识点总结-- join 拼接
    路径拼接   path.join() 和str.join() 区别path.join() join方法是一个不定长参数path.join()是python中的OS模块中的方法,使用前需要导入os 用于将多个路径拼接成一个完整的路径。使用该方法时,需要将需要的拼接的路径以参数的形式传递给该方法importosfull......
  • Mysql-二刷一些重要知识点记录
    执行DDL的时候,即使此DDL被其他DML阻塞了,但是后续DML都会被此DDL阻塞(个人理解:DDL、DML按照申请顺序排队执行)[DML加MDL读锁,DDL加MDL写锁,读写之间互斥]使用onlineddl也就不害怕线上DDL了changebuffer存储inser和update的数据。如果不马上查询,起到加速DML的作用[尽量......
  • NLP面试高频知识点整理分享(附详细中文答案)
       本项目是作者们根据个人面试和经验总结出的自然语言处理(NLP)面试准备的学习笔记与资料,该资料目前包含自然语言处理各领域的面试题积累。    资源整理自网络,源地址:https://github.com/km1994/NLP-Interview-Notes    内容涉及多次跳转,点击文末“阅读原文“”查看......
  • ML、DL、NLP面试常考知识点、代码、算法理论基础汇总分享
        此项目是机器学习(MachineLearning)、深度学习(DeepLearning)、NLP面试中常考到的知识点和代码实现,也是作为一个算法工程师必会的理论基础知识。项目介绍    •此项目是机器学习、NLP面试中常考到的知识点和代码实现,也是作为一个算法工程师必会的理论基础知识。  ......