在Ruby中,最快实现xor 2整数的方法是什么?

在Ruby中,最快实现xor 2整数的方法是什么?,ruby,algorithm,performance,xor,Ruby,Algorithm,Performance,Xor,给定一个由n个元素组成的数组,我应该将a[I]替换为a[I]XOR a[I+1],将a[n-1]的值替换为a[n-1]XOR a[0]达m次。m的值可能达到10^18。什么是最快和最好的方法 n, m = gets.chomp.split(" ").map &:to_i arr = gets.chomp.split(" ") m -= 1 m.times do brr = arr.dup i = 0.to_i for i in 0..n-2 brr[i] = (arr

给定一个由n个元素组成的数组,我应该将
a[I]
替换为
a[I]XOR a[I+1]
,将
a[n-1]
的值替换为
a[n-1]XOR a[0]
达m次。m的值可能达到10^18。什么是最快和最好的方法

n, m = gets.chomp.split(" ").map &:to_i
arr = gets.chomp.split(" ")
m -= 1
m.times do
  brr = arr.dup
  i = 0.to_i
  for i in 0..n-2
    brr[i] = (arr[i].to_i ^ arr[i+1].to_i)
  end
  brr[n-1] = (arr[n-1].to_i ^ arr[0].to_i)
  arr = brr.dup
  p arr
  puts ""
end

是否有一个更快的方法来计算XOR值而不是^运算符?

< P>不要用特定的数字来考虑它,并考虑<代码> > :

的基本数学规则。
  • x^x=0

  • x^0=x

  • ^是关联的和可交换的,因此,例如:

    (x1^x2)^(x3^x2)=x1^(x2^x2)^x3=x1^0^x3=x1^x3

  • 根据xi而不是实际的具体数字写出一个小数组(n=3或4),并通过算法的几(m)次迭代应用这些规则。您将看到m>n的重复模式出现

    补遗
    一旦你看到了这个模式,Ruby可能会非常方便(并且提供了一个非常快速的解决方案)。

    写10^18行代码。
    a[i]^a[i+1]
    i
    是数组中的最后一个索引时是什么意思?您需要指定边界条件。在Ruby中,如果数组
    a
    具有
    n
    元素,则没有元素
    a[n]
    。数组索引从零开始。在ruby中对两个整数进行异或运算的最快方法是使用异或运算符:
    a^b
    @SergioTulentsev OP已经知道了,从提供的代码判断。我很确定OP的讲师希望这个课程应用XOR的数学特性来观察一个模式,这个模式将在不需要进行所有迭代的情况下出现。我敢说它可能与模
    m
    n
    有关吗?