zoukankan      html  css  js  c++  java
  • 约瑟夫环问题小结

        室友的实验报告就是这个题,感觉不亚于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);

       

    没有梦想,何谈远方
  • 相关阅读:
    Celery
    MongoDB-简介
    人工智障
    Flask-session,WTForms,POOL,Websocket通讯原理 -握手,加密解密过程
    web-socket
    flask基础2
    flask的基础1
    项目部署
    nginx简单学习
    redis的安装与配置
  • 原文地址:https://www.cnblogs.com/zyue/p/3147455.html
Copyright © 2011-2022 走看看