五大常用算法总结

文章转自:https://blog.csdn.net/changyuanchn/article/details/51476281

引言

据说有人归纳了计算机的五大常用算法,它们是贪婪算法,动态规划算法,分治算法,回溯算法以及分支限界算法。虽然不知道为何要将这五个算法归为最常用的算法,但是毫无疑问,这五个算法是有很多应用场景的,最优化问题大多可以利用这些算法解决。算法的本质就是解决问题。当数据量比较小时,其实根本就不需要什么算法,写一些for循环完全就可以很快速的搞定了,但是当数据量比较大,场景比较复杂的时候,编写for循环就是一个很不明智的方式了。一是耗时,二是写出的代码绝对是天书。当然还有第三点,这点也是最重要的,写代码是一种艺术,而不是搬砖。前面的文章里对这五种算法都已经做了详细的讲解和归纳,本文主要是一个总结,将这五种算法整理到一起来对比,分析一下。

0) 穷举法

穷举法简单粗暴,没有什么问题是搞不定的,只要你肯花时间。同时对于小数据量,穷举法就是最优秀的算法。就像太祖长拳,简单,人人都能会,能解决问题,但是与真正的高手过招,就颓了。

1) 贪婪算法

贪婪算法可以获取到问题的局部最优解,不一定能获取到全局最优解,同时获取最优解的好坏要看贪婪策略的选择。特点就是简单,能获取到局部最优解。就像打狗棍法,同一套棍法,洪七公和鲁有脚的水平就差太多了,因此同样是贪婪算法,不同的贪婪策略会导致得到差异非常大的结果。 
具体的详细解析请参见下面的文章: 
http://blog.csdn.net/changyuanchn/article/details/51417211

2) 动态规划算法

当最优化问题具有重复子问题和最优子结构的时候,就是动态规划出场的时候了。动态规划算法的核心就是提供了一个memory来缓存重复子问题的结果,避免了递归的过程中的大量的重复计算。动态规划算法的难点在于怎么将问题转化为能够利用动态规划算法来解决。当重复子问题的数目比较小时,动态规划的效果也会很差。如果问题存在大量的重复子问题的话,那么动态规划对于效率的提高是非常恐怖的。就像斗转星移武功,对手强它也会比较强,对手若,他也会比较弱。 
具体的详细解析请参见下面的文章: 
http://blog.csdn.net/changyuanchn/article/details/51420028 
http://blog.csdn.net/changyuanchn/article/details/51429979

3)分治算法

分治算法的逻辑更简单了,就是一个词,分而治之。分治算法就是把一个大的问题分为若干个子问题,然后在子问题继续向下分,一直到base cases,通过base cases的解决,一步步向上,最终解决最初的大问题。分治算法是递归的典型应用。 
具体的详细解析请参见下面的文章: 
http://blog.csdn.net/changyuanchn/article/details/17150109 
http://blog.csdn.net/changyuanchn/article/details/51465175

4) 回溯算法

回溯算法是深度优先策略的典型应用,回溯算法就是沿着一条路向下走,如果此路不同了,则回溯到上一个 
分岔路,在选一条路走,一直这样递归下去,直到遍历万所有的路径。八皇后问题是回溯算法的一个经典问题,还有一个经典的应用场景就是迷宫问题。 
具体的详细解析请参见下面的文章: 
http://blog.csdn.net/changyuanchn/article/details/17354461

5) 分支限界算法

回溯算法是深度优先,那么分支限界法就是广度优先的一个经典的例子。回溯法一般来说是遍历整个解空间,获取问题的所有解,而分支限界法则是获取一个解(一般来说要获取最优解)。 
具体的详细解析请参见下面的文章: 
http://blog.csdn.net/changyuanchn/article/details/17102037


转载于:https://www.cnblogs.com/wangxueliang/p/9346487.html

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

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

相关文章

Windows 2003下网络负载平衡(负载均衡)的配置

网络负载平衡(网络负载均衡、NLB、集群)概述 首先,我们先了解下 Windows 2003 自带的 负载平衡(负载均衡)—— Network Load Balancing,简称NLB。NLB是一种集成高可用性,高可靠性和高扩展性的集群。它不但能实现均衡负载,而且还能…

前后端分离的思考与实践(二)

原文出处: 淘宝UED - Herman 基于前后端分离的模版探索 前言 在做前后端分离时,第一个关注到的问题就是 渲染,也就是 View 这个层面的工作。 在传统的开发模式中,浏览器端与服务器端是由不同的前后端两个团队开发,但…

mysql对大量数据查询花费时间_对于Mysql大量数据查询速度慢的问题

1.如果mysql数据量过大,当查询的时候耗时比较长,则会影响页面数据展示。给客户的直观反应的:点击了某个查询功能,结果等了差不多十几秒才反应出来,这样的体验感太差了。2.为了增加反应速度。一般来是建立索引&#xff…

读书笔记:《与爱因斯坦月球漫步》

买《与爱因斯坦月球漫步》这本书已经忘记了是谁的推荐了,已经记不住是什么时候加入到我的GTD阅读清单的,在去北京出差时带上了这本书,前4章介绍了许多故事和记忆的原理,快速翻到第5章开始阅读,随着作者一起开始记忆的练…

推自己的镜像到网易云

推送本地镜像 本文介绍如何将本地镜像推送至你的网易云私有镜像仓库,以便在网易云上部署容器或集群。 注:Docker 客户端版本要求 1.7 及以上。 1. 列出本地镜像 docker images 2. 后台启动容器,验证配置是否正确 docker run -d {镜像名或ID} …

