算法之美--1.蒙特卡洛方法计算pi

#include <iostream>
#include <iomanip>

using namespace std;

#define  SIZE 8
int main(int argc, char **argv[])
{
    int matrix[SIZE][SIZE] = {0};
    int a[SIZE][SIZE] = { 0 };

    int *p = nullptr;
    p = &matrix[0][0];
    //初始化矩阵
    for (int k = 0; k < SIZE*SIZE; k++)
    {
        *p++ = k;
    }
    //打印原始矩阵
    cout << "原始矩阵如下:" << endl;
    for (int k= 0;k < SIZE;k++)
    {
        for (int h = 0; h < SIZE;h++)
        {
            cout << setw(4) << *(*(matrix + k) + h);
        }
        cout << endl;
    }

    //Z字形编排
    int i = 0, j = 0;  //变量不能重复
    for (int x = 0; x < SIZE;x++)
    {
        for (int y = 0; y < SIZE;y++)
        {
            *(*(a + i) + j) = *(*(matrix + x) + y);

            if((i==SIZE-1||i==0)&&j%2==0)  //水平右移
            {
                j++;
                continue;
            }
            if ((j==0||j==SIZE-1)&&i%2==1) //垂直下移
            {
                i++;
                continue;
            }
            if ((i+j)%2==0)        //右上
            {
                i--;
                j++;
            }
            else if ((i+j)%2==1)   //左下
            {
                i++;
                j--;
            }
        }
    }
    cout << endl << "经过Z字形编排后的矩阵如下:" << endl;
    for (int i = 0; i < SIZE;i++)
    {
        for (int j = 0; j < SIZE;j++)
        {
            cout << setw(4) << *(*(a + i) + j);
        }
        cout << endl;
    }
    return 0;
}

运行结果:

原始矩阵如下:
   0   1   2   3   4   5   6   7
   8   9  10  11  12  13  14  15
  16  17  18  19  20  21  22  23
  24  25  26  27  28  29  30  31
  32  33  34  35  36  37  38  39
  40  41  42  43  44  45  46  47
  48  49  50  51  52  53  54  55
  56  57  58  59  60  61  62  63

经过Z字形编排后的矩阵如下:
   0   1   5   6  14  15  27  28
   2   4   7  13  16  26  29  42
   3   8  12  17  25  30  41  43
   9  11  18  24  31  40  44  53
  10  19  23  32  39  45  52  54
  20  22  33  38  46  51  55  60
  21  34  37  47  50  56  59  61
  35  36  48  49  57  58  62  63
请按任意键继续. . .
时间: 2024-12-26 01:43:50

算法之美--1.蒙特卡洛方法计算pi的相关文章

蒙特卡洛方法计算pi

基本思想: 利用圆与其外接正方形面积之比为pi/4的关系,通过产生大量均匀分布的二维点,计算落在单位圆和单位正方形的数量之比再乘以4便得到pi的近似值.样本点越多,计算出的数据将会越接近真识的pi(前提时样本是"真正的"随机分布). 蒙特卡罗(Monte Carlo)算法计算圆周率的主要思想:给定边长为R的正方形,画其内切圆,然后在正方形内随机打点,设点落在圆内的概为P,则根据概率学原理:    P = 圆面积 / 正方形面积 = PI * R * R / 2R * 2R = PI /

用蒙特卡洛方法计算派-python和R语言

用蒙特卡洛方法算pi-基于python和R语言 最近follow了MOOC上一门python课,开始学Python.同时,买来了概率论与数理统计,准备自学一下统计.(因为被鄙视过不是统计专业却想搞数据分析) 有趣的是书里面有一块讲蒲丰投针计算Pi,这是一种随机模拟法,也就是蒙特卡洛法.蒲丰投针之于我太难,暂时没想到怎么用计算机模拟这一过程. python课中,老师也提到用随机模拟法,也就是蒙特卡洛法(MonteCarlo),用计算机模拟几千次实验,计算pi的近似值.好巧. 就拿python课中的

蒙特卡洛方法计算圆周率的三种实现-MPI openmp pthread

