有人可以帮忙用大O表示法吗?

发布于 2024-08-30 08:51:09 字数 644 浏览 5 评论 0原文

void printScientificNotation(double value, int powerOfTen)
{
if (value >= 1.0  &&  value < 10.0)
{
    System.out.println(value + " x 10^" + powerOfTen);
}
else if (value < 1.0)
{
    printScientificNotation(value * 10, powerOfTen - 1);
}
else     // value >= 10.0
{
    printScientificNotation(value / 10, powerOfTen + 1);
}

假设

输入不会导致无限循环,

我理解该方法是如何进行的,但我无法找出表示该方法的方法。 例如,如果 value 为 0.00000009 或 9e-8,则该方法将调用 printScientificNotation(value * 10, powerOfTen - 1);八次和 System.out.println(value + " x 10^" + powerOfTen);一次。

因此,它由 e 的指数递归调用。但我该如何用大 O 表示法来表示呢?

谢谢!

void printScientificNotation(double value, int powerOfTen)
{
if (value >= 1.0  &&  value < 10.0)
{
    System.out.println(value + " x 10^" + powerOfTen);
}
else if (value < 1.0)
{
    printScientificNotation(value * 10, powerOfTen - 1);
}
else     // value >= 10.0
{
    printScientificNotation(value / 10, powerOfTen + 1);
}

}

assuming that imputs will not lead to infinite loops

I understand how the method goes but I cannot figure out a way to represent the method.
For example, if value was 0.00000009 or 9e-8, the method will call on printScientificNotation(value * 10, powerOfTen - 1); eight times and System.out.println(value + " x 10^" + powerOfTen); once.

So the it is called recursively by the exponent for e. But how do I represent this by big O notation?

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

伊面 2024-09-06 08:51:09

这是一个技巧问题吗?该代码将对其某些输入进行无限递归(例如,value=-1.0、powerOfTen=0),因此对于任何有限函数 f(n),其运行时间都不是 O(f(n))。

编辑:假设值> 0.0...

运行时间(或递归深度,如果您喜欢这样看)不取决于 powerOfTen 的值,仅取决于 value.对于 [1.0, 10.0) 范围内的初始输入 value,运行时间是恒定的,因此 O(1),对于 [10.0, +无穷大) 中的 value,对于每个递归调用,您将 value 除以 10,直到 value 10.0,因此运行时间为 O(log10(value))。对于 (0.0,1.0) 范围内的 value 也可以进行类似的论证,但请注意,在这种情况下 log10 value 为负数。所以你的最终答案可能涉及绝对值运算。然后您可能会考虑是否有必要在渐近复杂性分析的背景下指定对数底。希望你能从那里得到它!

Is this a trick question? That code will recurse infinitely for some of its inputs (for example, value=-1.0, powerOfTen=0), therefore its runtime is not O(f(n)) for any finite function f(n).

Edit: Assuming value > 0.0...

The run time (or recursion depth, if you prefer to look at it that way) does not depend on the value of powerOfTen, only on value. For an intial input value in the range [1.0, 10.0), the run time is constant, so O(1), For value in [10.0, +infinity), you divide value by 10 for each recursive call until value < 10.0, so the runtime is O(log10(value)). A similar argument can be made for value in the range (0.0,1.0), but note that log10 value is negative for this case. So your final answer might involve an absolute value operation. Then you might consider whether it's necessary to specify the logarithm base in the context of an asymptotic complexity analysis. Hopefully you can take it from there!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文