【问题标题】:Code for Variations with repetition (combinatorics) using javascript?使用javascript重复(组合)的变化代码?
【发布时间】:2012-05-17 20:07:24
【问题描述】:

有没有人有 Javascript 代码来生成所有重复的变体?

重复变化示例:

(size=3, input=A,B)
AAA, AAB, ABA, BAA, ABB, BAB, BBA, BBB

我需要对 0-9 作为输入的数字和 6 位长度作为大小的数字执行类似的操作(根据我的示例)。

只是要知道,我使用 Java 中的代码以及基于此项目的 .NET 中的代码(检查链接)。我需要的所有重复变化都会生成 1000000 个值。

http://www.codeproject.com/KB/recipes/Combinatorics.aspx

是否可以用 Javascript 来实现?

提前致谢。

【问题讨论】:

  • 只有两个for循环:一个用于位置,一个用于字母,任何合理的语言都可以做到。
  • @trutheality 并不像两个循环那么简单(在我看来)这就是我在这里的原因:-)
  • 每个算法都可以用 JavaScript 来表达。 jQuery 在这里不会有任何帮助。
  • 一个循环的数字答案对我来说看起来不错 :) 您的 Java 和 .NET 代码到底有多复杂?
  • 这是一个基于 Soufiane 代码的工作代码,它为您提供了 1000000 次重复 jsfiddle.net/joycse06/TFhvD,如 .Net 和 java 用于您所需的设置

标签: javascript combinatorics variations


【解决方案1】:

你选择了组合数学中最简单的情况...

var i, n = 1000000;
for (i = 0; i < n; i++)
  console.log(('' + (i + n)).substring(1));

将为您提供 6 个位置中 0-9 的所有组合 (1000000 === Math.pow(10, 6))。

【讨论】:

    【解决方案2】:

    我刚刚写了它,它需要更多的测试和优化,但这应该可以帮助你开始:

    ​var input = "ABCD";
    var size = 3;
    var results = [];
    
    function solve(i, elt) {
        if(elt.length == size) { 
           results.push(elt);
           return;        
        }
        for(var j = 0; j < input.length; j++) {
           solve(j, elt+input[j]);
        }        
    }​​​​​​
    
    solve(0, "");
    ​console​.log(results);​
    

    【讨论】:

    • 不错的代码,问题是由于某种原因,当使用 input="0123456789";和大小 = 6; results.length 为:5005,在 .NET 和 Java 代码中,结果为 1000000。
    • 啊哈!谢谢乔伊,我没明白,我认为 OP 需要保留订单
    • 对不起,在上面的问题上添加了评论:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-17
    • 2021-02-05
    • 1970-01-01
    • 2013-10-07
    • 1970-01-01
    • 2011-12-16
    相关资源
    最近更新 更多