2013年11月29日

组合数的简单笔记一条

摘要: 组合数(combination)C(n, k) 表示在n个不同的元素里面取k个,有多少中方案。组合数可以用一递归式计算:C(n, k) = C(n-1, k-1) + C(n-1, k)。该式可以这样理理解,n个元素里面取k个,如果一定取第一个元素,那么就有C(n-1, k-1)中方案;如果一定不取第一个元素,那么就有C(n-1, k)种方案。另外k>n时,C(n, k) = 0; 当k = 0时,C(n, k) = 1;在n比较合理的情况下,可以利用动态规划来预处理C(n,k)。 阅读全文

posted @ 2013-11-29 18:25 Qwertycen 阅读(131) 评论(0) 推荐(0) 编辑

2013年3月19日

花了一天测试明白了两个事情

摘要: 1. pthread_cond_wait/pthread_cond_timedwait两个函数,只要之前mutex是正常lock住了,当他们返回的时候,会保证mutex被当前thread获得。无论正常返回还是错误返回。所以之前写多线程的时候,用到了cond等数据,之后用cancel线程时,会出现只cancel到一个线程的情况。其实是第一个线程被cancel了,被cancel时正在pthread_cond_wait中阻塞,然后从函数中返回,获得了mutex,然后线程结束,但是mutex没有释放,导致其他线程无法获得mutex,于是就一直阻塞。另外,如果使用pthread_cond_timedwa 阅读全文

posted @ 2013-03-19 17:42 Qwertycen 阅读(145) 评论(0) 推荐(0) 编辑

2012年10月1日

common lisp 中一个常量引起的bug

摘要: 问题来源于PG的ANSI Common Lisp的第三章的练习6a, 大致意思是, car和cdr功能对调, 那么要你自己写一个cons函数.当然, car和cdr的功能对调这一点我是忽略的, 我认为问题的重点在于自己实现一个cons函数. 想了一会, 做了一些测试之后, 想到了以下方法:1 (defun qcons (x y) 2 (let ((tmp '(nil))) 3 (setf (car tmp) x4 (cdr tmp) y)5 tmp))这个方法在简单的对atom操作时是没有问题的:1 [32]> (qcons 'x nil)2 (X)但是... 阅读全文

posted @ 2012-10-01 21:51 Qwertycen 阅读(369) 评论(0) 推荐(0) 编辑

2012年8月28日

comm和join的临时笔记

摘要: 一言概之,要求数据都是字典序的。另外sort -n 比没有-n慢,一个sort多个-k比多个sort加管道慢。over。 阅读全文

posted @ 2012-08-28 15:01 Qwertycen 阅读(124) 评论(0) 推荐(0) 编辑

gcc宏返回值的官方定义

摘要: Statements and Declarations in ExpressionsA compound statement enclosed in parentheses may appear as an expression in GNU C. This allows you to use loops, switches, and local variables within an expression.Recall that a compound statement is a sequence of statements surrounded by braces; in this con 阅读全文

posted @ 2012-08-28 14:54 Qwertycen 阅读(1282) 评论(0) 推荐(0) 编辑

2012年4月14日

Notes on TCP/IPv2 Ch.26

摘要: 1. Rlogin 是专为unix系统设计的。(page.389)2. Rlogin 和 telnet都只使用了一个tcp连接,所以需要通过特殊的手段区分数据和命令。(page.390)3. Rlogin使用明文传输密码,新版本会尝试进行加密。(page.392)4. 流量控制一般在客户端实现,否则当用户按下流量控制键(ctrl+s/ctrl+q)时,需要等到服务端收到这个操作,才进行停止输出,这段时间客户端的屏幕上会有大量的数据输出。(page.393)5. rlogin当服务端运行的程序需要特殊处理流量控制键时(例如vim),会通过命令告知客户端不要处理流量控制键。(page.393)6. 阅读全文

posted @ 2012-04-14 22:50 Qwertycen 阅读(228) 评论(0) 推荐(0) 编辑

2012年2月15日

关于dynamic_cast的简单笔记

摘要: 最近想了解下c++中继承和多态的细节问题,其中一个需要理解的是dynamic_cast这个强制类型转换key-word。dynamic_cast用于多态类型间的类型转换,在需要的时候提供运行时检测,即检查类型转换是否可行的。一个派生类的指针或者引用转换成父类的指针或引用总是可行的,所以使用dynamic_cast一定会成功。但是一个父类的指针或者引用转换成派生类的指针或者引用不一定是可行的,除非父类指针指向的是派生类或者派生类的子孙的实例。这时使用就要使用dynamic_cast来进行强制类型转换以检测是否可行,对于指针的转换,如果不可行,则转换后的结果为NULL;对于引用的转换,如果不可行, 阅读全文

posted @ 2012-02-15 16:30 Qwertycen 阅读(506) 评论(0) 推荐(0) 编辑

2012年1月3日

Notes on UNPv1 Ch.8

摘要: 使用udp的一些比较有名的应用: DNS, NFS, SNMP. (Page.239)recvfrom和accept函数的相似之处: 最后两个参数用来获取数据的来源; sendto和connect的相似之处: 最后两个参数都用来指定数据的目的地. (Page.241)recvfrom函数中的数据长度的值理所当然地不包含数据包的头部长度. (Page.241)在udp里, 发送和接受长度为0的数据是可以的. 因为udp是无连接的, 所以recvfrom的返回值为0并不代表EOF或者连接的断开. (Page.241)TCP也可以使用sendto和recvfrom, 但是通常这么做没有任何意义和理由 阅读全文

posted @ 2012-01-03 15:28 Qwertycen 阅读(232) 评论(0) 推荐(0) 编辑

2011年11月4日

变长结构体的临时笔记

摘要: 1. 利用1数组struct ValLen1{ int a; char valLen[1];};缺点:没有数据时浪费1个空间。2. 利用0数组struct ValLen2{ int a; char valLen[0];};缺点:gcc扩展,非通用。3. 利用空数组struct ValLen3{ int a; char valLen[];};缺点:未发现。4.利用函数class ValLen4{public: int a; void* valLen(){return (void*)(this+1);}};缺点:相对麻烦。 阅读全文

posted @ 2011-11-04 15:10 Qwertycen 阅读(141) 评论(0) 推荐(0) 编辑

2011年10月23日

c指针和数组的临时笔记

摘要: 每次混用指针和数组的时候都非常的迷糊.这次大概搞了一下, goo了一下gle. 大致了解记录如下, 可能有误:数组是一种内置的数据结构, 不是指针, 当直接对其使用sizeof操作符时, 得到的结果是 "数组类型的大小 X 数组长度".当数组作为右值赋给指针时, int *pa; int aa[2]; pa = aa, 这时数组可以看作一个常量指针.当数组作为函数的形参时, 即 int func(int a[]); 它在函数内就相当于一个指针, 所有数组的其他属性都没有了. 阅读全文

posted @ 2011-10-23 22:00 Qwertycen 阅读(179) 评论(0) 推荐(0) 编辑

导航