周三的算法课,主要讲了随机化算法,介绍了拉斯维加斯算法,简单的理解了为什么要用随机化算法,随机化算法有什么好处。

在处理8皇后问题的时候,穷举法是最费时的,回朔比穷举好点,而当数据量比较大的时候,如1000皇后问题,穷举的化有1000的1000次方,肯定超时,用随机化算法的思路,先随机的在棋盘上放一部分皇后,再来设计算法,会大大节省时间,使算法性能更加优良。

本篇介绍令一种随机化算法,舍伍德(Sherwood)算法。

题目:

Matrix Multiplication

Time Limit: 2000MS   Memory Limit: 65536K
Total Submissions: 16118   Accepted: 3485

You are given three n × n matrices A, B and C. Does the equation A × B = C hold true?

Input:

The first line of input contains a positive integer n (n ≤ 500) followed by the the three matrices A, B and C respectively. Each matrix's description is a block of n × n integers.

It guarantees that the elements of A and B are less than 100 in absolute value and elements of C are less than 10,000,000 in absolute value.

Output:

Output "YES" if the equation holds true, otherwise "NO".

Sample Input

2
1 0
2 3
5 1
0 8
5 1
10 26
Sample Output

YES
Hint

Multiple inputs will be tested. So O(n3) algorithm will get TLE.
Source

POJ Monthly--2007.08.05, qzc

解题思路:

输入3个n*n的矩阵ABC,计算A*B=C是否成立,若是输出Yes,否则输出No。

正常情况,从A的第一行A[0][j]和B的第一列B[i][0]相乘,看是不是等于C[0][0]。依次遍历所有行所有列。判断是否相等,相等继续,不相等直接返回false。

而如果我们用随机化算法的思想,来解决这个问题的时候,随机化一行一列,row col来判断是否和C[row][col]相等。如果不相等,比如A*B=C不满足,false跳出。

        for(i=;i<=n;i++)
temp+=A[row][i]*B[i][col];
if(temp!=C[row][col])
return ;

这种随机化算法和拉斯维加斯算法又有点不同,将算法执行的步骤长短,更偏向于一种概率事件,是一种概率算法。

 #include <time.h>
#include <stdio.h>
#include <stdlib.h>
#define maxn 500
int A[maxn][maxn];
int B[maxn][maxn];
int C[maxn][maxn];
int n; void input(int c[maxn][maxn])
{
int i,j;
for(i=;i<=n;i++){
for(j=;j<=n;j++)
scanf("%d",&c[i][j]);
}
} int compared()
{
int row,col;//随机行数,列数
int k,i;
for(k=;k<=;k++)
{
row=rand()%n+;
col=rand()%n+;
int temp=;
for(i=;i<=n;i++)
temp+=A[row][i]*B[i][col];
if(temp!=C[row][col])
return ;
}
return ;
} int main()
{
scanf("%d",&n);
srand(time(NULL));
input(A);
input(B);
input(C);
if(compared())
printf("Yes");
else
printf("No");
}

关于随机行数,列数的循环的次数,开小了,担心测不出最终结果,开大了影响效率,大家有没有一些好的建议,欢迎讨论,不当之处,恳请指正。

总结:

LV算法和Sherwood算法的区别,拉斯维加斯算法不一定能得到解,但一旦得到解一定正确,在N皇后问题中,随机放至皇后越来越多,得到正确解的概率越小,但是代码执行的时间也是大大缩小。而舍伍德算法作为一种概率算法,并不受收入数据的大小影响,但得到结果所花的时间,成为了一种概率事件。

