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

在处理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. $().each() 与 $.each()解析

    在jquery 中我们可以选择$().each() 与 $.each() 进行迭代对象和数组 $(items).each(function(){ //item }) , 而后者则 $.each(ite ...

  2. [Asp.net]c#中的斜杠和反斜杠

    引言 在外地出差,给客户部署项目,三家做的项目要在一起集成,这就造成数据格式不同,路径中的斜杠和反斜杠造成了很大的问题. 查了一下这方面的资料,这里做一些记录,算是一个小结吧. 正斜杠(/)与反斜杠( ...

  3. c# winform 火狐浏览器 查看cookie

    c# winform 火狐浏览器 查看cookie Firefox的Cookie数据位于:%APPDATA%\Mozilla\Firefox\Profiles\ 目录中的xxx.default目录,名 ...

  4. 【Moqui业务逻辑翻译系列】Shipment Receiver Receives Shipment with Packing Slip but no PO

    Shipment Receiver receives shipment. It has invoice tucked into it. Receiver records vendor name, ve ...

  5. MVC4 code first 增加属性,对应自动修改列的方法笔记

    VS工具>库程序包管理器>程序包管理控制台,然后输入以下命令 enable-migrations -contexttypename Mvc4Application1.Models.Movi ...

  6. 用CSS做长度超过长度显示‘...’,当鼠标放上时显示全部内容

    <!DOCTYPE html> <html> <head> <meta name="author" content="Yeeku ...

  7. WebForm之Linq组合查询

    组合查询 protected void Button1_Click(object sender, EventArgs e) { //默认查询所有,返回的是Table类型,转换成IQueryAble类型 ...

  8. hdu2444 判断二分图+最大匹配

    #include<stdio.h> #include<string.h> #include<queue> using namespace std; #define ...

  9. Java基础-String 存储机制管理

    JVM运行的时候,将内存分为两个部分,一部分是堆,一部分是栈.堆中存放的是创建对象,而栈中存放的则是方法调用过程中的局部变量或引用.在设计JAVA字符串对象内存实现的时候,在堆中又开辟了一块很小的内存 ...

  10. BZOJ-1927 星际竞速 最小费用最大流+拆点+不坑建图

    1927: [Sdoi2010]星际竞速 Time Limit: 20 Sec Memory Limit: 259 MB Submit: 1593 Solved: 967 [Submit][Statu ...