算法(一)之线性查找法

线性查找的定义:又称顺序查找,是一种最简单的查找方法,它的基本思想是从第一个记录开始,逐个比较记录的关键字,直到和给定的K值相等,则查找成功。否则失败。


//代码示例
public static <E> int search( E []data,E target){


    for( int i = 0; i< dada.length; i++){


        if( data[i].equals(target) ){

            return i;
        }



    }

    return -1;
}

循环不变量(Loop invariant)

是一组在循环体内、每次迭代均保持为真的性质,通常被用来证明程式或伪码的正确性。一个循环不变量是指在循环开始和循环中每一次迭代时永远为真的量,这意味着在循环中和循环结束时循环不变量和循环终止条件必须同时成立。

如何写出正确代码:

  • 定义清楚循环不变量
  • 维护循环不变量
  • 函数功能,输入个输出

时间复杂度

算法的时间复杂度是一个函数,常用大O符号表述,不包括这个函数的低阶项和首项系数。简单理解就是常数不重要,n代表数据的规模。

  • O(n):上例中的线性查找。
  • O(n²):
for( int i = 0; i<data.length; i++){


    for( int j = i+1; j<data.length; j++){

        //获得一个数据对 (data[i],data[j])
    }


}
  • O(㏒n):
数字n的二进制位数
while(n){

    n%2 // n的二进制中的一位
    n/2


}
  • o(√n)

数字n的约数
for( int i=i; i*i<=n; i++){
    
    if( n%i == 0){

        //n 和 i是n的两个约数
    }

    
}
  • O(2^N):长度为n的二进制数字
  • O(n!): 长度为n的排列
  • O(1): 数字n是否为偶数

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值