【算法学习】——算法分析原理
来源:互联网 发布:徐州共享网络玩家 编辑:程序博客网 时间:2024/06/18 14:13
算法分析
先略~以后再填
函数增长
大体分为
- logN
- N
- NlogN
- N^2
- N^3
- 2^n
略~以后再补
占位先补充math库中的两个函数:floor和ceil
floor(x) //小于或等于x的最大整数
ceil(x) //大于或等于x的最小整数
待会分析搜索时间和复杂度用的到。
O-notion 大O记号
使用目的
- 当忽略公式中的小项时,限制错误的发生
- 当忽略对总分析结果有微小贡献的程序部分时,限制错误的发生
允许根据总运行时间的上限将算法分类
占位待填,重要~
基本递推式
~~~
算法分析实例
顺序搜索(sequential search)和二分搜索(binary search)
顺序搜索非常简单,所以不再贴代码了,对于M次搜索,数组大小为N时,顺序搜索的平均时间与MN成比例。当M = 10^9且N = 10^6时,完成所有事务的运行时间至少为16c年,这是不可接受的。所以我们来看一种更高效的搜索算法(只针对顺序列表而言)——二分搜索。
#include<stdio.h>#define N 10000//sequential search 顺序查找过于简单不贴代码了 //binary searchint main() { int a[N]; int i,l,r,v; for(i = 0;i < N;i ++) { a[i] = i; } scanf("%d",&v); r = N-1; //指向数组最后一个数 l = 0; //指向数组第一个数 while(r >= l) { int m = (l+r)/2; //把当前数组二分 if(v == a[m]) { //相等即为查找到 printf("%d",m); } if(v < a[m]) { //在节点m前继续二分查找 r = m - 1; //r指向新数组的最后一个数 } else { //在节点m后继续二分查找 l = m + 1; //l指向新数组的第一个数 } }}
二分搜索每次对数组进行二分,每次均可排除一半的数,因此二分查找的搜索个数永远不会超过floor(log2(N))+1 个,这样处理百万数量级的列表也不过只需要几十次的查找。
保证、预测和限制
空~
阅读全文
0 0
- 【算法学习】——算法分析原理
- 深度学习算法原理——神经网络
- STL算法原理分析
- kmp算法原理分析
- DBSCAN算法原理分析
- SVM算法原理分析
- CAS算法原理分析
- 算法分析原理
- 冒泡排序算法分析——《算法导论》学习笔记
- 堆排序算法分析——《算法导论》学习笔记
- 数据结构与算法学习1——算法复杂度分析
- 算法——算法分析
- 信号时频域分析 ——EMD/BEMD/LMD 算法原理
- mac算法原理学习
- 机器学习实战笔记(3.1)-朴素贝叶斯算法(原理分析)
- 算法—RSA算法原理(一)
- 算法—RSA算法原理(二)
- Pid控制算法—算法原理
- 关于HashMap你要知道的事情
- Centos7 下配置mail使用163邮箱发送邮件
- 吴恩达深度学习之改善神经网络(三)
- 洛谷P1637 三元上升子序列Thair(树状数组)
- 记一次考研经历
- 【算法学习】——算法分析原理
- Linux目录结构详解01
- OSB封装DBADAPTER提供REST接口
- Mybatis的Dao向mapper传多个参数(三种解决方案)
- LR模型(逻辑回归模型)
- sql注入
- Mybatis 插入与批量插入以及多参数批量删除
- RDD介绍
- 正则表达式小结