蒙特卡洛方法实现计算圆周率的方法比较简单,其思想是假设我们向一个正方形的标靶上随机投掷飞镖,靶心在正中央,标靶的长和宽都是2 英尺.同时假设有一个圆与标靶内切.圆的半径是1英尺,面积是π平方英尺.如果击中点在标靶上是均匀分布的(我们总会击中正方形),那么飞镖击中圆的数量近似满足等式 飞镖落在圆内的次数/飞镖落在标靶内的总次数=π/4 因为环包含的面积与正方形面积的比值是π/4. 因为环所包含的面积与正方形面积的比值是π/4. 我们可以用这个公式和随机数产生器来估计π的值. 伪代码如下: numb

增强学习Reinforcement Learning经典算法梳理2:蒙特卡洛方法

1 前言 在上一篇文章中,我们介绍了基于Bellman方程而得到的Policy Iteration和Value Iteration两种基本的算法,但是这两种算法实际上很难直接应用,原因在于依然是偏于理想化的两个算法,需要知道状态转移概率,也需要遍历所有的状态.对于遍历状态这个事,我们当然可以不用做到完全遍历,而只需要尽可能的通过探索来遍及各种状态即可.而对于状态转移概率,也就是依赖于模型Model,这是比较困难的事情. 什么是状态转移?就比如一颗子弹,如果我知道它的运动速度,运动的当前位置,空气

二十世纪最有影响力的十大算法之一: 蒙特卡洛方法

第一部分:算法介绍 [1946: John von Neumann, Stan Ulam, and Nick Metropolis, all at the Los Alamos Scientific Laboratory, cook up the Metropolis algorithm, also known as the Monte Carlo method.]1946年,美国拉斯阿莫斯国家实验室的三位科学家John von Neumann,Stan Ulam 和 Nick Metropol

余弦方法计算相似度算法实现

http://blog.csdn.net/cscmaker/article/details/7990600 余弦方法计算相似度算法实现 (1)余弦相似性 通过测量两个向量之间的角的余弦值来度量它们之间的相似性.0度角的余弦值是1,而其他任何角度的余弦值都不大于1;并且其最小值是-1.从而两个向量之间的角度的余弦值确定两个向量是否大致指向相同的方向.所以,它通常用于文件比较. 详见百科介绍(点击打开链接) (2)算法实现的中未使用权重(IDF ---逆文档频率),使用词项的出现次数作为向量空间的值

用hadoop计算PI值

一.计算PI值的方式与原理 百度一下,计算PI的方法还真不少.但在hadoop examples代码中的注释写的是:是采用 Quasi-Monte Carlo 算法来估算PI的值. 维基百科中对Quasi-Monte Carlo的描述比较理论,好多难懂的公式. 好在google了一把,找到了斯坦福大学网站上的一篇文章:<通过扔飞镖也能得出PI的值?>,文章很短,图文并茂,而且很好理解. 我这里将那篇文章的重要部分截了个图: 对上面的图再稍微解释一下:       1.Figure2是Figur

一文读懂蒙特卡洛方法:谷歌围棋机器人科普

蒙特卡罗方法入门 本文通过五个例子,介绍蒙特卡罗方法(Monte Carlo Method). 一.概述 蒙特卡罗方法是一种计算方法.原理是通过大量随机样本,去了解一个系统,进而得到所要计算的值. 它非常强大和灵活,又相当简单易懂,很容易实现.对于许多问题来说,它往往是最简单的计算方法,有时甚至是唯一可行的方法. 它诞生于上个世纪40年代美国的"曼哈顿计划",名字来源于赌城蒙特卡罗,象征概率. 二.π的计算 第一个例子是,如何用蒙特卡罗方法计算圆周率π. 正方形内部有一个相切的圆,它们

(转)Monte Carlo method 蒙特卡洛方法

转载自:维基百科  蒙特卡洛方法 https://zh.wikipedia.org/wiki/%E8%92%99%E5%9C%B0%E5%8D%A1%E7%BE%85%E6%96%B9%E6%B3%95 蒙特卡洛方法[编辑] 维基百科,自由的百科全书 蒙特卡洛方法(英语:Monte Carlo method),也称统计模拟方法,是二十世纪四十年代中期由于科学技术的发展和电子计算机的发明,而被提出的一种以概率统计理论为指导的一类非常重要的数值计算方法.是指使用随机数(或更常见的伪随机数)来解决很多