【发布时间】:2012-02-04 02:19:56
【问题描述】:
我需要一种有效的算法来生成不同的组合(不允许重复)。每个组合有 5 个不同的数字(不同的数字),范围在 1 到 99 之间。结果必须存储在数组中。如果可能的话,我希望允许自定义的数字和范围。数字顺序无所谓(01 02 03 = 03 01 02)
Ex.:
01 02 03 04 05
02 03 04 05 06
...
有人可以帮我建造它吗?我想从数组中挑选一些随机组合。现在我正在使用 mt_rand 生成随机组合,但这需要太多时间,太慢了!我相信碰巧经常重复然后需要时间来生成新的和新的......
【问题讨论】:
-
搜索fisher-yates shuffle。
-
您知道您需要多少内存来执行此操作吗? 199 中的 5 有 71,523,144 种独特组合。为什么您实际上需要知道所有可能的组合?几乎可以肯定有一个更好的替代方案来解决它们......也许只是根据需要生成尽可能多的洗牌唯一性,这肯定比 71,523,144 少得多。
-
How to reduce for loop speed 的可能重复项
-
@Mark Baker,感谢您的评论!好吧,我考虑过生成小块,然后提取我想要的组合。现在我使用带有 rand 函数的循环它似乎经常重复数字然后我不得不再次运行循环,试图再次获得一个不同的组合,当组合增加时它变得如此缓慢。
-
您可以在here 中执行类似操作,但删除字符数较高的那些 1。然后将 char 转换为它的代表数字(或使用数字范围的数组而不是字符集并稍后在输出数组(而不是字符串)上使用值计数)。
标签: php algorithm brute-force