【问题标题】:What is time complexity of bitwise & operator in java?java中按位&运算符的时间复杂度是多少?
【发布时间】:2018-12-27 06:29:38
【问题描述】:

我想知道 java 中的按位和运算符时间复杂度是什么,以及如何使用替代方法(如果有)来降低它。 提前致谢!!

【问题讨论】:

  • 您可能希望在问题中包含相关的 Java 代码。
  • @TimBiegeleisen 我想做 a[i]&a[j]&a[k] 其中 a 是我的 int 类型数组,所以我认为我的代码花费了太多时间
  • 请注意,时间复杂度必须基于某些参数(例如输入的“大小”,可能是字符串长度、元素数量或类型的大小(以位为单位))来定义。
  • 10^5 是数组的长度

标签: java operators time-complexity


【解决方案1】:

Java 位运算符对原始操作数进行操作,每个运算符都使用一对 JVM 字节码指令实现。以& 为例,这些指令是iand 对应intland 对应long。 (在 JVM 中,基本字长为 32 位,较短的整数类型理论上存储为 32 位。)JVMS 没有指定这些指令的时间复杂度,但在任何合理的实现中,它们都将使用 CPU 的位指令,因此任何特定数据类型上的& 都是恒定时间的,而与操作数的内容无关。

【讨论】:

  • 那么按照你的说法,我应该考虑从用户方面没有其他选择来降低这个操作时间复杂度吗?
  • @AnjuRawat 正确;这几乎是您在 Java 中可以做的最快的事情。如果您确实遇到了性能问题(您没有提供证据),那就是在其他地方。
【解决方案2】:

通常,& 操作的时间复杂度为O(n),其中 n 是 32 位值或 64 位值的数量,具体取决于 JVM。

对于单个 int 值,内容无关紧要。

10^5 是数组的长度

在这种情况下,时间将与数组的长度成正比。

最快的方法是使用 long 值并在每个元素中存储 64 位。

用户端没有办法降低这个操作的时间复杂度?

两个 int 值的& 操作是计算机可以执行的最快操作之一,通常需要 1 个时钟周期,即

【讨论】:

    【解决方案3】:

    位运算速度很快,可用于优化时间复杂度。一些常见的位运算符是: NOT (~):按位 NOT 是一个翻转数字的位的一元运算符,即,如果第 i 位为 0,则将其更改为 1,反之亦然。按位 NOT 只是一个数字的补码。

    【讨论】:

    • 我知道这一点,但我在询问任何其他方法来进行按位 & 运算
    猜你喜欢
    • 2020-02-03
    • 2022-07-17
    • 2012-02-13
    • 2013-05-21
    • 2011-02-15
    • 1970-01-01
    • 2019-05-14
    • 2020-01-26
    相关资源
    最近更新 更多