百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程网 > 正文

数据结构与算法专题--算法基本概念

yuyutoo 2024-10-12 00:58 10 浏览 0 评论

很多开发者都知道“程序=数据结构+算法”这个著名的公式,并不真正明白算法的定义或概念。究竟什么是算法呢?从字面意义上理解,算法即用于计算的方法,通过这种方法可以达到预期的计算结果。

1.算法的特征

  • 有穷性:算法的指令或步骤的执行次数是有限的,执行时间也是有限的。
  • 确切性:算法的每一个指令或步骤都必须又明确的定义和描述。
  • 输 入:一个算法应该又相应的输入条件,用来刻画运算对象的初始情况。
  • 输 出:一个算法应该又明确的结果输出。这是容易理解的,因为没有得到结果的算法毫无意义。
  • 可行性:算法的执行步骤必须是可行的,且可以在有限时间内完成。
  • 2.算法分类

    1、按照应用来分类

    按照算法的应用领域,即解决的问题,算法可以分为基本算法、数据结构相关的算法、几何算法、图论算法、规划算法、数值算法、数值分析算法、加密/解密算法、排序算法、查找算法、并行算法和数论算法等。

    2、按照确定性来分类

    按照算法结果的确定性来分类,算法可以分为确定性算法和非确定性算法。

    • 确定性算法:这类算法在有限的时间内完成计算,得到的结果是唯一的,且经常取决于输入值。
    • 非确定性算法:这类算法在有限的时间内完成计算,单是得到的结果往往不是唯一的,即存在多值性。

    3、按照算法的思路来分类

    按照算法的思路来分类,算法可以分为递推算法、递归算法、穷举算法、贪婪算法、分治算法、动态规划算法和迭代算法等多种算法。

    3.算法与数据结构的关系

    数据结构是数据的组织形式,可以用来表征特定的对象数据。在计算机程序设置中,操作的对象是各式各样的数据,这些数据往往拥有不同的数据结构,如数组、结构体、联合、指针和链表等。因为不同的数据结构所采用的处理方法不同,计算的复杂度也不同,因材算法往往依赖于某种数据结构。也就是说,数据结构的算法实现的基础。(程序=数据结构+算法)

    4.算法的性能评价

    一个算法的优劣往往通过算法复杂度来衡量,算法复杂度包括时间复杂度和空间复杂度两个方面。

    1、时间复杂度

    时间复杂度即通常所说的算法执行所需要耗费的时间,时间越短,算法越好。一个算法执行的时间往往无法精确估计,通常需要在实际的计算机中运行才能够知道。但是,也可以对算法的代码进行估计,而得到算法的时间复杂度。

    2、空间复杂度

    空间复杂度是指算法程序在计算机中执行所消耗的存储空间。空间复杂度可以分为如下两个方面。

    1)程序保存所需要的存储空间,即程序大小。

    2) 程序在执行中所需要小号的存储空间资源,如程序在执行过程中的中间变量等。

    一般来说,程序的大小越小,执行过程中消耗的资源越少,这对程序就越好。

    相关推荐

    .NET 奇葩问题调试经历之3——使用了grpc通讯类库后,内存一直增长......

    ...

    全局和隐式 using 指令详解(全局命令)

    1.什么是全局和隐式using?在.NET6及更高版本中,Microsoft引入了...

    请停止微服务,做好单体的模块化才是王道:Spring Modulith介绍

    1、介绍模块化单体是一种架构风格,代码是根据模块的概念构成的。对于许多组织而言,模块化单体可能是一个很好的选择。它有助于保持一定程度的独立性,这有助于我们在需要的时候轻松过渡到微服务架构。Spri...

    ASP.NET程序集引用之痛:版本冲突、依赖地狱等解析与实战

    我是一位多年后端经验的工程师,其中前几年用ASP.NET...

    .NET AOT 详解(.net 6 aot)

    简介AOT(Ahead-Of-TimeCompilation)是一种将代码直接编译为机器码的技术,与传统的...

    一款基于Yii2开发的免费商城系统(一款基于yii2开发的免费商城系统是什么)

    哈喽,我是老鱼,一名致力于在技术道路上的终身学习者、实践者、分享者!...

    asar归档解包(游戏arc文件解包)

    要学习Electron逆向,首先要有一个Electron开发的程序的发布的包,这里就以其官方的electron-quick-start作为例子来进行一下逆向的过程。...

    在PyCharm 中免费集成Amazon CodeWhisperer

    CodeWhisperer是Amazon发布的一款免费的AI编程辅助小工具,可在你的集成开发环境(IDE)中生成实时单行或全函数代码建议,帮助你快速构建软件。简单来说,AmazonCodeWhi...

    2014年最优秀JavaScript编辑器大盘点

    1.WebstormWebStorm是一种轻量级的、功能强大的IDE,为Node.js复杂的客户端开发和服务器端开发提供完美的解决方案。WebStorm的智能代码编辑器支持JavaScript,...

    基于springboot、tio、oauth2.0前端vuede 超轻量级聊天软件分享

    项目简介:基于JS的超轻量级聊天软件。前端:vue、iview、electron实现的PC桌面版聊天程序,主要适用于私有云项目内部聊天,企业内部管理通讯等功能,主要通讯协议websocket。支持...

    JetBrains Toolbox推出全新产品订阅授权模式

    捷克知名软件开发公司JetBrains最为人所熟知的产品是Java编程语言开发撰写时所用的集成开发环境IntelliJIDEA,相信很多开发者都有所了解。而近期自2015年11月2日起,JetBr...

    idea最新激活jetbrains-agent.jar包,亲测有效

    这里分享一个2019.3.3版本的jetbrains-agent.jar,亲测有效,在网上找了很多都不能使用,终于找到一个可以使用的了,这里分享一下具体激活步骤,此方法适用于Jebrains家所有产品...

    CountDownTimer的理解(countdowntomars)

    CountDownTimer是android开发常用的计时类,按照注释中的说明使用方法如下:kotlin:object:CountDownTimer(30000,1000){...

    反射为什么性能会很慢?(反射时为什么会越来越长)

    1.背景前段时间维护一个5、6年前的项目,项目总是在某些功能使用上不尽人意,性能上总是差一些,仔细过了一下代码发现使用了不少封装好的工具类,工具类里面用了好多的反射,反射会影响到执行效率吗?盲猜了一...

    btrace 开源!基于 Systrace 高性能 Trace 工具

    介绍btrace(又名RheaTrace)是抖音基础技术团队自研的一款高性能AndroidTrace工具,它基于Systrace实现,并针对Systrace不足之处加以改进,核心改进...

    取消回复欢迎 发表评论: