
算法、数据结构
veaglefly
这个作者很懒,什么都没留下…
展开
-
PHP核心技术与最佳实践之Hash表冲突
PHP核心技术与最佳实践之Hash表冲突接着上一篇文章,测试后输出value1value2.当$ht->insert(‘key12’,’value12’);Echo $ht ->find(‘key12’);时,发现输出value12value12.这是什么原因呢?这个问题称为Hash表的冲突。由于insert的是字符串,采用的算法是将字符串的ASIIC码相加,按照此方法,冲突产原创 2015-04-14 21:55:01 · 1119 阅读 · 0 评论 -
河内之塔(汉诺塔)
算法分析:假如有三个盘子在塔A上,需要移到塔C,按照一定的规则,需要借助塔B,移动的情形如下: 当有3个盘子时,共需要2^3-1步,则当有n个盘子时,需要2^n-1步。算法实现:<?PHP//汉诺塔实现//n个盘子,x,y,z,三个柱子。 function Hanoi($n,$x,$y,$z){ if($n == 1){原创 2015-08-06 09:33:49 · 1605 阅读 · 0 评论 -
插入排序
插入排序它的基本思想是:从第一个元素开始,该元素可以认为已经被排序取出下一个元素,在已经排序的元素序列中从后向前扫描,如果该元素大于新元素,将该元素移到下一个位置,重复扫描,直到找到已排序的元素小于或者等于新的元素的位置,将新元素插入到下一位置中。算法如下:<?PHPfunction insertsort($arr){ $len = count($arr);原创 2015-08-05 21:34:57 · 517 阅读 · 0 评论 -
费式序列(斐波那契数列)
算法分析:型如下的数列:1,1,2,3,5,8,13,21,34,55,89……称之为Fibonacci数列,习惯上称之为费式数列。解法公式: 算法实现:<?PHP//fibonacci实现function fibonacci($index){ if($index < 1){ return -1;原创 2015-08-06 10:09:55 · 1937 阅读 · 0 评论 -
选择排序
选择排序它的基本思想是:每一趟从待排序的数据元素中选出最大或者最小的一个元素。顺序的放在已经排好序的数列的最后,直到全部待排序的数据元素排完,选择排序是不稳定的排序方法。算法如下:<?PHPfunction selectsort($arr){ $len = count($arr); for($i = 0; $i <= $len;$i ++){原创 2015-08-05 21:21:40 · 523 阅读 · 0 评论 -
快速排序
快速排序是对冒泡排序的一种改进。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据要小,然后再按此方法对这两部分数据进行快速排序,整个排序过程可以按照递归进行,以此达到整个数据编程有序序列。算法如下:<?PHPfunction quicksort($arr){ $len = count($arr); if原创 2015-08-05 20:44:26 · 330 阅读 · 0 评论 -
二分查找
算法解析: 如果搜寻的数列已经排好序,应该尽量利用他们排好序的特性,以减少搜寻比对的次数,这是查找的基本原则,二分查找就是这个原则的代表。在二分查找中,从数列的中间开始查找,如果这个数小于我们所要查找的数,由于数列已排序,则该数左边的数一定小于要查找的数,如果要查找的数大于中间数,则从左边查找。算法实现:<?PHPfunction bin_sch($ar原创 2015-08-13 09:22:09 · 626 阅读 · 0 评论 -
猴子选大王
问题描述:一群猴子按编号围成一圈,然后从第一只开始数,数到第m只,把他踢出圈,然后再从他后面开始数,数到第m只,再把他踢出圈,如此下去,直到剩下最后一个猴子为止。算法实现:<?PHP function MonkeyKing($n,$m){ $monkey = range(1,$n);//生成1-n的数组 $i = 0; while(count($monkey)>1原创 2015-08-25 10:13:04 · 718 阅读 · 0 评论 -
Armstrong树
算法分析:在三位的整数中,例如153 = 1^3 + 5^3 + 3^3;这样的树称之为Armstrong树。Armstrong的寻找,其实就是求解如何分解一个三位整数的个位数、十位数、百位数、只需要除法和余数运算就可以了。然后再取整。例如:$abc;$a = inval($abc/100)$b =inval(( $abc%100)/10)$c =$abc%10算法实现原创 2015-08-07 16:22:00 · 556 阅读 · 0 评论 -
八枚硬币求解假币
算法分析:现有八枚银币a,b,c,d,e,f,g。已知其中一枚是假币,其重量不同于真币,但是不知谁轻谁重,如何使用天平以最少的比较次数,决定哪枚是假币,并得知真币和假币谁轻谁重。要求以最少的比较次数,我们不能使用单纯的回圈比较来求解,我们可以使用决策树, 具体决策树算法原理可以查看这篇文章~http://www.cnblogs.com/bourneli/archive/2013/03/原创 2015-08-07 14:57:20 · 1903 阅读 · 0 评论 -
冒泡排序
冒泡排序百科上的解释为:算法原理:(从后往前)1. 比较相邻的元素。如果第一个比第二个大,就交换它们两个。2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。3. 针对所有的元素重复以上的步骤,除了最后一个。4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。时间复杂原创 2015-04-21 23:36:16 · 599 阅读 · 0 评论 -
PHP核心技术与最佳实践之Hash算法
PHP核心技术与最佳实践之Hash算法Hash表又称散列表,通过把关键字Key映射到数组中的一个位置来访问记录,以加快查找速度。这个映射函数称为Hash函数,存放记录的数组称为Hash表。1. Hash函数作用是把任意长度的输入,通过Hash算法变换成固定长度的输出,该输出就是Hash值。这种转换是一种压缩映射,也就是Hash值得空间通常远小于输入的空间,不输入可能会散列成相同原创 2015-04-14 21:51:24 · 1583 阅读 · 0 评论 -
巴斯卡三角形
算法分析:详情参考:http://blog.youkuaiyun.com/yxstars/article/details/8664955算法实现:<?PHPfunction basika($n,$r){ $p = 1; for($i = 1;$i < $r; $i++){ $p = $p *($n-$i+1)/$i;原创 2015-08-06 11:19:34 · 750 阅读 · 0 评论