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

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

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

無論是用鏈表實現還是用數組實現都有一個共同點:要模擬整個游戲過程,不僅程序寫起來比較煩,而且時間復雜度高達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 閱讀(330) 評論(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| 国产免费亚洲高清| 伊人精品成人久久综合软件| 亚洲免费电影在线| 99re6热在线精品视频播放速度 | 你懂的国产精品| 麻豆免费精品视频| 免费成人av| 一区二区高清在线观看| 久久九九热免费视频| 精品电影在线观看| 欧美午夜精品久久久久久浪潮| 一区二区欧美视频| 欧美一区二区在线播放| 欧美一级久久| 免费观看欧美在线视频的网站| 亚洲欧美一级二级三级| 欧美在线免费观看视频| 亚洲欧美偷拍卡通变态| 国内一区二区三区| 亚洲国产精选| 欧美日本免费| 免费亚洲电影在线观看| 午夜天堂精品久久久久| 亚洲国产欧美一区二区三区同亚洲| 国内精品伊人久久久久av影院| 日韩一级不卡| 夜久久久久久| 久久亚洲春色中文字幕久久久| 欧美日韩精品伦理作品在线免费观看| 国产精品外国| 99精品国产高清一区二区| 久久久中精品2020中文| 亚洲影视九九影院在线观看| 欧美国产精品一区| 久久亚洲精品欧美| 老司机精品久久| 国产一区二区福利| 午夜在线a亚洲v天堂网2018| 91久久精品国产91性色| 久久爱www久久做| 国产麻豆91精品| 欧美日韩午夜在线视频| 激情五月婷婷综合| 午夜一区不卡| 亚洲国产精品电影| 午夜精品一区二区三区在线视| 欧美日本精品在线| 亚洲精品自在在线观看| 久久gogo国模裸体人体| 亚洲视频欧美在线| 国产精品亚洲片夜色在线| 亚洲免费综合| 亚洲手机成人高清视频| 欧美午夜国产| 亚洲欧美另类在线| 中文av一区二区| 国产精品网红福利| 久久国产精品久久久| 午夜在线成人av| 国模私拍一区二区三区| 浪潮色综合久久天堂| 美日韩丰满少妇在线观看| 亚洲国产视频a| 亚洲国产日韩欧美在线动漫| 欧美激情小视频| 亚洲天堂成人| 亚洲欧美在线看| 韩日视频一区| 亚洲福利视频网| 欧美色播在线播放| 亚洲三级电影在线观看| 国内精品国语自产拍在线观看| 激情综合自拍| 亚洲精品一区在线观看香蕉| 国产亚洲视频在线| 欧美成人精品在线观看| 欧美体内she精视频在线观看| 久久精品一二三区| 一区二区三区在线视频免费观看| 噜噜噜躁狠狠躁狠狠精品视频 | 久久国产99| 久久精品国产亚洲一区二区三区| 黑人操亚洲美女惩罚| 亚洲一区视频在线观看视频| 欧美一区二区三区在线看| 欧美在线91| 亚洲精品中文在线| 亚洲天天影视| 黑人一区二区三区四区五区| 亚洲国产女人aaa毛片在线| 欧美日韩精品高清| 久久久久久久999精品视频| 欧美激情二区三区| 欧美一区二区在线看| 美女主播精品视频一二三四| 亚洲一区免费视频| 久色成人在线| 欧美中文字幕在线| 欧美不卡一区| 久久综合色88| 国产精品羞羞答答xxdd| 亚洲欧洲一区二区三区| 国产一区二区三区久久| 99这里只有精品| 亚洲黄网站黄| 欧美一区二区在线| 亚洲欧美日韩国产一区二区三区 | 国产欧美日韩精品专区| 欧美第十八页| 国内外成人在线| 亚洲主播在线观看| 在线亚洲高清视频| 欧美激情网友自拍| 欧美激情偷拍| 亚洲福利视频专区| 欧美一级理论片| 香蕉国产精品偷在线观看不卡| 欧美激情一区在线| 欧美激情视频一区二区三区不卡| 一色屋精品视频在线观看网站| 亚洲欧美国产毛片在线| 亚洲中字黄色| 91久久中文字幕| 久久亚洲精品伦理| 噜噜噜噜噜久久久久久91| 国产在线日韩| 国产女主播一区二区| 日韩午夜精品| 欧美看片网站| 亚洲美女黄色片| 亚洲色图在线视频| 欧美日韩中文字幕日韩欧美| 亚洲精品免费看| 日韩午夜免费| 欧美手机在线| 亚洲一级黄色| 久久久久九九九| 欧美日韩亚洲国产精品| 一区二区三区高清不卡| 亚洲视频在线免费观看| 国产精品久久久久久久久久尿| 99精品视频一区二区三区| 亚洲一区二区三区四区五区午夜| 国产精品成人观看视频免费 | 一区二区欧美日韩| 亚洲欧美日韩网| 国外成人在线视频网站| 久久蜜臀精品av| 亚洲国产一区二区三区青草影视| 日韩亚洲在线观看| 国产精品久久二区| 久久久精彩视频| 亚洲日本电影| 亚洲一区影院| 国产亚洲欧洲997久久综合| 久久婷婷国产麻豆91天堂| 亚洲人成毛片在线播放| 性欧美videos另类喷潮| 在线观看成人一级片| 欧美日韩视频免费播放| 欧美一区二区三区久久精品| 欧美韩国在线| 香蕉久久夜色| 91久久精品国产91久久性色| 国产精品爱啪在线线免费观看| 久久激情视频免费观看| 亚洲毛片视频| 久久综合狠狠综合久久综合88| 亚洲人在线视频| 国产精品入口| 欧美韩日亚洲| 欧美在线999| 在线中文字幕一区| 欧美电影在线观看完整版| 亚洲欧美制服另类日韩| 亚洲精品欧美| 欧美激情片在线观看| 欧美在线观看网站| 亚洲乱码日产精品bd| 久久亚洲私人国产精品va| 亚洲一区二区三区乱码aⅴ蜜桃女| 国产美女一区| 欧美三级特黄| 欧美精品入口| 老鸭窝亚洲一区二区三区| 午夜在线a亚洲v天堂网2018| 99成人在线| 亚洲日本激情| 欧美3dxxxxhd| 久热re这里精品视频在线6| 欧美一区日本一区韩国一区| 亚洲天堂av图片| 欧美在线一区二区三区| 中国成人亚色综合网站| 欧美日韩视频专区在线播放|