c++/c
文章平均质量分 72
big_confidence
我就想往大数据上面发展
展开
-
红黑树的创建
红黑树是一种二叉查找树。所谓二叉查找树:首先是一个二叉树;其次每一个节点的左节点值是小于此节点的值,每一个右节点的值大于此节点的值。红黑树也是一种平衡二叉查招树,平衡性是指左右子树的节点个数相差不大,且树的深度一般保持在log(n)。n为树中节点数。红黑树的定义:1.节点只有红黑两种节点2.根节点必须为黑节点3.红节点的左右子节点都为黑节点4.每个节点到其子树叶子节点的原创 2013-06-11 21:23:06 · 1141 阅读 · 0 评论 -
红黑树之树节点的删除
上一个笔记记录的是红黑树的建立,即红黑树的插入。今天来看看红黑树节点删除!首先,我们第一个问到的问题就是:删除一个节点应该怎样删除?看下面的二叉查找树:当我们想删除2这个节点时,会发现如果就简单的给删除,不知道是将1给连接到11后面还是将7连接到11的后面。当然可以将7连接上去,然后将1的做孩子连接到5节点,但是当1后面有左孩子时,我们是不是又要去找1为根的子树的最大值呢?而且将5连接原创 2013-06-12 21:45:15 · 716 阅读 · 0 评论 -
算法导论--在无序数组中选择第k小个数
从一个无序的整型数组中选出第k小的数,如k=1为最小数,k=n为最大数。这里数组可以是有重复的值!下面是自己写的一个函数,记在此处来记忆我留下的痕迹! //选择无序数组中第k小的数#include using namespace std ;bool failed = false ;//这里只考虑数组是int型的int findnumber(int *array,in原创 2013-06-05 21:37:16 · 655 阅读 · 0 评论 -
最坏情况下做O(n)选择
看来编程技术还有待提高,尤其是一个思维模式要待提高。前一个选择,即随机选择一个数作为分割点可能会造成最坏情况也为O(n*n),当时的分析是在期望情况下以线性时间做选择。本算法是在最坏情况下都是线性时间做选择。主要的思想为:1.将长度为n的数组按每5个元素做一组,当然最后可能有一组数据是没有5个元素的。2.将1得到的每组数据进行插入排序,从而找到每组中的中位数。3.在2得到的每组中位原创 2013-06-06 22:36:13 · 738 阅读 · 0 评论 -
算法导论中的一道题
设X[1,...,n]和Y[1,...,n]为两个数组,每个都包含n个已排好序的数。给出一个求数组X和Y中所有2n个元素的中位数的、O(lgn)时间的算法。1.首先找到X和Y的中位数xm,ym,O(1)的时间。2.因此可以用xm,ym将X,Y进行等分:X[1,2,...,n/2-1] ,xm,X[n/2+1,n/2+2,...,n] 和Y[1,2,...,n/2-1] ,ym,Y[n/2+原创 2013-06-07 20:22:06 · 614 阅读 · 0 评论 -
一道面试题(c/c++)
下列程序会在哪一行崩溃?Struct S{ int i ;int *p;};main(){S s;int *p = &s.i;p[0] =4;p[1] =3;s.p=p;s.p[1] =1;s.p[0] = 2 ; }这个题真有意思,直接将硬件与软件(程序的解释)分开。第一步:S s;即在内存中开辟8个字节的内原创 2013-08-31 10:52:46 · 846 阅读 · 0 评论