摘要: 1. 给你一个长度为N的链表。N很大,但你不知道N有多大。你的任务是从这N个元素中随机取出k个元素。你只能遍历这个链表一次。你的算法必须保证取出的元素恰好有k个,且它们是完全随机的(出现概率均等)。解:先选中前k个,从第k+1个元素到最后一个元素为止, 以k/i (i=k+1, k+2,...,N) 的概率选中第i个元素,并且随机替换掉一个原先选中的元素, 这样遍历一次得到k个元素, 可以保证完全随机选取。这个算法叫做蓄水池抽样,在某门课上听到的,证明起来也不是很复杂。证:最后一个元素选中概率=K/N,倒数第2个元素选中概率=(K/N-1)*(1-(K/N)*(1/K))=K/N,以此类推…. 阅读全文
posted @ 2013-12-14 16:48 hunteo 阅读(162) 评论(0) 推荐(0)
摘要: 首先,fork()系统调用的特性:fork()系统调用是Unix下以自身进程创建子进程的系统调用,一次调用,两次返回,如果返回是0,则是子进程,如果返回值>0,则是父进程(返回值是子进程的pid),这是众为周知的。还有一个很重要的东西是,在fork()的调用处,整个父进程空间会原模原样地复制到子进程中,包括指令,变量值,程序调用栈,环境变量,缓冲区,等等。1 int main(){2 int i;3 for( i=0;i<2;i++){4 fork();5 printf("#");6 }7 return 0;8 }该... 阅读全文
posted @ 2013-09-28 23:58 hunteo 阅读(1009) 评论(3) 推荐(0)
摘要: 1.constconst int a = 23 ;const 对象默认为文件的局部变量假如const int a = 23定义在file1.c中,那么同一个程序中的file2文件就无法通过extern来使用file1中的a了 但是// file1extern const int a =12 ;// file2extern const int a ; // use a from file1非const变量默认为extern,要使const变量能在其他文件中访问,必须显示的指定为extern2. reference: 对象的另一个名字。不能定义引用类型的引用,但可以定义任何其他类型的引用。引用必须 阅读全文
posted @ 2013-08-06 08:51 hunteo 阅读(442) 评论(0) 推荐(0)