描述算法:
Computable界面:
所包含的函数及输出:
例子:
用方法sum计算前n个元素之和
对整形数组:
public static int sum(int []a,int n)
{
int sum=0;
for(int i=0;i<n;i++)
sum+=a[i];
return sum;
}
通用法:
public interface Computable
{
public Object add(Object x);
public Object subtract(Object x);
public Object multiply(Object x);
public Object divide(Object x);
public Object mod(Object x);
public Object increment(Object x);
public Object decrement(Object x);
public Object zero();
public Object identity();
}
public static Computable sumpro(Computable []a,int n)
{
if(a.length==0)return null;
Computable sum=(Computable)a[0].zero();
for(int i=0;i<n;i++)
sum.increment(a[i]);
return sum;
}
Comparable 界面:
Comparable 中compareTo用于比较两个元素的大小,如,java. lang. Comparable. z. compareTo(y)返回x-y的符号,当x<y时返回负数;x=y时返回0;当x>y时返回正数。
0perable 界面:
有些通用方法同时需要 Computable 界 面和Comparable 界面的支持。为此可定义
Operable 界面如下:
public interface Operable extends Computable, Comparable
{}
Java 中这种没有常数,也没有方法头的界面称为标记界面
问题求解的步骤:
(1)建模:对输入和输出参数给出形式化或半形式化的描述
(2)设计算法:设计采用什么算法计算,验证算法正确性
(3)分析算法:比较效率
好的算法:
提高求解问题效率;节省存储空间
算法:
有限条指令的序列
算法时间复杂度:
针对指定基本运算,计算算法所做的运算次数
基本算法:
如比较,加法,乘法,置指针,交换
输入规模:
输入串编码长度
排序中为数组中元素的个数;检索中为被检索数组的元素个数;整数乘法中为两个整数的位数;矩阵相乘中为矩阵的行列数;图的遍历中为图的顶点数和边数
检索问题:
输入:非降顺序排序的数组L,元素数n,数x
输出:j(若x在L中,j为x首次出现的下标;否则j=0)
基本运算:x在L中元素的比较
最坏时间估计 :
检索改进:
算法的伪码描述:
伪码只是给出算法的主要步骤,不是代码
符号:
大O符号:
举例:
小o符号:
小符号:
f(n)与g(n)同阶
对数函数和指数函数:
定理1:
重要结果:
定理2:
定理3:
该性质可推广到有限个函数相加
对数函数性质:
性质证明:
斯特林公式:
重要结论:
估计搜索空间大小:
取整函数:
性质:
数列求和公式:
等比数列:
调和级数:
公式运用举例:
二分检索法比较:
比较t次的输入个数:
平均时间复杂度:
估计和式上界:
举例:
编写总结:
java的输入和输出:
import java.util.Scanner;
public class ScannerDemo{
public static void main(String [] args)
{
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个整数");
int x=sc.nextInt();
System.out.println("输入的整数是"+x);
sc.close();
}
}
错误总结:
(1)报错“sc is not closed”
原因是创建的sc内存,在输入数据后未关闭,需在最后加上sc.close();释放该内存
总结:
本章介绍了算法的基本概念,为之后的学习打下了理论基础,做准备