Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 一种有格律的舞蹈';复杂性_Algorithm_Loops_Recursion_Max_Dynamic Programming - Fatal编程技术网

Algorithm 一种有格律的舞蹈';复杂性

Algorithm 一种有格律的舞蹈';复杂性,algorithm,loops,recursion,max,dynamic-programming,Algorithm,Loops,Recursion,Max,Dynamic Programming,我要参加一个舞蹈比赛,明天是重要的一天!我事先知道比赛歌曲的列表和顺序。经过多次侦察,我能够很好地确定评委和我的技能,如果我跳名单上的第I首歌,我就可以准确地预测我的成绩,即score(I) 但是,在第i首歌曲之后,我需要时间休息,即我不能跳下一首rest(i)歌曲,即歌曲i+1,…,i+rest(i)。我能跳舞的歌曲数量没有其他限制。给出一个有效的算法来计算你理想的最大总分及其复杂性 因此,我认为应该使用递归,其中max(I)=max(I+1)或max(I)=score(I)+max(I+1

我要参加一个舞蹈比赛,明天是重要的一天!我事先知道比赛歌曲的列表和顺序。经过多次侦察,我能够很好地确定评委和我的技能,如果我跳名单上的第I首歌,我就可以准确地预测我的成绩,即
score(I)

但是,在第i首歌曲之后,我需要时间休息,即我不能跳下一首
rest(i)
歌曲,即歌曲i+1,…,i+rest(i)。我能跳舞的歌曲数量没有其他限制。给出一个有效的算法来计算你理想的最大总分及其复杂性


因此,我认为应该使用递归,其中
max(I)=max(I+1)
max(I)=score(I)+max(I+1+rest(I))
然后在每一步从这两种方法中选出最好的一种。有人能帮忙吗

递归将是

for i: 1 -> n
    DP(n) = max(0,(score(i)+DP(i+r)),DP(i+1)) 
在哪里,

r = resting interval
0 is the situation where it is better not to dance at all :)
编辑1:添加解释

基本情况是参与者不跳舞,所以总分为0

否则,他要么在某一首歌上跳舞,要么不跳舞。因此,决定归根结底是他是否应该在这首歌上跳舞,以使最终的分数最大化

如果他决定跳舞,他将获得
score(i)
,并且不能为
rest(i)
跳舞,因此剩余的最大可能分数将是
score(i)+DP(i+rest(i))

如果他决定不跳这首歌,分数将是DP(i+1)

因为我们想要最大化分数,所以我们选择这两个值中的最大值。

递归是

for i: 1 -> n
    DP(n) = max(0,(score(i)+DP(i+r)),DP(i+1)) 
在哪里,

r = resting interval
0 is the situation where it is better not to dance at all :)
编辑1:添加解释

基本情况是参与者不跳舞,所以总分为0

否则,他要么在某一首歌上跳舞,要么不跳舞。因此,决定归根结底是他是否应该在这首歌上跳舞,以使最终的分数最大化

如果他决定跳舞,他将获得
score(i)
,并且不能为
rest(i)
跳舞,因此剩余的最大可能分数将是
score(i)+DP(i+rest(i))

如果他决定不跳这首歌,分数将是DP(i+1)


因为我们想要最大化分数,所以我们选择这两个值中的最大值。

让n首歌曲索引为0..n-1。假设我们可以从第一首歌开始自由跳舞,那么让选择(i)为最高总分。Opt的重现性是

Opt(n) = 0
Opt(i) = max(Opt(i+1),
             Score(i) + Opt(i + 1 + Rest(i))) for i = 0..n-1.
直观地说,我们要么不跳第一首歌,得到剩余时间的值,要么我们跳,给第一首歌打分,休息,得到休息后的时间值


应使用缓存在数组中的以前计算的值对该循环进行i递减计算。运行时间为O(n)。

设n首歌曲索引为0..n-1。假设我们可以从第一首歌开始自由跳舞,那么让选择(i)为最高总分。Opt的重现性是

Opt(n) = 0
Opt(i) = max(Opt(i+1),
             Score(i) + Opt(i + 1 + Rest(i))) for i = 0..n-1.
直观地说,我们要么不跳第一首歌,得到剩余时间的值,要么我们跳,给第一首歌打分,休息,得到休息后的时间值


应使用缓存在数组中的以前计算的值对该循环进行i递减计算。运行时间为O(n)。

你的想法听起来不错,你在寻求什么样的帮助?@BlackBear我所描述的尝试似乎不是一个算法。我希望有人能帮助我将我的想法扩展到一个算法,如果可能的话,提供一个复杂度的提示(但我认为,一旦我们产生了算法,我将能够从算法中得到它)。:)从基本情况开始。返回什么值?而且,
max(i)=max(i+1)
没有意义。使用python语法,您正在寻找类似于
返回currentScore+max(recursiveMethod(分数[currentPos+1:])、recursiveMethod(分数[currentPos+2:])
。(见列表切片)@cricket_007我同意!我认为基本情况应该返回0。嗯,我建议你在上面贴一个答案,并加以扩展!;)你的想法听起来不错,你在寻求什么样的帮助?@BlackBear我所描述的尝试似乎不像一个算法。我希望有人能帮助我将我的想法扩展到一个算法,如果可能的话,提供一个复杂度的提示(但我认为,一旦我们产生了算法,我将能够从算法中得到它)。:)从基本情况开始。返回什么值?而且,
max(i)=max(i+1)
没有意义。使用python语法,您正在寻找类似于
返回currentScore+max(recursiveMethod(分数[currentPos+1:])、recursiveMethod(分数[currentPos+2:])
。(见列表切片)@cricket_007我同意!我认为基本情况应该返回0。嗯,我建议你在上面贴一个答案,并加以扩展!;)谢谢你,舞蹈继续,为最后一步。谢谢你,舞蹈继续,为最后一步。谢谢你的更新!舞蹈继续,最后一步。谢谢你的更新!舞蹈继续,为最后一步。