Juggling算法的时间复杂度(数组旋转)

时间:2018-03-23 16:11:38

标签: arrays time-complexity

我最近了解了Juggling算法如何在线性时间内旋转数组



template<class Array, std::size_t N = std::tuple_size<Array>::value>
constexpr std::size_t countof(Array&) { return N; }
&#13;
&#13;
&#13;

时间复杂度如何线性?

1 个答案:

答案 0 :(得分:0)

  • for函数leftRotate(int arr[], int d, int n)中的循环make 完全gcd(d, n)次迭代。
  • Time complexity of gcd(d,n)函数为O(log(d)+log(n))
  • 在while循环中,它将获取满足k % gcd(d, n) == i的所有单元格arr [k]并交换它们。
  • 确切地有n / gcd(d, n)个单元格,它是交换的数量 这个函数将在循环的一次迭代中生成。
  • 因此函数的整个渐近时间复杂度是 将是

    O(gcd(d, n) * n / gcd(d, n))

  • O(n)“线性”。