12种常见算法思想汇总小林野夫

将问题的所有可能答案一一列举,根据判断条件判断此答案是否合适,一般用循环实现。

经典运用:百钱买百鸡、填写运算符

1.顺推法:从已知条件出发,逐步推算出要解决问题的方法。

2.逆推法:从已知结果出发,用迭代表达式逐步推算出问题开始的条件,即顺推法的逆过程。

经典运用:斐波那契数列(顺推法)、银行存款(逆推法)

1.递归过程一般通过函数或子过程实现;

2.递归算法在函数或子过程的内部,直接或间接调用自己的算法

3.递归算法实际上是把问题转化为规模缩小了的同类问题的子问题,然后再递归调用函数或过程来表示问题的解

注意:必须有一个明确的递归结束条件;如果递归次数过多,容易造成栈溢出。

经典运用:汉诺塔问题、阶乘问题

将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同。只要求出子问题的解,就可得到原问题的解。

一般步骤:

1.分解,将要解决的问题划分成若干个规模较小的同类问题

2.求解,当子问题划分得足够小时,用较简单的方法解决

3.合并,按原问题的要求,将子问题的解逐层合并构成原问题的解

经典运用:大数相乘问题、比赛日程安排,归并排序;最大子段和问题

从问题的某一个初始解出发,逐步逼近给定的目标,以便尽快求出更好的解。

局限:

不能保证最后的解是最优的;

不能求最大最小解问题;

只能求满足某些约束条件的可行解范围。

基本过程:

1.从问题的某一初始解出发

2.while能向给定总目标前进一步

3.求出可行解的一个解元素

4.由所有解元素组合成问题的一个可行解

经典运用:装箱问题、找零方案,活动选择问题、背包问题、多机调度问题

在试探算法中,放弃当前候选解,并继续寻找下一个候选解的过程称为回溯。扩大当前候选解的规模,以继续试探的过程称为向前试探。

(为求得问题的正确解,会先委婉地试探某一种可能情况。在进行试探过程中,一旦发现原来选择的假设情况是不正确的,马上会自觉地退回一步重新选择,然后继续向前试探。反复进行,直到得到解或证明无解时才死心)

基本步骤:

1.针对所给问题,定义问题的解空间

2.确定易于搜索的解空间结构

3.以深度优先方式搜索解空间,并在搜索过程中用剪枝函数避免无效搜索

经典运用:八皇后问题、29选7彩票组合,0-1背包、N皇后问题

是一种不断用变量的旧值递推新值的过程,解决问题时总是重复利用一种方法。

1.确定迭代变量:直接或间接地不断由旧值递推出新值的变量

2.建立迭代关系式:新值与旧值的公式或关系。(解决迭代问题的关系)

3.对迭代过程进行控制:确定迭代过程什么时候结束

所需的迭代次数是个确定值,可以计算出来:可以构建一个固定次数的循环来实现对迭代过程的控制;

所需的迭代次数无法确定:需要进一步分析出用来结束迭代过程的条件。

经典运用:求平方根问题

对真实事物或者过程的虚拟。

经典运用:猜数字游戏、掷骰子问题

关键词:递归(递归式)、表记录(已解决的子问题的答案)、根据子问题求解原问题的解(子问题不独立)、最优解(可选项)

步骤:

1.找出最优解的性质,刻画其结构特征;

2.递归地定义最优解;

3.以自底向上的方式计算出最优值;

4.根据计算最优值时得到的信息,构造一个最优解

只需求出最优值,步骤4可以省略;若需求出问题的一个最优解,则必须执行步骤4。

适用环境:

1.最优子结构。一个问题的最优解包含了其子问题的最优解。

2.重叠子问题。原问题的递归算法可以反复地解同样的子问题,而不是总是产生新的子问题

示例:0-1背包问题;矩阵链乘问题;最长公共子序列(LCS);

关键字:解空间(广度优先、最小耗费优先)、界限函数(队列式、优先队列式)

1.针对所给问题,定义问题的解空间。问题的解空间应至少包含问题的一个(最优)解

2.确定易于搜索的解空间结构。通常将解空间表示为树、图;解空间树的第i层到第i+1层边上的标号给出了变量的值;从树根到叶子的任一路径表示解空间的一个元素。

3.以广度优先或最小耗费优先的方式搜索整个解空间。每个活节点只有一次机会成为扩展节点,活节点一旦成为扩展节点,其余儿子节点被加入活节点表中。(以此方式递归搜索)

界限函数:分支界限法的核心。尽可能多、尽可能早地“杀掉”不可能产生最优解的活节点。好的界限函数可以大大减少问题的搜索空间,大大提高算法的效率。

1.队列式(FIFO)分支界限法。先进先出

2.优先队列式分支界限法。组织一个优先队列,按优先级选取。通常用最大堆来实现最大优先队列,最小堆来实现最小优先队列。

基本特征:

1.输入包括两部分。一,原问题的输入;二,供算法进行随机选择的随机数序列

2.运行过程中,包括一处或多处随机选择,根据随机值来决定算法的运行

3.结果不能保证一定是正确的,但可以限制出错率。

分类:

4.舍伍德(Sherwood)算法。总能求得问题的一个解,且所求得的解总是正确的。设法消除最坏情形与特定实例之间的关联性。多用于最快情况下的计算复杂度与其在平均情况下的计算复杂度差别较大。

