亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫
1234下一頁
最近訪問板塊 發(fā)新帖
查看: 14540 | 回復(fù): 30
打印 上一主題 下一主題

討論下算法導(dǎo)論第5章一道概率題 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2008-07-08 23:24 |只看該作者 |倒序?yàn)g覽
5.1-2 用random(0,1)來實(shí)現(xiàn)random(a,b),并估計(jì)運(yùn)行時(shí)間.

想到一種解法,分治法:
     1.分解,將a-b區(qū)間分成2部分,通過random(0,1)控制,則進(jìn)入前半部和后半部的概率是一樣的;
     2.遞歸的處理前后兩個(gè)部分,若問題足夠小,即落到某個(gè)具體位置上時(shí),則直接返回;

偽代碼:
int random( a, b )
{
   if( a == b )
     return a;
   if( random( 0, 1 ) )
     return random( a, (a+b)/2 );
   else
     return random( (a+b)/2 + 1, b );
}

但仔細(xì)分析下發(fā)現(xiàn)有問題.

令 n = b-a, 問題簡化為 1/n = f( 1/(2^x) ),
                root
                 / \
                0    1
               / \   / \
             /   .....   \
            0 .........  1
時(shí)間復(fù)雜度為 O(lgn),通過lgn次random(0,1)調(diào)用,即生成長度為lg(b-a)的"前后后前..."隨機(jī)序列來控制最后落定的位置,類似2叉決策樹的決策過程,x次random(0,1)調(diào)用最多可能產(chǎn)生2^x條路徑,即最多可能返回2^x種結(jié)果,每條路徑的產(chǎn)生概率相等,即1/(2^x).

但如果n不是2的整數(shù)次方,不可能將概率平均分配到每條路徑,所以不可能在有限次調(diào)用內(nèi)生成精確的平均返回概率.

如, n=8時(shí),可以取x=3,正好8種返回結(jié)果的概率一樣,都是1/8.但如果n=7,那么b的返回概率可能會(huì)是2/8,其余值的返回概率均為1/8.
  
所以得到的結(jié)果是不精確的,上網(wǎng)查了很久,也沒找到答案

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2008-07-09 21:42 |只看該作者
沒人理 自己偷偷頂下

有人一起做題玩么?

論壇徽章:
11
未羊
日期:2013-12-16 12:45:4615-16賽季CBA聯(lián)賽之青島
日期:2016-04-11 19:17:4715-16賽季CBA聯(lián)賽之廣夏
日期:2016-04-06 16:34:012015亞冠之卡爾希納薩夫
日期:2015-11-10 10:04:522015亞冠之大阪鋼巴
日期:2015-07-30 18:29:402015亞冠之城南
日期:2015-06-15 17:56:392015亞冠之卡爾希納薩夫
日期:2015-05-15 15:19:272015亞冠之山東魯能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16賽季CBA聯(lián)賽之八一
日期:2016-07-22 09:41:40
3 [報(bào)告]
發(fā)表于 2008-07-10 01:05 |只看該作者
不知行不行, random(0, 1)和int random(int a, int b)假設(shè)不是同一個(gè)函數(shù), 因此int random(int a, int b)中沒作相應(yīng)邏輯

int random(int a, int b){
    if(a == b){
        return a;
    }

    assert(b > a);
    int n = b - a;
    return a + random_private(n);
}

int random_private(int b){
    if(b % 2){
        int half = b / 2;
        if(random(0, 1) == 0){
            return random(0, half);
        }
        return random(half + 1, b);
    }

    int n = 0;
    for(int i = 0; i < b; ++i){
        n += random(0, 1);
    }
    return n;
}

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2008-07-12 10:36 |只看該作者
贊,應(yīng)該就是樓上的思路!
我咋想不到呢

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2008-07-12 11:35 |只看該作者
原帖由 void_while 于 2008-7-8 23:24 發(fā)表
5.1-2 用random(0,1)來實(shí)現(xiàn)random(a,b),并估計(jì)運(yùn)行時(shí)間.

想到一種解法,分治法:
     1.分解,將a-b區(qū)間分成2部分,通過random(0,1)控制,則進(jìn)入前半部和后半部的概率是一樣的;
     2.遞歸的處理前后兩個(gè)部分 ...



