首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >以编程方式寻找OEIS A001839的解决方案

以编程方式寻找OEIS A001839的解决方案
EN

Stack Overflow用户
提问于 2014-05-05 04:17:34
回答 2查看 80关注 0票数 0

好吧,那么这里是一个整数序列。在数学stackexchange,我了解了这个序列的含义。基本上:

  • 给定n项,a(n)是您可以创建的三个组的数目,其中没有两个组有多个相同项。

因此,如果您有7个项目,以字母a表示,您可以将以下七个组:

代码语言:javascript
复制
1. abc
2. ade
3. afg
4. bdf
5. beg
6. cdg
7. cef

'a''b'只在一起出现一次,'a''c'以及其他每一对都是如此。

我试着写一个小程序,可以给我这些三重奏的任何数字。现在,它与n个字符长的字符串一起工作。这是我所拥有的。我觉得它解释得很好。

代码语言:javascript
复制
var str = 'abcdefg';
var userPairs = [];
var found = 0
var x;
var y;
var z;

$('.bundles').append(str.length+'<br>');

for (x = 0; x < str.length; x += 1) {
    for (y = 0; y < str.length; y += 1) {
        for (z = 0; z < str.length; z += 1) {
            var possible = str[x]+str[y]+str[z];
            if (!tooSimilar(possible)) {
                found += 1;
                $('.bundles').append(found + ') ');
                $('.bundles').append(possible+'<br>');
                userPairs.push(str[x]+str[y]);
                userPairs.push(str[y]+str[z]);
                userPairs.push(str[x]+str[z]);
            }
        }
    }
}

function tooSimilar(possible) {
    if (possible[0] === possible[1] ||
        possible[1] === possible[2] ||
        possible[2] === possible[0]) {
        console.log('repeated char');
        return true;
    } else if (userPairs.indexOf(possible[0]+possible[1]) !== -1 ||
              userPairs.indexOf(possible[1]+possible[0]) !== -1 ||
              userPairs.indexOf(possible[1]+possible[2]) !== -1 ||
               userPairs.indexOf(possible[2]+possible[1]) !== -1 ||
               userPairs.indexOf(possible[0]+possible[2]) !== -1 ||
               userPairs.indexOf(possible[2]+possible[0]) !== -1){
        console.log('repeated pair');
        return true;          
    } else {
        console.log('FOUND ONE');
        return false;
    }
}

您可以在这里看到功能良好的JSFiddle

它能工作7个字符或更少,给出你期望从序列中得到的三重奏的数量。但有超过七次崩溃了。

它输出的三位一体的列表总是符合标准,但它似乎缺少一些,我不知道在哪里。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-05 06:58:14

您正在执行贪婪搜索,而找到最大值可能需要某种形式的回溯。另一种思考它的方法是,在图中寻找一个最大独立集,其中三人是顶点,两个三人具有共同的边当且仅当他们共用两个字母。这并不是说这是一个很好的建模方法,但是你看到了如何找到一个独立的集合,它不能被扩展,但它仍然不是全局最大的。

票数 0
EN

Stack Overflow用户

发布于 2014-08-03 21:04:47

下面是我刚刚编写的一个小python程序,它在几毫秒内给出了这些数字中的前10,000个:

代码语言:javascript
复制
    from math import floor
    for n in xrange(1,10000):
        print int(floor((n/3)*floor((n-1)/2))+(n%3)*floor(n/6)),
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23464705

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档