Python 可以有多少个唯一元素的子序列?

Python 可以有多少个唯一元素的子序列?,python,math,subsequence,Python,Math,Subsequence,我是一个整数序列[A1,A2,A3…..AN] 我试图计算所有包含最多K个唯一数字的子序列 例如: 给定顺序::[2,3,3,7,5]和K=3 所有子序列为: [], [2],[3],[3],[7],[5], [2, 3],[2, 3],[2, 7],[2, 5],[3, 3],[3, 7],[3, 5],[3, 7],[3, 5],[7, 5], [2, 3, 3],[2, 3, 7],[2, 3, 5],[2, 3, 7],[2, 3, 5],[2, 7, 5],[3, 3, 7],[3,

我是一个整数序列
[A1,A2,A3…..AN]
我试图计算所有包含最多K个唯一数字的子序列

例如: 给定顺序::
[2,3,3,7,5]
K=3

所有子序列为:

[],
[2],[3],[3],[7],[5],
[2, 3],[2, 3],[2, 7],[2, 5],[3, 3],[3, 7],[3, 5],[3, 7],[3, 5],[7, 5],
[2, 3, 3],[2, 3, 7],[2, 3, 5],[2, 3, 7],[2, 3, 5],[2, 7, 5],[3, 3, 7],[3, 3, 5],[3, 7, 5],[3, 7, 5],
[2, 3, 3, 7],[2, 3, 3, 5],[2, 3, 7, 5],[2, 3, 7, 5],[3, 3, 7, 5],
[2, 3, 3, 7, 5]
[],
[2],[3],[3],[7],[5],
[2, 3],[2, 3],[2, 7],[2, 5],[3, 7],[3, 5],[3, 7],[3, 5],[7, 5],
[2, 3, 7],[2, 3, 5],[2, 3, 7],[2, 3, 5],[2, 7, 5],[3, 7, 5],[3, 7, 5]
[3, 3],
[2, 3, 3],[3, 3, 7],[3, 3, 5]
我需要所有具有唯一元素的子序列(仅用于计数)。

✅ 计数的子序列是:

[],
[2],[3],[3],[7],[5],
[2, 3],[2, 3],[2, 7],[2, 5],[3, 3],[3, 7],[3, 5],[3, 7],[3, 5],[7, 5],
[2, 3, 3],[2, 3, 7],[2, 3, 5],[2, 3, 7],[2, 3, 5],[2, 7, 5],[3, 3, 7],[3, 3, 5],[3, 7, 5],[3, 7, 5],
[2, 3, 3, 7],[2, 3, 3, 5],[2, 3, 7, 5],[2, 3, 7, 5],[3, 3, 7, 5],
[2, 3, 3, 7, 5]
[],
[2],[3],[3],[7],[5],
[2, 3],[2, 3],[2, 7],[2, 5],[3, 7],[3, 5],[3, 7],[3, 5],[7, 5],
[2, 3, 7],[2, 3, 5],[2, 3, 7],[2, 3, 5],[2, 7, 5],[3, 7, 5],[3, 7, 5]
[3, 3],
[2, 3, 3],[3, 3, 7],[3, 3, 5]
总数=22

⛔ 未计数的子序列包括:

[],
[2],[3],[3],[7],[5],
[2, 3],[2, 3],[2, 7],[2, 5],[3, 3],[3, 7],[3, 5],[3, 7],[3, 5],[7, 5],
[2, 3, 3],[2, 3, 7],[2, 3, 5],[2, 3, 7],[2, 3, 5],[2, 7, 5],[3, 3, 7],[3, 3, 5],[3, 7, 5],[3, 7, 5],
[2, 3, 3, 7],[2, 3, 3, 5],[2, 3, 7, 5],[2, 3, 7, 5],[3, 3, 7, 5],
[2, 3, 3, 7, 5]
[],
[2],[3],[3],[7],[5],
[2, 3],[2, 3],[2, 7],[2, 5],[3, 7],[3, 5],[3, 7],[3, 5],[7, 5],
[2, 3, 7],[2, 3, 5],[2, 3, 7],[2, 3, 5],[2, 7, 5],[3, 7, 5],[3, 7, 5]
[3, 3],
[2, 3, 3],[3, 3, 7],[3, 3, 5]
⛔ 对于较高的长度忽略:
length>K
(如果
K=5
,则对于重复元素忽略尝试以下操作:

import itertools 

def findsubsets(s, n): 
    return list(itertools.combinations(s, n))

my_list = [2, 3, 3, 7, 5]
list_len = 0

for i in range(1,len(my_list)):
    list_len += len(set(findsubsets(my_list, i)))

print(list_len)
输出:

22
22
编辑: 从列表中删除具有相同编号的排列:

import itertools 

def findsubsets(s, n): 
    return list(list(x) for x in itertools.combinations(s, n))

my_list = [2, 3, 7, 5, 3]
list_len = 0

for i in range(1,len(my_list)):
    list_len += len(set(tuple(sorted(i)) for i in findsubsets(my_list, i)))

print(list_len)
输出:

22
22

试试这个:

import numpy as np
mod = 1000000007
n, k = map(int, input().split())
a = list(map(int, input().split()))
fre = [0]*10000
A = []
for i in range(0, n):
    fre[a[i]] += 1
for i in range(0, 9001):
    if fre[i] > 0:
        A.append(fre[i])   
kk = min( len( A ), k ) + 1
S = np.zeros( kk, dtype=int );   S[0] = 1
for a in A:
   S[1:kk] = (S[1:kk] + (a * S[0:kk-1])% mod) % mod
ans = 0
for s in S:
    ans = ((ans + s) % mod)
print(ans)

<程序>返回所有具有唯一元素的子序列(仅用于计数)。

“GIMME代码”不是问题,也没有看到C++标签的任何其他相关性,所以我删除了ITI将代码< > [2, 3, 3,7, 5 ] < /code >转换成<代码> {2:1,3:2,7:1,5:1 }。,然后对于每一个键的组合,你都乘以相应的值。@Jarod42你能解释更多吗?@CeliusStingher:emojis不是为了影响,而是为了直观地描述。@formerlyknownas_463035818听起来不错。效率没有改变。另外,对于输入
2 3 7 5 3
输出
28
@AfrinMouDia y你说得对!现在我删除了相同数字的排列!;)这不是我真正想要的。我需要删除itertools.combinations(),否则将删除。请查看限制和时间限制。@AfrinMouDia hmmm。。。看看这个是的,这就是为什么我需要在不生成子序列的情况下计算(计数)数字。它是有效的,尝试获取您的算法,如果需要请帮助…谢谢,我在这里帮助您:)