按書上的記號(hào),random(3,7) 應(yīng)該隨機(jī)生成 3,4,5,6,7 中的一個(gè)。你好像只生成 4 個(gè)數(shù)。

論壇徽章:
0
6 [報(bào)告]
發(fā)表于 2008-07-12 11:36 |只看該作者
原帖由 zylthinking 于 2008-7-10 01:05 發(fā)表
int random_private(int b){
    if(b % 2){
        int half = b / 2;
        if(random(0, 1) == 0){
            return random(0, half);
        }
        return random(half + 1, b);
    }

    int n = 0;
    for(int i = 0; i < b; ++i){
        n += random(0, 1);
    }
    return n;
}


看不懂,后面累加的含義是什么?

論壇徽章:
0
7 [報(bào)告]
發(fā)表于 2008-07-12 11:41 |只看該作者

回復(fù) #1 void_while 的帖子

呵呵 頂一下 樓主還是比較強(qiáng)的

論壇徽章:
0
8 [報(bào)告]
發(fā)表于 2008-07-12 11:43 |只看該作者
這個(gè)題目相當(dāng)于在能隨機(jī)生成 0, 1 的前提下,要求隨機(jī)生成 n 個(gè)整數(shù)。

把要生成的數(shù)標(biāo)記為 0,1,2,..., n-1

取最小的 m,使得 2^m >= n-1

通過隨機(jī)生成 0,1 的函數(shù)生成一個(gè)  m 比特整數(shù)(隨機(jī)生成每一位),這樣能隨機(jī)生成 [0, 2^m) 內(nèi)的整數(shù)。

隨機(jī)生成一個(gè) [0,2^m) 中的整數(shù),如果這個(gè)數(shù)大小在 [0,n-1] 內(nèi),則取這個(gè)數(shù)為結(jié)果。
如果這個(gè)數(shù)在 [0,n-1] 外,則丟棄它,重新生成一個(gè)。

[ 本帖最后由 win_hate 于 2008-7-12 11:46 編輯 ]

論壇徽章:
0
9 [報(bào)告]
發(fā)表于 2008-07-12 11:49 |只看該作者
原帖由 zylthinking 于 2008-7-10 01:05 發(fā)表
不知行不行, random(0, 1)和int random(int a, int b)假設(shè)不是同一個(gè)函數(shù), 因此int random(int a, int b)中沒作相應(yīng)邏輯

int random(int a, int b){
    if(a == b){
        return a;
    }

    a ...

1. 你的random(b)應(yīng)該產(chǎn)生[0, b],因此,b % 2的判斷是錯(cuò)誤的(因?yàn)檫@里有b + 1個(gè)數(shù))
2. 后面的循環(huán)產(chǎn)生的b + 1個(gè)數(shù)的每個(gè)數(shù)的概率是不均等的。舉個(gè)簡單的例子:產(chǎn)生0和b的概率為(1/2)^b,而不是期望的1/(b+1)。
   如果你寫成了n = n0 + n1 + n2 + .... + nb的形式,其中ni的產(chǎn)生概率為1/2,就很容易知道你方法有問題了

[ 本帖最后由 tyc611 于 2008-7-12 11:52 編輯 ]

論壇徽章:
0
10 [報(bào)告]
發(fā)表于 2008-07-12 11:51 |只看該作者
原帖由 win_hate 于 2008-7-12 11:43 發(fā)表
這個(gè)題目相當(dāng)于在能隨機(jī)生成 0, 1 的前提下,要求隨機(jī)生成 n 個(gè)整數(shù)。

把要生成的數(shù)標(biāo)記為 0,1,2,..., n-1

取最小的 m,使得 2^m >= n-1

通過隨機(jī)生成 0,1 的函數(shù)生成一個(gè)  m 比特整數(shù)(隨機(jī)生成每一位 ...

我曾經(jīng)和同學(xué)討論過用random(0, 1)來產(chǎn)生目標(biāo)數(shù)的二進(jìn)制位,但問題在于,當(dāng)目標(biāo)數(shù)不是2^n時(shí)無法做到等概率
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP