算法基础理论

本文详细阐述了算法的概念、与程序的区别,以及描述算法的方法,包括自然语言、流程图、程序设计语言等。重点讲解了计算复杂性,如时间复杂性和渐近复杂性的数学表述,并介绍了P类问题、NP类问题及其区别,特别是NP完全问题的概念和特点。
摘要由CSDN通过智能技术生成

基础理论

理解算法的概念

算法是带有输入输出的、有限的、确定的、有效的过程。

算法是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,代表着用系统的方法描述解决问题的策略机制。

特点:

  • 执行时,不能包含任何主观的决定;
  • 不能有类似直觉/创造力等因素

理解什么是程序,程序与算法的区别和联系

程序是算法用某种程序设计语言的具体实现。

算法和程序的区别主要在于:

  • 在语言描述上,程序必须是用规定的程序设计语言来
    写,而算法很随意;
  • 在执行时间上,算法所描述的步骤一定是有限的,而
    程序可以无限地执行下去

算法和数据结构的关系

  • 广义上讲,算法是一系列的运算步骤,它表达解决某一类计算问题的一般方法,对这类方法的任
    何一个输入,它可以按步骤一步一步计算,最终产生一个输出。
  • 但是对于所有的计算问题,都离不开要计算的对象或者要处理的信息,而如何高效的把它们组织
    起来,就是数据结构关心的问题,所以算法是离不开数据结构的

在这里插入图片描述

掌握描述算法的方法

算法的描述方法

  • 自然语言
  • 流程图
  • 程序设计语言:C、C++、Java、Python、…
  • 伪代码(Pseudocode)——算法语言
    • 类C/类Pascal语言
    • 结构化编程语言

掌握算法的计算复杂性概念

问题规模

基本运算

计量函数

用输入规模的某个函数来表示算法的基本运算量,称为算法的时间复杂性(度)

简化算法复杂性分析的方法和步骤,只要考察问题的规模充分大时,算法复杂性在渐近意义下的阶。

在这里插入图片描述

掌握算法渐近复杂性的数学表述

渐近上界记号O

  • 若存在两个正的常数c和n0 ,使得对所有n≥n0,
    都有:T (n)≤c×f(n) ,则称 T (n) = O(f(n))

渐进下界记号 Ω \Omega Ω

  • 若存在两个正的常数c和n0 ,使得对所有n≥n0,
    都有:T (n)≥c×f(n) ,则称 T (n) = Ω(f(n))

紧渐近界记号 Θ \Theta Θ

  • 若存在三个正的常数c1、c2和n0 ,使得对所有n≥n0,都
    有:c1×f(n) ≥T (n)≥ c2 f(n) ,则称 T(n) = Θ \Theta Θ(f(n))

在这里插入图片描述

证明根据上面定理

了解NP类问题的基本概念

易解问题与难解问题

通常将存在多项式时间算法的问题看作是易解问题(Easy Problem);

  • 排序问题、查找问题、欧拉回路

而将需要指数时间算法解决的问题看作是难解问题(Hard Problem)。

  • TSP问题、Hanio问题、Hamilton回路问题

不能用计算机求解(不论耗费多少时间)的问题称为不可解问题(Unsolvable Problem)

  • 图灵停机问题(Turing Halting Problem)

P类问题和NP类问题

  • 判定问题

    • 一个判定问题(Decision Problem)是仅仅要求回答“yes”或“no”的问题
      判定问题的重要特性——证明比求解易
    • 大整数因子
    • 复杂线性方程组的解
  • 确定性算法与P类问题

    • 定义1 设A是求解问题Π的一个算法,如果在算法的整个执行过程中,每一步只有一个确定的选择,则称算法A是确定性(Determinism)算法
    • 定义2 如果对于某个判定问题Π,存在一个非负整数k,对于输入规模为n的实例,能够 O ( n k ) O(n^k) O(nk)的时间运行一个确定性算法,得到yes或no的答案,则该判定问题Π是一个P类(Polynomial)问题

    所有易解问题都是P类问题

  • 非确定性算法与NP类问题

    • 定义3 设A是求解问题Π的一个算法,如果算法A以如下猜测并验证的方式工作,就称算法A是非确定性(Nondeterminism)算法
      • 猜测阶段:在这个阶段,对问题的输入实例产生一个任意字符串y,在算法的每一次运行时,串y的值可能不同,因此,猜测以一种非确定的形式工作;
      • 验证阶段:在这个阶段,用一个确定性算法验证
        • 检查在猜测阶段产生的串y是否是合适的形式,如果不是,则算法停下来并得到no;
        • 如果串y是合适的形式,则验证它是否是问题的解,如果是,则算法停下来并得到yes,否则算法停下来并得到no。
    • 定义4 如果对于某个判定问题Π,存在一个非负整数k,对于输入规模为n的实例,能够以 O ( n k ) O(n^k) O(nk)的时间运行一个非确定性算法,得到yes或no的答案 , 则 该 问 题 是 一 个 NP 类 (Nondeterministic Polynomial)问题

    关键:存在一个确定性算法,能够以多项式时间来检查和验证猜测阶段所产生的答案。
    例如:NP类问题——汉密尔顿回路问题

P类和NP类问题的主要差别

  • P类问题可以用多项式时间的确定性算法来进行判定或求解;
  • NP类问题可用多项式时间的非确定性算法来进行判定或求解
  • P⊆NP

NP完全问题

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  • 21
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值