天天快资讯丨算法(第4版)练习题1.1.27的三种解法

2023-04-19 18:34:54 来源: 博客园

本文列举了对于 算法 : 第4版 / (美) 塞奇威客 (Sedgewick, R.) , (美) 韦恩 (Wayne, K.) 著 ; 谢路云译. -- 北京 : 人民邮电出版社, 2012.10 (2021.5重印)(以下简称原书或书)中的练习题 1.1.27 的三种解法(C++ 实现),并对包含原书题中的递归方法在内的四种解法的执行时间进行了统计和对比。


(资料图片仅供参考)

◆ 要求

原书中的练习题 1.1.27 要求对如下二项分布递归过程中的值保存在数组中,

b(n,k,p) = 1.0  ( n == 0 && k == 0 )b(n,k,p) = 0.0  (  n < 0 ||  k < 0 )b(n,k,p) = (1.0-p) * b(n-1,k,p) + p * b(n-1,k-1,p)
◆ 解一

依然采用递归的方式,但使用二维数组保存中间结果。

如下代码所示,

static long double binomial1(int N, int K, long double p)    // #1{    long double x;    long double** b = new long double*[N+1];               // #2    long double* data = new long double[(N+1)*(K+1)];    ...    x = binomial1_impl(b, N, K, p);         // #3    ...    return x;}static long double binomial1_impl(long double** b, int N, int K, long double p){    if (N == 0 && K == 0) return 1.0L;    if (N < 0 || K < 0) return 0.0L;    if (b[N][K] == -1) {        ...                                 // #4        b[N][K] = (1.0L-p) * binomial1_impl(b, N-1, K, p) + p * binomial1_impl(b, N-1, K-1, p);    }    return b[N][K];}

