青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

【轉】約瑟夫問題的數學解法

寫完密碼約瑟夫就想到原來看到約瑟夫問題的一個數學解法   很巧妙很簡單 不過只能推出最后一個出列的人

無論是用鏈表實現還是用數組實現都有一個共同點:要模擬整個游戲過程,不僅程序寫起來比較煩,而且時間復雜度高達O(nm),當n,m非常大(例如上百萬,上千萬)的時候,幾乎是沒有辦法在短時間內出結果的。我們注意到原問題僅僅是要求出最后的勝利者的序號,而不是要讀者模擬整個過程。因此如果要追求效率,就要打破常規,實施一點數學策略。
為了討論方便,先把問題稍微改變一下,并不影響原意:

問題描述:n個人(編號0~(n-1)),從0開始報數,報到(m-1)的退出,剩下的人繼續從0開始報數。求勝利者的編號。

我們知道第一個人(編號一定是m%n-1) 出列之后,剩下的n-1個人組成了一個新的約瑟夫環(以編號為k=m%n的人開始):
  k  k+1  k+2  ... n-2, n-1, 0, 1, 2, ... k-2
并且從k開始報0。

現在我們把他們的編號做一下轉換:
k     --> 0
k+1   --> 1
k+2   --> 2
...
...
k-2   --> n-2
k-1   --> n-1

變換后就完完全全成為了(n-1)個人報數的子問題,假如我們知道這個子問題的解:例如x是最終的勝利者,那么根據上面這個表把這個x變回去不剛好就是n個人情況的解嗎?!!變回去的公式很簡單,相信大家都可以推出來:x'=(x+k)%n

如何知道(n-1)個人報數的問題的解?對,只要知道(n-2)個人的解就行了。(n-2)個人的解呢?當然是先求(n-3)的情況 ---- 這顯然就是一個倒推問題!好了,思路出來了,下面寫遞推公式:

令f[i]表示i個人玩游戲報m退出最后勝利者的編號,最后的結果自然是f[n]

遞推公式
f[1]=0;
f[i]=(f[i-1]+m)%i;  (i>1)

有了這個公式,我們要做的就是從1-n順序算出f[i]的數值,最后結果是f[n]。因為實際生活中編號總是從1開始,我們輸出f[n]+1

由于是逐級遞推,不需要保存每個f[i],程序也是異常簡單:

#include <stdio.h>
int main()
{
  int n, m, i, s=0;
  printf ("N M = "); scanf("%d%d", &n, &m);
  for (i=2; i<=n; i++) s=(s+m)%i;
  printf ("The winner is %d\n", s+1);
}

這個算法的時間復雜度為O(n),相對于模擬算法已經有了很大的提高。算n,m等于一百萬,一千萬的情況不是問題了。可見,適當地運用數學策略,不僅可以讓編程變得簡單,而且往往會成倍地提高算法執行效率。

posted on 2008-04-07 09:34 zhongguoa 閱讀(333) 評論(0)  編輯 收藏 引用