-js中json数组 以表格形式_为什么js类数组加上splice方法就是数组形式,不加就是对象形式?...

var array_like {};array_like[0] "test 0";array_like[1] "test 1";array_like[2] "test 2";array_like[3] "test 3";//关键点array_like.length 4;//为对象设置length属性array_like.splice [].splice;//同时设置splice属性为…

BYZ原创天语w806测评--入手2天,总结优点、缺点.

原帖地址:BYZ原创天语w806测评--入手2天,总结优点、缺点.楼下附上图片哦!billyzhou033邀请您访问锋动网http://flydong.com/?fromuid989昨天刚入手的大黄蜂w806,使用了1天,阿里云系统,由于第一次使用此系统&#xff0…

WebSocket-nodejs实现

一、环境配置 1.下载安装nodejs https://nodejs.org/en/download/ 2.安装完成后打开cmd命令,执行node --version,看看是否安装成功,如果提示没有此命令,去配置下环境变量,正常情况下安装后自动设置环境变量 二、配置nodejs模…

PXE自动安装FreeBSD

作者信息 作者:diege 时间:2012-05-02 前言 最经准备整理运维自动化相关的技术,发现FreeBSD的PXE安装忘的七七八八了,所以先整理一下,仍到博客上来。 目标 通过FreeBSD Server PXE安装FreeBSD操作系统 Server信息 操作系统版本:Fr…

mysql 5.6 gtid 主从_MySQL5.6基于GTID的主从复制

一、GTID简介MySQL 5.6 的新特性之一,是加入了全局事务 ID (GTID) 来强化数据库的主备一致性,故障恢复,以及容错能力。什么是GTID?官方文档:http://dev.mysql.com/doc/refman/5.6/en/replication-gtids.html在这篇文档…

Spring Boot之HelloWorld

视频网址&#xff1a;http://www.iqiyi.com/w_19ruksbpf1.html <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http://maven.a…

防止黑客入侵的五大技巧

2019独角兽企业重金招聘Python工程师标准>>> 防止黑客入的方法有很多&#xff0c;但是世界上没有绝对安全的系统。我们只可以尽量避免被入侵&#xff0c;最大的程度上减少伤亡。那么&#xff0c;接下来天下数据将为您详细介绍防止黑客入侵的五大技巧。(本文为天下数…

mysql js 命令行登录_mysqlsh 命令行模式与密码保存-爱可生

原标题&#xff1a;mysqlsh 命令行模式与密码保存-爱可生命令行模式mysql shell 如何实现类似 mysql -e "show processlist;" 的效果&#xff1f;即执行完就退出登录&#xff0c;不需要交互&#xff0c;我们经常在脚本中这样使用。那么同样的&#xff0c;在维护 Inno…

AngularJS学习笔记(1)——MVC模式的清单列表效果

MVC模式的清单列表效果 使用WebStorm新建todo.html并链入bootstrap.css、bootstrap-theme.css、angular.js。要链入的相关css和js文件预先准备好&#xff0c;文件目录如下&#xff1a; 使用MVC模式前的代码&#xff1a; <!DOCTYPE html> <html ng-app> <head&g…

C#多线程学习(六) 互斥对象

C#多线程学习(六) 互斥对象 原文链接&#xff1a;http://kb.cnblogs.com/page/42533/ 本系列文章导航 C#多线程学习(一) 多线程的相关概念 C#多线程学习(二) 如何操纵一个线程 C#多线程学习(三) 生产者和消费者 C#多线程学习(四) 多线程的自动管理(线程池) C#多线程学习(五) 多…

什么是mysql事物定义_Mysql事务原理

1. 什么是数据库事务1.1 事务的应用场景电商平台中例如常见的下单流程&#xff0c;会同时操作订单表&#xff0c;库存表等&#xff0c;有时候这些操作要在一个事务里面完成。还有金融系统业务的银行转账&#xff0c;需要保证一个账户增加另一个账户减少&#xff0c;这两个动作 …

centos 6 安装mosh 1.2

关于mosh&#xff08;引用于&#xff09; 芬兰研究员Tatu Ylnen于1995年设计出最早的SSH协议&#xff0c;它迅速成为最流行的远程登录安全协议。17年后&#xff0c;一组MIT的***提出了mosh&#xff0c;让SSH走向现代化。mosh是基于新的State Synchronization Protocol&#xff…

数组去重js方式

var selectmap new Array(); /(\x0f[^\x0f])\x0f[\s\S]*\1/.test("\x0f"selectmap.join("\x0f\x0f") "\x0f")返回为true表示存在重复数据转载于:https://www.cnblogs.com/lc93/p/9028038.html

mysql网络订餐系统截屏_在线订餐系统mysql字段

在线订餐系统mysql字段,随便写的了。也许要改变呢。再说吧啊。在线订餐系统mysql字段分成3个表开发1.user2.order3.pay1.用户表包含下面字段 id int 主键&#xff0c;自动累加&#xff0c;不为空&#xff0c;长度10就够了吧&#xff1b;用户名(name) varchar类型 30长度够了吧。…

学习jvm,关于MAT an internal error occurred during:Parsing heap dump from问题

写了一个死循环不断的创建对象&#xff0c;模拟内存溢出 1 package com.zuo.test1;2 3 import java.util.ArrayList;4 import java.util.List;5 6 public class Main {7 8 public static void main(String[] args) {9 List<Demo> demosnew ArrayList<…