何为算法之什么是算法

前言

你相信算法吗?对于这个问题的答案,我们并不关心,因为无论你信不信,不可否认的是算法席卷了你我的生活。
通信聊天时词汇的联想输入、网络购物时商品的关联推荐和下班回家时家电的智能声控,其算法早己悄无声息地进入我们的世界。但你是否知道算法是什么呢?

什么是算法

很多时候,比自己更了解自己的,不是你的父母和伴侣,也不是你的朋友,而是算法。算法就像一位智者那般,似乎只要我们有还没解决的问题,它便可以为我们提供这个问题的可行解。

算法的概念

算法,即计算之法,是一串指令,一个方案,也是一个过程。算法就是一系列规范化的计算步骤,它对一个或多个输入值先进行计算,然后转换成所请求的结果再输出。当然,需要强调的是,所谓的“请求的结果”,并非请求一个精确的结果,而是算法根据我们的请求运行后得出一个结果。
简单地说就是,我们可以要求算法输出一个“请求的结果”,如“1+1=?”的结果,但我们无法要求当输入“1+1”时算法必然输出“2”(如果你直接把答案告诉算法那就另当别论了)的结果。就像考试时,老师要求你在试卷上填上正确的答案,但老师并不能确保你所认为的正确答案便是正确的答案。
运行算法时,我们从一个初态开始,经过一系列有限、清晰且有明确定义的状态转化,最终产生并止步于一个终态。初态到终态的转化是无法确定的,甚至初态与终态之间多种状态的转化也是无法确定的。
或者换一个角度,我们可以这样理解:算法是由一系列数据对象的一系列运算和操作组成的。
运算包括算术运算、逻辑运算和关系运算。算术运算有加、减、乘、除,逻辑运算有或、与、非,关系运算有大于、小于、等于、不等于。操作包括输入、输出和赋值等。这么一看是不是就了然于胸了呢?那什么是数据对象呢?它其实就是指数据。至于数据类型,则是一个十分庞杂的问题,后续的文章将会详细地讲解。

算法的特征

通常来讲,算法有5个特征,即我们所说的“两项三性”。

  • 输入项(Input):有一个或多个初始输入,包括人为输入和算法定义;
  • 输出项(Output):有一个或多个输出,没有输出就没有任何意义;
  • 确切性:(Definiteness):每个步骤都要清晰明确;
  • 有穷性(Finiteness):算法的步骤必须是有限个;
  • 可执行性(Effectiveness):每个步骤都是可执行的。

除了以上5个强制特性外,算法还有以下5个非强制特性:

  • 正确性;
  • 可读性;
  • 健壮性;
  • 鲁棒性;
  • 可移植性。

正确性、可读性和可移植性很容易理解,就是字面意思。至于健壮性和鲁棒性,就有点意思了。鲁棒是 Robust 的音译,而Robust 是健壮的意思,因此二者虽然不尽相同,但却是息息相关的,而且容易弄混。下面我们就来具体讲一下鲁棒性和健壮性的区别。

鲁棒性和健壮性的区别

健壮性也称容错性,是指一个程序(算法)对不合理的输入的反应能力和处理能力。
而鲁棒性又分为稳定鲁棒性和性能鲁棒性。稳定鲁棒性指小偏差只能产生小影响,大偏差不能产生大影响。而性能鲁棒性更简单,就是指高精度和有效性。
可以这样理解:健壮性的偏差是意料之外的,超出规定的外偏差;而鲁棒性的偏差是范围之内的,可预料的内偏差。

算法的应用

也许细心的你已经发现,前面讲到算法时用到了“席卷”一词。是的,毫不夸张地讲,由于算法的“神通广大”,它几乎被应用于人们生活的方方面面。当然,是几乎,而不是完全,毕竟算法还不是无所不能的,而且算法所引起的人们的不同价值观也是极具争议的热点。算法必然会继续发展,但我们也需要清醒地意识到现阶段它的局限性和问题,不要夸大和渲染它的神奇性。
例如:识别算法可以隔离垃圾邮件和骚扰信息,量子算法可以在短时间内破译密钥,关联算法可以发现客户想买的或需要买的东西……这就是算法的“神通”。当然,对于这类高级算法,是需要设计数学模型的。不同的问题还需要设计不同的数学模型,这对于新手来说无疑有很高的门槛。要真正学会算法有很长的路要走,最重要的就是走好脚下的每一步。

算法的设计策略

一般来讲,算法的设计策略主要有遍历、迭代、递归、回溯、贪心和分治等。这些策略大部分都是本专栏要讲的。不仅要讲,还要详细地讲。毕竟知识体系环环相扣,没有丰富的基础,知识体系就会漏洞百出。只懂表面,不懂原理的话,一道题稍稍变动一下就做不出来了。如果学算法却连算法的策略都无法掌握,那么和学数学不会加减乘除有什么区别呢?

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java学习苦旅(二十六)——反射,枚举和lamda表达式

本篇博客将讲解反射,枚举和lamda表达式。 文章目录 反射定义用途反射基本信息反射相关的类Class类Class类中相关的方法 反射示例反射的优缺点优点缺点 枚举背景及定义常用方法枚举优缺点优点缺点 Lambda表达式背景语法函数式接口定义基本使用 变量捕获Lambda在集合…

力扣(leetcode)第387题字符串中的第一个唯一字符(Python)

387.字符串中的第一个唯一字符 题目链接:387.字符串中的第一个唯一字符 给定一个字符串 s ,找到 它的第一个不重复的字符,并返回它的索引 。如果不存在,则返回 -1 。 示例 1: 输入: s “leetcode” 输出: 0 示例 2:…

科学的摇篮 - 贝尔实验室