POJ 矩阵相乘 (随机化算法-舍伍德(Sherwood))的更多相关文章

  1. 舍伍德(Sherwood)算法学习笔记

    一.概念引入 设A是一个确定性算法,当它的输入实例为x时所需的计算时间记为tA(x).设Xn是算法A的输入规模为n的实例的全体,则当问题的输入规模为n时,算法A所需的平均时间为.这显然不能排除存在x∈ ...

  2. Strassen 矩阵相乘算法(转)

    偶尔在算法课本上面看到矩阵相乘的算法,联想到自己曾经在蓝桥杯系统上曾经做过一道矩阵相乘的题目,当时用的是普通的矩阵相乘的方法,效率极低,勉强通过编译.所以决定研究一下Strassen矩阵相乘算法,由于 ...

  3. C语言 · 矩阵相乘 · 算法提高

    算法提高 矩阵相乘   时间限制:1.0s   内存限制:256.0MB      问题描述 小明最近在为线性代数而头疼,线性代数确实很抽象(也很无聊),可惜他的老师正在讲这矩阵乘法这一段内容. 当然 ...

  4. Java实现 蓝桥杯 算法提高 矩阵相乘

    算法提高 矩阵相乘 时间限制:1.0s 内存限制:256.0MB 问题描述 小明最近在为线性代数而头疼,线性代数确实很抽象(也很无聊),可惜他的老师正在讲这矩阵乘法这一段内容. 当然,小明上课打瞌睡也 ...

  5. Java实验项目四——多线程矩阵相乘算法的设计

    Program:多线程矩阵相乘算法的设计 Description:利用多线程实现矩阵相乘,因为各个线程的运算互不影响, 所以不用使用锁,代码如下: thread.OperateMatrix类,实现矩阵 ...

  6. POJ 2246 Matrix Chain Multiplication(结构体+栈+模拟+矩阵相乘)

    题意:给出矩阵相乘的表达式,让你计算需要的相乘次数,如果不能相乘,则输出error. 思路: 参考的网站连接:http://blog.csdn.net/wangjian8006/article/det ...

  7. POJ 1651:Multiplication Puzzle 矩阵相乘式DP

    Multiplication Puzzle Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7118   Accepted:  ...

  8. POJ3318--Matrix Multiplication 随机化算法

    Description You are given three n × n matrices A, B and C. Does the equation A × B = C hold true? In ...

  9. 利用Hadoop实现超大矩阵相乘之我见(二)

    前文 在<利用Hadoop实现超大矩阵相乘之我见(一)>中我们所介绍的方法有着“计算过程中文件占用存储空间大”这个缺陷,本文中我们着重解决这个问题. 矩阵相乘计算思想 传统的矩阵相乘方法为 ...

随机推荐

  1. jqurey 遍历 div内的所有input单选复选按钮并判断是否选中及Attr(checked)无效的解决

    关于页面前面标签 <ul> @{ foreach (var item in vote) { if (!string.IsNullOrEmpty(item.Img)) { <li cl ...

  2. linux下定时任务的使用

    使用方法 执行crontab -e命令会进入一个可编辑界面,在该界面中我们可以制定定时任务,然后保存退出(wq) 格式如下: 由于直接运行编辑命令后只是一个空白界面,不够友好,所以建议使用以下方式来增 ...

  3. WPF MenuItem 四种角色分析

    Menu Menu的样式很简单,就是顶部的那个框,如下图     而其中的文字“文件”“图形”...是属于MenuItem的,要灵活使用MenuItem,就需要了解MenuItem.Role的作用 T ...

  4. 每天一个linux命令(40):watch命令

    watch是一个非常实用的命令,基本所有的Linux发行版都带有这个小工具,如同名字一样,watch可以帮你监测一个命令的运行结果,省得你一遍遍的手动运行.在Linux下,watch是周期性的执行下个 ...

  5. Mvc多级Views目录 asp.net mvc4 路由重写及 修改view 的寻找视图的规则

    一般我们在mvc开发过程中,都会碰到这样的问题.页面总是写在Views文件夹下,而且还只能一个Controller的页面只能写在相应的以 Controller名命名的文件夹下.如果我们写到别处呢?那么 ...

  6. 【BZOJ】3527: [Zjoi2014]力(fft+卷积)

    http://www.lydsy.com/JudgeOnline/problem.php?id=3527 好好的一道模板题,我自己被自己坑了好久.. 首先题目看错.......什么玩意.......首 ...

  7. Android Fresco (Facebook开源的图片加载管理库)

    Fresco是Facebook开源的一个图片加载和管理库. 这里是Fresco的GitHub网址. 同类型的开源库市面有非常多,比如Picasso, Universal Image Loader, G ...

  8. 使用ssis完成excel的数据导入

    SSIS(SQL Server Integration Service)是从MS SQL 2005开始引入的,是一种ETL(Extract Transform Load)工具,SSIS比普通的ETL更 ...

  9. SSH配置文件和SSM配置文件的写法

    一.SSH配置文件的写法(XML版本) <util:properties id="jdbc" location="classpath:db.properties&q ...

  10. C#获取本机磁盘信息

    照着书敲的.留作笔记吧. using System; using System.Collections.Generic; using System.Linq; using System.Text; u ...