上一页 1 ··· 7 8 9 10 11 12 13 14 15 ··· 18 下一页

2012年4月9日

B树、B-树、B+树、B*树

摘要: B树即二叉搜索树:1.所有非叶子结点至多拥有两个儿子(Left和Right);2.所有结点存储一个关键字;3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树;如:B树的搜索,从根结点开始,如果查询的关键字与结点的关键字相等,那么就命中;否则,如果查询关键字比结点关键字小,就进入左儿子;如果比结点关键字大,就进入右儿子;如果左儿子或右儿子的指针为空,则报告找不到相应的关键字;如果B树的所有非叶子结点的左右子树的结点数目均保持差不多(平衡),那么B树的搜索性能逼近二分查找;但它比连续内存空间的二分查找的优点是,改变B树结构(插入与删除结点)不需要移动大段的内存数据,甚至通常 阅读全文

posted @ 2012-04-09 19:49 linzuxin 阅读(153) 评论(0) 推荐(0) 编辑

2012年4月7日

memcpy() 和 memmove() 有什么区别?

摘要: 如果源和目的参数有重叠, memmove()提供有保证的行为。而memcpy() 则不能提供这样的保证, 因此可以实现得更加有效率。如果有疑问, 最好使用memmove()。参考资料: [K&R2, Sec. B3 p. 250]; [ISO, Sec. 7.11.2.1, Sec. 7.11.2.2]; [Rationale, Sec. 4.11.2]; [H&S, Sec. 14.3 pp. 341-2]; [PCS, Sec. 11 pp. 165-6]。参考linux 内核实现:memcpy:/***memcpy-Copyoneareaofmemorytoanother 阅读全文

posted @ 2012-04-07 10:37 linzuxin 阅读(280) 评论(0) 推荐(0) 编辑

2012年4月6日

kruskal算法

摘要: 今天数据结构课讲了最小生成树的Kruskal算法和Prim算法,不过都只是概念,可能是怕他们听不懂吧,反正算法实现一概不讲...囧下午抱着《算法导论》跑去图书馆看Kruskal算法,发现《算法导论》真的是牛XXXX的书啊,看完之后豁然开朗,而且惊讶地发现Kruskal算法居然用到了前两天研究的并查集,爽歪歪了...Kruskal比较适用于稀疏图,是一种贪心算法:为使生成树上边的权值和最小,则应使生成树中每一条边的权值尽可能地小。具体做法:找出森林中连接任意两棵树的所有边中,具有最小权值的边,如果将它加入生成树中不产生回路,则它就是生成树中的一条边。这里的关键就是如何判断"将它加入生成 阅读全文

posted @ 2012-04-06 23:03 linzuxin 阅读(194) 评论(0) 推荐(0) 编辑

Prim算法

摘要: 前几天研究Kruskal算法,直接上手就是并查集优化,朴素算法压根就没写。这两天看Prim算法也想略过朴素版O(n^2)直接用二叉堆优化,可是发现不看朴素算法根本写不出来...囧,看来还是不能忽略基础...草稿纸上画图模拟推演了半天,终于搞清楚Prim算法朴素版的C语言实现,拿出那天学Kruskal的小题目测试了一下,通过。代码的注释我写得很详细,方便理解,有几点需要说明一下。1、2个for循环都是从2开始的,因为一般我们默认开始就把第一个节点加入生成树,因此之后不需要再次寻找它。2、lowcost[i]记录的是以节点i为终点的最小边权值。初始化时因为默认把第一个节点加入生成树,因此lowco 阅读全文

posted @ 2012-04-06 21:51 linzuxin 阅读(236) 评论(0) 推荐(0) 编辑

并查集(不相交集合)

摘要: 不相交集合有两种不同的实现,链表表示和带路径压缩的按秩合并策略。看到大家都比较喜欢用带路径压缩的按秩合并策略,那么我只认真研究了一下带路径压缩的按秩合并策略,暂时不对链表表示作讨论。 顾名思义,并查集的作用不就的“并”和“查”嘛。并查集的功能描述为:合并两个集合;将一元素并入另一集体;判断两个元素是否属于同一个集合。 通过引用两种启发式策略(按秩合并和路径压缩)就可以达到渐进意义上最快的不相交集合数据结构。1、make_set(x) 把每一个元素初始化为一个集合建立一个新的集合,其中集合只有唯一的一个元素x2、union_set(x, y)按秩合并x,y所在的集合3、find_set(x).. 阅读全文

posted @ 2012-04-06 21:44 linzuxin 阅读(231) 评论(0) 推荐(0) 编辑

2012年4月5日

二叉排序树

摘要: 1.定义二叉排序树(Binary Search Tree)又称二叉搜索(查找)树,其定义如下: (1)若它的左子树非空,则左子树上所有结点的权值都比根结点的权值小; (2)若它的右子数非空,则右子树上所有结点的权值都比根结点的权值大; (3)左、右子树本身又是一棵二叉排序树。以上既是二叉排序树的定义,同时也是它的性质。从定义可以看出,二叉排序树的定义是一个递归的定义。对于一棵二叉排序树的中序遍历则是一个递增有序序列。2.二叉排序树的插入Insert 根据二叉排序树的递归定义,进行插入操作的时候可以用递归实现,其插入过程如下: (1)如果二叉排序树为空,则创建一个关键字为key的结点,并将其作为 阅读全文

posted @ 2012-04-05 23:48 linzuxin 阅读(204) 评论(0) 推荐(0) 编辑

堆排序

摘要: 堆排序 堆排序是利用堆的性质进行的一种选择排序。下面先讨论一下堆。1.堆堆实际上是一棵完全二叉树,其任何一非叶节点满足性质: Key[i]<=key[2i+1]&&Key[i]<=key[2i+2]或者Key[i]>=Key[2i+1]&&key>=key[2i+2] 即任何一非叶节点的关键字不大于或者不小于其左右孩子节点的关键字。 堆分为大顶堆和小顶堆,满足Key[i]>=Key[2i+1]&&key>=key[2i+2]称为大顶堆,满足 Key[i]<=key[2i+1]&&Key[i 阅读全文

posted @ 2012-04-05 23:39 linzuxin 阅读(154) 评论(0) 推荐(0) 编辑

mysql字段按照拼音排序

摘要: 我们的MySQL使用latin1的默认字符集,也就是说,对汉字字段直接使用GBK内码的编码进行存储,当需要对一些有汉字的字段进行拼音排序时(特别涉及到类似于名字这样的字段时),默认无法通过order by关键字正确排序。经过网上查找,网上的办法大多是针对使用utf8字符集的数据库,主要的方法有:1)直接转换字段为gbk,比如:SELECT * FROM table ORDER BY CONVERT( chinese_field USING gbk ) ;或者干脆将相应字段改为gbk字符集。 阅读全文

posted @ 2012-04-05 21:38 linzuxin 阅读(180) 评论(0) 推荐(0) 编辑

Mysql5.5.22源码编译安装

摘要: mysql 最新的版本都需要cmake编译安装,估计以后的版本也会采用这种方式,所以特地记录一下安装步骤及过程,以供参考。注意:此安装是默认centos下已经安装了最新工具包,比如GNU make,GCC,Perl,libncurses5-dev,如果在编译安装过程中发现有缺失的工具包,先yum install单独下载安装再继续即可。以下安装中涉及的几点需要提前说明的问题:1. 所有下载的文件将保存在 /usr/local/src/ 目录下2. mysql 将以mysql用户运行,而且将加入 service 开机自动运行3. mysql 将被安装在 /usr/local/mysql/ 目录下4 阅读全文

posted @ 2012-04-05 21:03 linzuxin 阅读(219) 评论(0) 推荐(0) 编辑

2012年4月4日

[置顶] reinterpret_cast,const_cast,static_cast,dynamic_cast 总结

摘要: #include<iostream.h>int main(void){//reinterpret_cast//将一个类型指针转换为另一个类型指针,这种在转换不修改指针变量值数据存放格式//只需在编译时重新解释指针的类型,他可以将指针转化为一个整型数但不能用于非指针的转换double d=9.3;double* pd = &d;int* pi = reinterpret_cast<int *> (pd);class A{};class B{};A* pa = new A;B* pb=reinterpret_cast<B*>(pa); //将pa 转为B 阅读全文

posted @ 2012-04-04 16:59 linzuxin 阅读(153) 评论(0) 推荐(0) 编辑

上一页 1 ··· 7 8 9 10 11 12 13 14 15 ··· 18 下一页

导航