在Java中统一生成随机排列
任何人都知道在 Java 中生成整数列表的随机排列的快速/最快的方法。例如,如果我想要长度为 5 的随机排列,答案将是 1 5 4 2 3
,其中每种 5!
的可能性都是相同的。
我对如何解决这个问题的想法是运行一个方法,该方法在所需长度的数组中生成随机实数,然后对它们进行排序返回索引,即 0.712 0.314 0.42 0.69 0.1
将返回 5 2 3 4 1
。我认为这可以在 O(n^2)
中运行,目前我的代码运行在大约 O(n^3)
中,并且占很大比例我的程序目前的运行时间。从理论上讲,这似乎没问题,但在实践中我不确定。
Anyone know of a fast/the fastest way to generate a random permutation of a list of integers in Java. For example if I want a random permutation of length five an answer would be 1 5 4 2 3
, where each of the 5!
possibilities is equally likely.
My thoughts on how to tackle this are to run a method which generates random real numbers in an array of desired length and then sorts them returning the index i.e. 0.712 0.314 0.42 0.69 0.1
would return a permutation of 5 2 3 4 1
. I think this is possible to run in O(n^2)
and at the moment my code is running in approximately O(n^3)
and is a large proportion of the running time of my program at the moment. Theoretically this seems OK but I'm not sure about it in practice.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
您尝试过以下方法吗?
这会迭代每个元素,将该元素与随机的剩余元素交换。这具有 O(n) 时间复杂度。
Have you tried the following?
This iterates through each element, swapping that element with a random remaining element. This has a O(n) time complexity.
如果目的只是生成随机排列,我真的不明白排序的必要性。据我所知,以下代码以线性时间运行
,下面是一些测试它的代码:
If the purpose is just to generate a random permutation, I don't really understand the need for sorting. The following code runs in linear time as far as I can tell
And here is some code to test it:
有一个 O(n) Shuffle 方法很容易实现。
There is an O(n) Shuffle method that is easy to implement.
只需生成
0
和n 之间的随机数即可! - 1
并使用我在其他地方提供的算法(通过以下方式生成排列)它的排名)。
Just generate random number between
0
andn! - 1
and usethe algorithm I provided elsewhere (to generate permutation by its rank).