算法基础知识

article/2025/11/10 20:33:02

一、算法的定义
算法:对特定问题求解步骤的一种描述,是为解决一个或一类问题给出的一个确定的、有限长的操作序列
二、算法与程序的区别与联系
区别:
程序:与某种编程语言有关,能直接在机器上运行。
算法:与特定的语言无关,可用任何语言实现 ,甚至可以用自然语言实现。
联系:
程序=算法+数据结构
三、算法的基本特点
1)输入:有零个或多个输入
2)输出:有一个或多个输出
3)有穷性:在执行有穷步之后结束,且每一步都在有穷时间内完成。
4)确定性:算法中的每一条指令必须有确切的含义,对于相同的输入只能得到相同的输出。
5)可行性:算法描述的操作可以通过已经实现的基本操作执行有限次完成。
四、有效算法的五大特征:
1)正确性:能满足具体问题的需求,对于任何合法的输入,算法都会得出正确的结果;
2)健壮性:对非法输入的抵抗能力,即对于错误的输入,算法应能识别并做出相应处理,而不是产生错误结果或陷入瘫痪;
3)可读性:容易理解和实现。
4)时间效率高:运行时间短。
5)空间效率高:占用的存储空间尽量少。
五、算法的描述方法
1)自然语言
优点:容易理解
缺点:冗长、二义性
使用方法:粗线条描述算法思想
注意事项:避免写成自然段
2)程序流程图
优点:流程直观
缺点:缺少严密性、灵活性
使用方法:描述简单算法
注意事项:注意抽象层次
3)伪代码——算法语言
介于自然语言和程序设计语言之间,它采用某一程序设计语言的基本语法,操作指令可以结合自然语言设计。
优点:表达能力强,抽象性强,容易理解
使用方法:自然语言+程序设计语言
4) 程序设计语言
优点:能由计算机执行
缺点:抽象性差,对语言要求高
使用方法:算法需要验证
注意事项:将算法写成子函数
六、算法设计的一般过程
在这里插入图片描述
七、重要问题类型
1.查找问题
2. 排序问题
3. 图问题
4. 组合问题
5. 几何问题
八、算法分析概述
1)什么是算法分析
分析算法占用的计算机资源的情况
2)算法分析的两个方面
时间复杂度——算法运行所需要的时间资源的量
空间复杂度——算法运行所需要的空间资源的量
3)算法分析的目的
设计算法——设计出复杂性尽可能低的算法
选择算法——在多种算法中选择复杂性最低的算法
九、时间复杂度分析
(1)时间复杂度分析

  • 事后实验统计法——编写算法对应程序,统计其执行时间
  • 事前分析估算法——渐近分析法
    通常采用渐进分析的方式来分析时间复杂度。

(2)渐近复杂度分析
在这里插入图片描述

(3)分析算法时间复杂度的一般步骤 :
在这里插入图片描述

(4)渐进记号

  1. 大〇符号——渐近上界记号
    在这里插入图片描述
    一个算法的运行时间用大O符号表示时,总是采用最有价值的g(n)表示,称之为“紧凑上界”或“紧确上界”。
    在这里插入图片描述

  2. 大Ω符号——渐近下界记号
    在这里插入图片描述
    一个算法的运行时间用大符号表示时,总是采用最有价值的g(n)表示,称之为“紧凑下界”或“紧确下界”。
    在这里插入图片描述

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

总结:在这里插入图片描述

在这里插入图片描述

(5)函数的阶
在这里插入图片描述

(6)最优算法

  • 如果我们能够知道一个问题的计算复杂性下界,也就是求解该问题的任何算法(包括尚未发现的算法)所需的时间下界,即求解这个问题的最少工作量,就可以较准确地评价该问题的各种算法的效率,进而确定已有的算法还有多少改进的余地。

eg:

  • 排序问题的复杂性的下界是Ω(nlogn);
  • 任何生成n个不同元素的所有排列对象的算法是Ω(n!)。

(7)算法的最好、最坏和平均情况
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

注意:
通常只求最坏情况运行时间,因为

  • 给出了任何输入的运行时间的上界
  • 对某些算法,最坏情况经常出现
  • “平均情况”往往与最坏情况一样差

(8)渐近时间复杂度分析的一般步骤

  1. 决定用哪个(或哪些)参数作为算法问题规模的度量
    可以从问题的描述中得到。
  2. 找出算法中的基本语句
    通常是最内层循环的循环体。
  3. 检查基本语句的执行次数是否只依赖于问题规模
    如果基本语句的执行次数还依赖于其他一些特性,则需要分别研究最好情况、最坏情况和平均情况的效率。
  4. 建立基本语句执行次数的求和表达式
    计算基本语句执行的次数,建立一个代表算法运行时间的求和表达式。
  5. 用渐进符号表示这个求和表达式
    计算基本语句执行次数的数量级,用大O符号来描述算法增长率的上限。

