java - Java 中 Math.sqrt 的最坏情况时间复杂度

标签 java math time-complexity math.sqrt

我们有一个测试练习,您需要以最小的时间复杂度找出给定的 N 个数是否是另一个数的平方。

我写道:

public static boolean what2(int n) {
    double newN = (double)n;
    double x = Math.sqrt(newN);
    int y = (int)x;
    if (y * y == n)
        return false;
    else
        return true;
}

我在网上查看,特别是在 SO 上,试图找到 sqrt 的复杂性,但找不到。 This SO post适用于 C# 并表示其 O(1) 和 this Java post说它的 O(1) 但可能会遍历所有 double 。

我试图了解此方法的最差时间复杂度。所有其他操作都是 O(1),所以这是唯一的因素。 非常感谢任何反馈!

最佳答案

使用 float 转换是可以的,因为java的int类型是32位的,而java的double类型是IEEE 64位格式,可以表示32位整数的所有值正是。

如果要为 long 实现函数,则需要更加小心,因为许多较大的 long 值并不完全表示为 doubles,因此取平方根并将其转换为整数类型可能不会产生实际平方根。

您实现中的所有操作都在恒定时间内执行,因此您的解决方案的复杂度确实是 O(1)

关于java - Java 中 Math.sqrt 的最坏情况时间复杂度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35524072/

相关文章:

java - 使用 java 程序更新 HTML 文件

c++ - 循环将值乘以二或三的时间复杂度

python - 在 O(1) 时间 Python 中查找字典中的最小值

math - 板球物理,基本模拟

java - 数字谜题解决方案的数字平方和可以进一步优化吗?

c++ - sin 和 cos 很慢,有替代方案吗?

algorithm - 当键占用超过一个单词的内存时,合并排序/基数排序的复杂性是否会改变

java - 将项目添加到 OHLCSeries 选择是否通知/触发数据更改

java - Java 枚举的奇怪行为

java - 无法使用 selenium webdriver 清除文本区域字段