什么是算法?

一、是什么

算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制

也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出

如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题

一个程序=算法+数据结构,数据结构是算法实现的基础,算法总是要依赖于某种数据结构来实现的,两者不可分割

因此,算法的设计和选择要同时结合数据结构,简单地说数据结构的设计就是选择存储方式,如确定问题中的信息是用数组存储还是用普通的变量存储或其他更加复杂的数据结构

针对上述,可以得出一个总结:不同的算法可能用不同的时间、空间或效率来完成同样的任务

二、特性

关于算法的五大特性,有如下:

  • 有限性(Finiteness):一个算法必须保证执行有限步之后结束
  • 确切性(Definiteness): 一个算法的每一步骤必须有确切的定义
  • 输入(Input):一个算法有零个或多个输入,以刻画运算对象的初始情况,所谓零个输入是指算法本身给定了初始条件
  • 输出(Output):一个算法有一个或多个输出。没有输出的算法毫无意义
  • 可行性(Effectiveness):算法中执行的任何计算步骤都是可以被分解为基本的可执行的操作步骤,即每个计算步骤都可以在有限时间内完成(也称之为有效性)

三、应用场景

在前端领域中,数据结构与算法无法不在,例如现在的vue或者react项目,实现虚拟DOM或者Fiber结构,本质就是一种数据结构,如下一个简单的虚拟DOM

{
  type: 'div',
    props: {
      name: 'lucifer'
    },
      children: [{
        type: 'span',
        props: {},
        children: []
      }]
}

vuereact都能基于基于对应的数据结构实现diff算法,提高了整个框架的性能以及拓展性

包括在前端javascript编译的时候,都会生成对应的抽象语法树AST,其本身不涉及到任何语法,因此你只要编写相应的转义规则,就可以将任何语法转义到任何语法,也是babel, PostCSSprettier, typescript

除了这些框架或者工具底层用到算法与数据结构之外,日常业务也无处不在,例如实现一个输入框携带联想功能,如下:

如果我们要实现这个功能, 则可以使用前缀树,如下:

包括前端可能会做一些对字符串进行相似度检测,例如"每日一题"和"js每日一题"两个字符串进行相似度对比,这种情况可以通过“最小编辑距离”算法,如果 和 的编辑距离越小,我们认为越相似

日常在编写任何代码的都需要一个良好的算法思维,选择好的算法或者数据结构,能让整个程序效率更高

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/200910.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【小聆送书第一期】让架构师的成神之路温暖你这个不景气的冬天

🌈个人主页:聆风吟 🔥系列专栏:网络奇遇记、数据结构 🔖少年有梦不应止于心动,更要付诸行动。 文章目录 📋前言 书籍一览 ⛳️书籍一⛳️书籍二⛳️书籍三⛳️书籍四⛳️书籍五⛳️书籍六⛳️书…

【广州华锐视点】AI卡通数字人物帮助企业拓展更广阔的市场空间

随着科技的飞速发展,人类对于虚拟世界的探索愈发深入。从最初的文字和图片,到如今的音频、视频,再到未来可能的虚拟现实,我们一直在寻求与虚拟世界更加紧密的联系。在这个过程中,AI卡通数字人物作为一种新兴的角色&…

操作系统 day14(进程同步、进程互斥、互斥的代码实现)

进程同步 概念 进程的异步性体现在,例如:当有I/O操作时,进程需要等待I/O操作,而每个I/O操作又是不同的,所以进程没有一个固定的顺序,固定的时间来执行,而这体现了进程的异步性。 进程互斥 …

数据库管理-第118期 记一次开启附加日志导致的性能问题(202301129)

数据库管理-第118期 记一次开启附加日志导致的性能问题(202301129) 本周二凌晨,为了配合某国产数据库从Oracle数据库能够实时同步数据,在X9M那套一体机上做了开启附加日志的操作,也正是因为这个操作带来了一些小问题。…

【STM32】OLED显示屏

1 调试方式 1. 串口调试:通过串口通信,将调试信息发送到电脑端,电脑使用串口助手显示调试信息 2. 显示屏调试:直接将显示屏连接到单片机,将调试信息打印在显示屏上 3. Keil调试模式:借助Keil软件的调试模…

STM32g70开启定时器死机原因

在做低功耗产品时,检查发现由于之前开启了BOOTLOADER升级程序,修改了中断向量FALSH起始地址,只在KEIL TARGET IROM1中修改了, 而忘记在程序文件system_stm32f10x.c里修改中断向量表flash起始地址 system_stm32f10x.c里&#xff0…