保持对外的接口不变(#1),创建一个二维数组 b[0..N][0..K] 保存中间计算结果(#2),并将其传给算法实现(#3)。算法虽然还是用递归调用(#4),但由于中间结果保存在全局的二维数组中,不用频繁地压栈和弹栈去获取中间数据。此解法网络上也见于 [github] reneargento/algorithms-sedgewick-wayne 和 [github] aistrate/AlgorithmsSedgewick 。

◆ 解二

使用二维数组保持中间结果,但同时将递归改进为递推。若以横向为 x 轴,纵向为 y 轴,左上角为坐标原点,则坐标轴上的 (x,y) 点则代表二维数组的 b[y][x] 单元。

以 N = K = 4 为例,

0   1   2   3   40   *   *   *   *   *  <-- * 代表待计算的单元1   *   *   *   *   *2   *   *   *   *   *3   *   *   *   *   *4   *   *   *   *   ?  <-- 最终计算结果的单元 (4,4)

仔细考察递归关系式的特点,b(-1,*,p) = 0.0, b(*,-1,p) = 0.0。由

b(0,1,p) = (1.0-p) * b(-1,1,p) + p * b(-1,0,p)         = (1.0-p) * 0.0 + p * 0.0         = 0.0b(0,2,p) = (1.0-p) * b(-1,1,p) + p * b(-1,1,p)         = (1.0-p) * 0.0 + p * 0.0         = 0.0...

可推论出,二维数组中的第 0 行中的所有单元(不含b[0][0])均为 0.0;由

b(1,0,p) = (1.0-p) * b(0,0,p) + p * b(0,-1,p)         = (1.0-p) * 1.0 + p * 0.0         = 1.0-pb(2,0,p) = (1.0-p) * b(1,0,p) + p * b(1,-1,p)         = (1.0-p) * (1.0-p) + p * 0.0         = (1.0-p)^2...

可推论出,二维数组中的第 0 列的单元为 (1.0-p)^y。

因为每个单元 b[n][k] 结果(n 代表行号,k 代表列号),依赖于 b[n-1][k-1] 和 b[n-1][k] 的结果。为了减少计算量,递推过程可仅用到二维数组的部分单元。笔者设置一个 G 点,将待计算单元的区域划分为 "#" 和 "*" 两部分,G 点在 "#" 区域中。分为以下三种情况,

第一种情况,N < K:(如 N = 4, K = 6)

0   1   2   3   4   5   60   -   -   G   #   #   #   #  <-- G 点所在单元为 0.01   -   -   -   *   *   *   *  <-- "-" 代表不用计算的单元2   -   -   -   -   *   *   *3   -   -   -   -   -   *   *4   -   -   -   -   -   -   ?  <-- 最终结果的存储单元

G 点为 b(0,K-N)。按照递推关系式容易推导出,"#" 和 "*" 区域均为 0.0,所以最终结果即 0.0。

第二种情况,N = k:(如 N = 6, K = 6)

0   1   2   3   4   5   60   G   #   #   #   #   #   #  <-- G 点所在单元为 1.01   -   *   *   *   *   *   *2   -   -   *   *   *   *   *3   -   -   -   *   *   *   *4   -   -   -   -   *   *   *5   -   -   -   -   -   *   *6   -   -   -   -   -   -   ?

G 点为 b(0,0)。按照递推关系式容易推导出,数组中 n = k 的单元为 p^n。所以最终结果即 p^N。

第三种情况,N > K:(如 N = 6, K = 4)

0   1   2   3   40   #   #   #   #   #1   #   #   #   #   #2   G   #   #   #   #  <-- G 点所在单元为 (1.0-p)^23   -   *   *   *   *4   -   -   *   *   *5   -   -   -   *   *6   -   -   -   -   ?

G 点为 b(N-K,0)。可先计算 "#" 区域中的单元,再计算 "*" 区域中的单元,得出最终结果。处理"#"区域时,为避免大量的数组下标越界判断,可以考虑先计算 0 行和 0 列的所有单元。

如下代码所示,

static long double binomial2(int N, int K, long double p){    long double x;    if (N < K) {                       // #1        x = 0.0L;    } else if (N == K) {                // #2        x = powl(p, N);    } else {                       // #3        ...        b[0][0] = 1.0L;        // process "#" area                      // #4        // calcuate [1..N-K][0]        for (i = 1; i <= N-K; ++i)            b[i][0] = powl(1.0L-p, i);        // calcuate [0][1..K]        for (j = 1; j <= K; ++j)            b[0][j] = 0.0L;        // calcuate [1..N-K][1..K]        for (i = 1; i <= N-K; ++i)            for (j = 1; j <= K; ++j)                b[i][j] = (1.0L-p) * b[i-1][j] + p * b[i-1][j-1];        // process "*" area                            // #5        for (i = N-K+1; i <= N; ++i)            for (j = i-(N-K); j <= K; ++j)                b[i][j] = (1.0L-p) * b[i-1][j] + p * b[i-1][j-1];        x = b[N][K];                       // #6        ...    }    return x;}

三条分支(#1、#2、#3)分别对应前述三种情况。在第三种情况下,再先处理 "#" 区域(#4),然后采用递推求值的方式处理 "*" 区域(#5),最后得到结果(#6)。

◆ 解三

此方法是从递推解法中引申出来了。进一步探究这个此二项分布的递归式,以 N = 4 且 K = 4 为例,

0          1                2                    3                40  1.01  1.0-p      p2  (1.0-p)^2  2*(1.0-p)*p      p^23  (1.0-p)^3  3*[(1.0-p)^2]*p  3*(1-p)*(p^2)        p^34  (1.0-p)^4  4*[(1.0-p)^3]*p  6*[(1.0-p)^2]*(p^2)  4*(1.0-p)*(p^3)  p^4

可以发现,从第 0 行到第 N 行的非零单元即“杨辉三角形”,第 n 行中的非零单元之和构成 [(1.0-p) + p]^k 的展开式。因此,解二中的第三种情况,可结合利用通项公式 C(N,K)*[(1.0-p)^(N-K)]*(p^K) 来解决。

如下代码所示,

static long double binomial3(int N, int K, long double p){    long double x;    if ...    } else {        x = combination(N, K) * powl(1.0L-p, N-K) * powl(p, K);    }    return x;}
◆ 测试

编译并执行程序,

$ g++ -std=c++11 -o 27.out 27.cpp$ ./27.out 10 5 0.25

为易于显示两者之间的差异,笔者选择了硬件配置偏低的测试环境。

硬件配置:Raspberry Pi 3 Model BQuad Core 1.2GHz 64bit1G RAM16G MicroSD100 Base Ethernet软件配置:Raspbian Stretchg++ (Raspbian 6.3.0-18+rpi1+deb9u1) 6.3.0 20170516

测试并记录了 (N, K, p) 为 (10, 5, 0.25), (20, 10, 0.25), (40, 20, 0.25), (80, 40, 0.25), (100, 50, 0.25) 的情况下,原递归、解一、解二、解三执行时所消耗的时间。

结果如下图所示,

对比可以看出,不同的解法在执行时间上的差异随着计算量的增加而逐步扩大。

◆ 最后

完整示例代码和测试结果,请参考 [gitee] cnblogs/17328989 。

写作过程中,笔者参考了 [github] reneargento/algorithms-sedgewick-wayne 和 [github] aistrate/AlgorithmsSedgewick 的实现方式。致 reneargento 和 aistrate 两位。

标签:

上一篇 :

下一篇 :

天天快资讯丨算法(第4版)练习题1.1.27的三种解法

本文列举了对于算法:第4版 (美)塞奇威客(Sedgewick,R ),(美)韦恩(Wayne,K )著;谢路云译 --北京:人民邮电出版社,2012 10

04-19 18:34:54

亚新物业投资新设郑州翰居物业公司 注册资本10万元|当前热闻

观点网讯。4月19日消息,河南亚新物业服务有限公司(以下简称“亚新物业”)新增投资企业郑州翰居物业管...

04-19 18:23:18

科学家在快餐包装中发现PFAS永久化学品:强酸/碱、高温都无法降解

科学家在快餐包装中发现PFAS永久化学品:强酸 碱、高温都无法降解

04-19 18:31:18

【天天播资讯】五一出游高峰期 文旅复苏绽笑颜是为什么

五一假期放假人数增多,更多人选择外地旅游,增加文旅经济收入。五一假期临近,多个平台的数据显示,我...

04-19 17:21:33

如何解决煮饭问题_送暗恋的女生礼物|世界微资讯

一些大米版本是粘性的。对于这样一种普遍的主食,掌握大米可能是一个令人沮丧的挑战。错误判断烹饪时间...

04-19 17:06:37

haogaozhongcom官网 haogaozhong

今天来聊聊关于haogaozhongcom官网,haogaozhong的文章,现在就为大家来简单介绍下haogaozho

04-19 17:14:55

统筹产业资源融合发展 中国国际肉类产业周在青岛开幕-讯息

由中国肉类协会联合世界肉类组织共同举办的“中国国际肉类产业周4月18日-22日在青岛世界博览城举行。产...

04-19 16:30:49

全球热文:北京长峰医院火灾事故已致29人遇难

据央视新闻客户端消息,今天(19日),北京市召开长峰医院火灾事故情况通报会,截至今天(19日)9时,经...

04-19 16:22:02

环球关注:面条和牛奶能一起吃吗 面条和牛奶适合同吃吗

1、若自身对面条或牛奶不过敏,面条和牛奶能一起吃。但进食时还应注意控制摄入量,避免进食过多,以免引...

04-19 16:26:05

心灵鸡汤全集:改变命运的人生哲理 今日热闻

1、《心灵鸡汤全集:改变命运的人生哲理》是2008年1月1日民主与建设出版的图书。本文到此分享完毕,希望...

04-19 15:26:10

全球报道:天弘指数基金(聊城配资)

今日片仔癀股票行情观点:具备中长期投资价值,但不是短线交易时机6月10日:短线大盘技术上还有回调压力...

04-19 14:56:04

给力!创新创业大赛部分获奖者将直接认定为“省科技创业领军人才”

湖南日报4月19日讯(全媒体记者王铭俊)记者从今天召开的2023湖南省创新创业大赛新闻发布会上获悉,部分...

04-19 14:55:39

当前视讯!面对解放军战舰的逼近,台军拉出“杀手锏”导弹,威胁有多大?

我们看到台湾(地区)当局其实对我们这种军事演练,特别是对我们这次“联合利剑”还是深有忌惮的,他知...

04-19 14:42:20

别眨眼,看过来!地铁10号线二期兰花路至后堡段新进展来啦

轨道交通10号线二期看过来!看过来!万众期待的轨道交通10号线传来新进展啦~快跟随南岸发布一起来看看吧...

04-19 13:59:52

2023上海车展:最具设计感的领克汽车来了!领克08首发亮相

领克08的定位是一台中型插电混动SUV,车长4820mm,轴距是2848mm,这个尺寸其实是和XC60差不多。

04-19 14:03:53

全球热头条丨汽车消费、生猪价格、铁矿石价格……刚刚,国家发改委举行新闻发布会,回应了这些热点

发改委将下大力气稳定汽车消费。这些都表明,一季度消费市场形势开局良好,为全年恢复和扩大消费打下坚...

04-19 13:21:57

全球资讯:四川长虹4月19日快速反弹

以下是四川长虹在北京时间4月19日09:49分盘口异动快照:4月19日,四川长虹盘中快速反弹,5分钟内涨幅超...

04-19 13:14:43

干细胞领域市场格局 干细胞行业发展前景投资分析:今日精选

干细胞行业发展前景如何?干细胞是一类具有无限或者永生的自我更新能力的细胞,能够产生至少一种类型的...

04-19 12:37:07

国家发改委:积极提出“中国倡议” 落实全球发展高层对话会数字经济领域成果|世界速递

据国家发改委网站,发改委方面今日在新闻发布会上表示,将重点从五方面发力,持续做强做优做大我国数字...

04-19 12:40:09

当“三所联动”遇上“美丽家园” ,法理明晰化解矛盾→

日前,家住曲阳某社区的赵先生发现,美丽家园工程施工队在对自家所在高层楼栋的建筑外立面进行施工时,...

04-19 11:52:09

V观财报|惠威科技业绩预告“变脸”被深交所关注 焦点资讯

中新经纬4月19日电因业绩预告“盈转亏”,深交所18日向惠威科技发出关注函。关注函要求惠威科技说明1月3...

04-19 11:45:46

广州宝马撞人案司机一审死刑,受害者家属:他没解释动机,没道歉 环球热头条

广州宝马撞人案司机一审死刑,受害者家属:他没解释动机,没道歉澎湃新闻记者陈绪厚 实习生谢渝凤4月18...

04-19 11:17:02

CPO概念股继续活跃 剑桥科技两连板 全球今亮点

上证报中国证券网讯4月19日,CPO概念股继续活跃,截至9:42,剑桥科技两连板,股价创历史新高,联特科技...

04-19 10:54:39

当前热点-为什么澹台烬是仁君还要钉他?因为他学人精爱发疯,更有时间限制

我感觉澹台恩伯就像一个有精神疾病的人,“偏执”很可能就是他身上的邪骨,所以澹台恩伯还是会被钉死,...

04-19 10:26:11

北京长峰医院发生火灾,北京市:当务之急是全力以赴救治伤员

4月18日12时57分,丰台区消防救援支队接警:北京长峰医院住院部东楼发生火情。接警后,消防、公安、卫健...

04-19 10:36:05

世界热讯:2023年第15周生猪及猪肉价格环比下降

【2023年第15周生猪及猪肉价格环比下降】2023年4月10日—4月16日,全国规模以上生猪定点屠宰企业生猪平...

04-19 09:49:51

移动金卡是几星级 移动卡金卡|环球新动态

移动金卡是五星级。移动总共分八个星级:准星、一星、二星、三星、四星、五星、五星金卡、五星钻卡。评...

04-19 09:20:43

要闻:欧冠-吉鲁破门 AC米兰1-1那不勒斯总分2-1进四强

央视网消息:北京时间4月19日3点,欧冠1 4决赛次回合,那不勒斯主场迎战AC米兰的比赛,上半场鲁伊送点...

04-19 09:09:42

昆明市乡村振兴专业人大代表工作站授牌成立

昆明信息港讯(昆明日报记者杜仲莹)4月18日,市人大常委会在寻甸县七星镇举行昆明市乡村振兴专业人大代...

04-19 08:40:44

一世英名,毁于一旦!22载执教生涯将画句号,呜呼哀哉

一世英名,毁于一旦!22载执教生涯将画句号,呜呼哀哉,李春江,CBA,中国男篮,执教生涯,cba联赛,中国篮球名人堂

04-19 08:23:48

全球热消息:檀香木盆景靠谱吗_檀香木盆景怎么养?

1、首先要了解檀香的生长习性。不同的植物有不同的生长习性。他们会根据自己的特点在不同的地方成长。檀...

04-19 08:03:09

2022年浙江辖区内期货公司累计成交66.89万亿元 大宗商品金融服务助力实体经济|天天观热点

4月18日,记者在第四届中国大宗商品金融服务创新峰会上获悉:2022年浙江省生产总值比上年增长3 1%,其...

04-19 07:52:31

东吴证券:给予北京城乡买入评级|观天下

东吴证券股份有限公司吴劲草,谭志千近期对北京城乡进行研究并发布了研究报告《北京城乡董事会通过公司更...

04-19 07:13:15

普通专升本考试科目-专升本需要考哪些科目-当前报道

1、各科类统考科目为政治、英语和一门专业基础课。2、1 文史类:政治、英语、大学语文。3、2 艺术类:...

04-19 06:55:20

杰克逊梦幻庄园介绍_梦幻庄园有多大

欢迎观看本篇文章,小升来为大家解答以上问题。杰克逊梦幻庄园介绍,梦幻庄园有多大很多人还不知道,现...

04-19 06:47:49

360智脑首发上手实测 在语言模型圈它能排第几?

深度好文,独到观点,全都在这里~

04-19 06:24:52

20分钟倒计时ppt模板_5分钟倒计时ppt模板|环球热文

1、我帮你找找看。2、我以前有很多漂亮的素材。本文分享完毕,希望对大家有所帮助。

04-19 05:52:05

四川甘孜稻城突发森林火灾:天天信息

据央视新闻,4月18日晚,四川省甘孜州稻城县各卡乡百合村突发森林火灾,当地救援力量已赶往现场开展灭火...

04-19 05:23:29

火化炉设备价格_火化炉

1、是说殡仪馆里的火化炉吗,我可以介绍一下,首先是火花炉的外部部分,即炉床,炉床的一头是一扇电梯门...

04-19 04:54:52

北京:“公交便民驿栈”方便市民生活

北京:“公交便民驿栈”方便市民生活

04-19 04:35:57

小孩子发烧反反复复是什么原因_小孩子多少度才算发烧

1、病情分析:一般当孩子体温超过37 5度时,可以认为孩子低烧。2、这时候就要注意病情,及时监测孩子的...

04-19 04:02:57

泰晤士报:巴萨对在今夏免签京多安越来越有信心:播资讯

泰晤士报:巴萨对在今夏免签京多安越来越有信心,曼城,多特,巴萨,泰晤士报,瓜迪奥拉,英国足球,足球竞赛,...

04-19 03:28:19

深圳楼市:龙岗还会涨吗?专家指出了这几个地方

往期问答收录在“买房的大师兄”微信公众号,关注看更多问答具体买房问题请私信提问1、问:老师您好,我...

04-19 03:20:46

肺部结节是什么意思是肺结核吗

翁惠主任医师广西中医药大学第一附属医院病情分析:肺部有结节不一

04-19 02:47:32

即时:中国铁塔与苏交科战略合作签约仪式举行

苏交科(300284)消息,4月17日,中国铁塔股份有限公司江苏省分公司与苏交科(300284)集团股份有限公司战略...

04-19 02:22:15

孕妇能喝绿茶吗孕早期_孕妇能喝绿茶吗_焦点热议

1、导语:绿茶的功效是非常的多的,比如减肥,降血脂,但是也不是所有的人的适合喝的,比如孕妇,她们在...

04-19 01:58:33

随机存储器 ram与只读存储器 rom的区别_简述随机存储器ram与只读存储器rom的区别 每日头条

1、ROM不可写。2、RAM可写。本文分享完毕,希望对大家有所帮助。

04-19 01:30:49

“职场神器”!北大团队推出ChatExcel:不用再记函数公式_独家

4月18日消息,据“北京大学”微信公众号介绍,北京大学深圳研究生院信息工程学院助理教授袁粒及三名硕博...

04-19 01:18:52

上古是宁渊的什么人_上古与宁渊的关系

欢迎观看本篇文章,小升来为大家解答以上问题。上古是宁渊的什么人,上古与宁渊的关系很多人还不知道,...

04-19 00:59:33

前切尔西中场:奥斯梅恩迟早会去英超 将来他能冲击金球奖:全球速看

蓝军旧将格雷米在接受采访时表示,他觉得奥斯梅恩会去英超踢球,而且将来还有机会拿金球奖。格雷米说:...

04-19 00:48:50

亚新物业投资新设郑州翰居物业公司 注册资本10万元|当前热闻
科学家在快餐包装中发现PFAS永久化学品:强酸/碱、高温都无法降解
【天天播资讯】五一出游高峰期 文旅复苏绽笑颜是为什么
如何解决煮饭问题_送暗恋的女生礼物|世界微资讯
haogaozhongcom官网 haogaozhong
统筹产业资源融合发展 中国国际肉类产业周在青岛开幕-讯息
全球热文:北京长峰医院火灾事故已致29人遇难
环球关注:面条和牛奶能一起吃吗 面条和牛奶适合同吃吗
心灵鸡汤全集:改变命运的人生哲理 今日热闻
全球报道:天弘指数基金(聊城配资)
给力!创新创业大赛部分获奖者将直接认定为“省科技创业领军人才”
当前视讯!面对解放军战舰的逼近,台军拉出“杀手锏”导弹,威胁有多大?
别眨眼,看过来!地铁10号线二期兰花路至后堡段新进展来啦
2023上海车展:最具设计感的领克汽车来了!领克08首发亮相
全球热头条丨汽车消费、生猪价格、铁矿石价格……刚刚,国家发改委举行新闻发布会,回应了这些热点
全球资讯:四川长虹4月19日快速反弹
干细胞领域市场格局 干细胞行业发展前景投资分析:今日精选
国家发改委:积极提出“中国倡议” 落实全球发展高层对话会数字经济领域成果|世界速递
当“三所联动”遇上“美丽家园” ,法理明晰化解矛盾→
V观财报|惠威科技业绩预告“变脸”被深交所关注 焦点资讯
广州宝马撞人案司机一审死刑,受害者家属:他没解释动机,没道歉 环球热头条
CPO概念股继续活跃 剑桥科技两连板 全球今亮点
当前热点-为什么澹台烬是仁君还要钉他?因为他学人精爱发疯,更有时间限制
北京长峰医院发生火灾,北京市:当务之急是全力以赴救治伤员
世界热讯:2023年第15周生猪及猪肉价格环比下降
移动金卡是几星级 移动卡金卡|环球新动态
要闻:欧冠-吉鲁破门 AC米兰1-1那不勒斯总分2-1进四强
昆明市乡村振兴专业人大代表工作站授牌成立
一世英名,毁于一旦!22载执教生涯将画句号,呜呼哀哉
全球热消息:檀香木盆景靠谱吗_檀香木盆景怎么养?
2022年浙江辖区内期货公司累计成交66.89万亿元 大宗商品金融服务助力实体经济|天天观热点
东吴证券:给予北京城乡买入评级|观天下
普通专升本考试科目-专升本需要考哪些科目-当前报道
杰克逊梦幻庄园介绍_梦幻庄园有多大
360智脑首发上手实测 在语言模型圈它能排第几?
20分钟倒计时ppt模板_5分钟倒计时ppt模板|环球热文
四川甘孜稻城突发森林火灾:天天信息
火化炉设备价格_火化炉
北京:“公交便民驿栈”方便市民生活
小孩子发烧反反复复是什么原因_小孩子多少度才算发烧
泰晤士报:巴萨对在今夏免签京多安越来越有信心:播资讯
深圳楼市:龙岗还会涨吗?专家指出了这几个地方
肺部结节是什么意思是肺结核吗
即时:中国铁塔与苏交科战略合作签约仪式举行
孕妇能喝绿茶吗孕早期_孕妇能喝绿茶吗_焦点热议
随机存储器 ram与只读存储器 rom的区别_简述随机存储器ram与只读存储器rom的区别 每日头条
“职场神器”!北大团队推出ChatExcel:不用再记函数公式_独家
上古是宁渊的什么人_上古与宁渊的关系
前切尔西中场:奥斯梅恩迟早会去英超 将来他能冲击金球奖:全球速看
方向盘突然抱死吓坏孕妇 特斯拉回应可退换车|世界播资讯
X 广告
资讯
X 广告

Copyright ©  2015-2022 畜牧头条网版权所有  备案号:沪ICP备2022005074号-20   联系邮箱:58 55 97 3@qq.com