AT&T贝尔实验室(AT&T Bell Laboratories)是美国电信公司AT&T的研究与开发部门,成立于1925年。它在20世纪的许多年里一直是科学与技术创新的重要中心,做出了众多重大贡献,并为多项科技成就奠定了基础。以下…

Typescript 中创建对象的方式

1.type type MyObj {a: string;b: number;c: () > number; }; 2.interface interface MyObj {a: string;b: number;c: () > number; } 3. class class MyObj {a:string;b:number;c:()>number } // Error: Property staticProperty does not exist on type M.

Spring Boot应用启动时自动执行代码的五种方式

Spring Boot为开发者提供了多种方式在应用启动时执行自定义代码,这些方式包括注解、接口实现和事件监听器。在本篇博客中,我们将探讨一些常见的方法,以及如何利用它们在应用启动时执行初始化逻辑。 1. PostConstruct注解 PostConstruct注解…

嵌入式系统习题(考试相关)

文章目录 上一篇嵌入式系统概述ARM技术概述ARM指令Thumb指令集ARM程序设计 上一篇 嵌入式系统复习–基于ARM的嵌入式程序设计 嵌入式系统概述 嵌入式系统中常用的通信接口包括哪些? RS-232C串行通信接口,RS-422串行通信接口,RS-485串行通信…

【JAVA】Iterator 和 ListIterator 有什么区别?

🍎个人博客:个人主页 🏆个人专栏: JAVA ⛳️ 功不唐捐,玉汝于成 目录 前言 在Java中,遍历集合是日常编程中常见的任务,而Iterator和ListIterator作为遍历集合的两个主要接口&#xff0…

application.properties 如何改成 application.yml

Convert YAML and Properties File 右键直接转换即可 Further Reading : idea 常用插件

【两阶段鲁棒】计及需求响应的多能互补微网两阶段鲁棒优化matlab

目录 1 主要内容 算例模型 目标函数 第一阶段 第二阶段 求解流程图 2 部分程序 3 程序结果 4 下载链接 1 主要内容 该程序参考文献《多能互补微网两阶段鲁棒优化调度研究》,在考虑风光不确定集的基础上提出采用计及DR响应的多能互补微网两阶段鲁棒备用调度模…

通信触发流程

该示例方案主要介绍如何通过建立的Modbus或TCP通信来实现触发方案、协议解析、发送事件和以及响应配置等功能。 需求:使用Modbus通信触发指定流程运行。 搭建思路:在接收事件中使用协议组装,比较规则选择上升沿,当接收到的值从其…

【华为OD真题 Python】考古学家

文章目录 题目描述输入输出示例1输入输出说明示例2输入输出说明示例3输入输出说明备注实现代码题目描述 有一个考古学家发现一个石碑,但是很可惜࿰

知识图谱之汽车实战案例综述与前瞻分析

知识图谱的前置介绍 什么是知识图谱 知识图谱本质(Knowledge Graph)上是一种叫做语义网络(semantic network ) 的知识库,即具有有向图结构的一个知识库;图的结点代表实体(entity)或者概念(con…

大数据 Yarn - 资源调度框架

Hadoop主要是由三部分组成,除了前面我讲过的分布式文件系统HDFS、分布式计算框架MapReduce,还有一个是分布式集群资源调度框架Yarn。 但是Yarn并不是随Hadoop的推出一开始就有的,Yarn作为分布式集群的资源调度框架,它的出现伴随着…

Java Base64简单介绍

1. Base64工具 工具链接 2. Base64示例代码 public class Base64Demo {// 请注意,在处理二进制数据时(例如图片或文件),不需要将字节数组转换为字符串再进行编码或解码,// 可以直接对字节数组进行Base64操作。上述…

路由器01_工作原理

一、回顾交换机工作原理 交换机里面维护了一张MAC地址表,主要记录的是MAC地址和接口的对应关系。 交换机在初始状态下,MAC地址表是空的,当收到一个来自某接口的数据时,首先查看数据帧中的MAC地址表,对照自己的MAC地址…

在IDEA中使用git分支进行开发然后合并到Master分支,2022.1.x版本

在实际开发过程中,为了避免因为在开发中出现的问题以及方便发布版本,如果是多版本发布的情况相下,我们通常需要采用分支进行开发,这个时候,我们就需要了解git分支的相关知识点了,本篇博客也是博主在实际公司…

近5年的学习经历总结

2013年迈入工作,到今年2024年,是工作的11个年头。从C语言嵌入式方向进入IT行业,再到云计算行业;最初做了将近3年的嵌入式开发,从STM32单片机开发,到arm-linux驱动,再到学习Centos/redhat系统&am…

【MySQL】MySQL如何查询和筛选存储的JSON数据?

MySQL如何查询和筛选存储的JSON数据? 一、背景介绍二、支持的JSON数据类型三、基础数据3.1 创建表3.2 插入 JSON 数据3.3 查询 JSON 数据 四、操作函数4.1 JSON_OBJECT4.2 JSON_ARRAY4.3 JSON_EXTRACT 一、背景介绍 JSON(JavaScript Object Notation)是一种轻量级的…

LCR 143. 子结构判断

代码与解析 这是我一开始的代码,只过了45/49个测试用例,在测试用例这过不了了,不知道为啥 输入: A [-2,1,-1] B [-2,1,1] 输出 true 预期结果 false /*** Definition for a binary tree node.* public class TreeNode {* int va…

2024 .1.7 Day05_Spark_HomeWork; Spark_SQL

目录 1. 简述Spark SQL与HIVE的对比 2. Spark SQL是什么? 3.代码题 需求1 直接基于DataFrame来处理,完成SparkSQL版的WordCount词频统计。DSL和SQL两种方式都要实现 4.创建Spark DataFrame的几种方式? 5. 创建得到DataFrame的方式有哪些,各自适用场景是怎么…