1
12
嗯,可能不是我写的方式,但是:
是你的意见,我不是 完全地 清楚地回答这个问题;如果你的意思是“为什么这个有用?”-除此之外,还有一系列蛮力的场景,你想尝试不同的排列方式-例如,对于诸如差旅销售人员之类的小订单问题(这些问题不够大,不足以保证有更复杂的解决方案),你可能想检查是否最好去基地、A、B、C、基地、基地、A、C、B、基地、基地、B,A、C、BASE }等。 如果你的意思是“我怎么用这个方法?”-未经测试,但类似于:
如果你的意思是“它是如何工作的?”-迭代器块(
|
2
1
C有一个yield关键字,我认为它的工作原理与您的python代码的工作原理基本相同,所以要得到一个基本上直接的翻译不太难。
然而,这是一个递归的解决方案,所以尽管它很简单,但它是次优的。我个人并不理解所有涉及的数学,但对于高效的数学排列,你需要用到
factoradics
. 这篇文章应该有助于:
[更新]:另一个答案提出了一个很好的观点:如果你只是使用排列来进行无序排列,还有更好的选择。具体来说, Knuth/Fisher-Yates shuffle . |
3
0
虽然您不能在保持简洁的同时移植它,但是您可以非常接近它。
|
4
-6
不完全到我必须承认的程度后,一些评论,但下面的代码可以用来生成一个随机排列的有限序列。它是
Fisher-Yates shuffle algorithm
. 该示例使用
按随机值排序(在本例中是
|
danial · 如何在多个字符串的每个位置找到最频繁的字符 2 年前 |
Manny · 如何比较Perl中的字符串? 2 年前 |
Diret · 获取范围内每个数字的子倍数的算法 2 年前 |
Saif · 排序时python如何决定何时调用比较器? 2 年前 |