算法导论
youdianluanluan
这个作者很懒,什么都没留下…
展开
-
算法导论5.4-2
假设将球投入到b个盒子里。每一次投掷都是独立的,并且每个球落入任何盒子的机会都相等。在至少有一个盒子包含两个球之前,期望的投球次数是多少?Ai:前i-1次投球均落入空盒子中Bi:第i次投球落入已经有球的盒子中Pi(i次投球后有盒子包含2个球)=P(AiBi)=P(Ai)*P(Bi)=1(1-1/b)(1-2/b)...(1-(i-2)/b)*(i-1)/b X=∑i*Pi,i=原创 2011-11-24 10:12:23 · 1416 阅读 · 0 评论 -
算法导论 习题10.4-5 二叉树的遍历(非递归,O(1)存储)
看了别人的解答,自己整理的成果。毫无疑问,这个题目需在有指向父节点的指针存在的情况下才能解决。为了遍历整棵树,我们得保存结点之间的联系才能进行跳转,访问某个子结点时,需要考虑的因素有:它有可能是某个结点的左孩子结点,也有可能是其右孩子结点;如果这个结点是在树(包括子树)的左部,我们如何自底向上的找到根结点以访问树的右部,同时又访问了其后代结点;结点的关键值输出放在什么位置保证只原创 2012-02-27 20:56:21 · 2263 阅读 · 4 评论 -
求数组的子数组和最大值
用Java实现的,有兴趣的自己瞅瞅吧..public class main { /** * @param args */ public static int MaxSubArraySum(int[] array,int length) { if(length == 0) return 0; int sum = Integer.MIN_VALUE, cur原创 2011-12-19 17:06:07 · 445 阅读 · 0 评论 -
堆(完全二叉树)的性质
下面所讨论的堆都是基于完成二叉树的,并且根结点的序号从1开始,一直到n。叶子结点的高度为0,其父结点的高度为1,依此向上对每一层的结点的高度进行计算。编号为i的结点:parent(i)=floor(i/2); left(i)=2i; right(i)=2i+1;堆的高度为floor(lgn);叶子结点的的下标是floor(n/2)+1,floor(n/2)+2,...,n;至多有flo原创 2011-12-09 09:13:28 · 3388 阅读 · 0 评论 -
筛选法求素数
先证明一个结论:只要一个数n不能被所有的从2到(n的开方)之间的素数整除,那它就一定是质数。假如n是合数,那么n肯定能表示成x*y,1不失一般性,如果x>=(n的开方),则有yn的开方)因此如果n是合数,就能在2~(n的开方)范围内找到它的一个因子即一个数是否是素数是查找范围不大于这个数的开方因此,如果n不能被所有的从2到(n的开方)之间的素数整除,(因为n的因子或者为素数,或原创 2011-12-05 21:33:28 · 1072 阅读 · 0 评论 -
算法导论6-2d叉堆分析
d叉堆其实就是每个非叶结点有d个子女(1)结点i的父亲结点编码:floor{(i − 2)/d + 1} 结点i的第j个孩子结点:d(i-1)+j+1(2)含n个元素的d叉堆的高度:floor{logd[n(d-1)]}(3)Extract_Max同样是返回第一个元素,并通过Max_Heapify保持最大堆性质,不同的是在Max_Heapify里可能需要将待调整的元素与其原创 2011-11-30 13:20:43 · 1532 阅读 · 0 评论 -
算法导论6.4-5堆排序最佳运行时间
当数组已经是按递增序列排序时是最佳情况中的一种。这时调用Max_Heap的运行时间是O(1),Build_Max_Heap运行时间是O(n)。这样看来堆排序的最佳时间好像是O(n)+(n-1)*O(1)=O(n)。其实不然,在(n-1)次Max_Heap的调用中,除了第一次调用Max_Heap的时间是O(1),之后每次调用之前都会用某个较小的元素与第一个元素(此时待排序的元素中最大原创 2011-11-29 11:26:28 · 1180 阅读 · 0 评论 -
算法导论5.4-6
将n个球投入n个盒子中,每一次投掷都是独立的,并且每个球落入任何盒子的机会都相等。(1)空盒子个数的期望(2)只包含一个球的盒子个数的期望 一开始想到的就是蛮力去解决,看到人家利用指示器变量给的解决方法不得不感叹佩服...(1)指示器变量Ai表示编号为i的盒子是空盒子则X=∑Ai,i=1,2,...,n所以E(X)=E(∑Ai)=∑E(Ai)将n次实验看成n次伯原创 2011-11-24 18:07:15 · 692 阅读 · 0 评论 -
随机算法和概率分析的区别
概率分析:是将所有可能输入的运行时间作平均,对于给定的输入,其返回结果是固定的。随机算法:对输入进行均匀的随机排列,每次运行算法,执行结果依赖于随机的选择,造成每次的运行结果可能不一样。随机算法必须保证对输入的重排能够产生均匀的随机排列,每一种排列的可能性与初始输入的分布概率一致。下一步学习学习随机算法的应用...原创 2011-11-25 11:00:34 · 604 阅读 · 0 评论 -
4行代码将字符串转为长整数
long sign = 0,result = 0;p[0]=='-'?sign=-1:p[0]=='+'?sign=1:return ERROR;for(int i = sign*sign; p[i]>='0'&&p[i]return result*sign;第3行代码实际上应该是2行代码,想不到可以继续优化的地方了实现这段代码时,突然意识到好多基础知识都忘光了比如:逗原创 2012-09-11 10:48:23 · 1069 阅读 · 0 评论