Algorithm
文章平均质量分 54
xiaocc2009
不做下一个谁,做最好的我
展开
-
算法导论 习题 5.4-1
<br />题:<br />一个房间里必须要有多少人,才能让某人和你生日相同的概率至少为1/2?必须要有多少人,才能让至少两个人生日为7月4日的概率大于1/2?<br /> <br />解:<br />1.假设一年有n(365)天,房间里面有x人(不算自己)<br />为求某人与自己生日相同,可求其反面,即房间里面没人跟自己生日相同,他们每个人生日可以在n天中选择除去我生日剩下的n-1天<br /> Pr{bi=r}= (n-1)/n;<br /> Pt = IIPr{bi} (i = 1,2,...x);原创 2011-05-31 12:57:00 · 1486 阅读 · 0 评论 -
算法导论 堆排序
堆的基本概念:堆是一个完全二叉树,用数组来存储这个结构的时候,A[1...length[A]]可以表示有效值,但heap_size[A]以外的值都不是属于堆的,可以视为无效值。 对于数组中下标为i的元素,根据二叉树的性质可以得到:其父节点下标为,P = n/2(下取整)左孩子: L = 2*i右孩子: R = 2*i + 1 最大堆:除了根节点外的每个节点i,原创 2011-06-03 15:50:00 · 514 阅读 · 0 评论 -
算法导论 习题 5.4-4
<br />题:<br />一个聚会需要邀请多少人,才能让其中很可能有3人的生日相同?<br /> <br />解:<br />设房间人数为m,一年有n天<br />1<= i <= m,1<= r <= n<br /> <br />Pr{bi=r} = 1/n;<br />Pr{bi=r and bj=r and bk=r} = Pr{bi=r} * Pr{bj=r} * Pr{bk=r} = 1/n^3;<br />Pr{bi=bj=bk} = ∑Pr{bi=r and bj=r and bk=r} (原创 2011-05-31 13:49:00 · 929 阅读 · 0 评论 -
算法导论 习题 6.5-8
题:请给出一个时间为O(nlgk)、用来将k个已排序链表合并为一个排序链表的算法。此处n为所有输入链表中元素的总数。(提示:用一个最小堆来做k路合并) k个已排序链表,假设每一个链表的第一个元素为root(i) (i = 1,2,3...k)。那么可以为这k个元素root(i)构造一个最小堆Heap_Min,其时间复杂度为O(lgk)。此时堆顶元素假设为root(x),根原创 2011-06-03 22:06:00 · 567 阅读 · 0 评论 -
算法导论 计数排序
不管所堆排序,还是快速排序,排序的本质都所基于各个元素之间的比较。而可以证明的是,所有基于比较的排序算法,在最坏情况下的时间复杂度的下界是O(nlgn)。 而,计数排序不所基于元素之间的比较,而是,对于一个输入x,在整个输入中确定出小于x的元素个数,这样就可以把元素x直接放在它在最终输出数组中的确定位子上。 基本思想:所有输入放入数组A中(元素下标从1开始)最终输出在数组B原创 2011-06-15 22:01:00 · 343 阅读 · 0 评论 -
算法导论 二叉查找树
在二叉查找树进行基本操作的时间与树的高度成正比。二叉查找树基本性质:设x为树中某个结点。如果y是x的左子树中的一个结点,则key[y] 二叉查找树基本操作:1.在二叉查找树中查找某个给定的key,有递归和非递归的版本。递归:根据二叉查找树的性质,在某个结点左子原创 2011-07-05 21:23:51 · 379 阅读 · 0 评论