算法设计与分析复习——第一章:算法引论

简介:

 

第一章:算法引论

1,什么是算法?算法有哪些基本特征?请指出算法同程序的相同点与不同点

         答:算法是解决问题的方法或过程,是满足以下四个性质的指令序列

1输入:有 0 个以上的输入                               2输出:至少有 1 个输出

3确定性:指令清晰、无歧义                            4有限性:指令执行次数有限,时间有限

5)可行性:

        算法和程序的相同点:两者都具有输入、输出和确定性的特征 不同点:程序是算法用某种程序语言的具体实现,程序不满足算法具有的有限性性质 请描述算法设计的一般过程。

2,请描述算法设计的一般过程。

答:算法设计的一般过程是 1)提出问题 2)确定数学模型 3)明确目的、条件和约束关系 4)设计求解步骤 5)结果评估与分析 如果在第 5 步的分析中对算法时间、空间复杂度或结果不满意,可以返回第 1 步或第 4 步进一步迭代,直至找到满意的算法。

3,什么是算法复杂性?它主要有哪两个方面构成?

         答:算法复杂性是算法运行时所需要的计算机资源的量,它包括两个方面:时间复杂性(需 要时间资源的量)和空间复杂性(需要空间资源的量) 

4,时间复杂性分析主要分哪三种情况,哪种情况的可操作性最好,最具有实际价值?

         答:时间复杂性分为 3 种情况,最好情况、平均情况、最坏情况,可操作性最好,最具有实 际价值的是最坏情况下的时间复杂性。

         最坏情况时间复杂性是规模为n的所有输入中,基本运算执行次数为最多的时间复杂性。

   平均情况时间复杂性是规模为n的所有输入的算法时间复杂度的平均值 (一般均假设每种输入情况以等概率出现)。

5,表示渐进时间复杂性的三个记号的具体定义是什么?

答:1. T(n)= O(f(n)):若存在c > 0,和正整数n01,使得当nn0时, 总有 T(n)c*f(n) (给出了算法时间复杂度的上界,不可能比c*f(n)更大)

       2. T(n)=Ω(f(n)):若存在c > 0,和正整数n01,使得当nn0时, 存在无穷多个,使得T(n)c*f(n)成立。(给出了算法时间复杂度的下界,复杂度不可能比c*f(n)更小)

       3. T(n)= Θ(f(n)):若存在c1,c2>0,和正整数n01,使得当nn0时, 总有 T(n)c1*f(n),且有无穷多个n,使得T(n)c2*f(n)成立, 即:T(n)= O(f(n))T(n)=Ω(f(n))都成立。(既给出了算法时间复杂度的上界,也给出了下界)。

 

6,算法研究有哪几个主要步骤?主要从哪几个方面评价算法?

答:算法研究的主要步骤是1)设计2)表示 3)确认,合法输入和不合法输入的处理 4)分析 5)测试。

评价算法的标准有1)正确性 2)健壮性 3)简单性 4)高效性 5)最优性

 

7,各种增长函数的含义。

         答:

        

数学表达式

相对增长率

T(N)=O(g(N))

T(N)的增长  g(N)的增长

T(N)=Ω(g(N))

T(N)的增长  g(N)的增长

T(N)=θ(g(N))

T(N)的增长  g(N)的增长

T(N)=o(g(N))

T(N)的增长  g(N)的增长

O(1)<O(logn)<O(n)<O(nlogn)<O(n2)<O(n3)<O(an)<O(n!)<O(nn)

例题:

1

2,

 

3,

 

4,

 

5,

 

6,如果算法A由三个步骤组成,其中第一步的时间复杂性为O(n2),第二步的时间复杂性为O(nlogn),第三步的时间复杂性为O(n),请问算法A的时间复杂性是多少?

答:O(n2)

7, 解决某问题有三种算法,复杂性分别为1000N10N2 2N ,在一台机器上可处理问题的规模分别为S1  S2  S3 。若机器速度提高到原来的10倍,问在同样时间内可处理问题的大小如何?

         答:

复杂性       原来处理问题规模      速度提高以后    

 1000N            S1                    10S1

  10N2            S2                   3.16S2

   2N             S3               S3 +log10 S3 +3.32

8,问题P的算法复杂度为T(n)=n3(毫秒),现改善为T(n)=n2(毫秒)。问原来运行一小时的问题实例,现在要运行多少时间?

答:

设实例大小为n

         n3=3600*1000

        n=153.3

        现在需要时间t=153.32毫秒≈ 23.5

 

9

1),f(n) = 2n + 3 = O(n)

n3时,2n+33n,所以,可选c = 3n0 = 3。对于nn0f(n) = 2n + 33n,所以,f(n) = O(n),即2n + 3O(n)。这意味着,当n3时,程序2-1的程序步不会超过3n2n + 3 = O(n)

 

2),f(n) = 10n2 + 4n + 2 = O(n2)

对于n2时,有10n2 + 4n + 210n2 + 5n,并且当n5时,5nn2,因此,可选c = 11, n0 = 5;对于nn0f(n) = 10n2 + 4n + 211n2,所以f(n) = O(n2)

3),10n2 + 9  O(n)

