第二章-算法

这篇具有很好参考价值的文章主要介绍了第二章-算法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

第二章-算法

数据结构和算法的关系

  1. 算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。

算法的特性

  • 算法有五个基本特征:输入、输出、有穷性、确定性和可行性。
    1. 输入:算法具有零个或者多个输入。
    2. 输出:算法至少有一个或多个输出。
    3. 有穷性:算法在执行了有限的步骤之后,自动结束而不会出现无限循环,并且每一个步骤在可接受的时间内完成。
    4. 确定性:算法的每一个步骤都具有确定的含义,不会出现二义性。
    5. 可行性:算法的每一步都是必须可行的,也就是说,每一步都能够执行有限次数完成。

算法设计的要求

  1. 正确性
    • 算法的正确性是指算法至少应该具有输入、输出和加工处理无歧义性、能正确反映问题的需求、能够得到问题的正确答案。
    • 算法的正确性通常具有四个层次,一般情况下取前三个作为算法是否正确的标准,因为第四个成本很高。
      1. 算法程序没有语法错误。
      2. 算法程序对于合法的输入数据能够产生满足要求的输出结果。
      3. 算法程序对于非法的输入数据能够得出满足规格说明的结果。
      4. 算法程序对于精心选择的、甚至刁难的测试数据都有满足要求的输出结果。
  2. 可读性
    • 算法设计的另一个目的是为了便于阅读、理解和交流。
  3. 健壮性
    • 当输入数据不合法时,算法也能做出相应处理,而不是产生异常或者莫名其妙的结果。
  4. 时间效率高和存储量低
    • 时间效率:算法的执行时间
    • 存储量:算法在执行过程中所需要的最大存储空间。
    • 设计算法应该要尽量满足时间效率高和存储量低的需求。

算法效率的度量方法

  1. 事后统计方法
    • 这种方法主要是通过设计好的测试程序和数据,利用计算机计时器对不同算法的程序的运行时间进行比较,从而确定算法效率的高低。
    • 但是这种方法有很大的缺陷:
      1. 必须依靠事先编制好程序,这需要花费大量的时间和精力。
      2. 时间的比较依赖计算机的硬件和软件等环境因素,有时会掩盖算法本身的优劣。
      3. 算法的测试数据设计困难,并且程序的运行时间往往跟测试数据的规模有很大关系,效率高的算法在小的测试数据面前往往得不到体现。
  2. 事前分析估算方法
    • 在计算机程序编制前,依据统计方法对算法进行估算。一个用高级程序语言编写的程序在计算机上运行时所消耗的时间取决于以下因素:
      1. 算法采用的测策略、方法。
      2. 编译产生的代码质量。(软件支撑)
      3. 问题的输入规模。
      4. 机器执行指令的速度。(硬件支撑)
    • 抛开软件和硬件有关的因素,一个程序的运行时间,依赖于算法的好坏和问题的输入规模(输入量的多少)。

函数的渐进增长

  • 给定两个函数f(n)和g(n),如果存在一个整数N,使得对于所有的n>N,f(n)总是比g(n)大,那么,我们说f(n)的增长渐进快于g(n)
  • 在计算算法的时间的时候,下面的参数是可以被忽略不计的。
    1. 加法常数
    2. 与最高次项相乘的常数
  • 也就是说,判断一个算法的效率时,函数中的常数和其他次要项常常可以忽略,我们应该关注最高次项的阶数。

算法的时间复杂度

  1. 算法时间复杂度定义

    • 在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。算法的时间复杂度,也就是算法的时间度量,记作:T(n)=O(f(n))。他表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同。
    • 一般情况下随着n增大,T(n)增长最慢的算法为最优算法。
  2. 推导大O阶方法

    1. 用常数 1取代运行时间中的所有加法常数。
    2. 在修改后的运行次数函数中,只保留最高阶项。
    3. 如果最高阶项存在且不是 1,则去除与这个项相乘的常数。

    得到的结果就是大O阶。

  3. 常数阶

    • 大O阶是一个常数
  4. 线性阶

    • 我们要分析算法的复杂度,关键就是要分析循环结构的运行情况。
  5. 对数阶

第二章-算法,数据结构与算法的学习,算法

  1. 平方阶

常见的时间复杂度

第二章-算法,数据结构与算法的学习,算法

一般情况下指的是最坏运行时间,平均运行时间固然好,但是一般难以估算。

算法空间复杂度

算法的空间复杂度通过计算算法所需的存储空间实现,算法空间复杂度的计算公式记作:S(n)=O(f(n)),其中,n为问题的规模,f(n)为语句关于n所占存储空间的函数。文章来源地址https://www.toymoban.com/news/detail-635046.html

