第一范文网 - 专业文章范例文档资料分享平台

经典ACM算法合集经典ACM算法合集(16)

来源:用户分享 时间:2021-06-02 本文由长路漫漫 分享 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

经典ACM算法合集经典ACM算法合集

间复杂度为。

实验十五 集合相等问题

1、问题描述:
? 给定2个集合S和T,试设计一个判定S和 T是否相等的蒙特卡罗算法。

2、题目分析:
题目要求用蒙特卡罗算法进行求解,随机选择集合S中的元素与集合T中的元素进行比较,若随机选择很多次都能从集合T中找到与之对应的相等,则集合S和T相等。

3、算法设计:
a. 蒙特卡罗算法Majority对从集合S中随机选择的数组元素x,测试集合T中是否有
与之相等的元素:若算法返回的结果为true,则集合T中有与x相等的元素;若返回false,
则集合T中不存在与x相等的元素,因而集合S和 T不相等。
b. 算法MajorityMC重复调用次算法Majority,调用过程中若Majority
返回true则继续调用,否则可以判定集合S和 T不相等(MajorityMC返回false)。
c. 主函数调用算法MajorityMC:若返回true,则集合T和集合S相等;若返回false,
则集合S和 T不相等。

4、源程序:

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include <time.h>

bool Majority(int *S,int *T,int n)
{
int i,j,x;
bool k;
time_t t;
//利用随机函数rand求0—n-1的随机数i
srand((unsigned)time(&t));
i=rand()%(n)-1;
x=S[i];
k=0;
for(j=0;j<n;j++)
{
if(T[j]==x)
k=1;
}
return k;
}

bool MajorityMC(int *S,int *T,int n)
{//重复次调用算法Majority
int k;
double e;
e=0.00001;
//利用函数ceil求
k=(int)ceil(log(1/e));
for(int i=1;i<=k;i++)
{
if(!Majority(S,T,n))
return 0;
}
return 1;
}

main()
{
int i,n;
int S[100000],T[100000];
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&S[i]);
for(i=0;i<n;i++)
scanf("%d",&T[i]);
if(MajorityMC(S,T,n))
printf("YES");
else printf("NO");
return 0;
}

5、算法分析:
蒙特卡罗算法Majority的时间复杂度为O(n);算法MajorityMC重复调用
次算法Majority,时间复杂度为;主函数调用算法MajorityMC,故该算
法的时间复杂度为。


实验十六 战车问题

1、问题描述:
? 在 n×n格的棋盘上放置彼此不受攻击的车。按照国际象棋的规则,车可以攻击与之处在同一行或同一列上的棋子。在棋盘上的若干个格中设置了堡垒,战车无法穿越堡垒攻击别的战车。对于给定的设置了堡垒的 n×n格棋盘,设计一个概率算法,在棋盘上放置尽可能多彼此不受攻击的车。

2、题目分析:
从第一行开始随机产生
一个位置,看战车在该位置上能否放置,分三种情况讨论:
a. 该随机位置对应在棋盘上是一个堡垒,则不能放置;
b. 该位置与前面放置的战车相冲突,即在受前面放置战车攻击的位置上,则
也不能放置;
c. 该随机位置不受攻击也不是堡垒,则可以放置;
如果不能放置,则重新产生一个随机位

搜索“diyifanwen.net”或“第一范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,第一范文网,提供最新人文社科经典ACM算法合集经典ACM算法合集(16)全文阅读和word下载服务。

经典ACM算法合集经典ACM算法合集(16).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/wenku/1198539.html(转载请注明文章来源)
热门推荐
Copyright © 2018-2022 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top