【算法学习】——算法分析原理

算法分析

先略~以后再填

函数增长

大体分为

  • logN
  • N
  • NlogN
  • N^2
  • N^3
  • 2^n
    略~以后再补

占位先补充math库中的两个函数:floor和ceil
floor(x) //小于或等于x的最大整数
ceil(x) //大于或等于x的最小整数
待会分析搜索时间和复杂度用的到。

O-notion 大O记号

使用目的
  1. 当忽略公式中的小项时,限制错误的发生
  2. 当忽略对总分析结果有微小贡献的程序部分时,限制错误的发生
  3. 允许根据总运行时间的上限将算法分类

    占位待填,重要~

基本递推式

~~~

算法分析实例

顺序搜索(sequential search)和二分搜索(binary search)

顺序搜索非常简单,所以不再贴代码了,对于M次搜索,数组大小为N时,顺序搜索的平均时间与MN成比例。当M = 10^9且N = 10^6时,完成所有事务的运行时间至少为16c年,这是不可接受的。所以我们来看一种更高效的搜索算法(只针对顺序列表而言)——二分搜索。

#include<stdio.h>
#define N 10000
//sequential search 顺序查找过于简单不贴代码了 
//binary search
int 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值