我试图用回溯来解决这个问题,但我不确定算法的复杂性(如果算法是正确的)以及什么是复杂度更高的算法。复杂的回溯算法
鉴于2个的正整数n和m,我们把合法整数的序列,如果:
- 的序列的长度为n
- 序列中的元素是1且m
- 之间在位置i的元素的序列的,1 <我< = n时,是元件的位置中的除数I-1
计数法定序列的数目。预计该算法的复杂度为O(平方米+纳米)
这是我在C算法:
// n length of the sequence
// m maximum valid number
// l number of remaining positions in the sequence
// p previous number in the sequence
int legal(int n, int m, int l, int p) {
if (l == 0)
return 1;
int q=0;
for (int i=1; i <= m;i++) {
if (p%i == 0 || l == n)
q += legal(n,m,l-1,i);
}
return q;
}
int main() {
int n, m;
scanf("%d", &n);
scanf("%d", &m);
printf("%d\n", legal(n,m,n,0));
}
我觉得我的算法的复杂度为O(NMS(N))与S(N) =合法序列号
一个算法的代码或伪代码应该包含明智的名字或者一个关于什么字母意味着什么的字典。评论也非常有用。你发表的是对所有读者和可能的答复者的彻底的无礼。请添加解释。 – Gangnus