- 博客(6)
- 收藏
- 关注
原创 从大小为N的样本集中随机采集不同的K个样本
这类为题可以抽象为随机生成K个 1~N之间不同的整数。 解决思路: a,选中第1个元素,将其与n个元素中的任意一个交换(包括第1个元素自己)。这时排序后的第1个元素已经确定。 b,选中第2个元素,将其与n-1个元素中作任意一个交换(包括第2个元素自己)。 c,重复上面步骤K次 实现代码: #include #include #include #include u
2016-10-28 18:07:37 1298
原创 归并排序的递归和非递归实现
归并排序是一个时间复杂度为O(nlogn)的算法,它可以由递归和非递归两种方式实现。 递归: #include using namespace std; void combine(int *nums,int l,int m,int r){ // cout<<"combine"<<l<<" "<<m<<" "<<r<<endl; int len = r-l+1; int *t
2016-10-27 18:44:21 682
原创 蓄水池采样
问题描述: 现实生活中有很多流式数据,在流式数据上采样可以抽象为: 设几个中元素个数为N,并且N在不断的增大,如何在集合中采集K个样本,使得每个样本被采集到的概率相等(K/N)? 蓄水池抽样法: 算法思路是,先构造一个可以放K个元素的池子,池子中一开始放元素1~k。 对于K+1~N 以K/N的概率决定是否被替换到池子中,遍历完所有元素后就可以得到一个等概率采样的K个元素,时间复杂度是O(
2016-10-27 17:31:18 539
转载 c++互斥锁
摘要: 从本质上说是一把锁,在访问共享资源前对互斥量进行加锁,在访问完成后释放互斥量上的锁,对互斥量进行加锁以后,任何其他试图再次对互斥量加锁的线程将会被阻塞直到当前线程释放该互斥量.如果释放互斥锁时有多个线程阻塞,所有在该互斥锁上的阻塞线程都会变成可运行状态,第一个变量为运行状态的线程可以对互斥量加锁,其他线程将会看到互斥锁依然被锁住,只能回去再次等待它重新变为可用 在
2016-10-09 10:30:04 5258
原创 C++多进程信号量
问题:一个父进程一个子进程,要求父进程与子进程同步:必须子进程先执行,父进程后执行。 解决办法:用信号量机制,一开始信号量初始化为0 父进程: 非临界区 p(s) 临界区 v(s) 非临界区 子进程: 非临界区 v(s) 非临界区 这样父进程执行临界区代码之前要先p操作,但是信号量是0,因此父进程被阻塞。直到子进程执行了v操作添加一个信号量,这时候父进程才
2016-10-07 22:09:37 3186 1
转载 C++ I/O复用实现聊天室程序
今天学习了Linux 高性能服务器变成中的I/O复用,根据书上的内容,实现一个聊天室程序。 1.客户端,客户端程序用poll同事坚挺用户输入和网络连接,并用splice 函数将用户输入直接定向到网络连接上发送,从而实现数据零拷贝。 #define _GNU_SOURCE 1 #include #include #include #include #include #include
2016-10-07 01:33:54 1479 4
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人