Algorithm 组合数学:尝试计算算法(关于子集)
我正试图解决TopCoder上的一个问题。基本上,我需要的是以下算法: 设S=[1,2,…,n]是一个序列。设m小于n 1) 找到大小为m的S的所有子序列(很容易-n^m) 2) 查找大小为m的S的所有子序列,其中元素的顺序为非减量顺序 3) 查找不允许重复元素的大小为m的S的所有子序列(这也很容易-(n!)/((n-m)!) 4) 查找大小为m的S的所有子序列,其中元素的顺序为非减量顺序且不允许重复 仍在努力寻找第2部分和第4部分的公式。如果您能帮我一点忙,我们将不胜感激 提前谢谢 编辑: 原始问题:Algorithm 组合数学:尝试计算算法(关于子集),algorithm,combinatorics,subset,Algorithm,Combinatorics,Subset,我正试图解决TopCoder上的一个问题。基本上,我需要的是以下算法: 设S=[1,2,…,n]是一个序列。设m小于n 1) 找到大小为m的S的所有子序列(很容易-n^m) 2) 查找大小为m的S的所有子序列,其中元素的顺序为非减量顺序 3) 查找不允许重复元素的大小为m的S的所有子序列(这也很容易-(n!)/((n-m)!) 4) 查找大小为m的S的所有子序列,其中元素的顺序为非减量顺序且不允许重复 仍在努力寻找第2部分和第4部分的公式。如果您能帮我一点忙,我们将不胜感激 提前谢谢 编辑: 原
要解决4),请注意,不重复“非递减”表示“递增”。将从
S
构建的长度为m
的所有序列集划分为等价类,等价类由子序列中出现的元素集定义。在每个等价类中,只有一个递增序列(元素按排序)。我对术语“set”的用法感到困惑。集合往往是无序的,最多只包含一次单个元素,所以我不理解问题2、3和4的意思。嗯,我的错是“set”在这个问题中考虑的是以下性质:1)[1,2,3]和[2,1,3]是不同的“集”;2)[1,1,1]是一个“集”。“集合”的得名奖励:如果你得到2)你得到4)通过2)和3)哦的交叉点。在这种情况下,这些可能只是序列
。您的示例表明S
包含1..n
中的所有整数,对于某些n
。这是故意的还是意外的?