PHP之算法
PHP之算法偶遇隨感
要求如下:
第1种: A,B,C
期望能够得到的组合是: AB,AC,BC
第2种: A,B,C,D(可通过参数控制结果长度,如长度为2或3)
期望能够得到的组合是: AB,AC,AD,BC,BD,CD或ABC,BCD,ACD,ABD
第3种: A,B,C,D,E(可通过参数控制结果长度,如长度为2;3或4)
期望能够得到的组合是: AB,AC,AD,AE,BC,BD,BE,CD,CE,DE或ABC,BCD,CDE,ABD,ABE,ACD,ACE,BDE,BCE,ADE或ABCD,BCDE,ABCE,ACDE,ABDE
第四种:A,B,C,D,E,F(可通过参数控制结果长度,如长度为2;3;4或5)
期望能够得到的组合是: 可根据上边的组合推演出来,在此不再例举
上邊的要求貌似很簡單,但是真正當我開始寫的時候才發現竟然一點頭緒都沒有,我曾設想過用遞歸等做法但是想來想去都覺得不可行,放狗搜了半天也找不到類似的做法,只發現有人用C語言寫過一個函數,但是當我把C語言代碼改成PHP執行的時候和預期的效果差很大.最後沒辦法只好在CSDN花費了寶貴的200點積分請高手來解決,俗話所的好"重賞之下有勇夫",哈哈這句話果真一點都不假,很快PHP版的斑竹"xuzuning"就給了我三個答案,汗!!!最後通過十萬次的循環測試選中了一個最佳解決方案,代碼如下:
/** 重新組合Array,例如(2x3;3x3;3x4) 返回: 重組後的Array 參數: $arr:要重組的Array $len:幾個Array組合到一起 用法: $arr=Array('A1','B2','C3','D4','E5','f'); $x3=Fun::CombiArray($arr,3);/**/Public Static Function combiArray($arr,$len){ $cr = Range(0,$len-1); $k = False; $total = Count($arr); While($cr[0] < $total-($len-1)) { $t = Array(); For($i=0;$i<$len;$i++){$t[]=$arr[$cr[$i]];} $r[] = $t; For($i=$len-1;$i>=0;$i--) { $cr[$i]++; For($j=$i;$j<$len-1;$j++){$cr[$j+1] = $cr[$j]+1;} IF($cr[$i] < $total-($len-$i-1)){Break;} } } Return $r;} |
很棒的算法,看了老半天才看明白,比起某人寫的那7層循環不知道效率提升了多少倍.
PHP成就了快速開發,卻也讓程序員變笨了,看來得惡補一下算法了,在算法方面有沒有啥比較好的書啊?大家可否推薦給我幾本?
..
PHP之算法的更多相关文章
- B树——算法导论(25)
B树 1. 简介 在之前我们学习了红黑树,今天再学习一种树--B树.它与红黑树有许多类似的地方,比如都是平衡搜索树,但它们在功能和结构上却有较大的差别. 从功能上看,B树是为磁盘或其他存储设备设计的, ...
- 分布式系列文章——Paxos算法原理与推导
Paxos算法在分布式领域具有非常重要的地位.但是Paxos算法有两个比较明显的缺点:1.难以理解 2.工程实现更难. 网上有很多讲解Paxos算法的文章,但是质量参差不齐.看了很多关于Paxos的资 ...
- 【Machine Learning】KNN算法虹膜图片识别
K-近邻算法虹膜图片识别实战 作者:白宁超 2017年1月3日18:26:33 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...
- 红黑树——算法导论(15)
1. 什么是红黑树 (1) 简介 上一篇我们介绍了基本动态集合操作时间复杂度均为O(h)的二叉搜索树.但遗憾的是,只有当二叉搜索树高度较低时,这些集合操作才会较快:即当树的高度较高(甚至一种极 ...
- 散列表(hash table)——算法导论(13)
1. 引言 许多应用都需要动态集合结构,它至少需要支持Insert,search和delete字典操作.散列表(hash table)是实现字典操作的一种有效的数据结构. 2. 直接寻址表 在介绍散列 ...
- 虚拟dom与diff算法 分析
好文集合: 深入浅出React(四):虚拟DOM Diff算法解析 全面理解虚拟DOM,实现虚拟DOM
- 简单有效的kmp算法
以前看过kmp算法,当时接触后总感觉好深奥啊,抱着数据结构的数啃了一中午,最终才大致看懂,后来提起kmp也只剩下“奥,它是做模式匹配的”这点干货.最近有空,翻出来算法导论看看,原来就是这么简单(先不说 ...
- 神经网络、logistic回归等分类算法简单实现
最近在github上看到一个很有趣的项目,通过文本训练可以让计算机写出特定风格的文章,有人就专门写了一个小项目生成汪峰风格的歌词.看完后有一些自己的小想法,也想做一个玩儿一玩儿.用到的原理是深度学习里 ...
- 46张PPT讲述JVM体系结构、GC算法和调优
本PPT从JVM体系结构概述.GC算法.Hotspot内存管理.Hotspot垃圾回收器.调优和监控工具六大方面进行讲述.(内嵌iframe,建议使用电脑浏览) 好东西当然要分享,PPT已上传可供下载 ...
- 【C#代码实战】群蚁算法理论与实践全攻略——旅行商等路径优化问题的新方法
若干年前读研的时候,学院有一个教授,专门做群蚁算法的,很厉害,偶尔了解了一点点.感觉也是生物智能的一个体现,和遗传算法.神经网络有异曲同工之妙.只不过当时没有实际需求学习,所以没去研究.最近有一个这样 ...
随机推荐
- WebService对跨域的支持
WebService对跨域的支持 跨域问题来源于JavaScript的同源策略,即只有 协议+主机名+端口号 (如存在)相同,则允许相互访问.也就是说JavaScript只能访问和操作自己域下的资源, ...
- .net EF 事物 订单流水号的生成 (一)
首先需要 添加 System.Transactions 程序集 数据表: create table SalesOrder ( ID ,) primary key not null, OrderNo ) ...
- J2EE之验证码实现
package cn.itcast.response; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; i ...
- 財智V6.0(完美破解序列号特别版)
財智V6.0(完美破解序列号特别版) 財智V6.0(完美破解序列号特别版) 財智6是眼下唯一在中央台报道的.比較成熟的国产理財软件.能全面管理家庭的日常收入.消费.储蓄 ...
- JAVA Static方法与单例模式的理解
近期用sonar測评代码质量的时候,发现一个问题,project中一些util类,曾经写的static方法都提示最好用单例的方式进行改正. 为此,我细致想了想,发现还是非常有道理的.这里谈谈我个人对s ...
- Android安卓安全审计mobiseclab
关于安卓上的app分析,有非常多的本地化软件能够胜任, 只是,今天给大家介绍一款在线的安全审计,恶意软件(android app)检測和分析工具,mobiseclab, 由于看到国内对此工具的介绍比較 ...
- MVC5+EF6 入门
MVC5+EF6 入门完整教程九 前一阵子临时有事,这篇文章发布间隔比较长,我们先回顾下之前的内容,每篇文章用一句话总结重点. 文章一 MVC核心概念简介,一个基本MVC项目结构 文章二 通过开发 ...
- 移植MonkeyRunner的图片对比和获取子图功能的实现-Appium篇
如果你的目标测试app有很多imageview组成的话,这个时候monkeyrunner的截图比较功能就体现出来了.而其他几个流行的框架如Robotium,UIAutomator以及Appium都提供 ...
- Asp.net vNext 学习1
Asp.net vNext 学习之路(一) 概述 asp.net vNext 也叫 asp.net 5.0,意思是微软推出的下一个版本的asp.net.可以说是微软对asp.net的一个比较重大的重新 ...
- sql点滴41—MyISAM 和 InnoDB 讲解
原文:sql点滴41-MyISAM 和 InnoDB 讲解 InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定.基本的差别为:MyISAM类型 ...