第二章算法
来源:互联网 发布:中标数据查询360 编辑:程序博客网 时间:2024/05/18 13:27
2.3两种算法的比较
- #include <iostream>
- #if 0 //需要运行 100次
- int main() {
- int i,sum=0,n=100;
- for(i=1;i<=n;i++)
- {
- sum=sum+i;
- }
- std::cout << sum;
- return 0;
- }
- #endif
- #if 1
- int main()
- {
- //运行一次
- int sum=0,n=100;
- sum=(1+n)*n/2;
- std::cout << sum;
- }
- #endif
- //显然 第二个算法更优秀
- //算法:解决特定问题求解的描述, 在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作
算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。
2.5算法的特性
输入输出:零个或多个输入,至少一个或多个输出。
有穷性:有限的步骤,每个步骤在可接受的时间内完成
确定性:每一步都有确定的含义,没有二义性
可行性:每一步都必须可行,执行有限次数完成
2.6算法的设计
正确性
可读性
健壮性
时间效率高和存储量低
2.7算法效率的度量方法
2.7.1事后统计方法:通过写好的测试程序和数据,利用计算机对不同算法比较,然后确定效率
缺点:必须事先把程序写好,时间的快慢依赖计算机,算法测试数据设计困难
2.7.2事前分析估计方法 :编程前对程序进行估计
缺点:依赖算法的好坏
2.10常见的时间复杂度
O(1): 表示算法的运行时间为常量
O(n): 表示该算法是线性算法
O(㏒2n): 二分查找算法
O(n2): 对数组进行排序的各种简单算法,例如直接插入排序的算法。
O(n3): 做两个n阶矩阵的乘法运算
O(2n): 求具有n个元素集合的所有子集的算法
O(n!): 求具有N个元素的全排列的算法
优<---------------------------<劣
O(1)2n)<O(n)<O(n2)<O(2n)
排序法
最差时间分析平均时间复杂度 稳定度 空间复杂度 冒泡排序O(n2)O(n2)稳定 O(1) 快速排序O(n2)O(n*log2n)不稳定 O(log2n)~O(n)选择排序O(n2)O(n2)稳定 O(1) 二叉树排序O(n2)O(n*log2n)不一顶 O(n)插入排序
O(n2)O(n2)稳定 O(1) 堆排序O(n*log2n)O(n*log2n)不稳定 O(1) 希尔排序OO 不稳定 O(1) 0 0
- 第二章 算法
- 第二章 算法入门
- 第二章 啊哈!算法
- 算法导论第二章
- 第二章 算法分析
- 算法笔记 <第二章>
- 算法导论第二章
- 数据结构第二章 算法
- 算法导论 第二章
- 第二章算法2.1
- 第二章 算法
- 第二章 算法基础
- 第二章 算法分析
- 第二章 算法
- 算法导论 第二章
- 第一遍 第二章算法
- 第二章:算法
- 第二章 算法分析
- 新路程------imx6 uart和串口(4)
- DB2数据库 SQL语句判断两个日期 是否属于同一个季度
- 在二叉查找树中插入节点
- 使用Nexus搭建Maven私服
- python爬虫练习--爬取某城市历史气象数据(待优化)
- 第二章算法
- 计算机控制系统中的抗干扰技术
- Socket通信
- bzoj1616
- Latex Error “Font txsy at 540 not found“
- java编程思想(一)
- ZLib 解压缩工具
- 一些常用的指令mininet & sflow & floodlight qos
- 5、用两个栈实现队列