使用反证法,假定存在cn0,使得对于nn010n2 + 9cn始终成立,那么有10n + 9/nc,即nc/10  9/(10n)总成立。但此不等式不可能总成立,取n = c/10 + 1时,该不等式便不再成立。


本文转自 梦朝思夕 51CTO博客,原文链接:http://blog.51cto.com/qiangmzsx/802712


相关文章
|
1月前
|
机器学习/深度学习 算法 搜索推荐
从理论到实践,Python算法复杂度分析一站式教程,助你轻松驾驭大数据挑战!
【10月更文挑战第4天】在大数据时代,算法效率至关重要。本文从理论入手,介绍时间复杂度和空间复杂度两个核心概念,并通过冒泡排序和快速排序的Python实现详细分析其复杂度。冒泡排序的时间复杂度为O(n^2),空间复杂度为O(1);快速排序平均时间复杂度为O(n log n),空间复杂度为O(log n)。文章还介绍了算法选择、分而治之及空间换时间等优化策略,帮助你在大数据挑战中游刃有余。
60 4
|
24天前
|
并行计算 算法 IDE
【灵码助力Cuda算法分析】分析共享内存的矩阵乘法优化
本文介绍了如何利用通义灵码在Visual Studio 2022中对基于CUDA的共享内存矩阵乘法优化代码进行深入分析。文章从整体程序结构入手,逐步深入到线程调度、矩阵分块、循环展开等关键细节,最后通过带入具体值的方式进一步解析复杂循环逻辑,展示了通义灵码在辅助理解和优化CUDA编程中的强大功能。
|
1月前
|
算法
PID算法原理分析
【10月更文挑战第12天】PID控制方法从提出至今已有百余年历史,其由于结构简单、易于实现、鲁棒性好、可靠性高等特点,在机电、冶金、机械、化工等行业中应用广泛。
|
2月前
|
算法 搜索推荐 开发者
别再让复杂度拖你后腿!Python 算法设计与分析实战,教你如何精准评估与优化!
在 Python 编程中,算法的性能至关重要。本文将带您深入了解算法复杂度的概念,包括时间复杂度和空间复杂度。通过具体的例子,如冒泡排序算法 (`O(n^2)` 时间复杂度,`O(1)` 空间复杂度),我们将展示如何评估算法的性能。同时,我们还会介绍如何优化算法,例如使用 Python 的内置函数 `max` 来提高查找最大值的效率,或利用哈希表将查找时间从 `O(n)` 降至 `O(1)`。此外,还将介绍使用 `timeit` 模块等工具来评估算法性能的方法。通过不断实践,您将能更高效地优化 Python 程序。
58 4
|
1月前
|
算法
PID算法原理分析及优化
【10月更文挑战第6天】PID控制方法从提出至今已有百余年历史,其由于结构简单、易于实现、鲁棒性好、可靠性高等特点,在机电、冶金、机械、化工等行业中应用广泛。
|
2月前
|
算法 程序员 Python
程序员必看!Python复杂度分析全攻略,让你的算法设计既快又省内存!
在编程领域,Python以简洁的语法和强大的库支持成为众多程序员的首选语言。然而,性能优化仍是挑战。本文将带你深入了解Python算法的复杂度分析,从时间与空间复杂度入手,分享四大最佳实践:选择合适算法、优化实现、利用Python特性减少空间消耗及定期评估调整,助你写出高效且节省内存的代码,轻松应对各种编程挑战。
41 1
|
2月前
|
算法 数据可视化
基于SSA奇异谱分析算法的时间序列趋势线提取matlab仿真
奇异谱分析(SSA)是一种基于奇异值分解(SVD)和轨迹矩阵的非线性、非参数时间序列分析方法,适用于提取趋势、周期性和噪声成分。本项目使用MATLAB 2022a版本实现从强干扰序列中提取趋势线,并通过可视化展示了原时间序列与提取的趋势分量。代码实现了滑动窗口下的奇异值分解和分组重构,适用于非线性和非平稳时间序列分析。此方法在气候变化、金融市场和生物医学信号处理等领域有广泛应用。
122 19
|
2月前
|
机器学习/深度学习 存储 人工智能
文本情感识别分析系统Python+SVM分类算法+机器学习人工智能+计算机毕业设计
使用Python作为开发语言,基于文本数据集(一个积极的xls文本格式和一个消极的xls文本格式文件),使用Word2vec对文本进行处理。通过支持向量机SVM算法训练情绪分类模型。实现对文本消极情感和文本积极情感的识别。并基于Django框架开发网页平台实现对用户的可视化操作和数据存储。
50 0
文本情感识别分析系统Python+SVM分类算法+机器学习人工智能+计算机毕业设计
|
1月前
|
算法 安全 Go
Python与Go语言中的哈希算法实现及对比分析
Python与Go语言中的哈希算法实现及对比分析
40 0
|
2月前
|
编解码 算法 图形学
同一路RTSP|RTMP流如何同时回调YUV和RGB数据实现渲染和算法分析
我们播放RTSP|RTMP流,如果需要同时做渲染和算法分析的话,特别是渲染在上层实现(比如Unity),算法是python这种情况,拉两路流,更耗费带宽和性能,拉一路流,同时回调YUV和RGB数据也可以,但是更灵活的是本文提到的按需转算法期望的RGB数据,然后做算法处理