posts - 339,  comments - 95,  views - 178万
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
09 2012 档案
PHP 计算二叉树距离最长的两个节点间的距离
摘要:1 <?php 2 #查找二叉树距离最长的两个节点的距离,即相距边数最多的两个节点的边数 3 #解题思路:距离最长的两个节点有以下3中情况 4 #1.两个节点一个位于左子树,一个位于右子树,则最长距离是左右子树的深度相加 5 #2.两个节点都位于左子树,则最长距离是以左子树为根节点的左子树的两个左右子树的深度相加 6 #3.两个节点都位于右子树,则最长距离是以右子树为根节点的右子树的两个左右子树的深度相加 7 8 class Node { 9 public $data = null;10 public $lef... 阅读全文
posted @ 2012-09-30 23:35 ZimZz 阅读(613) 评论(0) 推荐(0) 编辑
PHP 使用二叉树的先序和中序遍历结果构造二叉树
摘要:1 <?php 2 #树节点 3 class Node { 4 public $data = null; 5 public $parent = null; 6 public $left = null; 7 public $right = null; 8 } 9 10 #根据先序和中序遍历数组建立二叉树,注意是二叉树,不是二叉排序树,而且条件是树没有相同的值11 12 #思想是使用先序数组确定根节点,然后通过中序数组找到根节点的左右子树节点13 14 #@param pre 前序遍历... 阅读全文
posted @ 2012-09-30 22:10 ZimZz 阅读(1269) 评论(0) 推荐(0) 编辑
PHP 通过数组判断数组顺序输出是否是二叉排序树的后序遍历结果
摘要:1 <?php 2 #通过数组判断该数组顺序输出是否是二叉树后序遍历结果 3 4 #@param a 待判断数组 5 #@param s 待判断开始部分 6 #@param e 待判断结束部分 7 function is_bst_post($a, $s, $e) { 8 if ($s == $e) { 9 return true;10 }11 12 #由于是后序遍历,所以根节点必然是最后一个元素13 $root = $a[$e];14 #找... 阅读全文
posted @ 2012-09-30 15:57 ZimZz 阅读(605) 评论(0) 推荐(0) 编辑
PHP a[n+1]共有n+1个数,数值范围是1~n,a中有1个数重复,其他各不相同,找出这个重复的数
摘要:1 <?php 2 #a[n+1]共有n+1个数,数值范围是1~n,a中有1个数重复,其他各不相同,找出这个相同的数 3 4 #第一种方法,利用 a数组的和减去1+2+3+...+n的和,得到的结果就是重复数字 5 function get_dup($a) { 6 $size = count($a); 7 $suma = 0; 8 $sumn = 0; 9 for ($i = 0; $i < $size; $i++) {10 $suma += $a[$i];11 ... 阅读全文
posted @ 2012-09-30 00:16 ZimZz 阅读(1422) 评论(0) 推荐(0) 编辑
PHP 字符串匹配算法 Sunday算法
摘要:搜索文本 text = "my testing algorithm in test"模式 pattern = "test"Sunday算法的关键点在于1.设定一个匹配位移映射 shift[],这个shift[]映射关系必须按从左到右的顺序简历,例如pattern = "test",注意到此处有2个t,那么建立出来的位移映射是 shift[] = Array ( [t] => 1 [e] => 3 [s] => 2 ),而如果不是从左到右,是从右到左的建立映射,就会变成 shift[] = Array ( [t] =& 阅读全文
posted @ 2012-09-29 20:27 ZimZz 阅读(4083) 评论(0) 推荐(0) 编辑
PHP 逆转字符串与逆转句子
摘要:1 <?php 2 #颠倒字符串 3 4 #将字符串从头和尾向中间遍历,交换位置 5 function cstrrev(&$str, $begin, $len) { 6 $i = $begin; 7 $j = $begin + $len - 1; 8 while ($i < $j) { 9 $temp = $str[$i];10 $str[$i] = $str[$j];11 $str[$j] = $temp;12 ... 阅读全文
posted @ 2012-09-29 17:55 ZimZz 阅读(1034) 评论(0) 推荐(0) 编辑
PHP 逆转单链表
摘要:1 <?php 2 #逆转单链表 3 class Node { 4 public $data = null; 5 public $next = null; 6 } 7 8 #递归版本 9 #思想是一直递归到倒数第二个非空节点,并将其next->next指向自己,将自己的next指向null10 #为了获得逆转后的头结点,在最后一个非空节点,即cnode->next == null时,将节点返回11 function reverse_list_r($node) {12 if ($node-... 阅读全文
posted @ 2012-09-28 23:32 ZimZz 阅读(382) 评论(0) 推荐(0) 编辑
PHP 判断链表是否相交
摘要:解题思路:分三种情况1.两个链表都是无环链表,则使用指针p1,p2,分别遍历到两个链表尾,如果p1===p2,说明链表相交,否则不相交2.两个链表有一个有环,另一个无环,那么这种情况链表肯定不相交,因为如果其中一个有环,另一个和它相交,另一个也肯定会有环3.两个链表都有环,找到链表a和链表b的环中的两个节点p1,p2,用pa=p1,然后用pa=pa->next,直到pa===p1(意思是让pa在环内跑一圈),如果在跑的过程中发现pa === p2,说明两个链表的环是同一个,则相交,如果到达pa===p1,说明两个链表不相交下面是代码 1 <?php 2 #判断链表是否相交 3 .. 阅读全文
posted @ 2012-09-28 14:34 ZimZz 阅读(525) 评论(0) 推荐(0) 编辑
根据上排给出十个数,在其下排填出对应的十个数 要求下排每个数都是先前上排那十个数在下排出现的次数
摘要:如:上排数组A:0,1,2,3,4,5,6,7,8,9下排数组B:6,2,1,0,0,0,1,0,0,0我比较无脑的记住了网上找的一个结论0出现的次数为n-4,1出现的次数为2.2出现的次数为1。n-4出现的次数为1.如果数列中无这四个数,则无解。 阅读全文
posted @ 2012-09-28 11:20 ZimZz 阅读(799) 评论(2) 推荐(1) 编辑
PHP 查找随即数组中的最小的k个数
摘要:1 <?php 2 #查找数组中最小的k个数 3 4 function swap(&$arr, $i, $j) { 5 $temp = $arr[$i]; 6 $arr[$i] = $arr[$j]; 7 $arr[$j] = $temp; 8 } 9 10 #第一种方法,使用选择排序直到排好序的部分元素个数为k,效率为O(kn) 11 function select_sort_k($arr, $k) { 12 if ($k >= count($arr)) {... 阅读全文
posted @ 2012-09-28 00:26 ZimZz 阅读(1234) 评论(0) 推荐(0) 编辑
PHP 输入一棵二叉树和一个数字n,要求找出路径和为n的所有路径
摘要:1 <?php 2 #输入一棵二叉树和一个数字n,要求找出路径和为n的所有路径 3 4 class Node { 5 public $data = null; 6 public $parent = null; 7 public $left = null; 8 public $right = null; 9 }10 11 #使用数组构造完全二叉树12 function build_cbtree($a) {13 $root = new Node();14 $r... 阅读全文
posted @ 2012-09-27 19:18 ZimZz 阅读(502) 评论(0) 推荐(0) 编辑
PHP 将数组转换为完全二叉树
摘要:1 <?php 2 class Node { 3 public $data = null; 4 public $parent = null; 5 public $left = null; 6 public $right = null; 7 } 8 9 #使用数组构造完全二叉树10 function build_cbtree($a) {11 $root = new Node();12 $root->data = $a[0];13 14 for ($i... 阅读全文
posted @ 2012-09-27 19:10 ZimZz 阅读(1974) 评论(0) 推荐(0) 编辑
PHP 定义栈结构,实现min函数,获取栈最小元素,要求时间复杂度为O(1)
摘要:1 <?php 2 #设计一个栈的数据结构,要求增加一个min函数,可以取出栈的最小元素 3 #要求push,pop,min的时间复杂度都是O(1) 4 #解题思路:在每个栈元素增加一个min变量,这个变量存储次元素及其之前所有元素的最小值 5 6 #栈节点 7 class Node { 8 public $data = null; 9 public $min = null;10 }11 12 class Min_Stack {13 private $data = array();14 ... 阅读全文
posted @ 2012-09-27 11:24 ZimZz 阅读(784) 评论(0) 推荐(0) 编辑
PHP 将二叉查找树转换为双向链表,要求不能创建新节点,只能调节节点指针
摘要:<?php #将二叉查找树转换为双向链表,要求不能创建新节点,只能调节节点指针 #解题思路是从树的底层开始,调整每个节点的左右子树,将左子树的最大节点与根节点相连,将又子树的最小节点与根节点相连 #我们把节点的left当做链表的pre指针,right当做链表的next指针 #直到所有子树以及根节点转换完成 #树节点 class Node { public $data = null; public $parent = null; public $left = null; public $right... 阅读全文
posted @ 2012-09-26 23:19 ZimZz 阅读(566) 评论(0) 推荐(0) 编辑
一条SQL查询访问记录表(visit_log)中某个类目(catalog_id)的访问量(visit)排前两名的记录行
摘要:原来看过一篇文章,如下----------------------------------------------------------------------------------------------------------------sql server查询每门课程的前两名的学生编号,课程编号,成绩并排序数据结构介绍:成绩表(编号,学号,科目编号,成绩)SQL基础了解:select * from 成绩表对于Sql Server它查询的过程是逐条查询的,也就是一条一条记录进行查询的;那么我们可以先思考下,当它查“成绩表”时,第一条成功后才查询第二条的;假设查特定的一门科目的最高分值前 阅读全文
posted @ 2012-09-26 01:26 ZimZz 阅读(1819) 评论(0) 推荐(0) 编辑
PHP 两个等长有序数组求合并后的中位数
摘要:算法思路:每次取两个数组的中位数进行比较,如图我们假定取的中位数是下中位数,即每次取中位数坐标时使用floor取出,当数组长度是奇数时,取得是正中间的元素,是偶数时取得就是下中位数1. a[n/2] == b[n/2],可知中位数即为a[n/2],返回即可2. a[n/2] < b[n/2],设a,b数组蓝色红色部分元素分别为a[b],a[r],b[b],b[r],可知 a[b] <= a[n/2] < b[n/2] <= b[b]于是有 a[b] <= a[r], a[b] < b[b] (数组元素可能存在重复)b[b] >= b[r] , b[b] 阅读全文
posted @ 2012-09-26 01:22 ZimZz 阅读(1960) 评论(0) 推荐(0) 编辑
利用 p, 1-p 随机数发生器知道等概率发生器
摘要:已有一个随机数发生器,生成0的概率为p,生成1的概率为1-p,求如何利用这个随机数发生器制作一个生成1~n的概率都是 1/n 的发生器制作 1 2 发生概率都是 1 / 2 的发生器,连续发生2次,则发生00,11的概率为p*p,(1-p)(1-p),发生10,01的概率都为p(1-p),在发生10时返回1,发生01时返回2,则发生1,2的概率相等制作 1 2 3 发生概率都是 1 / 3的发生器,连续发生3次,则发生001,010,100的概率都为p*p*(1-P),或者是110,101,011概率都为p*(1-p)*(1-p),则用001,010,100分别对应1,2,3返回,即可使得发生 阅读全文
posted @ 2012-09-25 01:03 ZimZz 阅读(3115) 评论(0) 推荐(2) 编辑
PHP 二叉树的深度优先与广度优先遍历
摘要:1 <?php 2 #二叉树的广度优先遍历 3 #使用一个队列实现 4 5 class Node { 6 public $data = null; 7 public $left = null; 8 public $right = null; 9 }10 11 #@param $btree 二叉树根节点12 function breadth_first_traverse($btree) {13 $traverse_data = array();14 ... 阅读全文
posted @ 2012-09-24 23:41 ZimZz 阅读(4361) 评论(0) 推荐(0) 编辑
PHP 查找有序数组中和为n的数对
摘要:1 <?php 2 #查找有序数组中和为n的数对 3 #思路是从数组两边开始找,当a[h] + a[t] == n,返回数对 4 #当a[h] + a[t] < n, h++ 5 #当a[h] + a[t] > n, t-- 6 7 function search_n($a, $n) { 8 $h = 0; 9 $t = count($a) - 1;10 $pairs = array();11 12 while ($h < $t) {13 $sum = $a[$h... 阅读全文
posted @ 2012-09-24 23:12 ZimZz 阅读(359) 评论(0) 推荐(0) 编辑
PHP 查找一个在数组中出现次数超过一半的数,时间复杂度O(n),空间复杂度O(1)
摘要:1 <?php 2 #查找一个在数组中出现次数超过一半的数,时间复杂度O(n),空间复杂度O(1) 3 4 #使用b存储数组中某个数,c存储其出现次数 5 #遍历数组,如果b == a[i],则 c++; 6 #如果b != a[i], c == 0, 则 b = a[i], c = 1; 7 #如果b != a[i], c != 0, 则 c--; 8 #易知,如果一个数出现次数超过了一半,则无论其c怎么减,也不可能减到0,并被替换掉 9 #所以数组遍历完以后,b就是出现超过一半的数 10 function searc... 阅读全文
posted @ 2012-09-24 22:11 ZimZz 阅读(646) 评论(0) 推荐(0) 编辑
PHP 短连接生成
摘要:1 <?php 2 #短连接生成算法 3 4 class Short_Url { 5 #字符表 6 public static $charset = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; 7 8 public static function short($url) { 9 $key = "alexis";10 $urlhash = md5($key . $url);11 ... 阅读全文
posted @ 2012-09-24 21:23 ZimZz 阅读(11849) 评论(0) 推荐(1) 编辑
PHP 求最大递增子序列长度
摘要:1 <?php 2 #最大递增子序列的查找 3 function max_subincseq($a) { 4 $len = count($a); 5 $lis = array(); #lis数组用于存储当前最长子序列长度,lis[i]表示以a[i]结尾的最长递增子序列长度 6 $lis[0] = 1; 7 $max_seqlen = 1; 8 9 for ($i = 1; $i < $len; $i++) {10 $lis[$i] = 1;11 f... 阅读全文
posted @ 2012-09-24 00:41 ZimZz 阅读(477) 评论(0) 推荐(0) 编辑
洗牌算法
摘要: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 ... 阅读全文
posted @ 2012-09-22 23:18 ZimZz 阅读(286) 评论(0) 推荐(0) 编辑
PHP 二叉查找树
摘要:二叉查找树:简单点说就是颗做孩子小,右孩子大的树说几个关键点最小值:总是树的最左节点的key最大值:总是树的最右节点的key前趋:按照中序遍历的顺序,遍历输出时当前节点的前一个节点 如果当前节点有左子节点,前驱就是当前节点的左边的最右节点,也可以认为是以当前节点的左孩子为根的树的最大值 如果当前节点没有左子节点,前驱就是找到一个父节点,使得当前节点位于该父节点的右边,不明白的看代码后继:按照中序遍历的顺序,遍历输出时当前节点的后一个节点 如果当前节点有右子节点,后继就是当前节点的右边的最左节点,也可以认为是以当前节点的右孩子为根的树的最小值 如果当前节点没有柚子节点,后... 阅读全文
posted @ 2012-09-19 00:08 ZimZz 阅读(1112) 评论(0) 推荐(0) 编辑
散列表小蛋B
摘要:散列表的意义直接寻址表需要申请全域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开 阅读全文
posted @ 2012-09-18 02:32 ZimZz 阅读(327) 评论(0) 推荐(0) 编辑
PHP 带哨兵双向队列
摘要: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... 阅读全文
posted @ 2012-09-17 22:56 ZimZz 阅读(472) 评论(0) 推荐(0) 编辑
PHP 查找数组第i小元素
摘要: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)... 阅读全文
posted @ 2012-09-17 01:04 ZimZz 阅读(602) 评论(0) 推荐(0) 编辑
PHP 基数排序(计数排序实现)
摘要: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 ... 阅读全文
posted @ 2012-09-16 23:31 ZimZz 阅读(1227) 评论(0) 推荐(0) 编辑
12小球称重问题
摘要:有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 阅读全文
posted @ 2012-09-16 02:10 ZimZz 阅读(3408) 评论(1) 推荐(0) 编辑
PHP 优先队列的实现
摘要:优先队列其实就是一个最大堆,主要是对最大堆的操作上的一些调整 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... 阅读全文
posted @ 2012-09-16 00:18 ZimZz 阅读(1693) 评论(0) 推荐(0) 编辑
PHP 二进制数相加
摘要: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... 阅读全文
posted @ 2012-09-12 04:48 ZimZz 阅读(1622) 评论(0) 推荐(0) 编辑
使用Git/Github搭建协同开发环境
摘要:协同开发一般有以下几种1.使用本地搭建git服务器2.使用github作为中心服务器,这里协同开发的方式又分以下集中1)fork别人的项目,然后pull request,等项目所有人同意你的修改以后merge branch2)让项目管理者将你加为collaborator,最为项目开发者之一,这种情况你clone项目下来以后,可以不经过管理者的批准直接push项目3)简历organization,这玩意要钱,据说可以给开发者分组,分配不同的权限,没试过下面来说这些开发方法的实现方式1.在本地搭建Git服务器,一下内容直接截取自《Pro Git》2.使用Github作为仓库的方法请自己上githu 阅读全文
posted @ 2012-09-05 15:34 ZimZz 阅读(7843) 评论(1) 推荐(1) 编辑

点击右上角即可分享
微信分享提示