• 约瑟夫环问题小结


        室友的实验报告就是这个题,感觉不亚于CF div2 的 D 题难度。。  虽然它没有时间和空间限定

        首先是约瑟夫环的解法优化  : http://zh.wikipedia.org/wiki/%E7%BA%A6%E7%91%9F%E5%A4%AB%E6%96%AF%E9%97%AE%E9%A2%98

        这也是算导190页的一个练习!

        主要是利用动态规划来降低复杂度

        具体思路如下

        1.把  N 个约瑟夫环 中第一个数到 M步的人(假设编号为 K )剔除掉

        2.那么接下来的问题就是:从  (N-1)个人中找第一个数到M步的人  

        我们把N-1人重新编号(从K+1开始编号),又组成了一个新的N-1 约瑟夫环问题

        那么  假设  在这  N-1 个人中幸存者的编号为  T(序列已改变) 那么它在原序列中的位置应该是(T+M)%N ————这个公式非常重要;

        然后我们就可以根据这个递推, 当 约瑟夫环中只有一个元素的时候,答案为  1 , 所以逆推,就可以求出约瑟夫环为N的时候  幸存者所在的编号 算法复杂度为 O(n)

      

        敢死队问题:

        给定 N ,M ,问你从编号几开始数 编号1 永远是最后一位!  利用循环链表的性质,如果从编号  1 开始数  最后一个出来的编号是  T,那么从 编号2  开始数就是T+1,知道了相对位置,求解此题也就容易了 算法复杂度 为 O(N);

       

    没有梦想,何谈远方
  • 相关阅读:
    2020.9.21
    企业应用架构模式003——对象-关系结构模式
    企业应用架构模式002
    企业应用架构模式001
    代码大全003/
    代码大全002/
    每日总结
    数论必刷题
    Tarjan求割点(割顶) 割边(桥)
    Luogu 2018 秋令营 Test 2
  • 原文地址:https://www.cnblogs.com/zyue/p/3147455.html
Copyright © 2020-2023  润新知