算法系统学习-取数先取如何必定获胜?(相对或近似贪心)

简介: 该系列是基于有一定语言基础(C,C++,Java等等)和基本的数据结构基础进行的算法学习专栏,如果觉得有点吃力 😥 ,建议先了解前提知识再学习喔!本个专栏会将用更容易理解的表达去学习算法,如果在一些表述上存在问题还请各位多多指点

取数游戏


有AB 两个人轮流取2n个数中的n个数,取数之和大者为胜,若相同则先取者胜。请用算法让先取数的人胜(取数时只能看到2n个数的两边的数,即每次都只能看到该头和尾)

假设这组数为:6,16,27,6,12,9,2,11,6,5。用贪心策略每次两人都取两边的数中较大的一个数

算法分析:

用贪心算法的情况来看:

假设A,B两人取数,每次都只能取两边,那么6,16,27,6,12,9,2,11,6,5,先取者胜,以A先取,取数结果为:

第几次取数 1 2 3 4 5 总和
A 6 27 12 5 11 61
B 16 6 9 6 2 29

所以A胜出

但是如果数据的不同也将会影响结果

假设这组数据为:

16,27,7,12,9,2,11,6 如果仍然用贪心算法,先取数时A败

第几次取数 1 2 3 4 总和
A 16 7 9 11 43
B 27 12 6 2 47

所以B胜出

其实,我们只能看到两边的数据,无论是先取还是后取都无法保证100%胜出,因此我们这时一般的策略是用近似贪婪算法

数学模型建立:

假设A和B玩这游戏,N个数排成一行,从左到右编号,依次是1,2,3........N因为N为偶数,又因为A先取数,B后取,,所以A可以一开始选择先取奇数(即最左边的数),又可以选择偶数(即最右边的数)

假设A第一次取奇数编号(编号为1)的数,则接着B只能取到偶数编号(编号为2或者N)的数。

假设B第一次取到偶数编号(编号为N)的数,则接着B只能取到奇数编号(编号为1或N-1)的数。

因此无论A第一次怎么取数,而B只能取到另一边的数(偶编号或者奇编号)的数

以上是对第一个回合的分析,显然对后续也是一样的适用的。也就是说,A能够让B自始至终只取一种编号的数。这样,我们只要比较奇编号之和与偶编号之和,谁大,以决定最开始A是取奇数还是偶数即可。

算法设计:

有了以上的数学模型,那么我们只需要计算一组数的奇数位和偶数位的数据之和,然后就可以确定先取数者必胜的取数方式。

main(){
int i,s1,s2,data;
    cin>>n;
    s1=0;
    s2=0;
    for(i=1;i<=n;i++){
    cin>>data;
        if(i mod 2=0){
        s2=s2+data;
        }else{
        s1=s1+data;
        }
    }if(s1>s2){
    cout<<"拿左边"
    }else{
      cout<<"拿右边"
    }
}

因此,在算法设计之前数学模型的选择是非常重要的。

