- 博客(68)
- 资源 (19)
- 收藏
- 关注
原创 链队列的建立、判空、入队、出队、求长、访头、清空和销毁
#includeusing namespace std;typedef struct node{ int data; struct node *next;}Node;//头指针和尾指针typedef struct{ Node *front; Node *rear;}Queue;void initQueue(Queue &Q){
2012-10-31 11:04:30 22432 6
原创 判断表达式中括号是否匹配(栈的典型应用)(某公司校园招聘笔试试题)
#includeusing namespace std;typedef char Type;typedef struct node{ Type data; struct node *next;}Node, *Stack;void initiateStack(Stack &s){ s = new Node; s->next = NULL;}
2012-10-30 14:34:15 8948 1
原创 JM8.6编码器中的Configure函数究竟做了什么?(编程思想:抽象,间接)
从字面意思来看,configure就是配置的意思,顾名思义,Configure函数就是配置函数了。配置函数的作用是给程序配置(设定)一些初始的值,这些值在很大程度上相当于一个开关. 在用别人写的软件的时候,我们经常在软件的界面的某一个对话框里面输入一个参数,然后软件里的程序就会捕捉到这个对话框里面的参数,这样就把用户设定的参数传到了程序里面。细想一下,在JM8.6编码器中就
2012-10-30 12:44:33 9490 5
原创 在JM8.6解码端提取DCT系数和残差并模拟验证itrans函数的功能
如何在JM8.6的解码端提取DCT系数呢?自然而然会想到的问题是:DCT系数从哪里来,要到哪里去,所以,要提取DCT系数,可以看它是哪里产生的,也可以看它要到哪里去,然后在任意一条路上"截击"它,必然能找到DCT系数. 下面找DCT系数的思路是要看DCT系数到哪里去. 很显然,在解码端,DCT系数的下一个动作是进行反DCT变换,所以自然而言找到反DCT变换函数,找了一下,发现itans函数正是反D
2012-10-29 17:58:17 10385 5
原创 warning和error的区别
场景: 一程序员在办公大楼抽烟,一妇女刚好撞见. 妇女:“你知不知道这东西会危害你的健康?香烟盒上有警告(Warning)啊!” 程序员:“没事儿,我是一个程序员”。 妇女:“这又怎样?” 程序员:“我从来不关心Warning,我只关心Error”
2012-10-29 14:21:28 13960 3
原创 H.264中整数DCT变换,量化,反量化,反DCT究竟是如何实现的?(无代码,无真相)
H.264中采用的是整数DCT变换,在实现的时候,该变换和量化又杂糅在一起,那么这些错综复杂的关系究竟是怎样纠缠的呢?在参考H.264乐园论坛会员cs1860wd的帖子和H.264 and MPEG-4 VIDEO COMPRESSION(第一版)这本书后,基于帖子和书上的讲解,给出相应的实现代码,并验证代码的正确性. 还是以foreman视频第一帧第一个宏块第一个4*4块
2012-10-27 18:12:33 21006 17
原创 如何在JM8.6编码端提取QDCT?
毫无疑问,编码端的QDCT和解码端的QDCT完全相同,下面从编码端提取QDCT. 为简便起见,仅提取第一帧第一个宏块第一个4*4块的QDCT.JM8.6编码器最核心的编码函数是encode_one_macroblock,该函数找到了残差并进行了整数DCT变换及量化,然后Zigzag scan和Run-Level编码. 在write_one_macroblock函数中进行了熵编码和写码流, 故在
2012-10-27 13:37:37 10458 4
原创 《风雨张居正》 郦波
书评: 很不错,值得一读,读张居正,读一个改革家的人生历程,张居正不愧为千古名相. 书的唯一缺点是:感觉郦波老师多少有点美化张居正, 这个就不好了,历史人物之所以伟大,之所以值得大家学习,是因为他和普通人一样,都有弱点. 一个人没有弱点的人是不值得大家学习的. 有缺点才会有优点. 本人很喜欢张居正.
2012-10-27 10:47:24 8007
原创 深入剖析H.264帧间预测(P宏块)
工具:foreman_qcif.yuv, JM8.6, H.264visa. 下面仅讨论P宏块的亮度Y分量,为简便起见,只讨论整数像素.步骤1:用JM8.6编码foreman_qcif.yuv的3帧(IPP), 得到test.264,用H.264visa打开test.264. 在第二帧中,用H.264visa选中第4行的第9个宏块(宏块共有9行11列),在H.264visa中该宏块位置显
2012-10-26 14:52:01 13364 15
原创 深入剖析H.264帧内预测(I宏块)
工具: foreman_qcif.yuv, JM8.6, H.264visa. 下面仅讨论第一帧第一个宏块MB(16 * 16)的亮度Y分量. 步骤1:用JM8.6编码foreman_qcif.yuv的第一帧, 得到test.264,用H.264visa打开test.264, 然后用H.264visa打开foreman_qcif.yuv. 从H.264visa中的结果可以看出,第
2012-10-26 13:21:22 12520 17
原创 链栈的建立、判空、入栈、出栈、求长、访顶、清空和销毁
#includeusing namespace std;typedef struct node{ int data; struct node *next;}Node, *Stack;void initiateStack(Stack &s){ s = new Node; s->next = NULL;}bool isEmptyStack(S
2012-10-25 20:53:49 14627 3
原创 利用循环链表(单链)实现Josephus环(某公司校园招聘笔试试题)
#includeusing namespace std;typedef struct node{ int data; struct node *next;}Node;Node *createRing(int n){ Node *p = new Node[n]; //批量生成结点 int i; for(i = 0; i < n; i++) {
2012-10-25 19:03:38 8058 4
原创 双链表的建立、求长、定位、插入、删除、输出和释放(带头结点且成环状)
#includeusing namespace std;typedef struct node{ int data; struct node *next, *prior;}Node, *DList;//建立带头结点的双链表(最终成环状)DList createDList(){ int num; Node *head, *p1, *p2; he
2012-10-25 18:58:17 8240 4
原创 ifstream类用法入门 (可以避免在控制台上手动输入数据)
在目录下建立myData.txt, 在其中输入: 1 2 3 4 567执行下面程序:#include#includeusing namespace std;int main(){ ifstream cin("myData.txt"); int n; while(cin >> n) { cout << n << endl
2012-10-25 15:59:39 8165
原创 单链表的就地逆置 (单链表带头结点)(某公司校园招聘面试试题)
面试腾讯,被问此题,由于紧张,程序有误,甚为遗憾!下面给出正确的程序:#includeusing namespace std;typedef struct node{ int data; struct node *next;}Node, *List;List createList(){ Node *head, *p1, *p2; p1 = p2
2012-10-25 15:35:52 8922 3
原创 骇人听闻的二分查找(某公司校园招聘笔试试题)(据说只有10%的程序员可以写出没有bug的二分查找)
二分查找思路很简单,但要把程序写对,却很难,有兴趣的话,可以在网上查一下相关资料,下面给出两种常见的错误:(至于具体错误原因,可以分析程序的执行)错误程序1:#include <iostream>using namespace std;int binarySearch(int a[], int n, int key){ int low = 0;...
2012-10-24 21:16:06 9947 14
原创 顺序查找
#include using namespace std;int seqSearch(int a[], int n, int key){ int i = 0; while(i < n && a[i] != key) i++; //跳出循环的条件必然为i等于n或者a[i]等于key if(n == i) //也就是说i为n-1时,a[i]不等于key
2012-10-24 19:26:49 7816
原创 类模板stack小试牛刀
#include #includeusing namespace std;int main(){ stack s; int n = 100; int r = 8; // r进制 while(n)//范式 { s.push(n % r); n /= r; } while(!s.empty()) //stack没有遍历器 {
2012-10-24 18:56:31 7440
原创 类模板vector入门
#include #include#includeusing namespace std;int main(){ // vector是类模板, vector是类(类似于string) vector v; int i; for(i = 0; i < 10; i++) v.push_back(i); //可以用下标方式对v
2012-10-24 18:35:43 7690 2
原创 类string入门
#include #include#includeusing namespace std;int main(){ string s; //s是string类的对象 cout << s.length() << endl; // 0 s = "123456"; cout << s.length() << en
2012-10-24 18:14:22 7662 2
原创 A升杯子和B升的杯子如何倒出C升的水?(某公司校园招聘笔试试题,某另外公司校园招聘笔试试题)
从数学角度进行分析,可以给出一个规律:A升杯子和B升的杯子可以倒出的水为 k * gcd(A, B)升, 下面我将给出一个简要的数学说明:(只考虑整数) 假设A = 5, B = 7吧,我们可以把这两个杯子等价为A = 5, B = 2, 继续等价为A = 3, B = 2, 继续等价为A = 1,B= 2, 继续等价为A = 1, B = 1, 继续等价为A = 1, 也就是说,A
2012-10-24 14:14:40 9768
原创 整数数组中大于或等于平均数的元素个数(某公司校园招聘机试试题)
题目很简单,但要注意:不要把平均数求出来,因为浮点数可能导致不准确,程序如下:#includeusing namespace std;int getNumber(int a[], int n){ int sum = 0; //总和 int number = 0; //总个数 int i; for(i = 0; i < n; i++) sum += a
2012-10-24 13:39:41 8057
原创 回文串的判断(某公司校园招聘机试试题)
#includeusing namespace std;bool isSymmetric(char str[]){ int length = strlen(str); int i; for(i = 0; i < length/2; i++) if(str[i] != str[length - i - 1]) return false; return
2012-10-24 13:29:05 8195
原创 如何判断平面上两条线段(注意是线段)是否相交?(某公司校园招聘面试试题)
看到题目,很多人想,这个问题太简单了,直接求直线方程,然后求交点,看方程组是否有解,你晕不晕?我在网上搜索了一下,很多思路都是求直线方程,求交点或求距离,不一而足。回顾高中学的线性规划知识,下面将给出一个我认为相对较好的算法,如果算法或程序有什么bug, 欢迎指正,谢谢。 已知线段AB,线段CD. 先来判断直线AB与线段CD是否相交,如果不相交,那么线段AB和线段CD肯定不相交。如
2012-10-24 11:45:07 12567 1
原创 如何判断两个矩形是否有重叠部分?(某公司校园招聘笔试试题)
做游戏的公司,自然会关注游戏中物体是否碰撞的问题。我们知道:判断两个圆是否有重叠很简单,当且仅当 r1 + r2 #include#includeusing namespace std;typedef struct rectangle{ float centerX; float centerY; float width; float height;}
2012-10-23 23:25:10 14449 2
原创 如何判断点P是否在三角形ABC内?
本题最好不要用直线方程或线段夹角来判断,因为这涉及到分类与讨论,下面的算法是相对比较好的算法,代码如下:#include#includeusing namespace std;typedef struct point{ float x; float y;}Point;float side(Point A, Point B){ float xL
2012-10-23 22:47:25 9056
原创 JM8.6中看起来让人不寒而栗的 int ******究竟是怎么回事?
最近又在看H.264的编码器JM8.6, 遇到了很多类似于int ******这样的指针,看起来让人不寒而栗,其实也不过如此,下面用实例来剖析一下:(特此说明一下:为了让程序更简单,下面的程序省略了释放内存的部分)程序1:#includeusing namespace std;int main(){ int a = 0; int b = 1; int
2012-10-23 22:05:56 8921 5
原创 O(log n)和O(n)折射出思维的差异
早晨一女生背着一堆书进了阅览室,结果警报响了,大妈让女生看看是哪本书把警报弄响了,那女生把书倒出来,准备一本一本的测。大妈见状急了,把书分成两份,第一份过了一下,响了。又把这一份分成两份接着测,三回就找到了,大妈用鄙视的眼神看着女生,仿佛在说O(n)和O(log n)都分不清。
2012-10-23 08:25:43 10937 5
原创 JPEG编解码器的简要仿真(无代码,无真相)
图像、视频压缩的必要性: 设图像为720* 480,且为RGB图,每个色道位深为8,故该图像的大小为:720 * 480 * 3 B= 0.99 MB(很大,很吓人.),如果是视频,就更是吓人. 图像、视频压缩的可行性: 1. 视觉冗余(下采样,量化) 2. 空间时间冗余 (帧内帧间预测
2012-10-22 11:22:05 8614
原创 视频编解码原理及如何在VC6.0中运行JM8.6
视频编解码的思路很简单,具体算法有点复杂,下面用一个例子来类比说明视频编解码的原理: 假设你的工资是20000,你要把这个信息告诉父母,打电话就可以了,为了不说废话,你可以提前(比如春节在一起的时候)跟父母做一个约定,就是将你的实际公司除以10000, 也就是20000/10000,然后打电话的时候直说工资是2, 父母就得到了2,这时候,父母根据提前的约定,就知道你的实际工资是2
2012-10-22 10:40:14 11012 4
原创 视频资源下载网站汇集
H.264/AVC Reference Software (Joint Model)下载网站:http://iphome.hhi.de/suehring/tml/download/old_jm/
2012-10-22 10:01:17 30378 1
原创 一个小程序入门matlab
clearclctotal = 0;for i = 1 : 2 : 99 total = total + i;endtotal %输出totalsum = sum(1 : 2 : 99)结果为:total = 2500sum = 2500
2012-10-22 09:23:08 10925 3
原创 字符串递归求长(不用任何其他变量,不用goto,不用循环)
#includeusing namespace std;int getStrLen(char str[]){ return *str ? getStrLen(str + 1) + 1 : 0;}int main(){ char str[] = "abc"; cout << getStrLen(str) << endl; return 0;}
2012-10-21 23:09:41 8165 1
原创 计数排序(线性复杂度的排序,且不需要进行大小比较)
计数排序思想很美妙,不需要进行元素间大小的比较,时间复杂度是线性的,在实践中,经常采用计数排序,该排序稳定。计数排序要求元素大小限定在一定范围内,比如[0, k], 算法代码如下: #includeusing namespace std;// 0 <= a[i] <= k (其中i = 0, 1, 2,..., n-1)void countSort(int a[], int
2012-10-21 22:59:40 8986 3
原创 堆排序(某公司校园招聘面试题目)
堆排序是一种高级的选择排序,算法代码如下: #includeusing namespace std;void heapAdjust(int a[], int low, int high){ int pivotKey = a[low - 1]; int i; for(i = 2 * low; i <= high; i *= 2) { if(i < hi
2012-10-21 22:48:53 9844 9
原创 快速排序(某公司社招面试试题)
快速排序是对冒泡排序的改进,算法代码如下: #includeusing namespace std;int partition(int a[], int low, int high) //划分{ int pivotKey = a[low]; while(low < high) { while(low = pivotKey) high--; a
2012-10-21 22:37:12 8524 3
原创 模幂算法(某公司校园招聘网测题目)
712的n次方,结果后三位为696,满足这个条件的n的个数为多少?(0 这是一个典型的模幂算法问题,下面证明: (a * b) % n = [(a % n) * (b % n) ] % n (把*换成+也成立) 设 a = k1*n + r1, b = k2*n + r2, 于是有: (a * b) % n = ( k1*k2*n*n
2012-10-21 20:51:08 8691 2
原创 时间复杂度为O(n)来判断数组a[N](1 <= a[i] <= N)中是否有重复元素 (某公司校园招聘笔试题目)
判断数组中是否有重复元素,最直接的思路是用双层循环判断(O(n^2)); 也可以先排序,后比较,但基于比较的排序时间复杂度至少为O(n*logn). 所以,这些思路都不行。根据题目的限制条件,很容易想到用计数排序,时间复杂度为O(n),这当然满足题意,但是,把计数排序用在此处,无疑是大材小用了。在计数排序中,有一个关键的步骤是计数,本题就可以利用计数排序中的计数思想(有点类似于哈希),程序代码如下
2012-10-21 17:34:46 9576 8
原创 汉诺塔游戏(经典递归)
#includeusing namespace std;int times = 0;void move(char src, char dst){ times++; cout " << dst << endl;}void hanNuoTower(int n, char first, char mid, char last){ if(1 == n)
2012-10-21 13:38:33 8440 1
linux protobuf安装文件
2016-11-04
linux tree命令的源码
2015-11-01
编译好的openssl库和头文件
2014-12-14
入门数据库sqlite3的最佳实践资料
2014-08-12
在Windows下学习Linux命令
2013-08-08
音频处理软件Gold Wave
2013-07-17
H.264visa软件
2013-07-13
YUVviewer :原始的YUV视频的播放器
2013-06-24
经典的C语言编译器:TC2.0
2013-06-23
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人