首页 > 编程语言 >算法

算法

时间:2022-12-17 22:11:53浏览次数:37  
标签:符号 复杂度 4n 算法 时间 数据结构

1.算法的概念

程序运行时需要的资源有两种

时间:程序运行需要的时间。

空间:程序运行需要的存储空间。

 

什么是算法

算法是求解问题的一系列计算步骤,用来将输入数据转换成输出结果 :

输入---->算法---->输出

如果一个算法对其每一个输入实例,都能输出正确的结果并停止,则称它是正确的。

算法设计应满足以下几条目标:

1.正确性

2.可使用性

3.可读性

4.健壮性

5.高效率与低存储量需求

算法具有以下5个重要特征:

1.有限性

2.确定性

3.可行性

4.输入性

5.输出性

 

算法和数据结构

算法与数据结构既有联系又有区别。

联系:数据结构是算法设计的基础。算法的操作对象是数据结构,在设计算法时,通常要构建适合这种算法的数据结构。数据结构设计主要是选择数据的存储方式,如确定求解问题中的数据采用数组存储还是采用链表存储等。算法设计就是在选定的存储结构上设计一个满足要求的好算法。

区别:数据结构关注的是数据的逻辑结构、存储结构以及基本操作,而算法更多的是关注如何在数据结构的基础上解决实际问题。算法是编程思想,数据结构则是这些思想的逻辑基础。

 

算法设计的基本步骤

1.分析求解问题

2.选择数据结构和算法设计策略

3.描述算法

4.证明算法的正确性

5.算法分析

 

2.算法分析

算法分析是分析算法占用计算机资源的情况。

所以算法分析的两个主要方面是分析算法的时间复杂度和空间复杂度。

 

算法时间复杂度分析

1.复杂度分析概述

一个算法是由控制结构(顺序、分支和循环3种)和原操作(指固有数据类型的操作)构成的,算法的运行时间取决于两者的综合效果。

 

bool Solve(double a[][MAX],int m,int n,double &s)

{

   int i; s=0;//顺序结构

   if (m!=n) return false;//分支结构

   for (i=0;i<m;i++)//循环结构

     s+=a[i][i];

   return true;//顺序结构

}

 

设n为算法中的问题规模,通常用大O、大Ω等两种渐进符号表示算法的执行时间与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)的上界.

 

如3n+2=O(n),因为当n≥2时,3n+2≤4n。

10n2+4n+2=O(n4),因为当n≥2时,10n2+4n+2≤10n4。

 

大O符号用来描述增长率的上界,表示f(n)的增长最多像g(n) 增长的那样快,也就是说,当输入规模为n时,算法消耗时间的最大值。这个上界的阶越低,结果就越有价值,所以,对于10n2+4n+2,O(n2)比O(n4) 有价值。

一个算法的时间用大O符号表示时,总是采用最有价值的g(n)表示,称之为“紧凑上界”或“紧确上界”。

 

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

 

如3n+2=Ω(n),因为当n≥1时,3n+2≥3n。

10n2+4n+2=Ω(n2),因为当n≥1时,10n2+4n+2≥n2。

 

大Ω符号用来描述增长率的下界,表示f(n)的增长最少像g(n) 增长的那样快,也就是说,当输入规模为n时,算法消耗时间的最小值。

与大O符号对称,这个下界的阶越高,结果就越有价值,所以,对于10n2+4n+2,Ω(n2)比Ω(n) 有价值。一个算法的时间用大Ω符号表示时,总是采用最有价值的g(n)表示,称之为“紧凑下界”或“紧确下界”。

 

算法的最好情况是指算法在所有输入I下所执行基本语句的最少次数。

算法的最坏情况为是指算法在所有输入I下所执行基本语句的最大次数。

 

2.非递归算法时间复杂度分析

 

