PHP实现的贪婪算法实例

 更新时间:2017年10月17日 11:55:34   作者:小强开86  
这篇文章主要介绍了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程序设计有所帮助。

相关文章

  • php常用字符串比较函数实例汇总

    php常用字符串比较函数实例汇总

    这篇文章主要介绍了php常用字符串比较函数,实例汇总了substr_compare、strncasecmp、strncmp、strcoll等常用函数,具有一定的参考借鉴价值,需要的朋友可以参考下
    2014-11-11
  • php命名空间设计思想、用法与缺点分析

    php命名空间设计思想、用法与缺点分析

    这篇文章主要介绍了php命名空间设计思想、用法与缺点,结合实例形式分析了php命名空间的概念、用法及相关的操作注意事项,并给出了使用建议,需要的朋友可以参考下
    2019-07-07
  • PHP生成不重复标识符的方法

    PHP生成不重复标识符的方法

    这篇文章主要介绍了PHP生成不重复标识符的方法,涉及时间函数time的md5转换,uniqid()函数及GUID的应用,非常具有实用价值,需要的朋友可以参考下
    2014-11-11
  • php mysql_list_dbs()函数用法示例

    php mysql_list_dbs()函数用法示例

    这篇文章主要介绍了php mysql_list_dbs()函数用法,简单介绍了mysql_list_dbs()函数的功能及列出mysql所有数据库的实现技巧,需要的朋友可以参考下
    2017-03-03
  • jQuery+php简单实现全选删除的方法

    jQuery+php简单实现全选删除的方法

    这篇文章主要介绍了jQuery+php简单实现全选删除的方法,涉及php结合jQuery操作表单的全选及ajax交互实现删除的相关技巧,需要的朋友可以参考下
    2016-11-11
  • PHP通过内置函数memory_get_usage()获取内存使用情况

    PHP通过内置函数memory_get_usage()获取内存使用情况

    这篇文章主要介绍了PHP通过内置函数memory_get_usage()获取内存使用情况,需要的朋友可以参考下
    2014-11-11
  • PHP类型约束用法示例

    PHP类型约束用法示例

    这篇文章主要介绍了PHP类型约束用法,结合实例形式分析了php针对特定场合及特定类型进行强制类型约束的操作方法,需要的朋友可以参考下
    2016-09-09
  • php实现异步数据调用的方法

    php实现异步数据调用的方法

    这篇文章主要介绍了php实现异步数据调用的方法,分享了4种PHP异步执行的常用方式,感兴趣的小伙伴们可以参考一下
    2015-12-12
  • PHP7扩展开发教程之Hello World实现方法示例

    PHP7扩展开发教程之Hello World实现方法示例

    这篇文章主要介绍了PHP7扩展开发教程之Hello World实现方法,结合实例形式较为详细的分析了针对php7扩展的源码下载、设置、代码编辑及测试运行相关操作技巧,需要的朋友可以参考下
    2017-08-08
  • PHP正则之正向预查与反向预查讲解与实例

    PHP正则之正向预查与反向预查讲解与实例

    这篇文章主要介绍了PHP正则之正向预查与反向预查详解与实例,需要的朋友可以参考下
    2020-04-04

最新评论