首页 > 编程语言 >算法设计与分析————算法概述

算法设计与分析————算法概述

时间:2022-12-15 14:24:54浏览次数:36  
标签:复杂度 复杂性 空间 算法 概述 n0 设计 输入

算法概述

算法概念

定义

算法是任何定义良好的计算程式,它取某些值或值的集合作为输入,并产生某些值或值的集合作为输出。因此,算法是将输入转化为输出的一系列计算步骤。
——《算法导论》

算法的五个特征

  • 输入:有0个或多个由外部提供的量

  • 输出:算法产生至少一个量作为输出

  • 确定性:组成算法的每条指令适清晰的,无歧义的

  • 可行性:算法中执行的任何计算步骤都是可以被分解为基本的可执行的操作步骤,即每个计算步骤都可以在有 限时间内完成(也称之为有效性)。

  • 有限性:算法中每条指令的执行次数是有限的,执行每条指令的时间也是有限的

程序与算法

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

程序可以不满足有限性。例如操作系统是一个在无限循环中执行的程序,因而不是算法。

算法分析

算法的复杂性是算法效率的度量,是评价算法优劣的重要依据。

一个算法的复杂性的高低体现在运行该算法所需要的计算机资源的多少上。(从算法角度来看,计算机资源包括时间资源和空间资源)

时间复杂度

算法的时间复杂性取决于:

(1) 求解问题的规模;

(2) 具体的输入数据;

(3) 算法本身的设计。

1、用怎样的一个量来表示算法的复杂性
  答:针对问题选择基本运算,将基本运算次数表示为输入规模的函数 

2、给定一个算法,如何计算它的复杂性
  答:输入规模为n时,求解最坏情况下的时间复杂度。

空间复杂度

程序p的空间复杂度指该程序运行时所需的内存空间大小,包括:

  • 指令空间:存储经过编译之后的程序指令所需的空间。

  • 数据空间:常量和简单变量、复合变量(数组、链表、树和图等)

  • 环境栈空间(函数调用):复合变量所需空间常常和问题实例特征有关。

渐进分析

为了简化复杂度的分析,当问题规模n很大时,关注时间复杂度增长的阶,忽略时间复杂度中的低阶项和最高阶项的系数。
渐进性分析:考虑时间复杂性增长的阶

渐进上界

定义1(大O符号) f(n)=O(g(n))(读作“f(n)是g(n)的大O”)当且仅当存在正常量c和n0,使当n≥n0时,f(n)≤cg(n),即g(n)为f(n)的上界。

渐进下界

定义2(大Ω符号) f(n)=Ω(g(n))(读作“f(n)是g(n)的大Ω”)当且仅当存在正常量c和n0,使当n≥n0时,f(n)≥cg(n),即g(n)为f(n)的下界。

渐进紧确界

定义3(大θ符号) f(n)=θ(g(n))(读作“f(n)是g(n)的大θ”)当且仅当存在正常量c1、c2和n0,使当n≥n0时,有c1g(n)≤f(n)≤c2g(n),即g(n)与f(n)的同阶。

算法复杂度的分类

多项式复杂度:O(1)<O(logn)<O(n)<O(nlogn)<O(n2)<O(n3)

指数复杂度:O(2n)<O(n!)<O(nn)

易解问题——难解问题

  • 一个算法是多项式复杂度:“高效”算法。

  • 一个算法是指数复杂度:“低效”算法。

  • 多项式复杂度的算法,随着规模n的增加,可以通过堆叠硬件来实现,“砸钱”是行得通的;

  • 指数复杂度的算法,增加硬件也无济于事,其增长的速度超出了想象力。

工具——STL

STL主要由container(容器)、algorithm(算法)和iterator(迭代器)三大部分构成,容器用于存放数据对象(元素),算法用于操作容器中的数据对象。

标签:复杂度,复杂性,空间,算法,概述,n0,设计,输入
From: https://www.cnblogs.com/life-is-a-mess/p/16984884.html

相关文章

  • 强化学习调参技巧二:DDPG、TD3、SAC算法为例:
    1.训练环境如何正确编写强化学习里的env.reset()env.step()就是训练环境。其编写流程如下:1.1初始阶段:先写一个简化版的训练环境。把任务难度降到最低,确保一定能正常......
  • 测试基础二之用例设计方法
    等价类划分法定义:在所有测试数据中,具有某种共同特征的数据集合进行划分而又分为:有效等价类:满足需求的数据集合无效等价类不满足需求的数据集合  等......
  • 使用Blue Ocean设计pipeline脚本
    BlueOcean是pipeline的可视化ui,可以通过图形ui设计pipeline脚本先在gitlab创建一个项目,必须是空项目(连README文件也不能有),项目名称这里命名为pipeline 安装插件BlueOcean......
  • 基于分水岭算法的图像分割-Matlab版本
    ✅作者简介:热爱科研的算法开发者,Python、Matlab项目可交流、沟通、学习。......
  • IGBT模块A2F12M12W2-F1、A2U12M12W2-F2为简化SiC逆变器而设计
    ACEPACK2电源模块是集成有SiC电源MOSFET技术的1200V模块。这些电源模块支持宽带隙碳化硅材料和高热性能基板的特性。A2F12M12W2-F1模块采用4组拓扑,A2U12M12W2-F2模块采用3......
  • 【DBN分类】基于哈里斯鹰算法优化深度置信网络HHO-DBN实现数据分类附matlab代码
    OverridetheentrypointofanimageIntroducedinGitLabandGitLabRunner9.4.Readmoreaboutthe extendedconfigurationoptions.Beforeexplainingtheav......
  • Javascript-奖品概率算法
    constLUCKY_AIRDROP_PRIZE=[{"id":1,"prop":16.2},{"id":2,"prop":16.2},{"id":3,"prop":16.2},{"id":4,"prop":16.2},......
  • 正则表达式概述
    正则表达式概述什么是正则表达式正则表达式regularexpression,RE是一种字符模式,用于在查找过程中匹配指定的字符。为什么要使用正则表达式?​在工作中,我们时刻......
  • openharmony 军棋工兵寻径算法的实现
    openharmony军棋工兵寻径算法的实现一,引言工兵可在铁路线上任意行走,其它棋子在铁路线上只能直走或经过弧形线,不能转直角弯;工兵在普通路线上跟其他棋子一样,走一格。......
  • 数据库设计工具PowerDesigner
    PowerDesigner是一款非常全面的数据库设计工具。使用PowerDesigner可以快速创建表,支持表与表之间建立关系,界面简洁,功能强大。同时支持将sql脚本导出,多种导出类型任意挑选,简......