计算传递函数乘法_软件开发教程:计算机科学最重要的32个算法

65f77acb2bc0f805de401a7f5e4487fc.png

21f85c446c957bdc2325d1711bbf38c8.gif

软件开发的根本在于解决各种业务功能需要,实现数字化和自动化,而算法(Algorithm)是对解决方案的准确而完整的描述,是一系列解决问题的清晰指令。算法代表着用系统的方法描述解决问题的策略机制。在计算机科学领域有32个重要的算法需要研究。

简单解释一下,算法就是能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法会用不同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。

软件开发人员需要了解的32个最重要的算法

我此前读过一篇文章,就介绍了计算机科学这32个最重要的算法,读过之后令人大开眼界,才知道有这么多重要的算法!

  • A*搜索算法——图形搜索算法,用于从给定起点到终点计算出路径,使用一种启发式的估算,为每个节点估算通过该节点的最佳路径,并以之为各个地点排定次序,然后算法模型以得到的次序访问这些节点。因此,A*搜索算法是最佳优先搜索的范例。

  • 集束搜索(又名定向搜索,Beam Search)——最佳优先搜索算法的优化,使用启发式函数评估它检查的每个节点的能力。集束搜索只能在每个深度中发现最前面的m个最符合条件的节点,m是一个固定数字,代表了集束搜索的宽度。

  • 二分查找(Binary Search)——在线性数组中找特定值的算法,在每个步骤去掉一半不符合要求的数据。

  • 分支界定算法(Branch and Bound)——在多种最优化问题中寻找特定最优化解决方案的算法,特别是针对离散、组合的最优化。

  • Buchberger算法——一种数学算法,可将其视为针对单变量最大公约数求解的欧几里得算法和线性系统中高斯消元法的泛化实现方式。

  • 数据压缩——采取特定编码方案,使用更少字节数(或是其他信息承载单元)对信息编码的过程,又叫来源编码。

  • Diffie-Hellman密钥交换算法——一种加密协议,允许双方在事先不了解对方的情况下,在不安全的通信信道中,共同建立共享密钥,该密钥以后可与一个对称密码一起,加密后续的通讯。

  • Dijkstra算法——针对没有负值权重边的有向图,计算其中的单一起点最短算法。

  • 离散微分算法(Discrete differentiation)——一种模拟调节器的离散化方法,常用差分变换法实现:模拟调节器采用微分方程来表示时,其导数可以用差分方程近似。假设通过模拟化的设计方法得到了一个控制器的传递函数,首先将传递函数转化成相应的微分方程,然后通过常用的差分近似方法对导数进行离散化。常用的差分近似有前向差分和后向差分两种,为了便于编程,通常采用后向差分法。

  • 动态规划算法(Dynamic Programming)——展示互相覆盖的子问题和最优子架构算法。动态规划算法是通过拆分问题,定义问题状态和状态之间的关系,使得问题能够以递推(或者说分治)的方式去解决。动态规划算法的基本思想与分治法类似,也是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。在求解任一子问题时,列出各种可能的局部解,通过决策保留那些有可能达到最优的局部解,丢弃其他局部解。依次解决各子问题,最后一个子问题就是初始问题的解。

  • 欧几里得算法(Euclidean algorithm)——计算两个整数的最大公约数。人类史上最古老的算法之一,出现在公元前300前欧几里得的《几何原本》。

  • 期望-最大算法(Expectation-maximization algorithm,又名EM-Training)——在统计计算中,期望-最大算法在概率模型中寻找可能性最大的参数估算值,其中模型依赖于未发现的潜在变量。EM在两个步骤中交替计算,第一步是计算期望,利用对隐藏变量的现有估计值,计算其最大可能估计值;第二步是最大化,最大化在第一步上求得的最大可能值来计算参数的值。

  • 快速傅里叶变换(Fast Fourier transform,FFT)——计算离散的傅里叶变换(DFT)及其反转。该算法应用范围很广,从数字信号处理到解决偏微分方程,到快速计算大整数乘积都有用到。快速傅里叶变换算法就是利用计算机计算离散傅里叶变换(DFT)的高效、快速计算方法的统称,简称FFT。快速傅里叶变换是1965年由J.W.库利和T.W.图基提出的。采用这种算法能使计算机计算离散傅里叶变换所需要的乘法次数大为减少,特别是被变换的抽样点数N越多,FFT算法计算量的节省就越显著。

  • 梯度下降(Gradient descent)——一种数学上的最优化算法。梯度下降是迭代法的一种,可以用于求解最小二乘问题(线性和非线性都可以)。在求解机器学习算法的模型参数,即无约束优化问题时,梯度下降(Gradient Descent)是最常采用的方法之一,另一种常用的方法是最小二乘法。在求解损失函数的最小值时,可以通过梯度下降法来一步步的迭代求解,得到最小化的损失函数和模型参数值。反过来,如果我们需要求解损失函数的最大值,这时就需要用梯度上升法来迭代了。在机器学习中,基于基本的梯度下降法发展了两种梯度下降方法,分别为随机梯度下降法和批量梯度下降法。

  • 哈希算法(Hashing)——一种Hash(散列函数),也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值,这种转换是一种压缩映射,也就是说,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。哈希算法是区块链技术的基础之一。

  • 堆排序(Heapsort)——利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种,可以利用数组的特点快速定位指定索引的元素。堆分为大根堆和小根堆,是完全二叉树。大根堆的要求是每个节点的值都不大于其父节点的值,即A[PARENT[i]] >= A[i]。在数组的非降序排序中,需要使用的就是大根堆,因为根据大根堆的要求可知,最大的值一定在堆顶。

  • Karatsuba乘法——需要完成上千位整数的乘法的系统中使用,比如计算机代数系统和大数程序库,如果使用长乘法则速度太慢。该算法发现于1962年。

  • LLL算法(Lenstra-Lenstra-Lovasz  lattice reduction)——以格规约(lattice)基数为输入,输出短正交向量基数。LLL算法在以下公共密钥加密方法中有大量使用:背包加密系统(knapsack)、有特定设置的RSA加密等。

  • 最大流量算法(Maximum flow)——该算法试图从一个流量网络中找到最大的流。最大流问题可以看作更复杂的网络流问题的特定情况。最大流与网络中的界面有关,这就是最大流-最小截定理(Max-flow min-cut theorem)。Ford-Fulkerson 能找到一个流网络中的最大流。

  • 合并排序(Merge Sort)——建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。合并排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为2-路归并。合并排序也叫归并排序。

  • 牛顿法(Newton's method)——求非线性方程(组)零点的一种重要的迭代法。又称为牛顿-拉夫逊(拉弗森)方法(Newton-Raphson method),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法。

  • Q-learning学习算法——这是一种通过学习动作值函数(action-value function)完成的强化学习算法,函数采取在给定状态的给定动作,并计算出期望的效用价值,在此后遵循固定的策略。Q-leanring的优势是,在不需要环境模型的情况下,可以对比可采纳行动的期望效用。

  • 两次筛法(Quadratic Sieve)——现代整数因子分解算法,实践中,是目前已知第二快的此类算法(仅次于数域筛法Number Field Sieve)。对于110位以下的十位整数,它仍是最快的,而且都认为它比数域筛法更简单。

  • RANSAC——是“RANdom SAmple Consensus”的缩写。该算法根据一系列观察得到的数据,数据中包含异常值,估算一个数学模型的参数值。基本假设是:数据包含非异化值,也就是能够通过某些模型参数解释的值,异化值就是那些不符合模型的数据点。

  • RSA-公钥加密算法R——首个适用于以签名作为加密的算法。RSA在电商行业中被大规模使用。

  • Schönhage-Strassen算法——在数学中,Schönhage-Strassen算法是用来完成大整数的乘法的快速渐近算法。其算法复杂度为:O(N log(N) log(log(N))),该算法使用了傅里叶变换。

  • 单纯型算法(Simplex Algorithm)——在数学的优化理论中,单纯型算法是常用的技术,用来找到线性规划问题的数值解。线性规划问题包括在一组实变量上的一系列线性不等式组,以及一个等待最大化(或最小化)的固定线性函数。

  • 奇异值分解(Singular value decomposition,简称SVD)——在线性代数中,SVD是重要的实数或复数矩阵的分解方法,在信号处理和统计中有多种应用,比如计算矩阵的伪逆矩阵(以求解最小二乘法问题)、解决超定线性系统(overdetermined linear systems)、矩阵逼近、数值天气预报等。

  • 求解线性方程组(Solving a system of linear equations)——线性方程组是数学中最古老的问题,它们有很多应用,比如在数字信号处理、线性规划中的估算和预测、数值分析中的非线性问题逼近等等。求解线性方程组,可以使用高斯—约当消去法(Gauss-Jordan elimination),或是柯列斯基分解( Cholesky decomposition)。

  • Strukturtensor算法——应用于模式识别领域,为所有像素找出一种计算方法,看看该像素是否处于同质区域( homogenous region),看看它是否属于边缘,还是是一个顶点。

  • 合并查找算法(union - find)——给定一组元素,该算法常常用来把这些元素分为多个分离的、彼此不重合的组。不相交集(disjoint-set)的数据结构可以跟踪这样的切分方法,合并查找算法可以在此种数据结构上完成两个有用的操作:查找:判断某特定元素属于哪个组。合并:联合或合并两个组为一个组。

  • 维特比算法(Viterbi algorithm)——寻找隐藏状态最有可能序列的动态规划算法,这种序列被称为维特比路径,其结果是一系列可以观察到的事件,特别是在隐藏的Markov模型中。

真正要把上面这32个算法都搞到明白成为专家,tell the truth,短时间内是不可能的。我利用业余时间研究算法模型有一段时间了,这些算法也就知道十几个左右,研究过一些的有7个较为常见的算法。这些算法堆在这里,也是给自己定一个目标,有时间了就研究研究这些算法。华为的任总前些天在记者采访中有句话说得好,我们中国人要沉下心来研究数学,因为数学是算法的基础。

故有此文,Share to all.

de1b818608ce5fca16297aff86809001.png

韩思先生,韩世强,在外企工作,英文名或者说德文名是HANS,因此笔名韩思先生,职业IT经理人,半个文化人。好读书,好写作,好爬山,现定居大连。从事IT行业近二十年,积累了丰富的IT软件项目实施和管理经验,做过程序猿,产品狗和运营猫,知识面较广,并且喜欢总结和分享。

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

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

相关文章

目标检测排行榜_3D领域重大突破!大华股份人工智能取得KITTI Object 3D车辆检测排行榜第一名...

[导读]近日,大华股份基于深度学习技术研发的3D目标检测技术,刷新了The KITTI Vision Benchmark Suite中3D车辆类目检测任务(3D Object Detection Evaluation)排行榜,取得了3D车辆类目检测第一名,这标志着大华股份的人工智能技术在…

mysql aes encrypt_mysql加密函数aes_encrypt()和aes_decrypt()使用教程

aes_encrypt()和aes_decrypt()在mysql中是进行加密了,我们今天一起来和各位看看关于mysql中aes_encrypt()和aes_decrypt()函数的使用例子.如果你需要对mysql某些字段进行加解密的话,使用mysql的加解密函数可能比程序中处理更方便.mysql-encrypt-funcs.pn…

python执行到input后执行下一程序_Python基础知识储备,如何开关一个while循环

一、什么是循环循环语句就是在某种条件下,一遍一遍重复的执行某个动作。如:从1加到100,重复执行加法的动作,就需要用到循环。二、循环的三要素虽然循环是反复的执行某个动作,但是循环也会停止的,没有停止的…

Intellij idea添加单元测试工具

1.idea 版本是14.0.0 ,默认带有Junit,但是不能自动生成单元测试,需要下载JunitGererator2.0插件 2.Settings -Plugins,下载 JunitGenerator V2.0插件 ,我的是已经下载好的。下载后提示需要重启 3.下载后 点击需要测试的…

JPA 系列教程21-JPA2.0-@MapKeyColumn

MapKeyColumn 用JoinColumn注解和MapKeyColumn处理一对多关系 ddl语句 CREATE TABLE t_employee (id bigint(20) NOT NULL AUTO_INCREMENT,name varchar(255) DEFAULT NULL,PRIMARY KEY (id) ) ENGINEInnoDB AUTO_INCREMENT2 DEFAULT CHARSETutf8;CREATE TABLE t_employee_map…

错误:在keystone中无法找到默认角色user_Kubernetes RBAC角色权限控制

摘选:https://i4t.com/4448.html在Kubernetes中所有的API对象都保存在ETCD里,可是,对这些API对象的操作,却一定是通过访问kube-apiserver实现的。我们需要APIServer来帮助我们授权工作,而在Kubernetes项目中,负责完成授…

JAVAWEB项目如何实现验证码

验证码基础 一.什么是验证码及它的作用 :验证码为全自动区分计算机和人类的图灵测试的缩写,是一种区分用户是计算机的公共全自动程序,这个问题可以由计算机生成并评判,但是必须只有人类才能解答.可以防止恶意破解密码、刷票、论坛灌水、有效防止某个黑客对某一个特定…

在线判题系统(oj)效果分析图_在线代码编写平台开发分享

计算机专业的大学生应该都了解acm比赛,这种通过使用oj(online judge)系统在线编程刷题,实时反馈学习排名的方式能很大程度激发学生的学习热情。oj学习排名界面oj个人学习记录界面只是oj平台一般都只适用后端语言,如java,c#, c,C&a…

BZOJ1298:[SCOI2009]骰子的学问

Description Input 第一行为两个整数n, m。第二行有n个整数,为a1,a2, …, an。 Output 包含n行,每行m个1~nm的正整数,各不相同,以空格分开。如果有多解,输出任意一组解;如果无解,输出…

mysql索引有字符集_07. 类型、字符集、引擎和索引

字符集是什么?为了更好的识别中文、日文、英文、希腊语。对于常用的符号进行了编码,这个编码就是字符集。字符集确定了文字的存储方式。字符集相当于是计算机中人类的语言。举个例子:我说的是英文,所以我存储的时候要用英文文字来…

new float查询长度 c++_C/C++经典面试题

面试题 1:变量的声明和定义有什么区别 为变量分配地址和存储空间的称为定义,不分配地址的称为声明。一个变量可以在多个地方声明, 但是只在一个地方定义。加入 extern 修饰的是变量的声明,说明此变量将在文件以外或在文件后面部分…

java8--IO(java疯狂讲义3复习笔记)

产生文件 File file new File("abc.txt");if(!file.exists()){System.out.println(file.exists());file.createNewFile();}System.out.println(file.getAbsolutePath()); 关于临时文件 1).放在指定目录,此时已项目为默认目录 File file File.createTempFile("…

python网络平台_python学习(九) 网络编程学习--简易网站服务器

python 网络编程和其他语言都是一样的,服务器这块步骤为:1. 创建套接字2. 绑定地址3. 监听该描述符的所有请求4. 有新的请求到了调用accept处理请求Python Web服务器网关接口(Python Web Server Gateway Interface,简称“WSGI”),…

rabbit和mysql事务_分布式事务原理及SpringBoot整合RabbitMQ实现可靠事件,TCC事务模型及接口幂等性...

分布式事务我们知道在单数据库系统中,实现数据的一致性,通过数据库的事务来处理比较简单。在微服务或分布式系统中,各个独立的服务都会有自己的数据库,而不是在同一个数据库中,所以当一组事务(如商品交易中&#xff0c…

python pandas 数据库_Python中pandas函数操作数据库

一:创建链接数据库引擎Pythonfrom sqlalchemy import create_engineengine create_engine(postgresql://user58.251.157.179:port/database,echo True)echo True ,会显示在加载数据库所执行的SQL语句。12345fromsqlalchemyimportcreate_engineenginecr…

mysql引擎模式_mysql引擎,完整的见表语句,数据库模式, 常用数据类型,约束条件...

引擎show engines : 查看引擎innodb(默认引擎):支持事务,行级锁,外键myisam:查询效率由于innodb,不需要支持事务,行级锁,外键,可以选用myisam来优化数据库mysql> create table t1(id int)engineinnodb;m…

testng连接MySQL_Selenium+TestNG实战-8-连接数据库方法去验证文章是否发布

原标题:SeleniumTestNG实战-8-连接数据库方法去验证文章是否发布记得之前群里,有人说举例一下连接数据库在Selenium自动化测试中的应用。本篇刚好来举例一个,前面我们都是通过发布后文章的详情页的标题来判断文章是否已经发布成功&#xff0c…

武汉mysql ocp考点_MySQL OCP考试复习系列–开篇:了解MySQL考试

MySQL OCP考试复习系列–开篇:了解MySQL考试嗯,那个决定去考MySQL OCP了,事实上最近工作一直围绕着DB2,MySQL要去考的话需要好好的复习的啊。150分钟,100道多选,答对60道题可以通过,费用1077。L…

java文件服务器_JavaWeb项目架构之NFS文件服务器

NFS简介NFS(Network File System)即网络文件系统。主要功能:通过网络(局域网)让不同的主机系统之间可以共享文件或目录。主要用途:NFS网络文件系统一般被用来存储共享视频,图片,附件等静态资源文件。NFS存储服务无NFS文件共享存储…

table 样式详解

1.table 中css样式控制border 只能控制外边框&#xff0c;内边框需要写<table border"1"> 2.table 会自动撑大&#xff0c;即使td 设置了 width和height这与div 是不同的 3.只有一个table的时候 &#xff0c;高度自适应全屏 <style type"text/css"…