约瑟夫环(klogn 和线性)

Posted thusloop

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了约瑟夫环(klogn 和线性)相关的知识,希望对你有一定的参考价值。

int josephus(int n, int k) //O(n) n个人 数到k删除

  int res = 0;
  for (int i = 1; i <= n; ++i) res = (res + k) % i;
  return res;

int josephus(int n, int k) //O(klogn)

  if (n == 1) return 0;
  if (k == 1) return n - 1;
  if (k > n) return (josephus(n - 1, k) + k) % n;  // 线性算法
  int res = josephus(n - n / k, k);
  res -= n % k;
  if (res < 0)
    res += n;  // mod n
  else
    res += res / (k - 1);  // 还原位置
  return res;

以上是关于约瑟夫环(klogn 和线性)的主要内容,如果未能解决你的问题,请参考以下文章

数据结构线性表循环链表之约瑟夫环

数据结构--线性表及其应用 约瑟夫环

约瑟夫环的几个新思路(使用C++STL与线性数据结构)

数据结构设计——约瑟夫环问题

约瑟夫环问题

约瑟夫环(超好的代码存档)--19--约瑟夫环--LeetCode面试题62(圆圈最后剩下的数字)