常用算法的算法思想以及基本特征
算法思想
递归
递归并不是简单的自己调用自己,也不是简单的交互调用。递归在于把问题分解成规模更小、具有与原来问题相同解法的问题,如二分查找以及求集合的子集问题。这些都是不断的把问题规模变小,新问题与原问题有着相同的解法。但是并不是所有所有可以分解的子问题都能使用递归来求解。一般来说使用递归求解问题需要满足以下的条件:
原文链接:https://blog.csdn.net/yuanmxiang/article/details/52868999
分治法
一个求解规模是O(n)以上的问题,如果问题规模越小,则其执行时间越短。分治法的基本思想和递归一样,将一个问题拆分为若干个求解方式相同的子问题,子问题相互独立而且性质和原问题相同。通过递归将问题拆分为易求的子问题,然后再合并为原问题的解。他是自顶向下的,而递归是自底向上的。
动态规划
通常许多子问题非常相似,为此动态规划法试图仅仅解决每个子问题一次,从而减少计算量:一旦某个给定子问题的解已经算出,则将其记忆化存储,以便下次需要同一个子问题解之时直接查表。这种做法在重复子问题的数目关于输入的规模呈指数增长时特别有用。
原文:https://www.cnblogs.com/wlw-x/p/12591363.html
贪心算法
贪心算法是一种启发性算法,也就是并非在所有情况下都适用。贪心算法在每个局部阶段都做出当前局部状态的最优解。并且期望每次的局部最优解能够得出一个全局最优解
贪心和动态规划的区别:在dp中,每一步所作出的选择往往依赖相关子问题的解。因而在解出相关子问题之后,才能做出选择。但是贪心算法只需要在当前状态下做出最优选择即可,也就是局部最优解。
回溯法
回溯法具有通用解题法的美称。他在问题的解空间中,按深度搜索策略,从根节点出发搜索解空间树。用它可以系统搜索一个问题的所有解或者任一解。回溯法的基本做法是深度优先搜索,是一种组织得井井有条的、能避免不必要重复搜索的穷举式搜索算法。当我们遇到某一类问题时,它的问题可以分解,但是又不能得出明确的动态规划或是递归解法,此时可以考虑用回溯法解决此类问题。
出处:https://www.cnblogs.com/cy0628/p/13974725.html
分支限界法
类似于回溯法,也是在问题的解空间上搜索问题解的算法。但是分支限界法求解目标和回溯法不一样,回溯法是找出解空间内满足约束条件的所有节,但是分支限界法是找出满足约束条件的一个解,或者是找到满足约束条件的解中极大或者极小解。因此分支限界法使用的是广度优先搜索。
堆排序
1、将带排序的序列构造成一个大顶堆,根据大顶堆的性质,当前堆的根节点(堆顶)就是序列中最大的元素;2、将堆顶元素和最后一个元素交换,然后将剩下的节点重新构造成一个大顶堆;3、重复步骤2,如此反复,从第一次构建大顶堆开始,每一次构建,我们都能获得一个序列的最大值,然后把它放到大顶堆的尾部。最后,就得到一个有序的序列了。
原文链接:https://blog.csdn.net/qq_28063811/article/details/93034625/
基本特征
分治和递归
- 问题规模缩小到一定程度就易于解决。比如解决需要花费O(n2)的问题。
- 问题可以被划分为若干个规模较小的性质相同的子问题
- 各个子问题相互独立
- 子问题可以合并出原来的解
动态规划
- 最优子结构:指的是问题的最优解包含了子问题的最优解。利用最优子结构,可以自底向上地用递归逐步求出子问题的最优解,从而得到整个问题的最优解。
- 重叠子问题:各个子问题之间并非相互独立的,而是有重叠的。而且每次产生的子问题也不总是新问题,而是已经运算过的重复问题。因此,动态规划将每个子问题的结果保存在一张表格中,使得每个子问题只需要运算一次。
- 无后效性:即子问题的解一旦确定,就不再改变,不受在这之后、包含它的更大的问题的求解决策影响。
贪心算法
- 贪心选择性质:指所求的问题可以通过一系列的局部最优解来达到。
- 最优子结构:指的是问题的最优解包含了子问题的最优解
基本步骤
回溯法
- 针对所给定问题,定义问题的解空间;
- 确定易于搜索的解空间结构;
- 以深度优先方式搜索解空间,并在搜索过程中用剪枝函数避免无效搜索。
常用算法的算法思想以及基本特征相关推荐
- JAVA工程师常用算法_算法工程师必须要知道的8种常用算法思想
算法思想有很多,业界公认的常用算法思想有8种,分别是枚举.递推.递归.分治.贪心.试探法.动态迭代和模拟.当然8种只是一个大概的划分,是一个"仁者见仁.智者见智"的问题. 1.1 ...
- 对数字求特征值是常用的编码算法,奇偶特征是一种简单的特征值。对于一个整数,从个位开始对每一位数字编号,个位是1号,十位是2号,以此类推。这个整数在第n位上的数字记作x,如果x和n的奇偶性相同,则记下一
题目内容: 对数字求特征值是常用的编码算法,奇偶特征是一种简单的特征值.对于一个整数,从个位开始对每一位数字编号,个位是1号,十位是2号,以此类推.这个整数在第n位上的数字记作x,如果x和n的奇偶性相 ...
- 算法总结---最常用的五大算法(算法题思路)
算法总结---最常用的五大算法(算法题思路) 一.总结 一句话总结: [明确所求:dijkstra是求点到点的距离,辅助数组就是源点到目标点的数组] [最简实例分析:比如思考dijkstra:假设先只 ...
- 【数据挖掘】数据挖掘算法 组件化思想 ( 模型或模式结构 | 数据挖掘任务 | 评分函数 | 搜索和优化算法 | 数据管理策略 )
文章目录 一. 数据挖掘算法组件化 二. 组件一 : 模型或模式结构 三. 组件二 : 数据挖掘任务 四. 组件三 : 评分函数 五. 组件四 : 搜索和优化算法 六. 组件五 : 数据管理策略 七. ...
- 这才是数据挖掘领域常用的机器学习算法!
"2021-08-05,全体人民,原地失业." 最近,这条字节员工发布的朋友圈一夜刷爆网络,字节跳动教育板块大裁员的消息,引起了行业内的巨大震荡. 图片来源:网络 虽然字节最终并没 ...
- 文本聚类分析算法_常用的聚类分析算法综述
聚类分析定义 所谓聚类就是按照事物的某些属性,把事物聚集成类,使类间的相似性尽可能小,类内相似性尽可能大.聚类是一个无监督的学习过程,它同分类的根本区别在于分类是需要事先知道所依据的数据特征,而聚类是 ...
- 【算法特训总结】计算机经典算法的核心思想及独特角度的解读
计算机经典算法的核心思想及独特角度的解读 在1月1日新年之日开始的"算法特训"(一月一日~二月十日)终于结束了,对于这本<<算法竞赛经典>>,除了第十章(在 ...
- 机器学习中常用的分类算法总结
分类算法 分类算法和回归算法是对真实世界不同建模的方法.分类模型是认为模型的输出是离散的,例如大自然的生物被划分为不同的种类,是离散的.回归模型的输出是连续的,例如人的身高变化过程是一个连续过程, ...
- 推荐系统常用的策略算法—Bandits
目录 0. 推荐系统存在的经典问题 1. 什么是 bandit 算法 1.1 Bandit算法起源 1.2 bandit 算法与推荐系统 1.3 怎么选择 bandit 算法? 1.4 常用 band ...
最新文章
- html离开页面时,js实现用户离开页面前提示是否离开此页面的方法(包括浏
- 毕业后想拿大厂 Offer?你得完整拥有这些计算机知识体系!
- SharePoint 沙盒解决方案 VS 场解决方案
- iOS 之 事件响应者链
- umi搭建react+antd项目(六)父子组件通讯
- DRF_APIView之认证、授权配置
- 几个关于money处理的函数
- composer的简单使用
- java 排序性能_Java8排序–性能陷阱
- 腾讯云COS对象存储图片文件API的详细步骤过程
- Win7系统隐藏文件恢复的方法
- php 获取变量指针_PHP 底层的运行机制与原理
- sql crud_SQL Server中的CRUD操作
- Excel自动获取单词音标词义
- vue+elementUi——实现后台管理系统的布局(sideBar+header+appMain)
- Win10中允许UWP应用走代理的操作方法
- 输出星期几的英文表示
- 如何求取管壁努塞尔数【转载】
- 100天精通Python丨黑科技篇 —— 26、代理ip技术(request)
- 在web网页中打开word文档