几个常用的算法

算法是一组解决问题的有序步骤或规则。它可以用来描述一个计算过程或操作的详细步骤,以及在给定输入条件下如何获得所需输出的方法。

算法可以用来解决各种问题,例如排序、查找、图形处理、数据压缩等。通常,一个好的算法应该具有正确性、可读性、健壮性、高效性等特点。

算法可以用自然语言、伪代码或特定编程语言来描述,也可以通过流程图、框图、伪代码或程序代码来表示。

算法的时间复杂度和空间复杂度是衡量算法效率的重要指标。时间复杂度表示算法执行所需的时间,通常用大O符号表示;空间复杂度表示算法执行所需的额外空间,通常用大O符号表示。

算法的设计与分析是计算机科学的重要研究领域,研究者通过设计和分析算法,可以提高计算机程序的效率和性能,解决复杂的计算问题。

1 什么是算法

算法(algorithm,[ˈælɡərɪðəm],计算程序): 是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。

一句话概括一下,算法就是解决问题的操作步骤。

世界是算法来控制的;

但是有个前提:算力和存储都是有限的;

2 算法的特性

输入项,一个算法有0个或多个输入,以刻画运算对象初始情况;

输出项,一个算法有一个或多个输出以反映对输入数据加工后的结果;

可行性,算法中执行的任何计算步骤都可被分解为基本的可执行的操作步骤;

有穷性,算法必须能在执行有限个步骤之后终止;

确切性,算法的每一步骤必须有确切的定义;(存疑了)

3 算法的判断标准

正确性:执行结果不能有错误,是评价的最基本标准;

时间复杂度:程序运行时基本操作所执行的次数;算力

一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,用T(n)表示,若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f(n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数。记作T(n)=O(f(n)),称O(f(n)) 为算法的渐进时间复杂度,简称时间复杂度。其中f(n)就是下图O中的函数:

空间复杂度:对一个算法在运行中临时占用存储空间大小;存储

可读性:人为阅读和理解的难易程度;与书写习惯和使用习惯有关,有时候与时间复杂度相冲,也需要平衡;

健壮性(鲁棒性、容错性):对不合理输入的反应和处理能力,有更好的环境适应性;一个重要的指标,时间复杂度往往为此做一定让渡。

上面几个指标的平衡与优先级。。。。

一般意义上:正确性>健壮性>时间复杂度>可读性>空间复杂度(但是基于达到一定程度)

具体程度与标准:

正确性:不言而喻;

健壮性:别出现异常,别出现死循环,不要越界,一些常见问题,能容错;

时间复杂度:越快越好;

可读性:遵循公司标准和常用习惯,多看代码,有一些共识;

空间复杂度:现在的程序,只要不是太浪费空间,一般都能容忍;

除了习惯以外,更多时候就是算力和存储的平衡。

4 AI的感性认识

算法在新时代的爆发。

AI经历了专家系统到机器学习,现在的大模型是过去所有算法与大数据的集大成,也是未来算法发展的基石。

5 几个常用算法介绍

5.1、递归算法:

是一种直接或者间接地调用自身的算法。在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易于理解。把问题转化为规模缩小了的同类问题的子问题。

5.2、排序算法

排序是程序设计中常做的操作,初学者往往只知道冒泡排序算法,其实还有很多效率更高的排序算法,不同的排序算法,适用于不同的场景,本章最后从时间性能,算法稳定性等方面,分析各种排序算法。

5.3、查找算法

一般指二分査找

首先选取表中间位置的记录,将其关键字与给定关键字 key 进行比较,若相等,则査找成功;若 key 值比该关键字值大,则要找的元素一定在右子表中,则继续对右子表进行折半查找;若 key 值比该关键宇值小,则要找的元素一定在左子表中,继续对左子表进行折半査找。如此递推,直到査找成功或査找失败(或査找范围为 0)。

5.4、搜索算法

搜索算法是利用计算机的高性能来有目的的穷举一个问题解空间的部分或所有的可能情况,从而求出问题的解的一种方法。

现阶段一般有枚举算法、深度优先搜索、广度优先搜索、A*算法、回溯算法、散列函数等算法。

5.5、哈希算法

是一个典型的利用空间换取时间的算法,把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值。

5.6、贪心算法

贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。决策树,决策森林。

5.7、分治算法

分治算法的基本思想是将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同。

5.8、动态规划(DP)算法

动态规划过程:每一次决策依赖于当前的状态,即下一状态的产生取决于当前状态。一个决策序列就是在变化的状态中产生的,这种多阶段最优化问题的求解过程就是动态规则过程。在分治的基础上增加了前后的关联性。

5.10、字符串匹配算法

字符串匹配问题就是在一个大的字符串T中搜索某个字符串P的所有出现位置。

算法分支很多,一般都需要建立索引和筛选剪枝,减少匹配次数。

合法校验,脏字库匹配,非常常用!

5.11 位运算

用二进制数的运算思维来解决问题。主要用于标定一堆bool类型数据。

运算方式包括与、或、移位;

游戏开发中非常常用;

5.12 状态机

状态机(State Machine)是一种数学模型,用于描述系统或程序在不同状态之间转换的行为。它由一组状态、转移条件和动作组成。严格意义不是一个算法,但是一种非常常见的程序结构。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值