摘要: 归并排序比较直观,设数组A被分为两部分A1和A2,并且A1和A2都是排好序的。那么每次比较A1和A2的头两个元素,把最大的(最小的)取出来,当A1或者A2中没有元素可取的时候,排序也就结束了。对于A1和A2的排序采用同样的方法。如果A1或者A2只含一个元素,则已经排好了序。复杂度:每次采用二分的办法划分数组,则T(n) = 2T(n/2) + n = nlog(n).归并排序的最好最坏复杂度均为 nlog(n). 阅读全文
posted @ 2011-10-05 20:59 哈哈开心 阅读(202) 评论(0) 推荐(0)
摘要: 快速排序是一个分治过程:对于数组A[p….r]选取A中的一个元素A(q),按照大小将A分成两部分 A[p…q-1] 和 A[q….r]其中 A[p…q-1] 中所有的元素都小于A(q),而 A[q….r]中所有元素都大于 A(q).对于划分后的数组依然采用同样的方法分裂。注意分裂后的数组可以为空,如此进行下去直到分裂后的元素不超过一个,这将所有的小数组合并在一起就是排好序的。递归算法如下:quicksort(A,p,r)if p<rthen q=partition(A,p,r)quicksort(A,p,q-1)quicksort(A,q,r)算法的关键是对数组的分裂,下面用图示显示分裂 阅读全文
posted @ 2011-10-05 00:01 哈哈开心 阅读(882) 评论(0) 推荐(0)
摘要: 定义堆:堆是一棵完全二叉树,完全二叉树是指树的每一层节点都被填满,除了最后一层,最后一层 节点也要要求从最左边开始连续的排。 通常用一个数组存储堆:如下图所示 可见用数组存储堆就是按照层次遍历的顺序将堆中各个元素存入数组,下面计算堆中元素在数组中的指标位置。 假设堆中元素A位于堆的第 i 层 第 j 列,堆的根节点几位第 0 层,则可计算 A 在数组的位置(从1开始)为 t_p=\sum_{k=... 阅读全文
posted @ 2011-10-04 22:25 哈哈开心 阅读(501) 评论(0) 推荐(0)
摘要: 下面用一个例子来测试AVL树的平衡性 随机的反复插入和删除树中的节点,如代码所示:#include <iostream>#include "AVL.h"#include "IntClass.h"#include <time.h>#include <stdlib.h> #include "StringClass.h"using namespace std;int main(){BSTree bstr... 阅读全文
posted @ 2011-10-04 20:43 哈哈开心 阅读(777) 评论(0) 推荐(1)
摘要: 下面直接给出AVL树的实现代码,主要是基于前面的二叉查找树的基类实现方法的代码。 这里是直接修改原来的代码的,后面将会把它更新为继承的方式。 BinaryTreeNode.h 仅加入了一个balance平衡因子的数据成员和它的get,set方法//此类为AVL查找树的树节点类 //定义的关键子,值,父节点和儿子节点 #ifndef BINARY_TREE_NODE_H#define BINARY... 阅读全文
posted @ 2011-10-04 16:05 哈哈开心 阅读(1384) 评论(0) 推荐(1)
摘要: 定义:一棵空二叉树是AVL树,如果T是非空二叉树,TL和TR分别是其左子树和右子树,则当且仅当TL和TR都为AVL树且|HL-HR|<=1时,T是AVL树。由定义知道一个AVL树的任何节点的左右子树的高度之差不超过1,这是AVL树最基本的特征。AVL树的高度:(固定节点数计算最大高度)记N_h为一棵高度为h的AVL树具有的最小节点数,则最坏情况是它的左右子树的高度不等,一个是N_(h-1)和N_(h-2),从而得到N_h=N_(h-1)+N_(h-2)+1 N_0=0,N_1=1这类似于Fibonacci数列:F_n=F_(n-1)+F_(n-2),(F_0=0,F_1=1)而F_h=( 阅读全文
posted @ 2011-10-04 15:52 哈哈开心 阅读(10402) 评论(1) 推荐(2)
摘要: cd ~/.gftp编辑gftprc文件,在remote_charsets=后面加入gb2312,utf-8 阅读全文
posted @ 2011-10-03 02:07 哈哈开心 阅读(298) 评论(0) 推荐(0)
摘要: XP 和 Ubuntu 9.10 双系统,当重装XP后恢复grub方法1.进入终端 sudo dd if=/dev/sda of=/home/xiaoch05/mbr bs=512 count=1拷贝mbr文件至C盘根目录2.打开C:\boot.ini,加入新行C:\mbr="Ubuntu 9.10"这是在可以提前进入ubuntu系统备份文件的情况下,如果在重装系统前忘了备份则要采取另一个办法就是从ubuntu安装光盘启动:(1).从光盘启动进入U,使用命令 sudo fdisk -l 确定Ubuntu系统所在分区的位置 /dev/sdaX(2).sudo -i 获取roo 阅读全文
posted @ 2011-10-03 02:06 哈哈开心 阅读(213) 评论(0) 推荐(0)
摘要: 1、将移动硬盘格式化成Fat32,设置为活动分区2、拷贝系统文件至移动硬盘,是将iso文件内容拷贝,而不是iso文件3、用命令 X:\boot\bootsect /nt60 X:将设置硬盘的启动分区4、从USB启动即可 阅读全文
posted @ 2011-10-03 02:05 哈哈开心 阅读(236) 评论(0) 推荐(0)
摘要: 一种用DOS命令的方法备份和恢复数据库:假设现在有数据库 sqlDB, 用户名是 root 密码是 111111一、备份:1.cmd 进入命令行2.输入命令 mysqldump --default-character-set=utf8 -u root -p111111 --opt sqlDB>E:\db_back.sql注意后面没有分号则将数据库备份到了 E:\下面的db_back.sql文件中其中的utf8属性是防止中文乱码二、恢复1.删除已有的数据库2.新建数据库 create database sqlDB;3.使用数据库 use sqlDB;4.恢复数据库 source E:\db 阅读全文
posted @ 2011-10-03 02:02 哈哈开心 阅读(180) 评论(0) 推荐(0)