到了这里,关于第二章-算法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【数据结构】第二章——线性表(2)

    大家好,很高兴又和各位见面啦!!!在上一个篇章中,我们简单了解了一下线性表的基础知识以及一下重要的术语。在今天的篇章中我们将来开始正式介绍线性表的顺序存储——又称顺序表。我们将会在本章介绍什么是顺序表,对于顺序表的操作我们又应该如何实现。接下

    2024年02月03日
    浏览(29)
  • 【数据结构】第二章——线性表(3)

    大家好,很高兴又和大家见面了!!! 在上一篇中,咱们介绍了顺序表的基本概念,以及通过C语言实现顺序表的创建和对表长的修改。今天咱们将详细介绍一下使用C语言实现顺序表的增删改查。接下来,跟我一起来看看今天的内容吧!!! 我们先来回顾一下上一篇的内容,

    2024年02月04日
    浏览(36)
  • 【数据结构】第二章课后练习题——线性结构

    1、线性表是 一个有限序列,可以为空 2、链表中最常用的操作是在最后一个元素之后插入一个元素和删除最后一个元素,则采用 单循环链表 存储方式最节省运算时间 3、若某线性表中最常用的操作实在最后一个元素之后插入一个元素和删除第一个元素,则采用 仅有尾结点的

    2024年02月07日
    浏览(49)
  • 数据结构英文习题解析-第二章 链表List

    前言:最近快到FDS考试了,po重刷了一下学校的题目,自己整理了一些解析orz 因为po在自己找解析和学习的过程中非常痛苦,所以在此共享一下我的题目和自己写的解题思路,欢迎各位指出错误~全章节预计会陆续更新,可在专栏查看~ HW2 1. For a sequentially stored linear list of leng

    2024年04月11日
    浏览(38)
  • SV学习——数据类型(第二章)

    verilog有1995和2001版本,而SV是verilog的延伸,SV发布的时候直接就是3.0,之后可能不再存在verilog,而是统一用SV。SV是完全兼容verilog的。verilog文件以.v结尾,SV文件以.sv结尾。语法是全部兼容的,SV是verilog的扩展和延伸。 verilog中有reg和wire两种数据类型,都是四值逻辑 0,1,x,

    2024年02月10日
    浏览(63)
  • 第二章-算法

    算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。 算法有五个基本特征:输入、输出、有穷性、确定性和可行性。 输入:算法具有零个或者多个输入。 输出:算法至少有一个或多个输出。 有穷性:算法在执行了有

    2024年02月14日
    浏览(28)
  • Python基础练习题--第二章 顺序结构

    目录 1007:【例2.1】交换a和B的值 1008:【例2.2】打招呼Hello 1009:【例2.3】购买笔记本 1010:【例2.4】最适宜运动心率 1011:【例2.5】求3个整数的和 1012:练2.1  小明买图书 1013:练2.2  鸡兔同笼 1014:练2.3  求平均分 1015:【例2.6】数字对调 1016:【例2.7】BMI指数 1017:练2.4  与

    2024年02月09日
    浏览(65)
  • SQL Server基础 第二章 表结构管理

    目录 一、数据类型 1,字符类数据类型 2,数值型数据类型 3,日期/时间型数据类型 二、主键(Primary key) 三、默认值 四、唯一键(Unique) 五、自增标识 六、约束 七、外键 数据类型是数据的一种属性,是数据所表示信息的类型。 SQLServer提供了比较多的数据类型供用户使用

    2023年04月22日
    浏览(38)
  • 算法设计与分析第二章作业

    题目 思路 判断最大子段和,可以用分治的思想,每次将序列一分为二,选择两个序列的最大子段和。 但是这里还有一种可能,就是子段可以横跨两个子序列,所以我们的最大子段和就是: MAX(左边序列最大字段和,横跨两序列的最大子段和,右边序列的最大子段和)。 对

    2024年02月05日
    浏览(37)
  • 《综合与Design_Compiler》学习笔记——第一章综合综述 第二章verilog语言结构到门级的映射 第三章 使用DC进行综合

    2023.6.25 2023.6.27 和之前学的芯动力mooc中很多内容相似,这篇整理的逻辑更好些 将RTL代码转换到基于工艺库的门级网表。一般分为如下三个步骤。 (1)逻辑级综合 设计被描述成 布尔等式 的形式,触发器、锁存器这样的基本单元采用元件例化(instantiate)的方式表达出来,下面是

    2024年02月12日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包