十、渐近空间复杂度分析
一个算法的存储量包括形参所占空间和临时变量所占空间。在对算法进行存储空间分析时,只考察临时变量所占空间。 
在这里插入图片描述
如果算法所需的辅助空间相对于问题的输入规模来说是一个常数,我们称此算法为原地(或就地)工作
eg:
在这里插入图片描述

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

在这里插入图片描述

十一、递归算法复杂度分析的步骤

  1. 建立递归方程
  2. 求解该递归方程
  3. 用渐近符号表示函数的阶

十二、递归方程的建立
递归方程:

  • 递归方程是一个等式或不等式,它通过更小的输入上的函数值来描述一个函数。
  • 当一个算法包含对其自身的递归调用时,可以用递归方程来表示其运行时间。

在这里插入图片描述
十三、递归方程的求解

  1. 迭代法
    从初始递归方程开始,反复用递归方程右边的等式代入左边的函数,直到得到初值。
    在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  1. 代入法
  • 猜测解的形式
  • 用数学归纳法证明

在这里插入图片描述

  1. 递归树法
    用树的形式给出一个递归算法执行的成本模型。
    (1)递归树法求解递归方程的步骤
    1)展开递归方程,构造对应的递归树
    2)将树中每层中的代价求和,得到每层代价,再将所有层的代价求和,得到总的递归调用代价
    (2)递归树的构造方法
  • 递归树是一棵结点带权值的树,每个结点表示一个单一子问题的代价,子问题对应某次递归函数调用。
  • 初始的递归树只有一个结点,它的权标记为T(n);然后按照递归树的迭代规则不断进行迭代,每迭代一次递归树就增加一层,直到树中不再含有权值为函数的结点。

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

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  1. 主方法
    主方法适用于求解下面的递归形式:
    T(n)=aT(n/b)+f(n)
    其中a≥1,b>1为常数,f(n)为渐近正函数

加粗样式

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


http://chatgpt.dhexx.cn/article/ocvMWbg7.shtml

相关文章

算法基础简介

一、什么是算法 在数学领域,算法是为了解决某一类问题的公式和思想。 在计算机领域,本质是一些计算机指令,解决特定运算和逻辑问题。 算法的掌握程度,一方面可以检验程序员对计算机底层的了解,一方面也…

Unity 移动的几种方法(从某一点移动到另外一点)

对于unity的几种移动方法,在以下给出整理 1 方向*速度 2 vector.lerp 与目标点永远不会重合 3 vector.MoveTowards 会与目标点重合 4 translate方法 纯移动 5 WASD键盘方法 刚 体方法 7.鼠标方法 捕鱼达人 8.射线方法(指哪到哪) Controll…

Unity 控制物体移动

目录 1、通过改变物体的位置使物体移动 2、通过给物体施加力使物体移动 3、移动characterController以及碰撞检测 一、相关代码展示 1、通过改变物体的位置使物体移动 using System.Collections; using System.Collections.Generic; using UnityEngine;public class move …

unity3D人物移动的实现(一)

人物的移动,首先要考虑人物与地面的碰撞,碰撞发生的条件是,两者必须都为碰撞体,且至少有一方为刚体,为了方便,我们就给人物加上刚体属性和碰撞体。 1首先是碰撞体属性,人形使用胶囊碰撞体&#…

Unity让物体跟随鼠标移动

前言 最近在学习Unity,记录下学习的成果吧。本文最终结果是要实现一个小飞机跟随鼠标移动的效果。看下图片。 向量 在Unity中,每个对象都有自己的位置属性,组件叫做Transform,通过Transform可以获取对象的位置属性。在上面的实例中&#…

01_Unity常用的移动方法

文章目录 基础框架匀速移动变速移动自定义变速运动总结: 在制作一款游戏的时候,经常需要对物体的位置进行移动,我们希望这个移动是具有多样性的,并且可操作的。 C#中提供了非常丰富的移动代码工具,通过这些工具我们可以…

Unity点击物体后,移动到物体所在位置

Unity点击物体后&#xff0c;移动到物体所在位置 方法一&#xff1a;OnMouse检测&#xff08;需要Collider组件&#xff09; 脚本挂在被点击的物体上 using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement;/// <summary> /// 缺点…

Unity2D教程:人物移动