对于非递归算法,分析其时间复杂度相对比较简单,关键是求出代表算法执行时间的表达式。

  通常是算法中基本语句的执行次数,是一个关于问题规模n的表达式,然后用渐进符号来表示这个表达式即得到算法的时间复杂度。

  

3.递归算法的时间复杂度分析

 

递归算法是采用一种分而治之的方法,把一个“大问题”分解为若干个相似的“小问题”来求解。

  对递归算法时间复杂度的分析,关键是根据递归过程建立递推关系式,然后求解这个递推关系式,得到一个表示算法执行时间的表达式,最后用渐进符号来表示这个表达式即得到算法的时间复杂度。

 

算法空间复杂度分析

一个算法的存储量包括形参所占空间和临时变量所占空间。在对算法进行存储空间分析时,只考察临时变量所占空间。

 

3.算法设计工具——STL

STL概述

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

 

 

什么是STL容器

一个STL容器就是一种数据结构,如链表、栈和队列等,这些数据结构在STL中都已经实现好了,在算法设计中可以直接使用它们。

标签:符号,复杂度,4n,算法,时间,数据结构
From: https://www.cnblogs.com/114514tshe/p/16989631.html

相关文章

  • 二分搜索算法
    二分搜索算法适用于有序数组。如果按照暴力搜索算法,那么需要从头到尾遍历数组元素,时间复杂度为O(n),而如果使用二分搜索,那么其时间复杂度为O(logn),根据时间复杂度曲线图可......
  • [OpenCV实战]45 基于OpenCV实现图像哈希算法
    目前有许多算法来衡量两幅图像的相似性,本文主要介绍在工程领域最常用的图像相似性算法评价算法:图像哈希算法(imghash)。图像哈希算法通过获取图像的哈希值并比较两幅图像的......
  • [OpenCV实战]15 基于深度学习的目标跟踪算法GOTURN
    目录​​1什么是对象跟踪和GOTURN​​​​2在OpenCV中使用GOTURN​​​​3GOTURN优缺点​​​​4参考​​在这篇文章中,我们将学习一种基于深度学习的目标跟踪算法GOTURN......
  • 【量化LDPC】基于量化技术的LDPC译码算法的研究与matlab仿真
    1.本LDPC采用的量化方案      改进方案如下所示:  公式,的范围是由一个统计范围得到的,但是在实际中,根据信道的不同,可能存在多种可能,这里,我们的考虑的方案......
  • 计算机网络(自顶向下)学习笔记)——路由选择算法
    第五章—路由选择算法5.1、路由的概念路由:按照某种指标(传输延迟,所经过的站点数目等)找到一条从源节点到目标节点的较好路径较好路径:按照某种指标较小的路径指标:......
  • java数据结构与算法(day2)--简单排序
    模式:设计api实现api简单排序举例(商品排序)1.1Comparable接口介绍(排序算法更有通用性:对象排序)创建对象,并且生成豆子。创建Comparable接口1packagecn.itcast.algor......
  • 集成算法--GBDT梯度提升树
    三要素:损失函数L(x,y): 真实值和预测值之间的差异弱评估器f(x):效果差的模型综合集成规则:数据、特征处理方法,构建迭代过程,参数设置等基本训练流程:以上一个弱评估器的结......
  • 计算机算法设计与分析第一章总结
    1.1算法与程序算法是解决问题的一种方法或一个过程。严格地说,算法是由若干条指令组成的有穷序列,且满足下述4条性质。输入输出:至少产生一个量作为输出。确定性:每条指......
  • 第一章 算法概述
    第一章算法概述总结 定义;算法是一系列良定义的计算步骤算法的4个特性;有穷性确定性输入输出算法的时间复杂度;算法的运行时间,用T(n)=O(g(n))表示,O为渐进记号算法分......
  • 算法基础课 第一章 基础算法
    1基础算法1.1快速排序核心思想-三步走确定分界点:q[l],q[(l+r)/2],q[r],随机调整区间递归处理C代码#include<stdio.h>constintN=1e5+5;intnum[N];v......