依靠硬币翻转的while循环的预期运行时间是多少?

来源:爱站网时间:2021-11-08编辑:网友分享
依靠硬币翻转的while循环的预期运行时间是多少?这个问题你知道答案吗,爱站技术小编今天带来的文章正好是解答这道题的,有兴趣的小伙伴快来参考。

问题描述


我一直在为我的CS2类开发Java的SkipList实现,在分析了所有方法的运行时(出于乐趣)之后,我在确定以下各项的平均运行时遇到了问题:

// Returns 1 with 50% probability, 2 with 25% probability,
// 3 with 12.5% probability, and so on, without exceeding maxHeight
private static int generateRandomHeight(int maxHeight)
{
    int height = 1;
    // At most O(maxHeight) which is O(log(n))
    // Best case is O(1) and on average O(log(log(n)))??
    while (--maxHeight > 0 && Math.random() 

我知道最佳运行时间为O(1),最差运行时间为O(h),由于h = = log2(n)⌉( n)的对数以2为底

问题是,该功能的平均预期运行时间是多少?>]

 

乍看之下,我假设它应该是O(log(log(n(n))))。我将这个问题带给了我的TA,在与他们讨论之后,我们依靠的是O(1)的平均运行时间,因为我们很可能只进行一次迭代或根本不进行迭代(例如50%)。

我一直在为我的CS2类研究Java的SkipList实现,在分析了所有方法的运行时(出于娱乐目的之后,我在确定以下各项的平均运行时遇到了问题:...

] >

[具有复杂度时,计算复杂度通常很复杂。但是您是对的,它是O(1),但不完全是O(1)。 O(1)定义为常量,这意味着无论您输入什么,运行时间都将相同。但是,就您而言,Math.random()是不可预测的。但是,尽管如此,它仍然为O(1),因为随着n的增加,运行时间保持相对恒定。我进行了一次测试,以查看循环迭代的次数,并且我的结果确实相似。

public static void main(String[] args) {
    List l = new ArrayList();

    for(int n = 0; n  l) {
    double sum = 0;

    for(int i : l) {
        sum += i;
    }

    return sum / l.size();
}

以下是一些结果。如您所见,它们徘徊在1。

1.011
0.986
1.046
0.991
0.953
0.984
1.017
0.973

思路:


[具有复杂度时,计算复杂度通常很复杂。但是您是对的,它是O(1),但不完全是O(1)。 O(1)定义为常量,这意味着无论您输入什么,运行时间都将相同。但是,就您而言,Math.random()是不可预测的。但是,尽管如此,它仍然为O(1),因为随着n的增加,运行时间保持相对恒定。我进行了一次测试,以查看循环迭代的次数,并且我的结果确实相似。

public static void main(String[] args) {
    List l = new ArrayList();

    for(int n = 0; n  l) {
    double sum = 0;

    for(int i : l) {
        sum += i;
    }

    return sum / l.size();
}

 以上内容就是爱站技术频道小编为大家分享的依靠硬币翻转的while循环的预期运行时间是多少?看完以上分享之后,大家应该都知道这个运行时间是多少了吧。

上一篇:如何在Android应用程序中从Google地图上的标记开始活动?

下一篇:详解自定义类型的PCollection汇总的管道性能-属性的均值和中位数

您可能感兴趣的文章

相关阅读

热门软件源码

最新软件源码下载