#C++初学记录(算法效率与度量)
2024-10-20 11:43:08
时间性能
**算法复杂性函数:
\[ f(n)=n^2 +1000n+\log_{10}n+1000 $$**
当n的数据规模逐渐增大时,f(n)的增长趋势:
当n的数据规模逐渐增大时,f(n)的增长趋势:
* 当n增大到一定值以后,计算公式中影响最大的就是n的幂次级最高的项,并且其他的常数项和低幂次项都可以忽略,我们更关注的是它是一个什么量级的算法,是线性的还是n方的,还是指数级的。
<font size=4 face="微软雅黑">**大O表示法**
* 函数f、g定义域为自然数,值域为非负实数集
* **定义:**如果存在正数c和$n_0$,使得对任意的$$ n \geq n_0 $$ 都有$$ f(n) \leq cg(n)。\]
- 称f(n)在集合O(g(n))中,简称f(n)是O(g(n))的,或f(n)=O(g(n))。
- 大O表示法:表达函数增长率上限
- 一个函数增长率的上限可能不止一个
- 大O表示法不关心小范围的(n较小)的特例。
大O表示法的单位时间
- 一个简单的布尔或算数运算 - O(1)
- 简单I/O
- 指函数的输入/输出
例如:从数组读取数据等操作 - 不包括键盘文件等I/O
- 指函数的输入/输出
- 函数返回
大O表示法的运算规则
- 加法规则: $$f_1(n)+f_2(n)=O(max(f_1(n),f_2(n)))$$
( 最耗时的那一段。) - 乘法规则: $$ f_1(n)·f_2(n)=O(f_1(n)·f_2(n)) $$
(适用于while、for等循环结构)- 顺序结构,if结构,swith结构
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
k++;
嵌套循环中第一个和第二个for都是O(n)的时间复杂度,两者的乘积是:
\[\sum{n-1 \atop i=0}(n-i)=\frac{n(n-1)}{2}=O(n^2)
\]
\]
算法渐进分析:大\(\Omega\)表达式
- 定义:如果存在正数c和\(n_0\),使得对所有n\(\geq n_0\),都有f(n)\(\geq\)cg(n),
则称f(n)在集合\(\Omega\)(g(n))中,或f(n)=\(\Omega\)(g(n)) - 大O表示法和大\(\Omega\)表示法的唯一区别在于不等式的方向
- 采用大\(\Omega\)表示法时,最好找出在函数增值率的所有下限中那个最“紧”(即最大)的下界
增长率大小比较:$$\log_2n \leq n \leq n \log_2n \leq n^2 \leq 2^n$$
算法复杂性分析
例:顺序寻找k值
- 顺序从一个规模为n的一维数组中找出一个给定的k值
- 最佳情况 O(1)
- 数组的第一个元素就是k值
- 只需要检查第一个元素
- 最差情况 O(n)
- 数组的最后一个才是k
- 检查数组中所有的n个元素
- 如果等概率分布 O(n)
- k值出现在n个位置上的概率都是1/n
- 概率不等
- 出现在第一个位置的概率为1/2
- 出现在第二个位置上的概率为1/4
-出现在其他位置的概率都是$ \frac {1-1/2-1/4}{n-2} $
最新文章
- javascript代码 调试方法
- Java 多线程编程
- 基于 Hive 的文件格式:RCFile 简介及其应用
- 有关于eclipse启动不了的问题
- PHPExcel操作sae的storage上的文件
- IRC配置for open source community
- Visual Studio 中的单元测试 UNIT TEST
- 安装SQL Server 2008 - 初学者系列 - 学习者系列文章
- mysql 1053错误,无法启动的解决方法
- 云计算之阿里仓库停止openstack mitaka源报错“No package centos-release-openstack-mitaka available.”
- java 函数初始化作用
- Linux 下的权限改变与目录配置
- intelj idea 创建聚合项目(典型web项目,包括子项目util、dao、service)
- uva 1411 Ants
- React native和原生之间的通信
- js实现语音功能
- springboot新增swagger2配置
- 如何改变checkbox的样式
- Centos 7.6配置nginx反向代理,直接yum安装
- 使用wifi ssh: connect to host hadoop000 port 22: No route to host
热门文章
- js中cssText批量修改元素样式
- redis 订阅者与发布者(命令行)
- 使用HTMLTestRunner模块生成测试报告
- 【Maven错误】 Non-resolvable parent POM for ...... Return code is: 500 , ReasonPhrase:Internal Server Error. and &#39;parent.relativePath&#39; points at no local POM @ line 14, column 11
- Python +appium logger
- 移动架构师第一站UML建模
- P3375 模板 KMP字符串匹配
- 【AirTest自学】AirTest工具介绍和入门学习(一)
- php读取外部txt文件内容并打印在页面|fopen()函数
- KM模板 最大权匹配(广搜版) Luogu P1559 运动员最佳匹配问题