一.蛮力算法与分治算法

#include <stdio.h>
#include <math.h>
#define OVERFLOW -2
#define OK 1
#define ERROR 0
typedef int Status;
//芯片测试蛮力算法
void ChipTest_1()
{printf("请输入芯片个数\n");int amount;scanf("%d", &amount);getchar();//一片一片测试,好芯片需要测试芯片中至少一半证明它是好芯片,坏芯片需要测试芯片中多于一半证明//它是坏芯片//前提是好芯片至少比坏芯片多一片int count, test_ceil_amount;for (int i = 1; i <= (int)ceil((double)amount / 2); i++){count = 0;for (int j = i + 1; j <= amount; j++){printf("请输入第%d块芯片测试第%d块芯片的结果,用“T”与“F”表示\n",j,i);char c = getchar();getchar();if (c == 'T')count++;}test_ceil_amount = amount - i;if (count >= (int)ceil((double)test_ceil_amount / 2)){printf("第%d片是好芯片\n", i);break;}elseprintf("第%d片是坏芯片\n", i);}
}
//芯片测试分治算法
Status ChipTest_2(int amount)
{if (amount == 1){printf("剩余芯片一定为好芯片\n");return OK;}//如果芯片总数为奇数则会有轮空芯片产生,其余芯片测试这个轮空芯片,如果为好芯片,测试成功,坏//芯片则淘汰if (amount % 2 == 1){int count = 0;for (int i = 1; i <= amount - 1; i++){printf("请输入第%d块芯片测试第%d块芯片的结果,用“T”与“F”表示\n", i, amount);char c = getchar();getchar();if (c == 'T')count++;}if (count >= (int)ceil(((double)amount - 1) / 2)){printf("第%d片是好芯片\n", amount);return OK;}else{printf("第%d片是坏芯片\n", amount);amount--;}}//芯片总数一定为偶数,可以取两片芯片相互测试,如果都报好,取一片留一片,一好一坏或者测试结果//都为坏都扔掉//这样留下的每个组的情况只可能是都好或者都坏,其他两种情况都扔掉是因为这样一组至少可以排除一//个坏芯片,仍然保持好芯片数量比坏芯片多int chipcount = amount;for (int i = 1; i <= amount / 2; i++){printf("请输入第%d块芯片测试第%d块芯片的结果,用“T”与“F”表示\n", 2 * i - 1, 2 * i);char c1 = getchar();getchar();printf("请输入第%d块芯片测试第%d块芯片的结果,用“T”与“F”表示\n", 2 * i, 2 * i - 1);char c2 = getchar();getchar();if (c1 == 'T' && c2 == 'T'){printf("取一片扔一片\n");chipcount--;}else{printf("都扔\n");chipcount -= 2;}}ChipTest_2(chipcount);
}
int main()
{int amount = 5;ChipTest_2(amount);
}

二.时间复杂度分析

1.分治算法

W(n)=W(n/2)+O(n),W(1)=0

等式右边第一项至多n/2规模,因为可能芯片会全扔,O(n)为轮空处理,n为奇数时候进行处理,偶数时候不需要,经过迭代得出W(n)=O(n),为线性时间复杂度。

2.蛮力算法

W(n)=W(n-1)+n-1,W(n/2)=0

好芯片比坏芯片多一片,测试剩余n/2还没找到好芯片说明剩余芯片都为好芯片,经过迭代可知W(n)=O(n^2),所以分治算法比蛮力算法好。

