大话数据结构 2 算法

2023-10-31

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

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

算法设计的要求:正确性、可读性(容易理解)、健壮性、时间效率高和存储量低。
1.正确性:算法的正确性是指算法至少应该具有输入、输出和加工处理无歧义性,能正确反应问题的需求,并得到问题的正确答案。
2.可读性:算法设计的另一目的是为了方便阅读、理解和交流。
3.健壮性;当输入数据不合法时,算法也能做出相关处理,而不是产生异常或莫名其妙的结果
4.高效率和低存储量。

算法效率的度量方法:
1.事后统计方法(不好):通过设计好的测试数据和程序,利用计算机计时器对不同算法编制的程序的运行时间进行比较,从而确定算法效率的高低。
2.事前分析估算方法:在计算机程序编制前,依据统计方法对算法进行估算。
                   一个程序的运行时间,依赖于算法的好坏和问题的输入规模,所谓问题的输入规模是指输入量的多少
                   我们把循环看作一个整体,忽略头尾循环判断的开销,计算程序执行了几次
在分析程序的运行时间时,最重要的是把程序看成是独立于程序设计语言的算法或一系列步骤

函数的渐进增长:给定两个函数f(n)和g(n),如果存在一个整数N,使得对于所有的n>N,f(n)总是比g(n)大,那么,我们说f(n)的增长渐进快于g(n),与最高次项相乘的常数并不重要,
最高次项的指数大的,函数随着n的增长,结果也会增长的更快。
结论:判断一个算法的效率时,函数中的常数和其他次要项常常可以忽略,而更应该关注主项(最高阶项)的阶数。
某个算法,随着n的增大,它会越来越优于另一算法,或者越来越差于另一算法。

算法时间复杂度:
1.定义:在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级,
算法的时间复杂度,也就是算法的时间量度,记作T(n)=0(f(n))。
它表示随问题规模,算法执行时间的增长率和f(n)的增长率相同,称作算法的监禁时间复杂度,简称为时间复杂度,其中f(n)是问题规模n的某个函数。

2.推到O阶方法:
1>.用常数1取代运行时间中的所有加法常数
2>.再修改后的运行次数函数中,只保留最高项数
3>.如果最高阶存在且其系数不是1,则去除与这个项相乘的系数,得到的结果就是大O阶。

1>.常数阶:不管这个常数是多少,我们都记作O(1),不能是0(x)其他数字。
2>.线性阶:分析算法的复杂度,关键是分析循环结构的运行情况。
3>.对数阶:循环按照成倍递进,由2的x次方=n,这个循环的复杂度就是O(logn)。
4>.平方阶:外层循环次数×内层循环次数,循环几次是指数为几,执行次数f(n)一步步分析相加。

常见的时间复杂度:
执行次数函数                  阶                 非正式术语
      12                           O(1)                  常数阶
     2n+3                        O(n)                  线性阶
    3n^2+2                     O(n^2)               平方阶
    5log2n+20                O(logn)              对数阶
    2n+3nlog2n+19        O(nlogn)            n*logn阶
    6n^3+2n^2+3n+4     O(n^3)               立方阶
        2^n                       O(2^n)               指数阶

  时间复杂度顺序:

  O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n) < O(!) < O(n^n)

最坏情况与平均情况
通常我们提到的运行时间都是最坏的情况的运行时间
平均运行时间是从概率的角度看,这个数字在每一个位置的可能性是相同的,所以平均的查找时间为(n+1)/2次后发现这个目标元素
平均时间是所有情况中最有意义的,因为它是期望的运行时间,一般在没有特殊情况下,都是指最坏时间复杂度

算法空间复杂度
可以存储空间来换取时间复杂度,此时时间复杂度转化为空间复杂度,
例如把数据存放在数组中,将所有年份按照下标的数字对应,此时我们的运算最小化了,但一般情况都用时间复杂度。                                                                                                                               

