返回顶部
首页 > 资讯 > 精选 >均匀分布与天真的洗牌?
  • 483
分享到

均匀分布与天真的洗牌?

排列 2024-02-09 08:02:34 483人浏览 薄情痞子
摘要

PHP小编小新将为大家揭秘"均匀分布与天真的洗牌"之间的关系。在计算机科学中,洗牌是一种重要的操作,常用于随机化数据或集合。而均匀分布是指在一定范围内的随机数分布是平均的。那么,洗牌是

PHP小编小新将为大家揭秘"均匀分布与天真的洗牌"之间的关系。在计算机科学中,洗牌是一种重要的操作,常用于随机化数据或集合。而均匀分布是指在一定范围内的随机数分布是平均的。那么,洗牌是否能保证均匀分布呢?答案并不简单,让我们一起来探讨这个问题。

问题内容

我正在对一个 3 int 数组进行 600 万次洗牌。我在地图中记录数组的每个排列。下面是使用 Go 的代码。

package main

import (
    "fmt"
    "math/rand"
    "time"
)

func randrange(min, max int) int {
    return rand.intn(max-min+1) + min
}

func naiveshuffle(arr *[3]int) {
    for i := 0; i < 3; i++ {
        e := randrange(0, 2)
        arr[e], arr[i] = arr[i], arr[e]
    }
}

func main() {
    rand.seed(time.now().unixnano())
    m := make(map[[3]int]int, 6)
    arr := [3]int{-6,10,184}

    for i := 1; i <= 6000000; i++ {
        a := arr
        naiveshuffle(&arr)
        m[a]++
    }

    for k, v := range m {
        fmt.println(k, ":", v)
    }

}

由于我正在进行简单的洗牌,我的理解是它不应该产生均匀分布的排列。但这就是我得到的:

[184 -6 10] : 1000074
[184 10 -6] : 1000764
[-6 10 184] : 1000766
[10 184 -6] : 998090
[-6 184 10] : 1000479
[10 -6 184] : 999827

这表明 6 种可能的排列中的每一种都发生大约 100 万次。为什么我得到的分布看起来是均匀的?

编辑:将代码更改为仅种子一次。我现在得到:

[-6 184 10] : 999507
[184 -6 10] : 1000401
[10 -6 184] : 1002163
[10 184 -6] : 999236
[-6 10 184] : 999016
[184 10 -6] : 999677

编辑2:感谢霍布斯,我意识到我犯了一个愚蠢的错误。我应该洗牌 a,而不是 arr。我现在得到:

[10 -6 184] : 1111056
[-6 10 184] : 888442
[184 -6 10] : 888576
[10 184 -6] : 1109896
[-6 184 10] : 1113148
[184 10 -6] : 888882

解决方法

您对 arr 进行了超过 600 万次洗牌,而没有在两次洗牌之间将其恢复到其原始状态 - 换句话说,您的 600 万次试验并不是独立的。尽管每次洗牌的排列分布不均匀,但将这些排列相互叠加 600 万次会产生非常接近均匀的分布。

以上就是均匀分布与天真的洗牌?的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: 均匀分布与天真的洗牌?

本文链接: https://lsjlt.com/news/562309.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 均匀分布与天真的洗牌?
    php小编小新将为大家揭秘"均匀分布与天真的洗牌"之间的关系。在计算机科学中,洗牌是一种重要的操作,常用于随机化数据或集合。而均匀分布是指在一定范围内的随机数分布是平均的。那么,洗牌是...
    99+
    2024-02-09
    排列
  • Python随机生成均匀分布在单位圆内的点代码示例
    Python有一随机函数可以产生[0,1)区间内的随机数,但是如果我们想生成随机分布在单位圆上的,那么我们可以首先生成随机分布在单位圆边上的点,然后随机调整每个点距离原点的距离,但是我们发现这个距离不是均匀...
    99+
    2022-06-04
    示例 均匀 单位
  • 负载均衡与分布式的区别
    负载均衡与分布式的区别:1、负载均衡与分布式的集群处理维度不同;2、分布式管控所有节点的执行过程,而负载均衡则不对节点进行管控;3、分布式中节点是相互依存的,而负载均衡中各节点之间是平等独立的;4、分布式某节点宕机会直接影响全部程序运行,而...
    99+
    2024-04-02
  • 怎么用css实现盒尺寸重置、均匀分布的子元素、截断文本
    本篇内容介绍了“怎么用css实现盒尺寸重置、均匀分布的子元素、截断文本”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够...
    99+
    2024-04-02
  • PHP开发缓存的分布式与负载均衡
    随着互联网的不断发展,网站的访问量越来越大,为了保证网站的可用性和性能,缓存、分布式和负载均衡成为了必不可少的技术。在PHP开发中,如何实现缓存的分布式和负载均衡是一大挑战。在本文中,将介绍基于Redis和Memcached的分布式缓存和基...
    99+
    2023-11-07
    缓存 分布式 PHP开发
  • MongoDB的分布式架构与负载均衡怎么配置
    MongoDB是一个支持分布式架构的数据库系统,它可以通过配置副本集和分片集群来实现数据的分布存储和负载均衡。 在MongoDB中,...
    99+
    2024-05-07
    MongoDB
  • Java EJB与区块链,探索分布式应用的新天地
    1. Java EJB概述 Java Enterprise JavaBeans(EJB)是一种Java框架,用于开发分布式、多层企业应用程序。EJB 提供了事务管理、资源池和持久性等关键特性,简化了应用程序开发。EJB 组件封装了业务逻...
    99+
    2024-02-20
    Java EJB 区块链 分布式应用程序 智能合约 Hyperledger Fabric Ethereum
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作