微信预约小程序制作

对于许多新手来说,制作微信预约小程序可能是一项挑战,但并非不可能。本文将通过详细的步骤,指导您从零开始制作一个微信预约小程序。首先,您需要找一个合适的第三方制作平台或工具,乔拓云网就是其中之一。 找一个合适的…

QT 环境搭建

Qt 5.12.0下载 http://download.qt.io/archive/qt/5.12/5.12.0/ 下载qt-opensource-windows-x86-5.12.0.exe安装

【精选】VulnHub red 超详细过程思路

🍬 博主介绍👨‍🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~ ✨主攻领域:【渗透领域】【应急响应】 【java】 【VulnHub靶场复现】【面试分析】 🎉点赞➕评论➕收藏 …

自动化测试工具——Monkey

前言: 最近开始研究Android自动化测试方法,整理了一些工具、方法和框架,其中包括android测试框架,CTS、Monkey、Monkeyrunner、benchmark,以及其它test tool等等。 一、 什么是Monkey Monkey是Android中的一个命令…

Intellij idea 内存不够用了,怎么处理?

目录 如何判断内存不够用了 下面演示一下如何开启内存指示器(Memory Indicator) 解决方案 第一种:双击"内存指示器(Mempory Indicator)" 第二种:增大Intellij Idea 最大可使用内存 如何判断内存不够用了 运行项目后…

pyhon数据分析A股股票策略实际买卖总结(每月末更新数据)

简介 本篇文章主要记录python数据分析a股股票选股后实际买卖的记录。 选股策略 低位寻股,筛选出低位股价股票已经做过调整的股票,做短线交易(不超过7天),不贪,小赚即走。分三个时段,开盘三十…

自动锁螺丝机配件直线模组的作用

直线模组的应用非常广泛,在各种需要高精度、高效率的自动化直线运动的场合都有应用,尤其是在自动锁螺丝机中,起着关键性作用。 1、提供精确的定位和导向:在自动锁螺丝机中,螺丝的拧紧和输送都需要精确控制,…

一种更好的前端组件结构:组件树

本文翻译自 A Better Frontend Component Structure: Component Trees,作者:William Bernting, 略有删改。 自很久以前遵循互联网上的建议以来,我一直采用了某种“能工作就行”的组件结构。 场景 让我们首先想象一个简化的前端应…

Linux高级IO

文章目录 一.IO的基本概念二.钓鱼五人组三.五种IO模型四.高级IO重要概念1.同步通信 VS 异步通信2.阻塞 VS 非阻塞 五.其他高级IO六.阻塞IO七.非阻塞IO 一.IO的基本概念 什么是IO? I/O(input/output)也就是输入和输出,在著名的冯诺…

LDF文件之LDF Explorer工具

LDF Explorer工具 LDF文件比较像DBC文件,也是用来解析报文的,DBC文件是用在CAN通讯上的,LDF文件是用在LIN通讯上的。 我们可以用vector自带的工具LDF Explorer打开LDF文件,这个工具是最标准的,有些同学自己做了一个L…

C++基础 -18-继承中类继承的区别

无论使用公有,保护,私有继承 都无法访问基类私有成员 在多级继承中 使用公有继承 派生的派生可以访问基类的公有,保护成员 在多级继承中 使用保护继承 派生的派生可以访问基类的公有,保护成员 在多级继承中 使用私有继承 派生的派…

浅学指针(3)

系列文章目录 文章目录 系列文章目录前言系列文章目录前言1. 字符指针变量2. 数组指针变量那数组指针变量应该是:存放的应该是数组的地址,能够指向数组的指针变量。2.2 数组指针变量怎么初始化总结:函数名就是地址,&函数名和直…

【送书活动二期】Java和MySQL数据库中关于小数的保存问题

之前总结过一篇文章mysql数据库:decimal类型与decimal长度用法详解,主要是个人学习期间遇到的mysql中关于decimal字段的详解,最近在群里遇到一个小伙伴提出的问题,也有部分涉及,今天就再大致总结一下Java和MySQL数据库…

热门话题解析:pytest测试用例顺序问题解决方案!

前言 上一篇文章我们讲了在pytest中测试用例的命名规则,那么在pytest中又是以怎样的顺序执行测试用例的呢? 在unittest框架中,默认按照ACSII码的顺序加载测试用例并执行,顺序为:09、AZ、a~z,测试目录、测…