只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲高清不卡av| 亚洲视频久久| 免费人成精品欧美精品| 久久久久成人精品| 亚洲第一色在线| 亚洲国产精品传媒在线观看 | 亚洲欧美成人网| 一区二区三区鲁丝不卡| 国产精品视频一二三| 久久久久欧美精品| 免费不卡视频| 亚洲女爱视频在线| 亚欧美中日韩视频| 亚洲日本电影在线| 亚洲一区二区三| 在线观看国产精品网站| 亚洲精品色婷婷福利天堂| 国产精品久久波多野结衣| 久久久另类综合| 欧美激情视频一区二区三区在线播放 | 99精品国产在热久久下载| 一区二区三区四区国产| 国产亚洲日本欧美韩国| 欧美黄污视频| 国产欧美一区二区精品仙草咪| 久久精品国产免费看久久精品| 另类综合日韩欧美亚洲| 亚洲视频综合| 久久免费99精品久久久久久| 在线亚洲一区观看| 久久久久成人网| 亚洲欧美电影院| 另类国产ts人妖高潮视频| 亚洲欧美日韩国产成人| 裸体丰满少妇做受久久99精品| 亚洲欧美另类中文字幕| 欧美www视频在线观看| 欧美在线网址| 国产精品av一区二区| 欧美激情按摩| 黄色成人精品网站| 亚洲综合精品自拍| 一本色道久久综合| 蜜臀久久99精品久久久久久9| 欧美一区日韩一区| 欧美日韩在线精品| 欧美激情一区二区在线| 国产综合精品一区| 亚洲综合日韩在线| 在线中文字幕不卡| 欧美成人在线免费观看| 美女免费视频一区| 国内精品视频在线观看| 亚洲欧美日韩精品综合在线观看| 在线视频日韩精品| 欧美日韩成人| 亚洲国产日韩欧美在线99| 激情六月婷婷综合| 久久精品国产91精品亚洲| 欧美一区二区三区在线视频| 国产精品国产三级国产专播品爱网 | 欧美成人综合在线| 精品69视频一区二区三区| 先锋资源久久| 久久国产精彩视频| 国产亚洲视频在线| 久久成年人视频| 久久久www成人免费毛片麻豆| 国产乱人伦精品一区二区| 亚洲一区影院| 久久精品99国产精品日本| 国产欧美日韩视频| 欧美一区二区精品| 久久久亚洲精品一区二区三区 | 免费人成精品欧美精品| 欧美国产1区2区| 亚洲美女视频在线观看| 欧美日韩www| 亚洲视频久久| 久久精品视频亚洲| 亚洲第一精品久久忘忧草社区| 久热精品视频在线观看| 亚洲经典自拍| 亚洲视频中文| 国产日韩欧美在线看| 久久精品免费电影| 亚洲国产高清aⅴ视频| 日韩一级视频免费观看在线| 欧美午夜精品电影| 欧美一级二级三级蜜桃| 欧美大片免费久久精品三p| 亚洲美女免费视频| 国产日韩欧美高清| 美女日韩在线中文字幕| 一区二区三区**美女毛片| 欧美亚洲视频在线观看| 曰本成人黄色| 国产精品国产精品| 久久综合免费视频影院| 亚洲人成艺术| 久久女同互慰一区二区三区| 亚洲免费观看视频| 国产一区二区丝袜高跟鞋图片| 免费成人小视频| 亚洲免费综合| 91久久精品国产91久久性色| 欧美影院一区| 99视频一区二区| 一色屋精品视频免费看| 欧美三区美女| 嫩草影视亚洲| 久久精品国语| 亚洲欧美日韩一区二区在线| 亚洲黄一区二区三区| 午夜免费日韩视频| 99国产精品久久久久久久久久| 国产一区视频观看| 国产精品萝li| 欧美日韩精品一本二本三本| 久久影院午夜论| 午夜欧美大片免费观看| 一本久久青青| 亚洲精品欧美精品| 亚洲成色www8888| 狂野欧美激情性xxxx| 欧美综合国产| 亚洲欧洲av一区二区| 一区二区三区欧美亚洲| 亚洲人成网在线播放| 亚洲成人在线免费| 国内成人在线| 国产一区二区在线免费观看| 国产精品网站一区| 国产精品白丝av嫩草影院| 欧美日韩免费观看一区二区三区 | 激情av一区二区| 国产日韩欧美夫妻视频在线观看| 欧美午夜激情小视频| 欧美日韩亚洲一区| 欧美日韩你懂的| 欧美日韩中文字幕精品| 欧美日韩一区二区三区在线视频 | 国产精品卡一卡二| 国产精品久久久久久久久久ktv| 欧美日韩精品免费| 欧美日韩精品一区二区三区| 欧美日韩国产色综合一二三四| 欧美成人一区二区| 欧美经典一区二区| 欧美日韩国产美女| 国产精品久久97| 国产亚洲综合在线| 极品少妇一区二区| 亚洲欧洲日本专区| 夜夜嗨av一区二区三区中文字幕| 99精品久久久| 亚洲欧美日韩精品久久亚洲区| 欧美一区二区免费| 久久综合影音| 亚洲青色在线| 亚洲自拍偷拍色片视频| 欧美在线观看一区| 欧美www在线| 国产精品乱码妇女bbbb| 国产视频一区二区在线观看| 伊人成年综合电影网| 亚洲国产日韩一区| 亚洲在线成人| 久久久久久久久蜜桃| 欧美激情成人在线视频| 夜夜嗨av色综合久久久综合网| 亚洲一区二区精品| 久久青草福利网站| 欧美三区美女| 红桃视频一区| 亚洲小说春色综合另类电影| 欧美一区二区三区在线免费观看| 欧美ed2k| 亚洲午夜在线| 奶水喷射视频一区| 国产欧美视频一区二区三区| 亚洲黄色片网站| 欧美一区亚洲| 亚洲裸体视频| 久久久爽爽爽美女图片| 欧美视频在线观看一区二区| 黄色成人片子| 午夜视频久久久久久| 欧美激情精品久久久久久黑人| 亚洲视频观看| 欧美激情视频在线免费观看 欧美视频免费一| 欧美日韩一区二区精品| 在线日韩欧美| 欧美中文字幕视频| 99v久久综合狠狠综合久久| 久久国产精品久久久久久| 国产精品久久久久9999高清| 亚洲人体影院| 欧美成人免费大片| 久久国产乱子精品免费女 |