芯片测试算法及时间复杂度分析相关推荐

  1. 算法的时间复杂度分析

    算法的时间复杂度是一个函数,它定性描述该算法的运行时间.这是一个代表算法输入值的字符串的长度的函数.时间复杂度常用大O符号表述,不包括这个函数的低阶项和首项系数.使用这种方式时,时间复杂度可被称为是渐 ...

  2. 【基础】算法的时间复杂度分析

    1.什么是时间复杂度? 首先,解决一个问题肯定有许多种方式可以实现,那么如何评价一个算法的好坏?处理相同的数据量,用时更少,用的空间更少. 那么如何估算一个程序的运行时间与数据量的关系,这个函数就是算 ...

  3. 字符串匹配KMP算法及其时间复杂度分析

       字符串匹配算法是非常常见的算法.考虑长度为nnn的文本(text)字符串A[1,2,⋯,n]A[1,2,\cdots,n]A[1,2,⋯,n],长度为mmm的匹配(pattern)字符串B[1, ...

  4. 算法的时间复杂度分析之O(logn)、O(nlogn)

    复杂度分析之O(logn).O(nlogn) 对数阶时间复杂度非常常见,同时也是最难分析的一种时间复杂度.我通过一个例子来说明一下. int i = 1;while (i <= n) {i = ...

  5. DQN算法的时间复杂度分析

    DQN算法的算法流程如下: 时间复杂度: 设: Initialize replay memory D \mathcal{D} D to capacity N N N (运行消耗 t 0 t_0 t0​ ...

  6. 算法学习——时间复杂度分析与渐进符号

    时间复杂度 时间复杂度:算法执行运算的操作数丢掉低阶数,再去掉所有系数. 例如 a = 1#操作数1 b = 2#操作数1 c = 3#操作数1 for i in n:#操作数nprint(a,b,c ...

  7. java快速排序的时间复杂度_程序猿必备排序算法及其时间复杂度分析

    常用的时间复杂度 常数阶\(O(1)\) 说明: 只要代码中没有复杂的循环条件,无论代码的函数是多少,一律为常数阶\(O(1)\) int i=1; int j=3; int m=0; m=i+j; ...

  8. 1.1. 分治法实例—芯片测试

    1. 问题描述 输入:n片芯片,其中好芯片至少比坏芯片多1片 问题:设计一种测试方法,通过测试从n片芯片中挑出1片好芯片 要求:使用最少的测试次数 2. 解题思路 1. 判定芯片A的好坏 问题:给定芯 ...

  9. 递归算法中的时间复杂度分析

    对于一种算法的时间复杂度分析还是特别重要的,在一些非递归算法中,我们仅仅看运算次数最多的那一行代码可能执行多少次就可以,实际就是看在循环中变量的变化,但是对于递归算法中该怎么分析呢?下面介绍几种递归函 ...

最新文章

  1. 控制Open With菜单项的注册表键值
  2. BZOJ-1192-鬼谷子的钱袋
  3. lucky前面加a还是an_“不可数”名词前何时加a/an,何时不加?来自本站教师群的两道典型题问答,揭示了规律 白话英语201931...
  4. 2014\Province_C_C++_B\1 啤酒和饮料
  5. Python10/22--面向对象编程/类与对象/init函数
  6. 计算机专业中最受热议的4个专业,2018考研后身价倍增的4个专业盘点
  7. nginx 如何处理请求系列3-server_name指令
  8. 钱少事多,开源项目维护人员几乎集体出走
  9. 为什么我偏爱用 GitHub 来写书?
  10. 如何使用SpingMvc实现省市县三级级联?
  11. 2019美赛参赛获奖经验
  12. 毕向东java视频js_js foteach 传智播客毕向东老师 新版JAVASE基础学习视频教程 ...(8)...
  13. 浅谈Clean Code
  14. linux udp 端口测试,RAKsmart:Linux下TCP/UDP 端口测试及验证方法说明
  15. 爬虫练习--豆瓣英美剧爬虫
  16. SSM+老年人社区服务平台 毕业设计-附源码211711
  17. 抖音天花板,电商冲不破
  18. 变步长龙格库塔法matlab代码,matlab龙格库塔法变步长龙格库塔法.doc
  19. HttpClient 模拟登录手机版新浪微博
  20. WideDeep论文翻译

热门文章

  1. OSI的7层模型和TCP/IP四层模型
  2. vuecli 实现导航切换
  3. linux高性能服务器编程书本总结
  4. Security安全登录
  5. ffmpeg运行在服务器上,如何在脱离流媒体服务器的时候使用ffmpeg 监测.m3u8直播视频流的状态?...
  6. c++17文件系统<filesystem>
  7. 基于Gromacs的蛋白分子动力学模拟(RMSD、RMSF及蛋白的回旋半径)
  8. C语言中alarm的应用
  9. Springboot 删除指定文件夹或文件(Java删除指定文件夹或文件)
  10. torch.repeat()与numpy.repeat()和 numpy.tile()比较