- 博客(27)
- 收藏
- 关注
转载 快速选择(QuickSelect)的平均时间复杂度分析
快选,每次选一部分,扔掉另一部分,所以是O(N)假设每次扔掉一半.(2^k=N)T(N) =n +n/2+n/4+n/8+n/2^k = n*(1-2^-k)/(1-2^-1) =2N 这是粗略估计,具体看算法导论。
2014-11-13 20:45:18
8940
转载 格雷码的优点
格雷码属于可靠性编码,是一种错误最小化的编码方式。因为,虽然自然二进制码可以直接由数/模转换器转换成模拟信号,但在某些情况,例如从十进制的3转换为4时二进制码的每一位都要变,能使数字电路产生很大的尖峰电流脉冲。而格雷码则没有这一缺点,它在相邻位间转换时,只有一位产生变化。它大大地减少了由一个状态到下一个状态时逻辑的混淆。由于这种编码相邻的两个码组之间只有一位不同,因而在用于方向的转角位移量-数字量
2014-11-02 16:21:50
17115
转载 One Hot Code---独热码
独热码,在英文文献中称做 one-hot code, 直观来说就是有多少个状态就有多少比特,而且只有一个比特为1,其他全为0的一种码制。通常,在通信网络协议栈中,使用八位或者十六位状态的独热码,且系统占用其中一个状态码,余下的可以供用户使用。 例如,有6个状态的独热码状态编码为:000001,000010,000100,001000,010000,100000。再如,有十六个状态
2014-11-02 12:31:05
2490
1
原创 角点检测算法概述
目前的角点检测算法可归纳为3类:基于灰度图像的角点检测、基于二值图像的角点检测、基于轮廓曲线的角点检测。基于灰度图像的角点检测又可分为基于梯度、基于模板和基于模板梯度组合3类方法,其中基于模板的方法主要考虑像素领域点的灰度变化,即图像亮度的变化,将与邻点亮度对比足够大的点定义为角点。常见的基于模板的角点检测算法有Kitchen-Rosenfeld角点检测算法,Harris角点检测算法、KLT角
2014-10-28 16:29:18
1835
转载 MergeSort和QuickSort的比较
MergeSort和QuickSort是两种比较类似的sort方式,他们都是通过Divide and Conquer来实现的。都需要使用recursion的方式进行排序。他们的相同之处在于原理上一致。首先要做的是split,将N个element分成两部分进行排序,每一部分也会再继续分成两部分排序,直到只有2个element的时候就可以很容易的比较排序。这个就是recursion的使用方法。
2014-10-26 14:23:01
2390
转载 OpenCV中的origin成员
OpenCV中的图像结构有个很重要的成员origin,它指明了图像的原点位置,可以有两种取值:IPL_ORIGIN_TL和IPL_ORIGIN_BL,其中TL意思是:TopLeft,即左上;BL意思是:BottomLeft,即左下。其实这两个都是整形常量,IPL_ORIGIN_TL就是0,IPL_ORIGIN_BL就是1。 经验证,从摄像头取回的图像的坐标原点是在左下角,即o
2014-10-25 20:34:16
1608
转载 cvGrabFrame,cvRetrieveFrame,cvQueryFrame 三函数比较
函数cvGrabFrame从摄像头或者文件中抓取帧。被抓取的帧在内部被存储。这个函数的目的是快速的抓取帧,这一点对同时从几个摄像头读取数据的同步是很重要的。被抓取的帧可能是压缩的格式(由摄像头/驱动定义),所以没有被公开出来。如果要取回获取的帧,请使用cvRetrieveFrame。cvQueryFrame 是函数 cvGrabFrame 和函数 cvRetrieveFrame 的组合调用
2014-10-25 20:28:35
3207
转载 for(;;)与while(1)的区别
for(;;)编译成汇编后是无条件转移,while(1)是要0和1进行一下比较的,所以从这个方向上看for(;;)是要比while(1)快的因为少了一个比较指令,但现在的编译器都是有一定的优化能力的,像while(1)这种会优化成和for(;;)一样的汇编代码。
2014-10-25 20:22:39
601
原创 续谈分数求和:最小公倍数的求法
北大-计算概论http://ica.openjudge.cn/baseb/07/最小公倍数Least Common Multiple在上一篇文章里,我整理了一下最大公约数GCD的求法这里我们来研究一下最小公倍数LCM如何求。其实,说到最小公倍数,只需要记住一点:最小公倍数等于两数之积除以最大公约数int lcm(int a,int b){ in
2014-03-30 23:07:03
966
原创 再谈分数求和:求最大公约数——老吴憨算法和辗转相除法
greatest common divisor老吴憨算法:int gcd(int m,int n){ int i; int yue; yue=1; for(i=1;i<=m&&i<=m;i++) { if(m%i==0&&n%i==0&&i>yue) yue=i; } return yue;}辗转相除法:int
2014-03-30 22:58:54
748
原创 分数求和:一道很有意思的题,而且最后的返回值的处理问题也需要注意
北大-计算概论http://ica.openjudge.cn/baseb/07/这题需要模拟一下自然计算,挺好玩的。#includemain(){ int n; int i; int p,q; int x,y; int yue; scanf("%d",&n); scanf("%d/%d",&p,&q); f
2014-03-30 22:49:41
697
原创 PAT(B)1001.3n+1猜想/角谷猜想
北大-计算概论http://ica.openjudge.cn/baseb/06/这题同时也是PAT Basic Level的第一道题目http://pat.zju.edu.cn/contests/pat-b-practise/1001答案:#includemain(){ int n; int i; scanf("%d",&n); while(n!=1)
2014-03-30 22:04:39
1275
原创 第二个重复出现的数
北大-计算概论http://ica.openjudge.cn/baseb/05/本题乍看不难,实则暗藏陷阱101 3 5 5 7 9 4 8 2 6在sample中,这组数据的返回值应当是NOT EXIST但实际上却返回了5【陷阱何在?】这时候,我们注意到,当程序运行过第一个5之后,还会运行到第二个5,并以第二个5为基准,寻找与之相等的元素。这时候,5就被
2014-03-30 21:54:10
717
原创 求分数序列和:int求和,小心溢出
北大-计算概论http://ica.openjudge.cn/baseb/04/看到题目后,第一反应是:这题简单啊,做过好多遍了。于是,刷刷刷就把代码写完了:#includemain(){ int zi,mu,i,n,t; double sum; scanf("%d",&n); zi=2; mu=1; sum=0; for(i=0;i<n;i++) {
2014-03-30 20:41:37
715
原创 %g的用法
1、%g :根据具体的数值选择 %e 或 %f %G: 根据具体数值选择 %E 或 %f2、在变量类型是float或double时,都可以用%g输出,省略小数后面的0,例如:float a=3.14,b;b=a/2;printf("%f %g\n",b,b);结果输出1.570000 1.57
2014-03-30 20:19:50
4935
原创 谁考了第k名:Wrong Answer
北大-计算概论http://ica.openjudge.cn/basea/7/#include#includestruct student{ long code; double score;};int comp(const void *a,const void *b){ struct student *c = (struct student *) a; struct
2014-03-29 23:36:21
2093
原创 关于qsort()的小总结
功 能: 使用快速排序例程进行排序头文件:stdlib.h用 法: qsort(待排序数组首地址,数组中待排序元素数量,单个元素的占用空间大小,指向函数的指针,用于确定排序的顺序)关于comp()函数的用法:从小到大排序:1234int comp(constvoid*a,constvoi
2014-03-29 22:44:30
478
原创 整数奇偶排序:如何测试不确定数目的多组数据?
北大-计算概论http://ica.openjudge.cn/basea/4/ “测试数据可能有很多组,请使用while(cin>>a[0]>>a[1]>>...>>a[9])类似的做法来实现”这个用c语言怎么实现?EOF?
2014-03-29 22:40:33
531
原创 数组逆序重放
北大-计算概论http://ica.openjudge.cn/base2/6/#includemain(){ int a[100]; int t; int i; int n; scanf("%d",&n); for(i=0;i<n;i++) { scanf("%d",&a[i]); } for(i=0;i<n/2;i++) { t=a[n-1-i]
2014-03-29 20:49:18
867
原创 鸡兔同笼:Time Limit Exceeded?试着把时间复杂度降下来吧
北大-计算概论-练习-鸡兔同笼http://ica.openjudge.cn/base1/5/【一开始的解答】#includemain(){ int repeat,a,min,max,ri,i,j,flag; scanf("%d",&repeat); for(ri=0;ri<repeat;ri++) { scanf("%d",&a); min=a; ma
2014-03-29 19:21:19
793
原创 求一元二次方程的根:浮点数中的“0”
北大-计算概论-练习-求一元二次方程的根http://ica.openjudge.cn/base1/4/【坑爹】这道题目我提交了八次,终于AC貌似还有提交18次才AC的【坑在哪里】1、浮点数无法和0比较。解决办法是看fabs(x-0)与1e-5的关系,即与0的差值和一个小量比大小2、当一个数如果在(-0.000005,0)之间,输出精确到小数点后5位,就是-
2014-03-29 17:23:01
1162
原创 苹果和虫子:思考的完整性
北大-计算概论-练习-苹果和虫子http://ica.openjudge.cn/base1/2/【陷阱】其实,早在高一的时候,就做过这样的题目:一辆汽车不断减速,问你某时刻这辆车的位置。这里的陷阱在于,车子很有可能在这一时刻之前就已经停下不动了。这道题目也是一样,如果在第y小时之前苹果就已经吃完了,而你又没有考虑到这一点,那么将会输出一个负数,这显然是不合理的。【解答】
2014-03-29 15:23:18
2171
原创 汉诺塔:递归
描述汉诺塔(又称河内塔)问题是印度的一个古老的传说。开天辟地的神勃拉玛在一个庙里留下了三根金刚石的棒A、B和C,A上面套着n个圆的金片, 最大的一个在底下,其余一个比一个小,依次叠上去, 庙里的众僧不倦地把它们一个个地从A棒搬到C棒上,规定可利用中间的一根B棒作为帮助, 但每次只能搬一个, 而且大的不能放在小的上面。 僧侣们搬得汗流满面,可惜当n很大时这辈子恐怕就很搬了聪明的你还有计算
2014-03-28 21:56:34
687
转载 关于getchar()的用法
1.从缓冲区读走一个字符,相当于清除缓冲区2.前面的scanf()在读取输入时会在缓冲区中留下一个字符'\n'(输入完s[i]的值后按回车键所致),所以如果不在此加一个getchar()把这个回车符取走的话,gets()就不会等待从键盘键入字符,而是会直接取走这个“无用的”回车符,从而导致读取有误3.getchar()是在输入缓冲区顺序读入一个字符(包括空格、回车和Tab)getcha
2014-03-28 21:52:01
563
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人