摘要:
1 <?php 2 #洗牌算法,假设共有n张各不相同的牌 3 #易知n张牌共有n!中排列方法,洗牌算法关键在于让这n!排列方法出现的概率相等 4 5 function swap(&$arr, $i, $j) { 6 $temp = $arr[$i]; 7 $arr[$i] = $arr[$j]; 8 $arr[$j] = $temp; 9 }10 11 function shuffle_poker(&$arr) {12 $len = count($arr);13 for ... 阅读全文
摘要:
二叉查找树:简单点说就是颗做孩子小,右孩子大的树说几个关键点最小值:总是树的最左节点的key最大值:总是树的最右节点的key前趋:按照中序遍历的顺序,遍历输出时当前节点的前一个节点 如果当前节点有左子节点,前驱就是当前节点的左边的最右节点,也可以认为是以当前节点的左孩子为根的树的最大值 如果当前节点没有左子节点,前驱就是找到一个父节点,使得当前节点位于该父节点的右边,不明白的看代码后继:按照中序遍历的顺序,遍历输出时当前节点的后一个节点 如果当前节点有右子节点,后继就是当前节点的右边的最左节点,也可以认为是以当前节点的右孩子为根的树的最小值 如果当前节点没有柚子节点,后... 阅读全文
摘要:
散列表的意义直接寻址表需要申请全域U大小的空间来存储数据,其中全域U中的有效数据集合为K,那么其存储情况如下图而如果利用散列函数h,将全域U的值映射到h(U)->{0, 1, 2, 3 ... m - 1},则可以缩小存储空间,如下图冲突如上图,k2和k5发生了冲突,解决冲突的方法有如下几种1.链接法,如下图2.开放寻址法(一下内容抄自百科)①线性探查法(Linear Probing) 该方法的基本思想是:将散列表T[0..m-1]看成是一个循环向量,若初始探查的地址为d(即h(key)=d),则最长的探查序列为:d,d+l,d+2,…,m-1,0,1,…,d-1 .即:探查时从地址d开 阅读全文
摘要:
1 <?php 2 #带哨兵的双链表实现 3 4 #链表节点 5 class Node { 6 public $pre = null; 7 public $next = null; 8 public $key = null; 9 }10 11 #查找链表值12 function search($list, $key) {13 $cnode = $list->next;14 while ($cnode !== $list && $cnode->key !== $ke... 阅读全文
摘要:
1 <?php 2 #随机选择第i小的数字,用随机快排实现 3 4 #交换元素 5 function swap(&$arr, $i, $j) { 6 $temp = $arr[$i]; 7 $arr[$i] = $arr[$j]; 8 $arr[$j] = $temp; 9 }10 11 #随机划分12 function randomized_partition(&$arr, $begin, $end) {13 $rand_inx = rand($begin, $end)... 阅读全文
摘要:
1 <?php 2 #基数排序,此处仅对正整数进行排序,至于负数和浮点数,需要用到补码,各位有兴趣自行研究 3 4 #计数排序 5 #@param $arr 待排序数组 6 #@param $digit_num 根据第几位数进行排序 7 function counting_sort(&$arr, $digit_num = false) { 8 if ($digit_num !== false) { #如果参数$digit_num不为空,则根据元素的第$digit_num位数进行排序 9 ... 阅读全文
摘要:
有12个小球,有一个质量和其它十一个不一样,不知道是重还是轻。用一个天秤称三次,把这个质量不同的球给区别出来将12个小球编号 1~C1 对比 1234 & 56781.1 1234 = 5678,则坏球在9ABC中,第二次称 1239 & 56AB1.1.1 1239 = 56AB,则坏球是C1.1.2 1239 > 56AB,则坏球在9AB中,且 9 > AB 第三次称 A & B1.1.2.1 A = B, 坏球是9, 9偏重1.1.2.2 A > B, 坏球是B, B偏轻1.1.2.3 A < B, 坏球是A, A偏轻1.1.3 1239 阅读全文
摘要:
优先队列其实就是一个最大堆,主要是对最大堆的操作上的一些调整 1 <?php 2 #最大优先队列的实现 3 4 #交换函数 5 function swap(&$arr, $inx1, $inx2) { 6 $temp = $arr[$inx1]; 7 $arr[$inx1] = $arr[$inx2]; 8 $arr[$inx2] = $temp; 9 }10 11 #最大堆节点下沉调整12 #@param $arr 待调整数组13 #@param $sta... 阅读全文
摘要:
1 <?php 2 #二进制相加 3 function binary_plus($binstr1, $binstr2) { 4 $bin_arr1 = str_split($binstr1); 5 $bin_arr2 = str_split($binstr2); 6 $arr_len1 = count($bin_arr1); 7 $arr_len2 = count($bin_arr2); 8 $sum_arr = array(); 9 10 if ($arr_len1 < $arr... 阅读全文
摘要:
协同开发一般有以下几种1.使用本地搭建git服务器2.使用github作为中心服务器,这里协同开发的方式又分以下集中1)fork别人的项目,然后pull request,等项目所有人同意你的修改以后merge branch2)让项目管理者将你加为collaborator,最为项目开发者之一,这种情况你clone项目下来以后,可以不经过管理者的批准直接push项目3)简历organization,这玩意要钱,据说可以给开发者分组,分配不同的权限,没试过下面来说这些开发方法的实现方式1.在本地搭建Git服务器,一下内容直接截取自《Pro Git》2.使用Github作为仓库的方法请自己上githu 阅读全文