目录
相关文章
|
14天前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的眼疾识别系统实现~人工智能+卷积网络算法
眼疾识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了4种常见的眼疾图像数据集(白内障、糖尿病性视网膜病变、青光眼和正常眼睛) 再使用通过搭建的算法模型对数据集进行训练得到一个识别精度较高的模型,然后保存为为本地h5格式文件。最后使用Django框架搭建了一个Web网页平台可视化操作界面,实现用户上传一张眼疾图片识别其名称。
68 4
基于Python深度学习的眼疾识别系统实现~人工智能+卷积网络算法
|
1月前
|
机器学习/深度学习 人工智能 算法
猫狗宠物识别系统Python+TensorFlow+人工智能+深度学习+卷积网络算法
宠物识别系统使用Python和TensorFlow搭建卷积神经网络,基于37种常见猫狗数据集训练高精度模型,并保存为h5格式。通过Django框架搭建Web平台,用户上传宠物图片即可识别其名称,提供便捷的宠物识别服务。
286 55
|
24天前
|
存储 缓存 监控
局域网屏幕监控系统中的Python数据结构与算法实现
局域网屏幕监控系统用于实时捕获和监控局域网内多台设备的屏幕内容。本文介绍了一种基于Python双端队列(Deque)实现的滑动窗口数据缓存机制,以处理连续的屏幕帧数据流。通过固定长度的窗口,高效增删数据,确保低延迟显示和存储。该算法适用于数据压缩、异常检测等场景,保证系统在高负载下稳定运行。 本文转载自:https://www.vipshare.com
118 66
|
6天前
|
负载均衡 算法
架构学习:7种负载均衡算法策略
四层负载均衡包括数据链路层、网络层和应用层负载均衡。数据链路层通过修改MAC地址转发帧;网络层通过改变IP地址实现数据包转发;应用层有多种策略,如轮循、权重轮循、随机、权重随机、一致性哈希、响应速度和最少连接数均衡,确保请求合理分配到服务器,提升性能与稳定性。
60 11
架构学习:7种负载均衡算法策略
|
1月前
|
机器学习/深度学习 人工智能 算法
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
宠物识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了37种常见的猫狗宠物种类数据集【'阿比西尼亚猫(Abyssinian)', '孟加拉猫(Bengal)', '暹罗猫(Birman)', '孟买猫(Bombay)', '英国短毛猫(British Shorthair)', '埃及猫(Egyptian Mau)', '缅因猫(Maine Coon)', '波斯猫(Persian)', '布偶猫(Ragdoll)', '俄罗斯蓝猫(Russian Blue)', '暹罗猫(Siamese)', '斯芬克斯猫(Sphynx)', '美国斗牛犬
189 29
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
|
17天前
|
算法
基于爬山法MPPT最大功率跟踪算法的光伏发电系统simulink建模与仿真
本课题基于爬山法MPPT算法,对光伏发电系统进行Simulink建模与仿真。使用MATLAB2022a版本,通过调整光伏电池的工作状态以实现最大功率输出。爬山法通过逐步优化工作点,确保光伏系统在不同条件下均能接近最大功率点。仿真结果显示该方法的有效性,验证了模型的正确性和可行性。
|
20天前
|
监控 算法 JavaScript
基于 Node.js Socket 算法搭建局域网屏幕监控系统
在数字化办公环境中,局域网屏幕监控系统至关重要。基于Node.js的Socket算法实现高效、稳定的实时屏幕数据传输,助力企业保障信息安全、监督工作状态和远程技术支持。通过Socket建立监控端与被监控端的数据桥梁,确保实时画面呈现。实际部署需合理分配带宽并加密传输,确保信息安全。企业在使用时应权衡利弊,遵循法规,保障员工权益。
34 7
|
1月前
|
机器学习/深度学习 缓存 人工智能
【AI系统】QNNPack 算法
QNNPACK是Marat Dukhan开发的量化神经网络计算加速库,专为移动端优化,性能卓越。本文介绍QNNPACK的实现,包括间接卷积算法、内存重排和间接缓冲区等关键技术,有效解决了传统Im2Col+GEMM方法存在的空间消耗大、缓存效率低等问题,显著提升了量化神经网络的计算效率。
44 6
【AI系统】QNNPack 算法
|
1月前
|
存储 人工智能 缓存
【AI系统】Im2Col 算法
Caffe 作为早期的 AI 框架,采用 Im2Col 方法优化卷积计算。Im2Col 将卷积操作转换为矩阵乘法,通过将输入数据重排为连续内存中的矩阵,减少内存访问次数,提高计算效率。该方法首先将输入图像转换为矩阵,然后利用 GEMM 库加速计算,最后将结果转换回原格式。这种方式显著提升了卷积计算的速度,尤其适用于通道数较多的卷积层。
57 5
【AI系统】Im2Col 算法
|
1月前
|
存储 机器学习/深度学习 人工智能
【AI系统】Winograd 算法
本文详细介绍Winograd优化算法,该算法通过增加加法操作来减少乘法操作,从而加速卷积计算。文章首先回顾Im2Col技术和空间组合优化,然后深入讲解Winograd算法原理及其在一维和二维卷积中的应用,最后讨论算法的局限性和实现步骤。Winograd算法在特定卷积参数下表现优异,但其应用范围受限。
46 2
【AI系统】Winograd 算法

热门文章

最新文章