Time complexity 以下代码的时间复杂度是多少

Time complexity 以下代码的时间复杂度是多少,time-complexity,Time Complexity,此解决方案解决了详细列出的问题。如果继续获取i,j,使vals[i-1][j-1]==0,则最坏情况下的运行时间将是无限的,因此while循环将永远不会终止。但这种情况几乎肯定不会发生 让T表示rand7()的预期运行时间,我们有以下观察结果: 如果i==1,2,3,4,那么无论j是什么,我们都会有vals[i-1][j-1]!=0,因此在这种情况下,while循环将只迭代一次;-此事件发生的概率为4/5 如果i==5和j==1,则vals[i-1][j-1]!=0和while循环将只迭代一次

此解决方案解决了详细列出的问题。

如果继续获取
i
j
,使
vals[i-1][j-1]==0
,则最坏情况下的运行时间将是无限的,因此
while
循环将永远不会终止。但这种情况几乎肯定不会发生

T
表示
rand7()
的预期运行时间,我们有以下观察结果:

  • 如果
    i==1,2,3,4
    ,那么无论
    j
    是什么,我们都会有
    vals[i-1][j-1]!=0,因此在这种情况下,
    while
    循环将只迭代一次;-此事件发生的概率为4/5
  • 如果
    i==5
    j==1
    ,则
    vals[i-1][j-1]!=0
    while
    循环将只迭代一次;-该事件发生的概率为1/25
  • 在剩下的情况下,我们有
    vals[i-1][j-1]==0
    ,因此我们需要用新的随机值
    (i,j)
    -发生这种情况的概率为4/25
根据以上观察,我们有以下关系:

int rand7()
{
    int vals[5][5] = {
        { 1, 2, 3, 4, 5 },
        { 6, 7, 1, 2, 3 },
        { 4, 5, 6, 7, 1 },
        { 2, 3, 4, 5, 6 },
        { 7, 0, 0, 0, 0 }
    };

    int result = 0;
    while (result == 0)
    {
        int i = rand5();
        int j = rand5();
        result = vals[i-1][j-1];
    }
    return result;
}
因此,预计的运行时间是
T=25/21=O(1)

O(ff主题)
T = 4/5 * 1 + 1/25 * 1 + 4/25 * (1 + T)