草庐IT

伪随机码

全部标签

java - Java(或任何语言)概率中的随机洗牌

这个问题在这里已经有了答案:Whatdistributiondoyougetfromthisbrokenrandomshuffle?(10个答案)关闭7年前。所以,我正在Coursera上观看RobertSedgewick的视频,目前正在洗牌。他展示了一个“写得不好”的在线扑克洗牌代码(它还有一些其他错误,我已经删除了这些错误,因为它们与我的问题无关)算法是这样工作的:for(inti=0;i它对所有卡片进行一次迭代。在每次迭代中生成一个随机数,并将第i张卡与第r张卡交换。很简单,对吧?虽然我懂算法,但是我不懂他的概率计算。他说因为Random使用32位种子(或64位,这似乎无关紧要)

java - 在一个范围内随机选择 k 个不同的数字

我需要选择k0ton-1范围内的随机元素.n可以达到10^9。和k范围可以从1ton-1.我只需将包含值0ton-1的数组改组即可在O(n)时间内完成此操作然后先选择k它的元素。但是当k很小,这种方法的时间和内存效率都很低。这个问题有O(k)的解决方案吗?注:已选k数字必须不同。我正在考虑解决方案。我可以想到两种方法。让R是要返回的集合。在范围内选择一个随机值并将其添加到R.继续这样做直到|R|=k.此过程需要sum(n/i)forn+1-k时间和O(k)空间。在数组中插入0到n-1,打乱顺序,先取k它的元素。这个过程需要O(n+k)的时间和空间。所以对于给定的k我可以在O(k)时间内

java - 在 Java 中删除随机访问文件的第一个字节

我正在将字节写入随机访问文件。完成操作后,我想从文件中删除前100个字节。我怎样才能做到这一点?提前致谢。 最佳答案 我找到了一种提供所需作品的方法。它是deleteRAF和here.感谢您的建议。 关于java-在Java中删除随机访问文件的第一个字节,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/4335856/

java - 在 Java 中选择 N 个随机不同整数的高效方法?

我目前正在寻找最好的方法,以便在n个整数范围内选择x个唯一整数。这就像多次执行Random.nextInt(range)只是它不应该选择两次相同的int。如果碰巧x>n那么结果将只包含n个整数我尝试自己做这件事,目前我是基于Fisher/Yatesshuffle做的:privatestaticfinalRandomR=newRandom();publicstaticint[]distinctRandoms(intnb,intmax){int[]all=newint[max];for(inti=0;i0&&j它的工作原理和性能似乎不错,但我不禁认为必须仍然有一些更高效的方法来做到这一点,

java - 传递给 Java 随机数生成器的种子值如何影响其输出?

传递给Java随机数生成器的种子值如何影响其输出?如果我知道种子值,我将如何确定它将输出哪些数字?还有一些种子值比其他种子值更能产生比其他种子值更多的伪随机性吗? 最佳答案 您无法在软件中生成真正的随机数,因为软件是确定性的:给定一些输入,原则上它总是会生成可预测的输出。因此,为了获得随机数,已经发明了许多算法来生成看起来随机的数字序列(但实际上并非如此-这就是它们被称为伪随机数的原因)。这样的算法从一些起始值、种子开始,然后用它进行一些计算以生成下一个伪随机数。如果算法很好,那么种子值应该没有差异:一个种子值在生成随机数时不应优于

java - Java 中的队列允许删除随机元素。这不好吗?

Queue在Java中提供了FIFO数据结构。根据我的了解,队列有责任遵守先进先出的行为。换句话说,您不能从队列中间移除项目。但是,在Java中,我们可以使用iterator移除随机队列元素。这是一个糟糕的设计封装虎钳吗?还是队列数据结构应该允许这样做?Queuequeue=newLinkedList();queue.add("e1");queue.add("e2");queue.add("e3");queue.add("e4");queue.remove("e3"); 最佳答案 Queue显然通过成为Collection层次结构的

java - 在 spring boot 测试中使用 wiremock 随机端口设置属性

我有一个SpringBoot测试,它使用wiremock来模拟外部服务。为了避免与并行构建发生冲突,我不想为wiremock设置固定端口号,而是希望依赖其动态端口配置。应用程序使用在application.yml(在src/test/resources下)中设置的属性(external.baseUrl)。但是我没有找到以编程方式覆盖它的方法。我试过这样的事情:WireMockServerwireMockServer=newWireMockServer();wireMockServer.start();WireMockmockClient=newWireMock("localhost",

Java:从具有缓冲输入的随机访问文件中读取字符串

我以前从未有过JavaIOAPI的亲body验,现在我真的很沮丧。我很难相信它有多么奇怪和复杂,以及完成一项简单的任务会有多么困难。我的任务:我有2个位置(起始字节,结束字节),pos1和pos2。我需要读取这两个字节之间的行(包括起始字节,不包括结束字节)并将它们用作UTF8String对象。例如,在大多数脚本语言中,它将是一个非常简单的1-2-3行(在Ruby中,但对于Python、Perl等,它基本上是相同的):f=File.open("file.txt").seek(pos1)whilef.posJavaIOAPI很快就会变得糟糕;)事实上,我看到了两种从常规本地文件读取行(以

C++ 程序使用 OpenCV 生成两个黑色的灰度图像,并添加随机特征点,然后将这两个图像合并为一张图像并显示

文章目录源码文件功能解读编译文件源码文件#include#include#includestd::vectorcv::KeyPoint>generateRandomKeyPoints(constcv::Mat&image,intnumPoints){std::vectorcv::KeyPoint>keypoints;cv::RNGrng;//OpenCV随机数生成器for(inti=0;inumPoints;++i){cv::Point2fpt(rng.uniform(0.f,(float)image.cols),rng.uniform(0.f,(float)image.rows));keyp

java - 在给定范围内生成奇数随机数

如何生成给定范围内的奇数随机数..对于例如:对于范围在1到6..随机数是3或1或5生成随机数的方法:Random_No=Min+(int)(Math.Random()*((Max-Min)+1))引用HowdoIgeneraterandomintegerswithinaspecificrangeinJava?奇数随机数生成方法:Random_No=Min+(int)(Math.Random()*((Max-Min)+1))if(Random_No%2==0){if((Max%2)==0)&&Random_No==Max){Random_No=Random_No-1;}else{Rand