衡量性能的标准:

2.解的近似程度。与近似算法本身、问题规模、不同的输入实例有关。

THE END
1.程序员必须知道的10大基础实用算法及其讲解快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序n个项目要Ο(nlogn)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(nlogn) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。 https://blog.csdn.net/weixin_33921089/article/details/92655408
2.历史上最著名的3个数学算法,关于算法的观念,直到今天还在演进对于“算法”一词给以精确的定义不是一件容易事,有一些意义相近的同义语,就是一些其他的名词,它们(有时)会给出差不多同样的东西,例如法则技巧”“程序”还有“方法”等等都是这种同义语。也可以给出一些例子,如长乘法,就是小学生学的把两个正整数相乘的竖式乘法。然而,虽然非形式的解释和恰当的例子对于https://baijiahao.baidu.com/s?id=1804985943646011952&wfr=spider&for=pc
3.算法概述常见算法有许多种 算法预览.png 简单点的比如:递归、递推、迭代、穷举、概率算法、随机算法等 复杂些的比如:分治算法、贪心算法、动态规划、回溯法、分支限界等,后面会赘述一些这几种算法的基本思想与常见应用。 # 影响算法速度的因素 不一样规模的问题,处理起来的难度是不一样的 → 数据的组织方式 → 解决问题https://www.jianshu.com/p/8c8d20a9bde8
4.数据挖掘的常见算法有哪些?数据挖掘的常见算法有哪些? 数据挖掘是一种通过从大量数据中提取知识和信息的方法,以支持业务决策、市场分析和科学研究等领域。在数据挖掘过程中,算法是最重要的组成部分之一。以下是常见的数据挖掘算法。 1.分类算法 分类算法是一类用于将数据样本分为不同类别的算法。这些算法通常使用监督学习方法,其中模型基于已标记https://www.cda.cn/bigdata/202782.html
5.几种常见的算法2021-07-20 几种常见的分布_几种常见的不良学习习惯 1、 分心学习分心学习习惯是指有些学生在学习的时候同时还做别的事情,如听广播、看电视、上课补其他学科作业或者看小说等等。其实这种做法是违背心理学规律的。因为注意是学习的必要条件,在学习的时候做别的事学法指导 [阅读本文] 2023-06-13 八年级语文学法https://www.oubohk.cn/k/jizhongchangjiandesuanfa/
6.程序员会使用的十个基础算法三. 图算法 1. 最短路径算法:最短路径算法用于寻找两个节点之间的最短路径。常用的最短路径算法有Dijkstra算法和Floyd-Warshall算法。 2. 最小生成树算法:最小生成树算法用于在一个带权重的无向图中找出一棵包含所有节点的子树,并且使得该子树的边权重之和最小。常见的最小生成树算法有Prim算法和Kruskal算法。 https://zhuanlan.zhihu.com/p/656882756
7.一文图解弄懂八大常用算法思想片面了啊。题总是刷不完的,但是算法的思想就那么几个。所以呢,刷了那么多题的你,还不了解这几个常见的算法思想,想必是应该好好反省反省下了。 枚举 首先,最为简单的思想,枚举算法。枚举也叫穷举,顾名思义,就是穷尽列举。枚举思想的应用场景十分广泛,也非常容易理解。简单来说,枚举就是将问题的可能性依次列举https://www.51cto.com/article/628524.html
8.C语言10大常见基础算法C语言10大常见基础算法 算法是一个程序和软件的灵魂,作为一名优秀的程序员,只有对一些基础的算法有着全面的掌握,才会在设计程序和编写代码的过程中显得得心应手。本文是包括了经典的Fibonacci数列、简易计算器、回文检查、质数检查等算法。 1、计算Fibonacci数列https://m.sohu.com/a/497664110_121124371
9.排序算法总结菜鸟教程数据的顺序排好之后,冒泡算法仍然会继续进行下一轮的比较,直到arr.length-1次,后面的比较没有意义的。 方案:设置标志位flag,如果发生了交换flag设置为true;如果没有交换就设置为false。这样当一轮比较结束后如果flag仍为false,即:这一轮没有发生交换,说明数据的顺序已经排好,没有必要继续进行下去。 实例 public https://www.runoob.com/w3cnote/sort-algorithm-summary.html
10.“才”聚天开,勇往“职”前4.C/C++,数据结构,算法,网络通信等基础扎实: 5.关注新技术,自学能力强,能够与公司共同进步; 6.逻辑思维能力强,善于沟通,团队意识强; 7.工作认真细致,责任心强。 静象文旅科技发展(天津)有限公司 01企业简介 向上滑动阅览 沉浸式文旅项目开发业务,为中小型文旅场馆沉浸式文旅体验项目开发提供综合解决方案。 https://www.tjrc.com.cn/app/article/content/VE4rR2NWRjUzUU5SOFFxWDdRa09oZz09.shtml
11.17个机器学习的常用算法!腾讯云开发者社区在非监督式学习中,数据并不被特别标识,学习模型是为了推断出数据的一些内在结构。常见的应用场景包括关联规则的学习以及聚类等。常见算法包括Apriori算法以及k-Means算法。 3. 半监督式学习: 在此学习方式下,输入数据部分被标识,部分没有被标识,这种学习模型可以用来进行预测,但是模型首先需要学习数据的内在结构以便合理https://cloud.tencent.com/developer/article/1874962