php常用算法汇总文档格式.docx

上传人:b****3 文档编号:17575551 上传时间:2022-12-07 格式:DOCX 页数:34 大小:29.02KB
下载 相关 举报
php常用算法汇总文档格式.docx_第1页
第1页 / 共34页
php常用算法汇总文档格式.docx_第2页
第2页 / 共34页
php常用算法汇总文档格式.docx_第3页
第3页 / 共34页
php常用算法汇总文档格式.docx_第4页
第4页 / 共34页
php常用算法汇总文档格式.docx_第5页
第5页 / 共34页
点击查看更多>>
下载资源
资源描述

php常用算法汇总文档格式.docx

《php常用算法汇总文档格式.docx》由会员分享,可在线阅读,更多相关《php常用算法汇总文档格式.docx(34页珍藏版)》请在冰豆网上搜索。

php常用算法汇总文档格式.docx

$a[0]){

$l[]=$a[$i];

$r[]=$a[$i];

$l=kuaisu($l);

$r=kuaisu($r);

returnarray_merge($l,array($a[0]),$r);

//插入排序O(N*N)

functioncharu($a){

for($i=1;

$t=$a[$i];

for($j=$i;

$j>

0&

&

$a[$j-1]>

$t;

$j--){

$a[$j]=$a[$j-1];

$a[$j]=$t;

//选择排序O(N*N)

functionxuanze($a){

for($i=0;

for($j=$i+1;

$j<

$j++){

if($a[$i]>

$a[$j]){

$t=$a[$j];

$a[$j]=$a[$i];

$a[$i]=$t;

//冒泡排序O(N*N)

functionmaopao($a){

for($j=$c-1;

$i;

if($a[$j]<

$a[$j-1]){

$t=$a[$j-1];

$a[$j-1]=$a[$j];

复制代码代码如下:

/**

*排列组合

*采用二进制方法进行组合的选择,如表示5选3时,只需有3位为1就可以了,所以可得到的组合是0110111100001111001101110等10种组合

*

*@param需要排列的数组$arr

*@param最小个数$min_size

*@return满足条件的新数组组合

*/

functionplzh($arr,$size=5){

$len=count($arr);

$max=pow(2,$len);

$min=pow(2,$size)-1;

$r_arr=array();

for($i=$min;

$i<

$max;

$i++){

$count=0;

$t_arr=array();

for($j=0;

$j<

$len;

$j++){

$a=pow(2,$j);

$t=$i&

$a;

if($t==$a){

$t_arr[]=$arr[$j];

$count++;

if($count==$size){

$r_arr[]=$t_arr;

return$r_arr;

$pl=pl(array(1,2,3,4,5,6,7),5);

var_dump($pl);

php常用算法总汇

/*

多选分类修改,数据入库增删留数组

说明:

$k和$v是一一对应

*/

//旧分类

$a1=array(’1′=>

’杂文’,

’2′=>

’小说’,

’3′=>

’散文’

);

//新分类

$a2=array(’3′=>

’散文’,

’4′=>

’诗歌’,

’6′=>

’文学’

foreach($a1as$k=>

$v)

{

$have=”;

foreach($a2as$ks=>

$vs)

echo“$v==$vs..”;

if($v==$vs)

$have=1;

if(!

array_key_exists($ks,$a1))

$add[$ks]=$vs;

if($have)

$bao[$k]=$v;

}else

$del[$k]=$v;

var_dump($add);

//新增的记录

var_dump($del);

//删除的记录

var_dump($bao);

//保留的记录

方式二:

无key

$a1=array(‘杂文’,'

小说’,'

散文’);

$a2=array(‘散文’,'

诗歌’,'

文学’);

in_array($vs,$a1))

$add[$vs]=$vs;

$bao[]=$v;

$del[]=$v;

—————————-比较全的随机数(字)

classgetRandstrClass{

functiongetCode($length=32,$mode=0){

switch($mode){

case’1′:

$str=’1234567890′;

break;

case’2′:

$str=‘abcdefghijklmnopqrstuvwxyz’;

case’3′:

$str=‘ABCDEFGHIJKLMNOPQRSTUVWXYZ’;

case’4′:

$str=‘ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz’;

case’5′:

$str=‘ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890′;

case’6′:

$str=‘abcdefghijklmnopqrstuvwxyz1234567890′;

default:

$str=‘ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890′;

$randString=”;

$len=strlen($str)-1;

for($i=0;

$i<

$length;

$i++){

$num=mt_rand(0,$len);

$randString.=$str[$num];

return$randString;

$code=newgetRandstrClass();

$length=16;

$mode=1;

$str=$code->

getCode($length,$mode);

echo$str;

$code=NULL;

———————–有两个数值型变量$a,$b,请在不使用用第二个变量的情况下交换它们的值

$a=3;

$b=4;

$a=$a+$b;

$b=$a-$b;

$a=$a-$b;

//list($b,$a)=array($a,$b);

————————–【选择排序(一维数组)】

【基本思想】:

每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。

【示例】:

[初始关键字][4938659776132749]

第一趟排序后13[38659776492749]

第二趟排序后1327[659776493849]

第三趟排序后132738[9776496549]

第四趟排序后13273849[49976576]

第五趟排序后1327384949[979776]

第六趟排序后132738494976[7697]

第七趟排序后13273849497676[97]

最后排序结果1327384949767697

functionselect_sort($arr){

$count=count($arr);

for($i=0;

$count;

$k=$i;

for($j=$i+1;

if($arr[$k]>

$arr[$j])

$k=$j;

//最小元素k和i调换

if($k!

=$i){

$tmp=$arr[$i];

$arr[$i]=$arr[$k];

$arr[$k]=$tmp;

return$arr;

————————–【插入排序(一维数组)】

每次将一个待排序的数据元素,插入到前面已经排好序的数列中的适当位置,使数列依然有序;

直到待排序数据元素全部插入完为止。

[初始关键字][49]38659776132749

J=2(38)[3849]659776132749

J=3(65)[384965]9776132749

J=4(97)[38496597]76132749

J=5(76)[3849657697]132749

J=6(13)[133849657697]2749

J=7(27)[13273849657697]49

J=8(49)[1327384949657697]

functioninsert_sort($arr){

for($i=1;

$j=$i-1;

while($arr[$j]>

$tmp){

$arr[$j+1]=$arr[$j];

$arr[$j]=$tmp;

$j–;

------------冒泡排序(一维数组)

两两比较待排序数据元素的大小,发现两个数据元素的次序相反时即进行交换,直到没有反序的数据元素为止。

【排序过程】:

设想被排序的数组R[1..N]垂直竖立,将每个数据元素看作有重量的气泡,根据轻气泡不能在重气泡之下的原则,从下往上扫描数组R,凡扫描到违反本原则的轻气泡,就使其向上”漂浮”,如此反复进行,直至最后任何两个气泡都是轻者在上,重者在下为止。

functionbubble_sort($array){

$count=count($array);

if($count<

=0)returnfalse;

for($j=$count-1;

$j>

$j–){

if($array[$j]<

$array[$j-1]){

$tmp=$array[$j];

$array[$j]=$array[$j-1];

$array[$j-1]=$tmp;

return$array;

------------------------------汉诺塔的PHP算法

  汉诺塔(又称河内塔)问题是印度的一个古老的传说。

开天辟地的神勃拉玛在一个庙里留下了三根金刚石的棒,第一根上面套着64个圆的金片,最大的一个在底下,其余一个比一个小,依次叠上去,庙里的众僧不倦地把它们一个个地从这根棒搬到另一根棒上,规定可利用中间的一根棒作为帮助,但每次只能搬一个,而且大的不能放在小的上面。

解答结果请自己运行计算,程序见尾部。

面对庞大的数字(移动圆片的次数)18446744073709551615,看来,众僧们耗尽毕生精力也不可能完成金片的移动。

后来,这个传说就演变为汉诺塔游戏:

1.有三根杆子A,B,C。

A杆上有若干碟子

2.每次移动一块碟子,小的只能叠在大的上面

3.把所有碟子从A杆全部移到C杆上

经过研究发现,汉诺塔的破解很简单,就是按照移动规则向一个方向移动金片:

如3阶汉诺塔的移动:

A→C,A→B,C→B,A→C,B→A,B→C,A→C

此外,汉诺塔问题也是程序设计中的经典递归问题。

$objMover=newMover();

$fromPlace='

A'

;

$toPlace='

C'

$assistancePlace='

B'

$objMover->

move(3,$fromPlace,$toPlace,$assistancePlace);

print_r($objMover->

getMovedMessage());

classMover

protected$_tabMessage=array();

publicfunction__construct()

*Enterdescriptionhere…

*

*@paramunknown_type$N,thelargerthenumberis,theheavieritis

*@paramunknown_type$fromPlace

*@paramunknown_type$toPlace

*@paramunknown_type$assistancePlace

publicfunctionmove($N,$fromPlace,$toPlace,$assistancePlace)

if($N==1)

$this->

_tabMessage[]=“Move$Nfrom$fromPlaceto$toPlace”;

}elseif($N>

1){

move(($N-1),$fromPlace,$assistancePlace,$toPlace);

move(($N-1),$assistancePlace,$toPlace,$fromPlace);

publicfunctiongetMovedMessage()

return$this->

_tabMessage;

functionhanoi($n,$x,$y,$z){

if($n==1){

move($x,1,$z);

}else{

hanoi($n-1,$x,$z,$y);

move($x,$n,$z);

hanoi($n-1,$y,$x,$z);

functionmove($x,$n,$z){

echo'

movedisk'

.$n.'

from'

.$x.'

to'

.$z.'

‘;

hanoi(10,’x'

’y'

’z'

?

>

————————————-猴子大王游戏

一群猴子排成一圈,按1,2,…,n依次编号。

然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,

再数到第m只,在把它踢出去…,如此不停的进行下去,

直到最后只剩下一只猴子为止,那只猴子就叫做大王。

要求编程模拟此过程,输入m、n,输出最后那个大王的编号。

结果视图:

z=0/i=0

z=1/i=1

z=2/i=2

z=3/i=3

Array([0]=>

1[1]=>

2[2]=>

3[3]=>

5[4]=>

6)

z=0/i=3

z=1/i=4

z=2/i=0

z=3/i=1

3[2]=>

5[3]=>

z=0/i=1

z=1/i=2

z=2/i=3

z=3/i=0

3[1]=>

5[2]=>

5[1]=>

5)

Kingis:

5

functionmonkeyKing($n,$m){

$monkeys=range(1,$n);

$i=0;

//取出时候的坐标

$z=0;

//数到M的时候停

while(($mnum=count($monkeys))>

1){

if($i==$mnum){

echo‘z=’.$z.’/i=’.$i.’

$z++;

$i++;

if($z==$m){

array_splice($monkeys,–$i,1);

print_r($monkeys);

echo“

“;

return($monkeys[0]);

echo‘Kingis:

’.monkeyKing(20,4);

————————————-翻牌游戏

1-52张扑克牌,初始都翻开朝上

从2开始,以倍数为基础,将2翻一次,4翻一次,6翻一次。

52翻一次

从3开始,以倍数为基础,将3翻一次,6翻一次,9翻一次。

48翻一次

从4开始,以倍数为基础,将4翻一次,8翻一次,13翻一次。

….

求最后朝上的牌有哪些?

*Createdon2009-9-30

*Tochangethetemplateforthisgeneratedfilegoto

*Window-Preferences-PHPeclipse-PHP-CodeTemplates

classup

protected$max=52;

protected$min=2;

protected$rs=array

(1);

//结果集,第一张牌是朝上的

functionup()

/*循环得到2-52的整除数组

*Array

[2]=>

Array

[0]=>

2

[3]=>

3

[4]=>

[1]=>

4

[5]=>

5

[6]=>

6

[7]=>

7

[8]=>

8

[9]=>

9

[10]=>

10

[11]=>

11

[12]=>

12

[13]=>

13

[14]=>

14

[15]=>

15

[16]=>

16

[17]=>

17

[18]=>

18

[19]=>

19

[20]=>

20

[21]=>

21

[22]=>

22

[23]=>

23

[24]=>

24

[25]=>

25

[26]=>

26

[27]=>

[2]

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 初中教育 > 政史地

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1