Questions tagged «random»

该标签用于处理随机数,伪随机数和计算机熵的问题。

10
我应该如何测试随机性?
考虑一种随机调整数组元素的方法。您将如何编写一个简单而健壮的单元测试以确保其正常工作? 我提出了两个想法,两个都有明显的缺陷: 随机排列数组,然后确保其顺序与以前不同。这听起来不错,但是如果随机播放以相同顺序随机播放,则失败。(不可能,但可能。) 用恒定的种子对数组进行混洗,并根据预定的输出进行检查。这依赖于随机函数始终在给定相同种子的情况下始终返回相同的值。但是,有时这是一个无效的假设。 考虑第二个函数,该函数模拟掷骰子并返回随机数。您将如何测试此功能?您将如何测试该功能... 永远不会返回给定范围之外的数字? 返回有效分布中的数字?(一个骰子统一,大量骰子正常。) 我正在寻找答案,以提供不仅可以测试这些示例,而且可以测试常规代码的随机元素。这里的单元测试甚至是正确的解决方案吗?如果没有,那是什么样的测试? 只是为了让大家放心,我没有编写自己的随机数生成器。

4
函数式语言如何处理随机数?
我的意思是,在我阅读过的几乎所有有关函数式语言的教程中,都是关于函数的妙处之一,就是如果您两次调用具有相同参数的函数,那么总会得到同样的结果。 您究竟如何创建一个以种子为参数,然后基于该种子返回随机数的函数? 我的意思是,这似乎与功能方面的优势之一背道而驰,对吧?还是我在这里完全错过了什么?

5
获得加权随机项目
我有这个桌子 + ----------------- + | 水果 重量 + ----------------- + | 苹果| 4 | | 橙色| 2 | | 柠檬| 1 | + ----------------- + 我需要归还随机水果。但是苹果的采摘频率应该是柠檬的 4倍和橙子的 2倍。 在更一般的情况下,它应该f(weight)经常出现。 什么是实现此行为的良好通用算法? 也许在Ruby上有一些现成的宝石?:) PS 我已经在Ruby https://github.com/fl00r/pickup中实现了当前算法
51 algorithms  ruby  math  random 

9
为什么不可能产生真正的随机数?
我试图解决一个爱好问题,该问题需要生成一百万个随机数。但是我很快意识到,使其变得独特变得越来越困难。我阅读了《算法设计手册》,以了解有关随机数生成的信息。 它有以下一段我完全无法理解。 不幸的是,生成随机数看起来比实际要容易得多。实际上,从根本上不可能在任何确定性设备上产生真正的随机数。冯·诺依曼[Neu63]最好说:“任何考虑产生随机数的算术方法的人,当然都处于犯罪状态。”我们所能期望的最好是伪随机数,它像一串数字如果它们是随机生成的。 为什么在任何确定性设备中都不可能产生真正的随机数?这句话是什么意思?