总结回顾:
数据结构与算法关系相互依赖不可分割
算法的定义:算法是解决特定问题求解步骤的描述,在计算机中为指令的有限序列,并且每条指令表示一个或多个操作
算法的特性:有穷性,确定性,可行性,输入,输出
算法的设计要求:正确性、可读性、健壮性、高效率和低存储量需求
算法的估量方法:1>.事后统计性(不科学、不准确)  2>.事前分析估算方法(常用)
函数的渐进增长:某个算法,随着n的值变大,它会越来越优于另一算法,或者越来越差于另一算法。
时间复杂度所耗大小排列:   O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n) < O(!) < O(n^n)
 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

大话数据结构 2 算法 的相关文章

  • 日期语句之间的 JPQL SELECT [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我想将此 SQL 语句转换为等效的 JPQL SELECT FROM events WHERE events date BETWE
  • 为 java 游戏创建交互式 GUI

    大家好 我正在创建一个类似于 java 中的 farmville 的游戏 我只是想知道如何实现用户通常单击以与游戏客户端交互的交互式对象 按钮 我不想使用 swing 库 通用 Windows 看起来像对象 我想为我的按钮导入自定义图像 并
  • Spring AspectJ 在双代理接口时失败:无法生成类的 CGLIB 子类

    我正在使用Spring的
  • Pig Udf 显示结果

    我是 Pig 的新手 我用 Java 编写了一个 udf 并且包含了一个 System out println 其中的声明 我必须知道在 Pig 中运行时该语句在哪里打印 假设你的UDF 扩展了 EvalFunc 您可以使用从返回的 Log
  • 如何在 Spring 中禁用使用 @Component 注释创建 bean?

    我的项目中有一些用于重构逻辑的通用接口 它看起来大约是这样的 public interface RefactorAwareEntryPoint default boolean doRefactor if EventLogService wa
  • 如何获取之前的URL?

    我需要调用我的网络应用程序的 URL 例如 如果有一个从 stackoverflow com 到我的网站 foo com 的链接 我需要 Web 应用程序 托管 bean 中的 stackoverflow 链接 感谢所有帮助 谢谢 并不总是
  • jQuery AJAX 调用 Java 方法

    使用 jQuery AJAX 我们可以调用特定的 JAVA 方法 例如从 Action 类 该 Java 方法返回的数据将用于填充一些 HTML 代码 请告诉我是否可以使用 jQuery 轻松完成此操作 就像在 DWR 中一样 此外 对于
  • 如何更改javaFX中按钮的图像?

    我正在使用javaFX 我制作了一个按钮并为此设置了图像 代码是 Image playI new Image file c Users Farhad Desktop icons play2 jpg ImageView iv1 new Ima
  • Java 公历日历更改时区

    我正在尝试设置 HOUR OF DAY 字段并更改 GregorianCalendar 日期对象的时区 GregorianCalendar date new GregorianCalendar TimeZone getTimeZone GM
  • 当 OnFocusChangeListener 应用于包装的 EditText 时,TextInputLayout 没有动画

    不能比标题说得更清楚了 我有一个由文本输入布局包裹的 EditText 我试图在 EditText 失去焦点时触发一个事件 但是 一旦应用了事件侦听器 TextInputLayout 就不再对文本进行动画处理 它只是位于 editText
  • logcat 中 mSecurityInputMethodService 为 null

    我写了一点android应显示智能手机当前位置 最后已知位置 的应用程序 尽管我复制了示例代码 并尝试了其他几种解决方案 但似乎每次都有相同的错误 我的应用程序由一个按钮组成 按下按钮应该log经度和纬度 但仅对数 mSecurityInp
  • 获取文件的总大小(以字节为单位)[重复]

    这个问题在这里已经有答案了 可能的重复 java 高效获取文件大小 https stackoverflow com questions 116574 java get file size efficiently 我有一个名为 filenam
  • java for windows 中的文件图标叠加

    我正在尝试像 Tortoise SVN 或 Dropbox 一样在文件和文件夹上实现图标叠加 我在网上查了很多资料 但没有找到Java的解决方案 Can anyone help me with this 很抱歉确认您的担忧 但这无法在 Ja
  • 使用 AsyncTask 传递值

    我一直在努力解决这个问题 但我已经到了不知道该怎么办的地步 我想做的是使用一个类下载文件并将其解析为字符串 然后将该字符串发送到另一个类来解析 JSON 内容 所有部件都可以单独工作 并且我已经单独测试了所有部件 我只是不知道如何将值发送到
  • Cucumber 0.4.3 (cuke4duke) 与 java + maven gem 问题

    我最近开始为 Cucumber 安装一个示例项目 并尝试使用 maven java 运行它 我遵循了这个指南 http www goodercode com wp using cucumber tests with maven and ja
  • 如何使用mockito模拟构建器

    我有一个建造者 class Builder private String name private String address public Builder setName String name this name name retur
  • 使用反射覆盖最终静态字段是否有限制?

    在我的一些单元测试中 我在最终静态字段上的反射中遇到了奇怪的行为 下面是说明我的问题的示例 我有一个基本的 Singleton 类 其中包含一个 Integer public class BasicHolder private static
  • 使用 svn 1.8.x、subclise 1.10 的 m2e-subclipse 连接器在哪里?

    我读到 m2e 的生产商已经停止生产 svn 1 7 以外的任何版本的 m2e 连接器 Tigris 显然已经填补了维护 m2e subclipse 连接器的空缺 Q1 我的问题是 使用 svn 1 8 x 的 eclipse 更新 url
  • Spring Rest 和 Jsonp

    我正在尝试让我的 Spring Rest 控制器返回jsonp但我没有快乐 如果我想返回 json 但我有返回的要求 完全相同的代码可以正常工作jsonp我添加了一个转换器 我在网上找到了用于执行 jsonp 转换的源代码 我正在使用 Sp
  • Java中super关键字的范围和使用

    为什么无法使用 super 关键字访问父类变量 使用以下代码 输出为 feline cougar c c class Feline public String type f public Feline System out print fe

随机推荐

  • 寒假:HTML

    图片导入 lt img src 图片导入的位置 width 宽度 height 高度 alt 图像的替代文字 title 鼠标悬停提示文字 gt 超文本链接 lt a href target 目标窗口位置 gt 链接文本或图像 视频元素
  • 原生小程序用vant组件自定义底部导航

    在根目录中创建custom tab bar 新建page index 在app json或index json中引入vant组件 usingComponents van tabbar vant weapp tabbar index van
  • 程序员的代码行数越少越好?

    代码行数越少越好 读懂别人的代码很困难 如何编写出 完美 的代码 每天要坚持8小时编程 拜托 这些编程误区程序员应该尽早知道 作为开发人员 你会听到许多有关 代码行数 的令人难以置信的疯狂理论 不要相信他们 以代码行数作为决策依据是一件非常
  • ew schema is incompatible with the current setting value. Invalid value for type in block

    shopify开发报错 New schema is incompatible with the current setting value Invalid value for type in block 84341d56 61dc 4c39
  • 第三课 C++ 教程:char 和 int 是 C++ 中常见的数值类型,以及常用格式化说明符

    第三课 C 教程 char 和 int 是 C 中常见的数值类型 以及常用格式化说明符 学习目标 在本教程中 我们将学习以下内容 数值类型 char short 和 int 的区别和使用 sizeof 运算符的作用 无符号整数 unsign
  • 找出数组中三个数之和为0的组合

    找出数组中三个数之和为0的组合 题目 思路 代码 题目 给定一个无序可重复整数序列 当该序列中任意三个数的和等于0 输出这三个数 如 序列nums 1 0 1 2 1 4 输出 1 0 1 1 1 2 思路 首先对数组不同位进行两两结合 在
  • 我的串口打印之坑——8266os_printf()适用于NONOS_SDK,故在自动生成APP代码中不能打印,要用uart0_sendStr( )函数(4)

    说到用安信可串口调试助手打印信息 首先明确esp8266nodeMCU有uart0 GPIO13 GPIO15 uart1 GPIO3 GPIO0 接下来 编程时候 1 首在user init 中先初始化uart init void ICA
  • JAVA面向对象的思想

    java面向对象 什么是面向对象思想 什么是面向对象 类和对象 类 对现实世界中某类事物的描述 是抽象的 概念上的定义 对象 事物具体存在的个体 抽象类 接口 成员变量和局部变量的区别 作用域 存储位置 初始值 构造方法 面向对象三大特性
  • Java的类加载器

    类加载是java语言提供的最强大的机制之一 尽管类加载并不是讨论的热点话题 但所有的编程人员都应该了解其工作机制 明白如何做才能让其满足我们的需 要 这能有效节省我们的编码时间 从不断调试ClassNotFoundException Cla
  • 代理IP与Socks5代理

    一代理IP 多地区数据采集的智能引擎 多地区市场了解 代理IP允许爬虫模拟多个地区的IP地址 实现对不同市场的数据采集 这为跨界电商深入了解不同地区需求 趋势提供了数据基础 规避反爬虫策略 许多网站采用反爬虫技术 限制频繁访问 代理IP通过
  • JavaWeb的Servlet的两种配置

    Servlet接口 要成为一个Servlet 需要实现Servlet接口 为了方便 可以继承HttpServlet HttpServlet实现了Servlet接口 Servlet生命周期 在Tomcat中Servlet是单例的 Servle
  • 如何使用Docker创建自定义网络

    目录 网络模式 1 bridge模式 默认模式 桥接模式 初识网络模式 查看桥接模式的特点 2 host模式 仅主机模式 使用守护进程的方式创建并启动且进入容器 查看仅主机模式下的网络配置 端口映射 3 如何创建自定义网络 网络模式 Doc
  • Unity3D 选中高亮效果shader的实现

    实现思路 平时我们可能觉得shader就是单纯用来进行渲染的 不会和逻辑代码产生什么交互 但是如果要做这种高亮的效果就需要使用代码来控制shader的显示了 所以物体选中高亮效果的实现其实就很简单 先写一个shader表现高亮效果 然后用另
  • Mybatis 学习笔记02 - CRUD

    目录 1 添加操作 1 1 在 UserDao 接口中新增 saveUser 方法 1 2 在映射配置文件 UserMapper xml 中配置添加操作 1 3 测试添加用户 1 4 测试结果 2 更新操作 2 1 在 UserDao 接口
  • FAST-LIO(二):程序运行&代码注释

    文章目录 前言 数据准备 程序运行 代码注释 1 laserMapping cpp 2 IMU Processing hpp 3 use ikfom hpp 前言 论文题目 FAST LIO A Fast Robust LiDAR iner
  • vue页面缓存解决方案

    关于vue页面通过解决方案 方案一 使用keep alive和v if 备注 这种方案有问题 关闭面板后 在通过菜单打开页面还是有缓存 1 添加keep alive
  • pycharm 怎么使用快捷键按出代码提示框

    更新win10 发现可以改取消ctrl space快捷键的占用了 我们在平时写代码的时候难免会出现敲错字母的时候 这时候你的代码提示框就会消失 很不爽 但你退格删掉错的字母的时候 代码提示框还是没有自动出现 就很烦 不想写代码了 其实都是w
  • 谈谈自己对IOC容器的理解(一)

    初学Java时 了解到Java是一门面向对象的语言 我感觉Java这面向对象好废 啥都要我自己弄 这跟C语言有啥区别 感觉Java也就这样了 完全体会不到面向对象的感觉 处处都是 面向过程 网上总说面向对象修房子是去找专门修房子的人来修 面
  • 安卓依赖冲突处理

    目录 一 模块依赖 二 打包时如何处理依赖 三 为什么依赖重复后会有报错 最后 一 模块依赖 这里引用一下谷歌链接 https developer android com studio build dependencies google m
  • 大话数据结构 2 算法

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