美文网首页
组合算法

组合算法

作者: desperado_wen | 来源:发表于2019-09-26 14:53 被阅读0次

有A,T,C,G四个字符串,一共有6个位置,每个位置可以填四个中的任意一个,输出所有的组合。
1,递归输出。

def permutations(n,s=''):
    if(n==0):
        print(s)
    else:
        permutations(n-1,s+"A")
        permutations(n-1,s+"T")
        permutations(n-1,s+"C")
        permutations(n-1,s+"G")

permutations(6)即可调用。
2,利用itertools。

>>> from itertools import combinations, permutations
>>> combinations([1,2,3,4,5],2)
<itertools.combinations object at 0x10469a650>
>>> [i for i in combinations([1,2,3,4,5],2)]
[(1, 2), (1, 3), (1, 4), (1, 5), (2, 3), (2, 4), (2, 5), (3, 4), (3, 5), (4, 5)]
>>> [i for i in permutations([1,2,3,4,5],2)]
[(1, 2), (1, 3), (1, 4), (1, 5), (2, 1), (2, 3), (2, 4), (2, 5), (3, 1), (3, 2), (3, 4), (3, 5), (4, 1), (4, 2), (4, 3), (4, 5), (5, 1), (5, 2), (5, 3), (5, 4)]
>>> from itertools import combinations, permutations
>>> [i for i in permutations(['A','T','C','G'],4)]
[('A', 'T', 'C', 'G'), ('A', 'T', 'G', 'C'), ('A', 'C', 'T', 'G'), ('A', 'C', 'G', 'T'), ('A', 'G', 'T', 'C'), ('A', 'G', 'C', 'T'), ('T', 'A', 'C', 'G'), ('T', 'A', 'G', 'C'), ('T', 'C', 'A', 'G'), ('T', 'C', 'G', 'A'), ('T', 'G', 'A', 'C'), ('T', 'G', 'C', 'A'), ('C', 'A', 'T', 'G'), ('C', 'A', 'G', 'T'), ('C', 'T', 'A', 'G'), ('C', 'T', 'G', 'A'), ('C', 'G', 'A', 'T'), ('C', 'G', 'T', 'A'), ('G', 'A', 'T', 'C'), ('G', 'A', 'C', 'T'), ('G', 'T', 'A', 'C'), ('G', 'T', 'C', 'A'), ('G', 'C', 'A', 'T'), ('G', 'C', 'T', 'A')]

3,变化进制加法实现。
比如,求10位每位上有两种选择,0或1,的所有排列组合,这个时候我们只需遍历一遍0到1024(2的10次方),0,1,10,11,100,......。再在前面补充0使字符串的总长度为10,是不是就可以得倒所有的排列组合了吗?
和这一道题同理,只不过这道题是4进制(0,1,2,3分别代表ATCG)。

def Permutations(max_len):
    singles=['A','T','C','C']
    dec=len(singles)
    def translate(n,dec=4):#这个函数是把10进制的数n补成dec=4进制,然后返回和singles对应索引的数反转后的字符串。
        a=[]
        while(True):
            a.append(n%dec)
            n=int(n/dec)
            if(n==0):
                break
        return "".join(map(lambda x:singles[x],a))[::-1]
    def supplement(s,max_len,default='A'):#这个函数在前面补充字符串为A(0)。
        return (max_len-len(s))*'A'+s
    for i in range(dec**max_len):
        print(supplement(translate(i,dec=dec),max_len=max_len))

其中,数组singles为每个位置可以放的字符串集合,max_len为字符串的位数。
Permutations(6)即可调用。

相关文章

  • 2018-08-02

    php实现组合枚举算法 源码

  • 组合算法

    今天用到了组合算法,我就自己写了一个,本程序的思路来自网络。 本程序的思路是开一个数组,其下标表示1到n个数,数组...

  • 组合数算法

    一、概念 什么是组合数呢? 从m个不同元素中取出n(n≤m)个元素的所有组合的个数,叫做从m个不同元素中取出n个元...

  • 组合算法

    有A,T,C,G四个字符串,一共有6个位置,每个位置可以填四个中的任意一个,输出所有的组合。1,递归输出。 per...

  • iOS swift 排列组合 算法

    排列组合的算法有很多,例如递归、穷举,下面我们用位运算的方式来实现全组合的算法 - 原理: 我们以[1, 2, 3...

  • 排列组合算法

    组合算法 非递归算法 组合算法的思路是开一个数组,其下标表示1到m个数,数组元素的值为1表示其下标代表的数被选中,...

  • 算法实际应用集(上)

    使用笛卡尔算法进行sku组合 需求 对商品规格进行排列组合,电商的sku商品组合 功能截图,对商品规格进行组合排列...

  • 全组合

    第一种方法:/* 全组合 排列组合算法用途广泛, 需要掌握, 为降低门槛, 本文主要关注算法的逻辑和简易性, 未重...

  • bagging&boosting

    bagging和boosting都属于组合学习算法,都是将简单的分类或者回归算法组合在一起来提高模型的分类或者回归...

  • bagging&boosting

    bagging和boosting都属于组合学习算法,都是将简单的分类或者回归算法组合在一起来提高模型的分类或者回归...

网友评论

      本文标题:组合算法

      本文链接:https://www.haomeiwen.com/subject/wqlhyctx.html