实验01:吃鸡蛋问题
创始人
2024-06-03 17:14:38
0

1.实验目的

通过实验理解算法的概念、算法的表示、算法的时间复杂度和空间复杂度分析;初步学会递归算法和非递归算法的转换。

2.实验内容

为庆祝三八女生节,学校发给女老师老王发放了n\ge2 个鸡蛋 。老王计划每天吃 2 至 n 个,连续若干天吃完,问老王有多少种吃法。

说明:本题只是数学题,不考虑实际生活中老师的食量 😄。

: 如果有3个鸡蛋,只有1种正确吃法,因为

$$
\begin{array}{|c|} \hline 吃法 & 第1天 & 第2天 & 第3天 & 正确与否 \\ \hline 1 & 3个 & / & / & 正确\\ 2 & 2个 & 1个 & / & 错误\\ 3 & 1个 & 2个 &/ & 错误\\ 4 & 1个 & 1个 & 1个 & 错误\\ \hline \end{array}
$$  

程序输入输出示例

输入(鸡蛋个数):3

输出(正确吃法数):1

3.实验要求

编制程序并对其时间复杂度和空间复杂度进行分析,实现递归版本非递归版本

\square 基础性实验 \square 综合性实验 \boxtimes 设计性实验


实验报告正文

一、问题分析(模型、算法设计和正确性证明等)

设老王吃完n个鸡蛋的方法有f(n)种,则有递归式:

f(n)=\left\{ \begin{array}{ll} 0, & {if \quad n=1}\\ 1, & {if \quad n=2}\\ f(n-2) + f(n-1), & {if \quad n>2} \end{array} \right.

情况1:n=1

不符合题意所以无合法吃法。

情况2:n=2

老王每天至少吃2个鸡蛋所以只有一种吃法。

情况3:n>2

老王吃完鸡蛋的情形可分为以下两种:

  1. 最后一天吃了2个鸡蛋

  2. 最后一天吃了3个及以上鸡蛋

对于情形1,只考虑剩下n-2个鸡蛋的吃法即可,即f(n-2)。

对于情形2,因为最后一天吃的鸡蛋数\geq 3个,所以减少1个也是合法的吃法,所以该情形的吃法有f(n-1)种。

二、算法设计复杂度分析(伪代码,不要粘贴源码)

  1. 递归算法

 

 

下求解递归算法的时间复杂度,设规模为n问题所需的计算时间为T(n),则有:

$$
T(n)=\left\{ \begin{array}{ll} O(1), & {if \quad n=1||n=2}\\ T(n-2) + T(n-1), & {if \quad n>2} \end{array} \right.
$$

通过微分方程法求得方程的解:

$$
T(n) \in \theta(f(n))=\theta(\frac{1}{\sqrt{5}}(\frac{1+\sqrt5}{2})^n-\frac{1}{\sqrt 5}(\frac{1-\sqrt{5}}{2})^n)
$$

下讨论递归算法的空间复杂度,每次返回函数本身都会开辟新的栈空间,故递归树的高度即为该算法所用空间。递归出口为1和2,递归树高度为n-1,所以空间复杂度为\theta (n)。

  1. 非递归算法

  2.  

    下讨论非递归算法的时间复杂度,设规模为n的问题所需的计算时间为T(n),则有:

    $$
    T(n)\in \theta(n-2)=\theta(n)
    $$  

    下讨论非递归算的空间复杂度,该算法仅使用两个整型变量(伪代码中a,b)辅助运算,故空间复杂度为\theta(1)。

三、实验结果记录和分析(测试向量的测试时间运行结果)

  1. 递归算法

    鸡蛋数(个)结果(种)运行时间(ms)
    210.0003
    780.0003
    12890.0015
    179870.0149
    22109460.1275
    271213930.8093
    3213462698.9908
    371493035214.5162
    421655801411106.4063

 

  1. 非递归算法

    鸡蛋数(个)结果(种)运行时间(ms)
    210.0002
    780.0001
    12890.0001
    179870.0001
    22109460.0002
    271213930.0001
    3213462690.0001
    37149303520.0002
    421655801410.0002
    1012189229958345552000000.0004
    10012.686381002448534e2080.0028

 

四、总结(可描述出现的问题和解决方法、经验和反思等)

此问题应与整数划分区别开,整数划分(最小数不少于2)只计算划分数即可,本问题还需计算每个划分种不同排列,例如n=7时,\{2,2,3\}是一种合法的整数划分,而\{2,2,3\},\{2,3,2\},\{3,2,2\}都是合法的吃鸡蛋方式,记3种,故两者并不相同。

递归算法的思路更加接近我们思考一个问题的方式,结构清晰,可读性强。可用数学归纳等方法证明其正确性,设计算法及调试很方便。但是效率很低,时间空间复杂度都高于非递归算法。

本次实验中可将递归算法写作以下非递归算法:

memo = dict({1:0,2:1});
def f(n):if n in memo:return memo[n]else:memo[n] = f(n-1) + f(n-2);return memo[n]

时间复杂度为O(n^2),空间复杂度为O(n),但是本实验中采用进一步优化的迭代算法改善算法效率。

相关内容

热门资讯

贵州普安:9万亩可采摘夏秋茶进... 贵州省黔西南布依族苗族自治州普安,被中国茶叶流通协会评为“中国古茶树之乡”。该县有茶园面积18.3万...
红烧茄子:家常美味的秘籍,一键... 今天必须给大家分享一道超下饭的家常菜——红烧茄子!这道菜我可是从小吃到大,每次只要它一上桌,别的菜瞬...
娃的早餐别瞎凑!这样吃,一上午... “早上没时间,给娃塞个面包就打发了”“孩子只爱喝牛奶,别的啥都不吃”……不少家长提起娃的早餐就头疼。...
红枣、红糖不补血?这3种食物才... 1、红肉:当归红枣羊肉汤! 2、乌鸡:人参乌鸡汤! 3、鸽子:枸杞乳鸽汤!
原创 哪... 冬日里,总有一种水果能唤醒沉睡的味蕾,那便是橙子。阳光充足的南方,孕育出饱满多汁的橙子,每一口都带着...
原创 8... 八月的太阳,白花花悬在头顶,空气里裹着一层黏糊糊的闷热,连呼吸都带着暑气。厨房灶火一开,油烟味儿直往...
五星大厨上门做饭,高端酒店饮鸩... 最近发现个离谱但合理的事儿——曾经人均2000+的高端酒店,现在开始拎着锅铲上门做饭了。 图源:摄...
这座小城的“川菜之魂”,正直通... 也许你没来过成都市郫都区,但你一定吃过这里的郫县豆瓣。 作为回锅肉、麻婆豆腐、豆瓣鱼等川菜必不可少的...
原创 饭... 走进任何一家生意红火的饭店,后厨飘来的蒜蓉香气总能瞬间勾起食客的食欲。那种金黄油亮的蒜蓉酱,无论是搭...
战报来啦!好客山东·美食争霸赛... 好客山东·美食争霸赛济南赛区(第二场)比赛结果揭晓,快看下图,战报来啦! 来源:山东省精品旅游促进...
“品味两岸・中俄美食品鉴会嫩江... 7月31日,黑龙江省黑河市江畔西兴广场香气涌动、笑语喧腾,“品味两岸・中俄美食品鉴会嫩江市美食品鉴主...
原创 老... 家人们,今天必须跟你们唠唠我家那位 “中年新手大厨”—— 我老公,最近突然一头扎进厨房,开启了他的烹...
国内主题乐园门票动辄六七百,到... 每年的暑期,都是主题乐园的客流高峰期,许多家长选择带孩子去迪士尼圆公主梦,去环球影城与喜欢的IP近距...
恩施五日游超全攻略,去恩施旅游... 秘境恩施五日行:一场北纬30°的地质奇遇 前言 作为一名常年奔走在路上的旅行者,我见过雪山之巅的壮阔...
助力老年游客乐享“诗和远方” ... “熊猫专列·什邡号”上,随车医生为乘客测量血压。韩旭刚摄 “新东方快车”上,舞蹈演员与游客载歌载舞...
新疆8天7晚美食推荐,乌鲁木齐... 新疆美食是多元文化融合的活化石。乌鲁木齐领馆巷的“艾力江馕坑肉”用直径1米的馕坑现烤羊肉,外焦里嫩的...
兰州新区:农文旅融合绘就乡村新... 金黄的向日葵花海吸引了众多游客前来打卡。 夏日的兰州新区,向日葵迎着烈日昂首怒放,如金色海洋般铺展在...
恩施旅游五日游落地参团要多少钱... 寻秘北纬30°:2025年恩施五天四夜山水秘境之旅 前言 当城市的天际线逐渐模糊成相似的轮廓,我决定...