14
固有随机/非确定性算法的单元测试
简而言之,我当前的项目涉及“约束随机事件”的创建。我基本上是在制定检查时间表。其中一些是基于严格的计划约束;您每周星期五10:00 AM进行一次检查。其他检查是“随机的”;有一些基本的可配置要求,例如“每周必须进行3次检查”,“必须在9 AM-9PM的时间之间进行检查”以及“在同一8小时内不应进行两次检查”,但是在为一组特定的检查配置的任何限制内,得出的日期和时间均不可预测。 单元测试和TDD,IMO在此系统中具有巨大的价值,因为它们可以用于按增量方式构建它,而整套需求仍然不完整,并确保我不会“过度设计”它来做我不喜欢的事情目前不知道我需要。严格的时间表对TDD来说是小菜一碟。但是,当我为系统的随机部分编写测试时,我发现很难真正定义要测试的内容。我可以断言调度程序产生的所有时间都必须在约束范围内,但是我可以实现通过所有此类测试的算法,而实际时间却不是很“随机”。实际上,这正是发生的事情。我发现了一个问题,尽管时间无法精确预测,但它属于允许的日期/时间范围的一小部分。该算法仍然通过了我认为我可以合理做出的所有断言,并且我无法设计在这种情况下会失败的自动测试,但是在给出“更​​多随机”结果时通过。我必须证明该问题是通过重组一些现有测试以重复多次来解决的,并目视检查生成的时间是否在整个允许范围内。 有没有人提供设计非预期行为的提示? 感谢所有的建议。主要观点似乎是,我需要进行确定性测试才能获得确定性,可重复性和可肯定的结果。说得通。 我创建了一组“沙盒”测试,其中包含用于约束过程(可能为任意长的字节数组在最小值和最大值之间变长的过程)的候选算法。然后,我通过一个FOR循环运行该代码,该循环为该算法提供了几个已知的字节数组(刚开始时从1到10,000,000的值),并使该算法将每个值限制为1009到7919之间的值(我使用质数来确保算法不会在输入和输出范围之间经过一些偶然的GCF)。计算得到的约束值,并生成直方图。要“通过”,所有输入都必须反映在直方图中(为了确保我们不会“丢失”任何值),直方图中任意两个存储桶之间的差不能大于2(实际上应小于等于1) ,但请继续关注)。获胜的算法(如果有)可以直接剪切并粘贴到生产代码中,并进行永久测试以进行回归。 这是代码: private void TestConstraintAlgorithm(int min, int max, Func<byte[], long, long, long> constraintAlgorithm) { var histogram = new int[max-min+1]; for (int i = 1; i <= 10000000; i++) { //This is the stand-in for the PRNG; produces a known byte array var buffer …

11
人脑的随机数生成算法?[关闭]
您是否知道或已设计出任何实用的,易于学习的“头脑中”算法,从而使人们可以生成(有点“真实”)随机数?“头上”是指..优选地没有任何外部工具或设备。同样,期望高输出(每分钟许多随机数)。 在SO上询问此问题,但并没有引起太大兴趣。也许这更适合程序员。

11
输出不确定的单元测试方法
我有一个用于生成随机密码的类,该密码的长度也是随机的,但仅限于定义的最小和最大长度之间。 我正在构建单元测试,并且在此类中遇到了一个有趣的小问题。单元测试背后的整个想法是,它应该是可重复的。如果您运行测试一百次,它应该给出一百次相同的结果。如果您依赖某些可能会或可能不存在的资源,或者可能会或可能不会处于初始状态,那么您就应该模拟有问题的资源,以确保您的测试确实总是可重复的。 但是,如果应该SUT产生不确定的输出呢? 如果我将最小和最大长度固定为相同的值,那么我可以轻松地检查所生成的密码是否具有预期的长度。但是,如果我指定了可接受的长度范围(例如15至20个字符),那么您现在遇到的问题是,您可以运行一百次测试并获得100次通过,但是在第101次运行时,您可能会得到9个字符串。 就密码类而言,它的核心是相当简单的,它不应证明是一个大问题。但这让我想到了一般情况。在处理通过设计产生不确定输出的SUT时,通常被认为是最好的策略是什么?

6
我想编写一个“最终洗牌”算法来对我的mp3集合进行排序
我正在寻找伪代码建议,以避免标题和艺术家重复的方式对mp3文件进行排序。我听低吟的歌手-弗兰克·辛纳屈(Frank Sinatra),托尼·贝内特(Tony Bennett),埃拉·菲茨杰拉德(Ella Fitzgerald)等歌唱旧唱片。每位歌手都录制许多相同的歌曲-《飞向月球》,《今夜的样子》,《星尘》等。我的目标是安排歌曲(或订购播放列表),并在歌手和歌曲名称之间留出最大的空间。因此,如果我有2000首歌曲,而Ella有20首,我想每100首歌曲只听一次她。如果有10位歌手演唱《飞向月球》,我希望每200首歌曲中听到一次。当然,我想结合这两个要求来创建我的“最终洗牌”。 我知道这是一个相当广泛的问题。我尚未开始对其进行编程,因此我只是在寻找采用一种好的方法的建议。关于均匀间隔其他歌曲属性,我实际上还有一些其他要求,但这里不再赘述。 首先,我正在修改在这里找到的代码,以处理mp3文件和读取ID3标签。 我编写了一个小应用程序,使用下面的parsifal回答可以满足我的需求。我还在这里写了一个后续问题。感谢您的所有好评!

6
UUID冲突[关闭]
鉴于我们使用的随机数生成器不是真正的随机数,并且我们可能有数十台或数百台运行相同代码的相同机器,是否有人对UUID冲突的可能性进行了任何真正的研究,尤其是对于版本4(随机)UUID?生成UUID? 我的同事认为测试UUID冲突是完全浪费时间,但是我总是输入代码以从数据库中捕获重复的键异常,然后尝试使用新的UUID。但是,如果UUID来自另一个进程并引用一个真实对象,那将无法解决问题。
33 random  uuid 


6
随机数生成器如何工作?
此问题是从Stack Overflow 迁移而来的,因为可以在Software Engineering Stack Exchange上回答。 迁移 8年前。 我只是在考虑php rand()函数,并思考如何重新制作它,于是我完全呆呆了。 随机数生成器如何工作?
23 random  numbers 

4
预测PHP的rand()的输出
我已经读过很多资料,PHP的rand()的输出作为PRNG是可以预测的,我之所以接受它是因为,因为我在很多地方都看过它。 我对概念验证很感兴趣:如何预测rand()的输出?通过阅读本文,我了解到随机数是从指针(种子)开始的列表中返回的数字,但是我无法想象这是如何可预测的。 有人可以合理地找出在几千个猜测中的给定时间点通过rand()生成了什么随机数吗?甚至一万个猜测?怎么样? 这是因为我看到了一个使用rand()为丢失密码的用户生成令牌的auth库,并且我认为这是一个潜在的安全漏洞。从那以后,我已经用哈希openssl_random_pseudo_bytes(),原始哈希密码和microtime 的混合哈希代替了该方法。完成此操作后,我意识到,如果我在外面看,即使知道它是rand()的md5,也不知道如何猜测该令牌。
21 security  random 

7
如何生成“语言安全” UUID?
我一直想使用随机生成的字符串作为资源ID,因此我可以使用以下较短的URL:/ user / 4jz0k1 但是我从来没有这样做,因为我担心随机字符串的生成会产生实际的单词,例如:/ user / f * cker。这带来了两个问题:对用户而言可能令人困惑甚至令人反感,并且也可能与SEO混淆。 然后我想我所要做的就是建立一个固定的模式,例如每2个字母加一个数字。我对我的'generate_safe_uuid'方法感到非常满意,但是后来我意识到,它仅对SEO更好,对用户更糟,因为它增加了实际生成单词的比例,例如:/ user / g4yd1ck5 现在,我想我可以创建一个方法'replace_numbers_with_letters',并检查它是否未对字典或任何东西形成任何单词。 还有其他想法吗? ps。在撰写本文时,我还意识到,检查一种以上语言(例如英语和法语,西班牙语等)中的单词将是一团糟,而我又开始喜欢仅数字的ID。 更新 每个人都应该阅读一些链接: http://thedailywtf.com/Articles/The-Automated-Curse-Generator.aspx http://blogs.msdn.com/b/oldnewthing/archive/2008/06/27/8659071.aspx
20 random  uuid 

4
测试具有随机行为的程序的最佳实践是什么?
在进行研发工作时,我经常发现自己编写的程序在行为上有很大的随机性。例如,当我从事基因编程工作时,我经常编写生成并执行任意随机源代码的程序。 测试此类代码的问题在于,错误通常是间歇性的,并且很难重现。这不仅仅是将随机种子设置为相同的值并重新开始执行。 例如,代码可能从内核环形缓冲区读取一条消息,然后对消息内容进行条件跳转。自然,当以后尝试重现该问题时,环形缓冲区的状态将已更改。 即使此行为是一种功能,它也可能以意想不到的方式触发其他代码,从而经常揭示出单元测试(或人工测试人员)找不到的错误。 是否有建立此类测试系统的最佳实践?如果是这样,一些参考资料将非常有帮助。如果没有,欢迎任何其他建议!


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.