关注专栏&#xff0c;持续更新哦 教程总目录 按键 自带的Input有GetAxisRaw来获取按下按键后所对应的值&#xff0c;Input.GetAxisRaw(“Horizontal”)在按下D或右箭头返回1&#xff0c;A或左箭头返回-1&#xff1b;Input.GetAxisRaw(“Vertical”)同理。 Input.GetAxis会根…

Unity物体跟随鼠标移动

刚开始在将鼠标点转换为世界坐标时&#xff0c;我以为可以直接使用Unity的Camera.main.ScreenToWorldPoint( Input.mousePosition ) 就完事了&#xff0c;事实证明我想的太简单了。在我们使用这个API将鼠标屏幕点&#xff08;Screen&#xff09;转换成世界坐标&#xff08;Worl…

Unity中物体移动方法详解

一&#xff1a;Transform ——transform.Translate&#xff1a;不会考虑到碰撞transform.Translate(Vector3 targetPos&#xff0c;指定参照坐标系(默认为Space.Self)) ——transform.position&#xff1a;直接改变物体的坐标 二&#xff1a;刚体 ——MovePosition ——veloc…

【Unity】如何优雅地移动物体-8个方法

在游戏开发中&#xff0c;如何移动物体&#xff1f;是我们需要思考的事情。 Unity 引擎也提供了众多的方法&#xff0c;每个开发者的使用习惯也各不相同&#xff0c;所以往往不是很清楚在这种场景下哪种方式最好的或者最有效的。 那么&#xff0c;这篇文章&#xff0c;我想分享…

详解Unity的几种移动方式实现

前言 最近在学习如何制作 FPS 游戏&#xff0c;学习了如何使用角色控制器来控制角色的移动跳跃等等&#xff0c;结合之前学到的使用 transform&#xff0c;刚体等使物体移动&#xff0c;不同的移动方式适用于不同的场景&#xff0c;今天就来简要盘点一下各种移动方式以及其优劣…

unity物体四种移动方法总结

目录 一.通过修改位置来实现移动 二.通过物理系统实现位移 三.通过输入控制物体移动 一.通过修改位置来实现移动 利用修改Transform组件的position的两种常用方法。 1.使用Translate&#xff08;&#xff09;函数。 2.&#xff0c;直接指定新的位置 将上述两种方法在void …

详解Unity的移动控制实现

前言 上一篇写了数种Unity中的移动方式&#xff0c;有物理移动&#xff0c;有非物理移动等&#xff0c;这篇我们来谈谈Unity中的移动控制方式&#xff0c;来结合上一篇所说的方法&#xff0c;用起来。一般控制是通过获取用户输入来处理角色移动逻辑的&#xff0c;而用户输入的…

JSON数据和解析

JSON> JavaScript Object Notation JSON是一个字符串 常常用于网络传输数据的一种字符 json数据是一种轻量级的数据交换格式&#xff0c;它基于一个子集&#xff0c;采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语…

Android开发之JSON数据解析详解(一)

&#xfeff;&#xfeff; 今天很高兴和大家一起学习Android的JSON数据解析,可能对于学习安卓的朋友都知道JSON在数据解析方面已经很普遍了.所以也是我们必定要了解的知识 ,下面让我们了解一下JSON的发展历程. XML——这种用于表示客户端与服务器间数据交换有效负载的格式&am…

Android开发json数据解析

在Android开发过程中&#xff0c;或更新数据&#xff0c;或为减轻手机负担将大部分复杂运算交由服务器来进行&#xff0c;都需要与服务器之间进行数据交互&#xff0c;数据交互中&#xff0c;使用的较为频繁的格式变为json数据&#xff0c;书写便捷&#xff0c;操作方便&#x…

JSON解析data数据

之前 是用JSONObject去解析data后来就报错 com.alibaba.fastjson.JSONException: expect : at 0, actual

JSON数据解析 之JSONPath

一&#xff1a;JSONPath说明&#xff1a; JSONPath是一种通过配置正则表达式语法&#xff0c;抽取json中的指定数据的一种类库&#xff1b; 二&#xff1a;需要的jar依赖&#xff08;依赖阿里巴巴的fastjson.jar&#xff09; maven用户可通过maven远程仓库获取配置地址 <…

一文搞懂JSON及JSON数据解析

文章目录 前言一、XML1、简介2、XML解析方式2.1、SAX解析方式2.2、DOM解析方式2.3、JDOM解析方式2.4、DOM4J解析方式 二、JSON1. 简介及其语法格式2. 解析方式2.1 GSON解析2.1.1 对象转换为JSON字符串2.1.2 JSON字符串转换为对象 2.2 fastjson2.2.1 对象转换为JSON字符串2.2.2 …