当前位置:首页 > 日记 > 正文

PHP实现的贪婪算法实例

PHP实现的贪婪算法实例

本文实例讲述了PHP实现的贪婪算法。分享给大家供大家参考,具体如下:

背景介绍:贪婪算法与数据结构知识库算法可以说是离我们生活最近的一种算法,人总是贪婪的嘛,所以这种算法的设计是很符合人性的。之所以这么说,是因为人们会在生活中有意无意的使用贪婪算法来解决问题。最常见的就是找零钱了,每个人都没学过该怎么找零钱,但在所有面额的钱都充足时,每个人都会找出同样组合来凑够需要的钱。其实这里面就是贪婪算法在起作用。

设计思路:贪婪法的设计思路可以从两方面来理解,即直观上和数学上。从直观上理解贪婪算法就是用最快的方法来解决问题。在这里面“快”是主要目标,例如上面找零钱的例子,假如你要找的零钱为6.6元。那首先要拿一张5元的,因为这可以使你凑的钱增长最快。如果人民币有6元的面额那你肯定会选6元的而不是拿两张别的来凑6元;从数学上来理解贪婪算法就是在做判断时以当前最优解为目标,类似于最优化中的最速下降法。这种方法的好处是解题速度极快,基本上是一次历遍就可以完成。

算法缺陷:正如做人不能太贪婪一样,贪婪算法本身有着致命的缺陷,这使得其应用背景收到了很多限制。因为算法是取的局部最优解,没有考虑以后的问题。这就像一个自私自利的人一样,虽然短时间内可以获得一些利益,但长期以往,很难会有大的成就。当然,社会很复杂,也许会有人一直自私下去而生活的还不错。这体现在算法上就是在一些情况下(具体下面会提到),贪婪算法是可以得到最优解的,这对于算法设计来说当然是好事。

/** 贪婪算法* $arr   array  处理数组* $volume  int   盒子容量*/function greedy($arr, $volume){    $box = array();    $boxNum = 0;    $num = count( $arr );    for ($i = 0; $i < $num; $i++) {      $boxCode = true;      for ($j = 0; $j < $boxNum; $j++) {        if ($arr[$i] + $box[$j]['v'] <= $volume) {          $box[$j]['v'] += $arr[$i];          $box[$j]['k'][] = $i;          $boxCode = false;          break;        }      }      if ($boxCode) {        $box[$boxNum]['v'] = $arr[$i];        $box[$boxNum]['k'][] = $i;        $boxNum++;      }    }    return $box;}

更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP数据结构与算法教程》、《PHP基本语法入门教程》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》及《php程序设计算法总结》

希望本文所述对大家PHP程序设计有所帮助。

相关文章

ps怎么选纸张颜色? ps模拟纸张颜色

ps怎么选纸张颜色? ps模拟纸张颜色

方法,模拟,纸张,颜色,电脑软件,ps模拟纸张颜色很方便,可以直接选择文件的样式里的模拟纸张颜色的选项,下面我们就来看看详细的教程。软件名称:Adobe Photoshop 8.0 中文完整绿色破解版软件大小:150.1MB更新时间:2015-11-041、首先找到软件。2、…

ps利用滤镜制作各种颜色的环形烟花

ps利用滤镜制作各种颜色的环形烟花

滤镜,教程,笔画,烟花,环形,ps怎样利用滤镜制作各种颜色的环形烟花图片?运用PHOTOSHOP软件,可以很简单的制作大家想要的照片,下面和小编一起来看看具体步骤吧。最终效果:具体步骤:12 3 4 阅读全文1 23 4 阅读全文1 2 34 阅读全文教程到此结束…

Node.js 的模块知识汇总

Node.js 的模块知识汇总

知识,模块,电脑软件,Node,js,在写 Node.js 应用程序的时候,你确实可以把所有代码放在巨大原 index.js 文件中,不在乎你的应用程序会变得多大多复杂。Node.js 解释器不会在意这个事情。但在代码组织方面,你很快就会陷入混乱,不能理解代码,而且难…

word怎么设置论文页面标准格式

word怎么设置论文页面标准格式

方法,页面设置,设置,论文,页面,  毕业论文,总是让人很头疼的。尤其是老师给的各种格式。现在,根据小编的经验,来给大家一点在毕业论文页面设置方面的小经验,为大家减轻一点那些格式要求烦恼。接下来小编举例简单的例子告诉大家word2010论文页…

ps怎么给添加动感效果?

ps怎么给添加动感效果?

动感,效果,电脑软件,ps,ps 大家应该都会想到P图,PS其实功能很强大,现在分享一个pS做简单动图的例子,勿喷!!!!新手。软件名称:Adobe Photoshop 8.0 中文完整绿色破解版软件大小:150.1MB更新时间:2015-11-041、打开PS-标题栏-文件-新建 (热键CTRL+N),修改…

TCP关闭问题详细介绍

TCP关闭问题详细介绍

详细介绍,电脑软件,TCP,摘要: 三次握手,四次挥手意思是tcp建立连接时需要三次交互来完成,A发起连接A --- SYN --> BA <-- SYN + ACK --- B (1)A --- ACK --> B而关闭tcp连接需要四次交互,A发起关闭A --- FIN --> BA <-- ACK --- B (1)A <-…

如何用Powerpoint制作字幕式片头片

如何用Powerpoint制作字幕式片头片

字幕,片头,片尾,如何用,电脑软件,  电影和电视剧中,制作者们喜欢挑选片中精彩镜头放在片头,在屏幕上拉动出现。片尾则通常用移动字幕的形式给出演员、制作者等的姓名及相关资料。以下是小编为您带来的关于用Powerpoint制作字幕式片头片尾,希…

webpack2.0配置postcss-loader的方

webpack2.0配置postcss-loader的方

方法,配置,电脑软件,loader,postcss,本文介绍使用webpack2.0配置postcssloader,分享给大家。具体如下:安装postcss-loadernpm install --save-dev postcss-loader然后配置webpack.config.js{ test:/\.css$/, use:[ 'style-loader','css-…

input type=file 选择并且实现预览

input type=file 选择并且实现预览

选择,实例,效果,电脑软件,input,通过<input />标签,给它指定type类型为file,可提供文件上传;accept:可选择上传类型,如:只要传图片,且不限制图片格式,为image/*;multiple:规定是否可以选择多个文件;规定只可上传图片,且可以选择多个文件<input type="f…

关于Ajax中通过response在后台传递

关于Ajax中通过response在后台传递

传递数据,后台,电脑软件,Ajax,response,这是js代码:var System = { getHttpRequest: function(url, callback, options) { if (url.length < 0) return; var option = { url: url, type: "get", dataType: "…

JS继承与闭包及JS实现继承的三种方

JS继承与闭包及JS实现继承的三种方

继承,闭包,三种,方式,电脑软件,前 言在之前的两篇博客中,我们详细探讨了JavaScript OOP中的各种知识点(JS OOP基础与JS 中This指向详解 、 成员属性、静态属性、原型属性与JS原型链)。今天我们来继续探讨剩余的内容吧。我们都知道,面向对象的…

Vue中定义全局变量与常量的各种方

Vue中定义全局变量与常量的各种方

全局变量,常量,详解,定义,方式,前言本文主要跟大家介绍了关于Vue定义全局变量与常量的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍:我想要定义一个变量, 在项目的任何地方都可以访问到, 不需要每一次使用的时候, 都…