摘要: 算法导论习题5.2.4介绍了一个帽子保管问题(hat-check problem):有n位顾客,他们每个人给餐厅负责保管帽子的服务生一顶帽子。服务生以随机的顺序将帽子归还给顾客。请问拿到自己帽子的顾客的期望数目是多少?解法一:利用算法导论一书中介绍的indicator random variables,假设随机变量Xi满足(1<=i<=n):那么总的随机变量x满足:对于每一个顾客,他拿到自己帽子的概率是1/n,所以:所以,这个思路根据算法导论书上的讲解比较容易想到,但是真正想的时候我不免回到了忘日学习概率论的惯性思维中,于是有了解法二,比解法一复杂不少。解法二:基本思想是利用 期望 阅读全文
posted @ 2011-09-21 20:40 bovine 阅读(563) 评论(0) 推荐(0) 编辑
  2012年11月9日
摘要: 使用python的科学计算库,达到快速计算的效果。 标准的Python中用列表(list)保存一组值,可以当作数组使用。但由于列表的元素可以是任何对象,因此列表中保存的是对象的指针。这样一来,为了保存一个简单的列表[1,2,3],就需要有三个指针和三个整数对象。对于数值运算来说,这种结构显然比较浪费内存和 CPU 计算时间。 使用numpy的array模块可以解决这个问题。细节不在此赘述。这里主要... 阅读全文
posted @ 2012-11-09 22:31 bovine 阅读(29765) 评论(2) 推荐(2) 编辑
  2012年10月17日
摘要: 今天在网上看见的一个数学题,很有意思: 平面上有100个点,任意三点都不共线,试证明:每三点组成的三角形中至多有70%是锐角三角形。 这个题目仿佛让自己回到了当初中学时没有捣腾数学竞赛的日子。自己太菜,当时很多题不会做,如今这个也不会…好在网上有答案,记录之。 证这个题目可以先证一条引理。(自己对引理这种东西最深恶痛绝了!--!当初直接让我证这个引理不就完了嘛~!) 引理:平面上有5个点,任意三点... 阅读全文
posted @ 2012-10-17 17:15 bovine 阅读(489) 评论(0) 推荐(0) 编辑
  2012年7月13日
摘要: \[\frac{{ - b \pm \sqrt {b^2 - 4ac} }}{{2a}}\] 阅读全文
posted @ 2012-07-13 10:17 bovine 阅读(146) 评论(0) 推荐(0) 编辑
  2012年4月25日
摘要: 最近我在做一个项目,其中要用到一个数据结构——Hash Table(哈希表),以前只有理论知识,现在实却发现很不简单,所以写下来和大家共分享。 我们知道,哈希表是一个固定大小的数组,数组的每个元素是一个链表(单向或双向)的头指针。如果Key一样,则在一起,如果Key不一样,则不在一起。哈希表的查询是飞快的。因为它不需要从头搜索,它利用Key的“哈希算法”直接定位,查找非常快,各种数据库中的数据结构... 阅读全文
posted @ 2012-04-25 14:13 bovine 阅读(1351) 评论(1) 推荐(0) 编辑
  2012年4月24日
摘要: 并查集,不复杂,但是我一直不甚理解,用得不好。这几天对并查集做了些针对性训练。算了有了一个初步的了解。这里稍微进行一下整理。 poj 1308 给定一个图的一些边 判断这个图是不是树。 利用并查集,把联结的点放在同一集合,利用findset判断是否存在环。 需要注意的是,森林不是树,所以讲边扫描完毕后,需要遍历每个点,看看有几个点是入度为零的,如果只有一个点是入度为零,那么就是树;不然就是森林了。... 阅读全文
posted @ 2012-04-24 15:06 bovine 阅读(1027) 评论(0) 推荐(0) 编辑
  2012年4月5日
摘要: 并查集是十分有用的数据结果,对于一般人来说,这个应当是十分简单的应用,但是对于我来说却不然。上次比赛的时候有个题目就是因为自己并查集写得有问题而WA了好几次。。。 1182这道题目的大意是:有ABC三个物种,A吃B,B吃C,C吃A。现在有N个编号的个体(1-N),不知道每个个体分别属于哪个物种。现在有K条语句,每条语句有两种形式: 1 a b 表示编号为a和b的个体属于同一个物种; 2 a b表... 阅读全文
posted @ 2012-04-05 09:38 bovine 阅读(210) 评论(0) 推荐(0) 编辑
  2012年3月22日
摘要: 由于不是计算机专业,数据结构课上老师对于这么算法草草而过。 今天做到一个题目的时候需要用到这个算法,今天就来好好学一学。 模式匹配最简单直接的办法是BF算法,我个人可以理解为Brutal force吧。暴力以主串的每个位置为起点,逐个与模式进行匹配。由于主串的指针i可能需要回溯,所以这个算法在最坏情况下的时间复杂度可以达到O(m*n)。其中,n和m分别是主串和模式的长度。 KMP算法的优越之处就是... 阅读全文
posted @ 2012-03-22 18:08 bovine 阅读(314) 评论(0) 推荐(0) 编辑
  2012年3月14日
摘要: 问题就是2台机器,n件任务,必须先在S1上做,再在S2上做。任务之间先做后做任意。求最早的完工时间。 这是一个经典问题:2台机器的情况下有多项式算法(Johnson算法),3台或以上的机器是NP-hard的。思想就是贪心,时间复杂度是O(nlogn) 。 Johnson算法 (1) 把作业按工序加工时间分成两个子集,第一个集合中在S1上做的时间比在S2上少,其它的作业放到第二个集合。先完成第一个... 阅读全文
posted @ 2012-03-14 18:21 bovine 阅读(1573) 评论(0) 推荐(0) 编辑
摘要: 设每个位置的初始高度是a[i][j],最终可以达到的高度是h[i][j]。首先,对于最外圈的每个位置,a[i][j] = h[i][j]。然后将最外圈每个位置加入优先队列(高度小的元素在对首),取一个位置t出列,遍历t的相邻位置x,如果a[x]<h[t]。那么a[x]能够达到的最大高度就是h[t],否则h[x] = a[x]。按照这种思路bfs即可。注意结构体的初始化。可以利用结构体的构造函数,从而减小代码量。 1: #include <iostream> 2: #include <cstdio> 3: #include <queue> 4: #inc 阅读全文
posted @ 2012-03-14 15:56 bovine 阅读(260) 评论(0) 推荐(0) 编辑
摘要: 1: #include<stdio.h> 2: #include<functional> 3: #include<queue> 4: #include<vector> 5: using namespace std; 6: //定义结构,使用运算符重载,自定义优先级1 7: struct cmp1{ 8: bool operator ()(int &a,i... 阅读全文
posted @ 2012-03-14 14:36 bovine 阅读(828) 评论(0) 推荐(0) 编辑