08 2012 档案
MySQL数据库索引简记
摘要:1.B-Tree索引例子CREATE TABLE `test`.`student` ( `name` VARCHAR(45) NULL , `dob` DATE NULL , `desc` VARCHAR(45) NULL , INDEX `btree` USING BTREE (`name` ASC, `dob` ASC, `desc` ASC) )ENGINE = MyISAMDEFAULT CHARACTER SET = utf8COLLATE = utf8_general_ci;BTree索引起作用的情况1)匹配全名:例如,可以帮助查找 name = "Jack"
阅读全文
PHP 树的先序,中序,后序遍历
摘要:1 <?php 2 #树节点 3 class Node { 4 public $lc = null; #左孩子 5 public $rc = null; #右孩子 6 public $val; 7 8 public function __construct($val) { 9 $this->val = $val;10 }11 }12 13 #先序遍历14 function preTraverse(Node $ro...
阅读全文
PHP 二分查找
摘要:二分查找需要数组有序,效率为O(logn) 1 <?php 2 #二分查找 3 function binarySearch(Array $arr, $target) { 4 $low = 0; 5 $high = count($arr) - 1; 6 7 while($low <= $high) { 8 $mid = floor(($low + $high) / 2); 9 #找到元素10 if($arr[$mid] == $target) ...
阅读全文
PHP 合并排序
摘要:合并排序是稳定排序,平均效率为O(nlogn),需要的辅助空间是O(n) 1 <?php 2 #归并排序 3 #@param $arr 待排序数组 4 #@param $from 排序的起始坐标 5 #@param $end 排序的结束坐标 6 function mergeSort(&$arr, $from, $end) { 7 #切分数组直到数组元素只剩下一个 8 if($from < $end) { 9 $mid = floor(($from + $end) ...
阅读全文
PHP 快速排序
摘要:快排平均效率O(nlogn),最好情况O(nlogn),最坏情况是当数组有序时,退化成O(n^2) 1 <?php 2 #快速排序 3 #@param $arr 待排序数组 4 #@param $start 排序的开始坐标 5 #@param $end 排序数组的结束坐标 6 function quickSort(Array &$arr, $start, $end) { 7 $low = $start; 8 $high = $end; 9 10 #同时移动low和high,...
阅读全文
PHP 堆排序
摘要:堆排序平均效率,最好效率,最坏效率均为O(nlogn) 1 <?php 2 #堆排序 3 function heapSort(&$arr) { 4 #初始化大顶堆 5 initHeap($arr, 0, count($arr) - 1); 6 7 #开始交换首尾节点,并每次减少一个末尾节点再调整堆,直到剩下一个元素 8 for($end = count($arr) - 1; $end > 0; $end--) { 9 $temp = $arr[0];10 ...
阅读全文
PHP 直接选择排序
摘要:直接选择排序平均效率,最好情况,最坏情况均为O(n^2) 1 <?php 2 #简单选择排序 3 function selectSort(Array $arr) { 4 $len = count($arr); 5 for($i = 0; $i < $len; $i++) { #一共进行$len轮查找 6 $minInx = $i; 7 for($j = $i; $j < $len; $j++) { #每轮从第$j个元素开始,找出一个最小的元素,并和第$j个元素交换位置 8 ...
阅读全文
JAVA本地程序使用FileSystemXmlApplicationContext读取application-datasorce.xml进行数据库操作
摘要:使用绝对路径读取,就绝对不会出错程序代码如下,这个类是BookDaoTest 1 String appContextPath = BookDaoTest.class.getClassLoader().getResource("").getPath() + "../"; 2 File file = new File(appContextPath); 3 String abPath = null; 4 try { 5 abPath = file.getCanonicalPath()...
阅读全文
MySQL 编码
摘要:编码的种类SHOW VBRIABLES LIKE '%character%';1) character_set_client : MySQL Server 假定client传输数据过来的时候的编码2) character_set_connection: Server收到SQL语句时,将其转换成的编码3) character_set_results: Server在返回数据给客户端时,会将数据转成这个编码4) character_set_system: 元数据编码(表名, 列名等)5) character_set_server, character_set_database, c
阅读全文
PHP 希尔排序
摘要:希尔排序平均时间复杂度O(n^1.3),最好情况O(n),最坏情况O(n^2) 1 <?php 2 #希尔排序 3 function shellSort(Array $arr) { 4 $k = initStep(count($arr)); 5 $step = pow(2, $k) - 1; 6 #根据步长进行多次插入排序,依次减少步长, 7 for(;$step >= 1; $step = pow(2, --$k) - 1) { 8 $arr = insertSort($arr, $ste...
阅读全文
PHP array_splice函数实现数组任意位置插入
摘要:定义和用法array_splice() 函数与 array_slice() 函数类似,选择数组中的一系列元素,但不返回,而是删除它们并用其它值代替。如果提供了第四个参数,则之前选中的那些元素将被第四个参数指定的数组取代。最后生成的数组将会返回。语法array_splice(array,offset,length,array)参数描述array必需。规定数组。offset必需。数值。如果 offset 为正,则从输入数组中该值指定的偏移量开始移除。如果 offset 为负,则从输入数组末尾倒数该值指定的偏移量开始移除。length可选。数值。如果省略该参数,则移除数组中从 offset 到 结尾
阅读全文
PHP 直接插入排序
摘要:一般直接插入排序的时间复杂度为O ( n^2 ) ,但是当数列基本有序时,如果按照有数列顺序排时,时间复杂度将改善到O( n ) 1 <?php 2 #指定部分数组元素全部向后移动一位 3 function move(Array $arr, $start = null, $end = null) { 4 if(!isset($start) || $start < 0) $start = 0; 5 if(!isset($end) || $end >= count($arr)) $end = count($arr) - 2; #最后只能选到倒数...
阅读全文
PHP查找数组中最大值与最小值
摘要:<?php function maxMin(Array $arr) { $cmpTime = 0; $count = count($arr); $big = $small = $arr[0]; for($i = 1; $i < $count; $i++) { $cmpTime++; if($big > $arr[$i]) { $cmpTime++; if($small > $arr[$i]) { ...
阅读全文
给定a、b两个文件,各存放50亿个url,每个url各占用64字节,内存限制是4G,如何找出a、b文件共同的url?
摘要:可以估计每个文件的大小为5G*64=300G,远大于4G。所以不可能将其完全加载到内存中处理。考虑采取分而治之的方法。遍历文件a,对每个url求取hash(url)%1000,然后根据所得值将url分别存储到1000个小文件(设为a0,a1,...a999)当中。这样每个小文件的大小约为300M。遍历文件b,采取和a相同的方法将url分别存储到1000个小文件(b0,b1....b999)中。这样处理后,所有可能相同的url都在对应的小文件(a0 vs b0, a1 vs b1....a999 vsb999)当中,不对应的小文件(比如a0 vs b99)不可能有相同的url。然后我们只要求出1
阅读全文
[转]给你一个单词a,如果通过交换单词中字母的顺序可以得到另外的单词b,那么定义b是a的兄弟单词。现在给你一个字典,用户输入一个单词,让你根据字典找出这个单词有多少个兄弟单词
摘要:一个单词如果交换其所含字母顺序,得到的单词称为兄弟单词,例如mary和army是兄弟单词,即所含字母是一样的,只是字母顺序不同,用户输入一个单词,要求在一个字典中找出该单词的所有兄弟单词,并输出。给出相应的数据结构及算法。要求时间和空间复杂度尽可能低目前思想:struct {char data;int n};根据数学定理:任何一个大于1的自然数N,都可以唯一分解成有限个质数的乘积 N=(P_1^a1)*(P_2^a2)......(P_n^an) , 这里P_1<P_2<...<P_n是质数,且唯一。例如a=2 b=3 c=5 d=7 e=11...f(abcd)=2*3*5
阅读全文
用最简单的方法判断一个LONG整形的数A是2^n(2的n次方)
摘要:如果一个数是2的n次方,则化成二进制数肯定是 1000...000 的形式,那么 假设这个数是x,则 x-1 肯定是 0111...111 的形式,位数比x少一位那么 x & (x-1) 则有1000...000 &0111...1110000...000所以当 x & (x-1) = 0时,说明x是2的n次方
阅读全文
设计一个复杂度为n的算法找到链表倒数第m个元素,最后一个元素假定是倒数第0个
摘要:使用两个指针,每次前进一个元素,第一个指针前进到第m+1个元素的时候,第二个指针开始前进,此时第二个指针指向第1个元素,当第一个指针前进到链表尾的时候,第二个指针指向的元素就是倒数第m个元素
阅读全文
判断链表是否有环,找链表中间节点,判断两个链表是否相交
摘要:判断是否有环和查找中间节点使用两个指针,p1每次前进1个节点,p2每次前进2个节点,如果链表有环,则最后两个指针指向的节点将会重合,若无环,则p2最后将走到链表尾,当p2走到链表尾时,p1指向的节点就是中间节点检测环的入口当p1p2重合以后,让p2回到表头,步长设为1重新开始走,当p1p2再次重合时,重合点即为环入口证明:如图表头到环入口长度为l1,环的长度为l2,环的入口为h点,p2p1第一次重合点为h'点,设hh'长度为l3,则有在第一次重合时p1走过的路程 = l1 + l3p2走过的路程 = l1 + l3 + n * l2 = 2 * (l1+l3)=> l2
阅读全文
关于正则的贪心匹配与换行符匹配
摘要:最近做一个问题,去除html中代码的JS脚本,代码如下 1 <?php 2 $text = <<<EOF 3 ilove you 4 <scrip></sss> 5 <script> ok </script> 6 kkyz <dd>m,dfd 7 <script> 8 sdfsdf 9 </script>10 <script> no </script>11 ook12 EOF;13 14 echo "orginal text: \n\n" .
阅读全文
[转]数据库查询的3个优化方法
摘要:在优化查询中,数据库应用(如MySQL)即意味着对工具的操作与使用。使用索引、使用EXPLAIN分析查询以及调整MySQL的内部配置可达到优化查询的目的。 任何一位数据库程序员都会有这样的体会:高通信量的数据库驱动程序中,一条糟糕的SQL查询语句可对整个应用程序的运行产生严重的影响,其不仅消耗掉更多的数据库时间,且它将对其他应用组件产生影响。 如同其它学科,优化查询性能很大程度上决定于开发者的直觉。幸运的是,像MySQL这样的数据库自带有一些协助工具。本文简要讨论诸多工具之三种:使用索引,使用EXPLAIN分析查询以及调整MySQL的内部配置。 #1: 使用索引 MySQL允许对数据库...
阅读全文
MySQL的数据类型
摘要:1.整数TINYINT: 8 bit 存储空间SMALLINT:16 bit 存储空间MEDIUMINT:24 bit 存储空间INT:32bit 存储空间BIGINT:64 bit 存储空间分为SIGNEN: 有符整数,可存储正数和负数,如 TINYINT SIGNED 表示的范围是 -127 ~ 128UNSIGNED: 无符整数,只能存储正数,但是表示的值是有符整数的两倍, 如 TINYINT UNSIGNED 表示的范围是 0 ~ 255有符整数和无符整数只有表示的值大小上的区别,存储空间和效率上都是一样的2.实数DECIMAL: 可表示比 BIGINT 还大的正数,保存时可以指定整数
阅读全文
MySQL命令速记
摘要:系统参数系列show table status where name = "film": 显示某个表的属性show status : 显示mysql状态show processlist : 显示mysql连接状态show index from user : 显示user表索引show profiles : 显示查询执行时间状况,使用前先设置参数 set profiling=1;show profile for query 1: 查看第一条sql的具体执行情况PAGER cat > /dev/null : 将输出转到垃圾黑洞TRUNCATE TABLE: 清空table
阅读全文
MySQL性能测试工具 mysqlslap
摘要:先看参数介绍FormatOption FileDescriptionIntroduced--auto-generate-sqlauto-generate-sqlGenerate SQL statements automatically when they are not supplied in files or using command options--auto-generate-sql-add-autoincrementauto-generate-sql-add-autoincrementAdd AUTO_INCREMENT column to automatically generat
阅读全文
PHP实现mb_substr函数
摘要:1 <?php 2 function myMbSubstr($str, $start, $length, $charset){ 3 $charsets["utf-8"] = $charsets["utf8"] = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/"; 4 $charsets["gb2312"] = "/[\x01-\x7f]|[\xb0-\xf7][\xa
阅读全文
PHP求两个数组的交集
摘要:1 <?php 2 $arr1 = array(1, 3, 5, 8, 9); 3 $arr2 = array(1, 3, 4, 7, 9); 4 $intersaction= array(); 5 foreach($arr1 as $val) { 6 if(in_array($val, $arr2)) $intersaction[] = $val; 7 } 8 9 var_dump($intersaction);10 ?>输出array(3) { [0]=> int(1) [1]=> int(3) [2]=> int...
阅读全文
三次握手与accept()函数
摘要:客户端发送SYN给服务器服务器发送SYN+ACK给客户端客户端发送ACK给服务器连接建立,调用accept()函数获取连接
阅读全文
PHP双向队列
摘要:1 <?php 2 # 双向队列 3 class Deque { 4 public $queue = array(); 5 6 public function frontAdd($obj) { 7 array_unshift($this->queue, $obj); 8 } 9 10 public function frontRemove() {11 return array_shift($this->queue);12 ...
阅读全文
PHP各种魔术方法测试
摘要:1 <?php 2 #自动加载方法,当new一个class时,若class未被引入,则会自动调用__autoload()方法 3 function __autoload($className) { 4 include $className . ".php"; 5 } 6 7 class Son { 8 private $name; 9 10 public function __construct($name) { 11 $this->name = $n...
阅读全文
PHP preg_match的简单使用,验证邮箱地址
摘要:1 <?php 2 function match_email($email) { 3 $pattern = "/\w+@(\w|\d)+\.\w{2,3}/i"; 4 preg_match($pattern, $email, $matches); 5 return $matches; 6 } 7 8 $email1 = "test@qq.com"; 9 $email2 = "test@163.com";10 $email3 = "163@qq163.com";11 $email4 = "...
阅读全文
PHP变参函数的实现
摘要:<?php function unspecifiedParamFunc() { $paramNum = func_num_args(); #获取参数个数 $params = func_get_args(); #获取参数值 var_dump($paramNum, $params); } unspecifiedParamFunc(array(1, "ok"), false, 100);?>输出:int(3) array(3) { [0]=> array(2) { [0]=> int(1) [1]=> s...
阅读全文
Linux下设置任意用户的Crontab定时任务
摘要:最近需要在服务器上部署定时任务,拿到了sudo密码,下面说下布置某用户定时任务的方法主要是用crontab命令来实现1.指定用户的crontab文件sudo touch/var/spool/cron/testusercrontab -u testuser /var/spool/cron/testuser2.编辑crontab文件首先指定编辑器,我这之前默认是用nano,表示不会用,改为了vimsudo select-editor然后加入定时任务crontab -e在文件中加入 0 23 * * * bash /home/testuser/test.sh请注意,这里一定要有权限执行该脚本,并且该
阅读全文