那么 , 常用的算法都有哪些呢?一般来讲 , 在我们日常工作中涉及到的算法 , 通常分为以下几个类型:分治、贪心、迭代、枚举、回溯、动态规划 。 下面我们来一一介绍这几种算法 。
一、分治算法
分治算法 , 顾名思义 , 是将一个难以直接解决的大问题 , 分割成一些规模较小的相同问题 , 以便各个击破 , 分而治之 。
分治算法一般分为三个部分:分解问题、解决问题、合并解 。
分治算法适用于那些问题的规模缩小到一定程度就可以解决、并且各子问题之间相互独立 , 求出来的解可以合并为该问题的解的情况 。
典型例子比如求解一个无序数组中的最大值 , 即可以采用分治算法 , 示例如下:
def dividAndConquer(arrleftIndexrightIndex):
if(rightIndex==leftIndex+1 || rightIndex==leftIndex){
return Math.max(arr[leftIndex
arr[rightIndex
);
int mid=(leftIndex+rightIndex)/2;
int leftMax=dividAndConquer(arrleftIndexmid);
int rightMax=dividAndConquer(arrmidrightIndex);
return Math.max(leftMaxrightMax);
二、贪心算法
贪心算法是指在对问题求解时 , 总是做出在当前看来是最好的选择 。 也就是说 , 不从整体最优上加以考虑 , 他所做出的仅是在某种意义上的局部最优解 。
贪心算法的基本思路是把问题分成若干个子问题 , 然后对每个子问题求解 , 得到子问题的局部最优解 , 最后再把子问题的最优解合并成原问题的一个解 。 这里要注意一点就是贪心算法得到的不一定是全局最优解 。 这一缺陷导致了贪心算法的适用范围较少 , 更大的用途在于平衡算法效率和最终结果应用 , 类似于:反正就走这么多步 , 肯定给你一个值 , 至于是不是最优的 , 那我就管不了了 。 就好像去菜市场买几样菜 , 可以经过反复比价之后再买 , 或者是看到有卖的不管三七二十一先买了 , 总之最终结果是菜能买回来 , 但搞不好多花了几块钱 。
典型例子比如部分背包问题:有n个物体 , 第i个物体的重量为Wi , 价值为Vi , 在总重量不超过C的情况下让总价值尽量高 。 每一个物体可以只取走一部分 , 价值和重量按比例计算 。
贪心策略就是 , 每次都先拿性价比高的 , 判断不超过C 。
三、迭代算法
迭代法也称辗转法 , 是一种不断用变量的旧值递推新值的过程 。 迭代算法是用计算机解决问题的一种基本方法 , 它利用计算机运算速度快、适合做重复性操作的特点 , 让计算机对一组指令(或一定步骤)进行重复执行 , 在每次执行这组指令(或这些步骤)时 , 都从变量的原值推出它的一个新值 。 最终得到问题的结果 。
迭代算法适用于那些每步输入参数变量一定 , 前值可以作为下一步输入参数的问题 。
典型例子比如说 , 用迭代算法计算斐波那契数列 。
四、枚举算法
枚举算法是我们在日常中使用到的最多的一个算法 , 它的核心思想就是:枚举所有的可能 。 枚举法的本质就是从所有候选答案中去搜索正确地解 。
枚举算法适用于候选答案数量一定的情况 。
- 机器|等等党618前就能剁手!2k档再添性价比机器,LCD电竞屏+天玑8100
- 算法|武汉程序员工资普遍过万,前端工资10070元,Java工资11543元
- 清洁电器品类榜首 功能进阶 石头自清洁扫拖机器人 G10S 体验剖析
- 超5成大厂程序员,愿意降薪跳槽
- 伊隆·马斯克|梁思成手稿精致到什么程度?在没有CAD的时代,手写堪比机器打印
- 算法|机器学习的算法
- 三星堆“机器狗”铜神兽亮相
- 自动化|重复性工作再也不用做啦!机器人自动化迎难而上
- |8月19日,马斯克要带特斯拉人形机器人走两步了
- |雕塑家便携显示器,几百块的第二屏带来工作学习娱乐新方式!