云计算百科
云计算领域专业知识百科平台

位或操作(|)的非递减性

1. 位或操作(|)的非递减性​

位或操作(|)是一个位级操作,它对两个数的每一个二进制位独立进行逻辑或运算:

  • 如果某一位是 1,则结果的该位一定是 1(因为 1 | x = 1)。
  • 如果某一位是 0,则结果的该位取决于另一个数的对应位(0 | 0 = 0,0 | 1 = 1)。

​为什么 a | b ≥ a 和 a | b ≥ b?​​

  • ​**a | b ≥ a**​:

    • 对于 a 的每一位:
      • 如果 a 的某一位是 1,则 a | b 的该位一定是 1(因为 1 | x = 1),所以 a | b 的该位 ≥ a 的该位。
      • 如果 a 的某一位是 0,则 a | b 的该位取决于 b 的对应位:
        • 如果 b 的该位是 1,则 a | b 的该位是 1(比 a 的 0 大)。
        • 如果 b 的该位是 0,则 a | b 的该位是 0(和 a 的 0 相同)。
    • ​结论​:a | b 的每一位要么等于 a 的对应位,要么比 a 的对应位大,因此 a | b ≥ a(按数值比较)。
  • ​**a | b ≥ b**​:

    • 同理,a | b 的每一位要么等于 b 的对应位,要么比 b 的对应位大,因此 a | b ≥ b。

​推广到多个数字​

对于多个数字 a₁, a₂, …, aₙ,逐步进行按位或操作:

  • a₁ | a₂ ≥ a₁ 且 a₁ | a₂ ≥ a₂
  • (a₁ | a₂) | a₃ ≥ (a₁ | a₂) 且 (a₁ | a₂) | a₃ ≥ a₃
  • a₁ | a₂ | … | aₙ ≥ a₁ | a₂ | … | aₙ₋₁ 且 a₁ | a₂ | … | aₙ ≥ aₙ

因此,​最终的按位或结果 a₁ | a₂ | … | aₙ 是所有中间结果中的最大值,因为它不断累积更多的 1 位,而不会减少任何位。


​2. 为什么最终最大的或结果是全部数字的或?​​

因为按位或操作是单调非递减的​(即 x | y ≥ x 和 x | y ≥ y),所以:

  • 每次进行 | 操作,结果只会增加或保持不变​(不会减少)。
  • 因此,​最终所有数字的或 a₁ | a₂ | … | aₙ 会包含所有可能的 1 位,即最大的可能值。

​例子​

假设我们有三个数字:

  • a = 5(0101)
  • b = 3(0011)
  • c = 6(0110)

逐步计算:

  • a | b = 0101 | 0011 = 0111(7)
    • 7 ≥ 5 且 7 ≥ 3(满足非递减性)
  • (a | b) | c = 0111 | 0110 = 0111(7)
    • 7 ≥ 7 且 7 ≥ 6(仍然满足非递减性)
  • 最终结果 7 是所有数字的或,也是最大的可能值。


    ​3. 贪心策略的解释​

    这个问题类似于贪心算法中的最大化二进制位问题:

    • 我们希望结果的二进制表示中尽可能多的 1 位。
    • 每次进行 | 操作,都会保留或增加 1 位,而不会减少 1 位。
    • 因此,​最终所有数字的或 a₁ | a₂ | … | aₙ 会包含所有可能的 1 位,即最大值。

    ​结论​

    • ​按位或操作 | 是非递减的,即 a | b ≥ a 和 a | b ≥ b。
    • ​逐步进行 | 操作,结果只会增加或保持不变,不会减少。
    • ​最终所有数字的或 a₁ | a₂ | … | aₙ 会包含所有可能的 1 位,因此是最大的可能值。

    这就是为什么最终最大的或结果是全部数字的或。

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » 位或操作(|)的非递减性
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!