原理参考链接
https://www.econstor.eu/handle/10419/221811
http://www.magigen.com/h-nd-348.html

文章原理回顾

文章比较了两种估计人群中病毒流行率的方法:
1、个体测试,即对12000人的样本进行病毒测试,并采用标准二项测试得出95%的置信区间;
2、群体测试,即对500组35人进行测试(总人口涉及17500人)

关于置信区间(概率论的知识):

置信区间是从bai样本统计du量派生的值范围,可能包含zhi未知总体参dao数的值。由于置信区间zhuan具有随机性,因此来shu自特定总体的两个样本将不可能生成相同的置信区间。但是,如果将样本重复多次,则在所生成的置信区间中有特定百分比的置信区间将包含未知总体参数。
使用置信区间可以评估总体参数的估计值。例如,制造商想要知道他们生产的铅笔的平均长度是否不同于目标长度。制造商随机抽取铅笔样本,并确定样本的平均长度为 52 毫米,95% 置信区间为 (50,54)。因此,所有铅笔的平均长度介于 50 毫米和 54 毫米之间的可信度为 95%。

简单的群体测试方案代码

简单的群体测试方案需要样本池和第二轮RNA提取的所有样本阳性池。

#include <iostream>
#include<stdlib.h>
#include <vector>
#include <ctime>using namespace std;
//函数1,生成一个长度为100的vector,输入M,生成的一维数组里面有M个1,100-M个0.
void Initial_Group(vector<int>& group,int M)
{if (group.empty()){cout <<"group initial failed"<<endl;return;}srand((unsigned)time(NULL));for(int i = 0;i < M;i++){int num = rand() % group.size();//如果已经存在了,重新初始化一个numwhile (group[num] == 1){num = rand() % group.size();}//如果不存在的话group[num] = 1;}return;
}
//函数2,打印函数
void Pirnt_Group(vector<int>& group)
{int length = sqrt(group.size());if (length * length == group.size()){for (int i = 0; i < length; i++){for (int j = 0; j < length; j++){cout << group[i * length + j] << " ";}cout << endl;}}else{for (int i = 0; i < group.size(); i++)cout << group[i] << " ";cout << endl;}return;
}
//函数3,分组函数
//输入:一维序列vector<int>Group ,分组大小num
//输出:二维数组vector<vector<int>>,将Group分割为大小num的子序列
//A.assign(B.begin(),B.end());将区间[first,last)的元素赋值到当前的vector容器中
void Split_Group(vector<int>& group , vector<vector<int>>& splited_group , int num)
{if (group.empty()){cout << "group split falied"<<endl;return;}vector<int>::iterator itr = group.begin();int it = 0;while (it < group.size()){vector<int> tmp;if (it + num <= group.size()){tmp.assign(itr, itr + num);splited_group.emplace_back(tmp);}it = it + num;if(it < group.size())itr = itr + num;}return;
}
//合成血液函数
//输入一维序列,只要其中有1,则结果为1
//输出结果矩阵
void Synthetic_Blood(vector<vector<int>>& splited_group, vector<int>& result)
{for (int i = 0; i < splited_group.size(); i++){int flag = 0;for (int j = 0; j < splited_group[i].size(); j++){if (splited_group[i][j] == 1){flag = 1;break;}}result.emplace_back(flag);}for (int i = 0; i < result.size(); i++)cout << result[i] << " ";cout << endl;return;
}
//计算人力物力、时间消耗函数
int Cal_Times(int all_groups, int posi_group_nums,int group_nums_size)
{//计算检测的次数 = 组数 +阳性组数*阳性组中的样本大小int result = all_groups + group_nums_size * posi_group_nums;return result;
}
//将合成血液的结果中为阳性的序列进行单个测试,并记录结果到Positive_Samples
void Further_Test(vector<vector<int>>& splited_group, vector<int>& result,vector<int>& Positive_Samples)
{int posi_group_nums = 0;for (int i = 0; i < result.size(); i++){//说明该分组中有阳性样本if (result[i] == 1){posi_group_nums++;for (int j = 0; j < splited_group[i].size(); j++){//记录在原序列中的坐标if (splited_group[i][j] == 1)Positive_Samples.emplace_back(i* splited_group[0].size()+j);}}}for (int i = 0; i < Positive_Samples.size(); i++)cout << Positive_Samples[i] + 1 << " ";cout << endl;int spend_time = Cal_Times(result.size(),posi_group_nums, splited_group[0].size());cout <<"时间花费" <<endl;cout << spend_time<<endl;return;
}int Cal_Money()
{return 0;
}
int main()
{int sample_nums = 17500;int positive_sample_nums = 350;int sec_group_sample_nums = 35;vector<int> Positive_Samples;vector<int> Group(sample_nums,0);vector<int> Result;vector<vector<int>> Splited_Group;Initial_Group(Group, positive_sample_nums);//Pirnt_Group(Group);cout << endl;Split_Group(Group, Splited_Group, sec_group_sample_nums);//Pirnt_Split_Group(Splited_Group);cout << endl;Synthetic_Blood(Splited_Group,Result);Further_Test(Splited_Group,Result,Positive_Samples);return 0;
}

简单的群体测试方案C++代码(Group testing against Covid-19)相关推荐

  1. (保守群组测试 非保守群组测试 二次重复测试 自适应二次重复测试)四种群体测试的C++代码

    目录 原理 保守组检测 非保守组检测 二次重复测试 自适应二次重复测试 四种测试方法的核心代码 保守群组测试 非保守群组测试 二次重复测试与自适应二次重复测试 测试代码 参考文献 原理 假设该病在人群 ...

  2. 群组测试(Group testing)介绍

    最近了解了群组测试 (Group testing) 的一些内容,在这里做个记录与分享. 问题引入 问题源于二战时期,美国需要通过血样检测美军是否携带梅毒,但是当时血液检测耗时耗钱,将每个士兵的血液都检 ...

  3. 查询Master下的系统表和系统视图获取数据库的信息和简单的渗透测试

    在SQL中可以通过查询Master下的系统表(sys)和系统视图(information_schema)获取数据库的信息.SQL2000和SQL2005的结构略有不同. 系统表结构参考系统表详细说明. ...

  4. 测试nginx网站代码_在40行以下代码中使用NGINX进行A / B测试

    测试nginx网站代码 by Nitish Phanse 由Nitish Phanse 在40行以下代码中使用NGINX进行A / B测试 (A/B testing with NGINX in und ...

  5. ffmpeg如何在结尾添加帧_一种“视频帧对齐”的测试方案实践

    点击蓝字?关注[测试先锋],不再迷路!一起成为互联网测试精英,前瞻测试技术-导语全参考清晰度测算的时候,输入两个视频帧序列,但是视频帧序列没有对齐,怎么知道丢了哪帧?又怎么知道补回哪一帧?今天介绍一种 ...

  6. 测试方案/测试计划/测试报告,经常弄混要怎么区分?

    目录 前言 1.测试方案和测试计划的区别 2.测试方案和测试计划什么时候编写 3.测试方案 4.测试计划 5.测试报告 前言 测试方案和测试计划,测试报告几乎都是每个测试人员都必须掌握的.但有时经常搞 ...

  7. 【翻译】乔尔测试:改进代码的12步

    翻译文章:<乔尔测试:改进代码的12步>,欢迎提意见. 原作者:Joel Spolsky 原文链接:原文链接 JOEL谈软件 我叫 Joel Spolsky, 是纽约市的一名软件开发者.更 ...

  8. Android MediaCodec硬编兼容性测试方案

    作者:阿宝 更新:2016-08-15 来源:彩色世界(https://blog.hz601.org/2016/08/15/android-mediacodec-hardcode-compatibil ...

  9. SpringBoot - 应用程序测试方案

    文章目录 Pre Spring Boot 中的测试解决方案 测试 Spring Boot 应用程序 初始化测试环境 @SpringBootTest @SpringBootTest - webEnvir ...

最新文章

  1. sqlmap namespace ibatis 没有生效
  2. Swing实现全屏(覆盖任务栏和不覆盖任务栏)
  3. 纳税服务系统十一【抽取BaseService、条件查询】
  4. MySQL查询指定字段
  5. 多维数组(冒泡排序,稀疏数组)
  6. Linux系统中添加硬盘,并挂载到已有的目录,比如/home/user
  7. juce中的BailOutChecker
  8. 百万年薪程序员的7点能力
  9. linux 连接两个异构网,如何在Linux(或异构)网络上共享计算机?
  10. 解决png24格式图片在ie6中透明问题,
  11. Java 之单元测试
  12. 基于JAVA+SpringMVC+MYSQL的学生成绩管理系统
  13. md360 android,MD360Player4Android 学习的简单使用
  14. PHP什么函数获取日期,php getdate()函数获取日期信息实例详解
  15. 解密新一代 Java JIT 编译器 Graal
  16. 【PDF直接下载】6G总体愿景与潜在关键技术白皮书
  17. Android集成腾讯X5WebView
  18. uniapp—配置自定义基座
  19. 记录Request + BeautifulSoup爬取中国现代诗歌大全网站上的4000+现代诗的过程
  20. test1asfd 按时收费的水电费阿萨德阿斯蒂芬啊

热门文章

  1. cpu序列号唯一吗_怎么看电脑硬件是不是新的 有什么软件能检测吗?
  2. php 鼠标点击图片放大,鼠标移入放大图片预览效果实现
  3. java rmi漏洞工具_学生会私房菜【20200924】Weblogic WLS核心组件反序列化命令执行突破(CVE20182628)漏洞复现...
  4. 转行python能拿到多少钱_想转行学python过来人提醒大家几点
  5. gulp实用配置(1)——demo
  6. Inside Kolla - 04 Kolla 目录结构
  7. 图像处理中常见的时域与频域区别与关系
  8. Shadow DOM及自定义标签
  9. 键盘keydown值表
  10. Java FlameGraph 火焰图