描述算法:
Computable界面:
所包含的函数及输出:
![](https://i-blog.csdnimg.cn/blog_migrate/8c0217fe9db500d2b5146cc6f3761ee9.png)
![](https://i-blog.csdnimg.cn/blog_migrate/a63ee93aca585829349a9cf5de2da885.png)
例子:
用方法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中元素的比较
最坏时间估计 :
![](https://i-blog.csdnimg.cn/blog_migrate/948704f01a37dd2bcad84b5cd7ac1ed7.png)
检索改进:
![](https://i-blog.csdnimg.cn/blog_migrate/3d2ffb1fc6f33a6e78191d5bab12b22e.png)
算法的伪码描述:
![](https://i-blog.csdnimg.cn/blog_migrate/d84323aed50c31cf48c914dd1ec04b03.png)
伪码只是给出算法的主要步骤,不是代码
符号:
大O符号:
![](https://i-blog.csdnimg.cn/blog_migrate/d9cfe2f85ad7ec0a27e39534759228a7.png)
举例:
![](https://i-blog.csdnimg.cn/blog_migrate/297f9c6f8ab9c7fdfdeaa59fdfab962e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/7f00e0573fd1df2de43ab7fa5af5d956.png)
![](https://i-blog.csdnimg.cn/blog_migrate/dd12615f8b84f5d355347cc6022936a7.png)
小o符号:
![](https://i-blog.csdnimg.cn/blog_migrate/51380a54e84f1cec703513aef8017d32.png)
小
符号:
![](https://i-blog.csdnimg.cn/blog_migrate/4dbdb593041a9bf3d4e621764d67cb40.png)
![](https://i-blog.csdnimg.cn/blog_migrate/9e6963a87578724c5d6a624cc9af6bbd.png)
![](https://i-blog.csdnimg.cn/blog_migrate/0464c93e30c52bccef74c375ca1cb679.png)
f(n)与g(n)同阶
对数函数和指数函数:
定理1:
![](https://i-blog.csdnimg.cn/blog_migrate/73d2057b9e91356357917bf196229c68.png)
重要结果:
![](https://i-blog.csdnimg.cn/blog_migrate/c9318e42489ba8c4832d7bce272c97fc.png)
![](https://i-blog.csdnimg.cn/blog_migrate/3030b82046e86f0fce5428bc6aa25c88.png)
定理2:
![](https://i-blog.csdnimg.cn/blog_migrate/27075c4c47956da46293ca441d4ad241.png)
定理3:
![](https://i-blog.csdnimg.cn/blog_migrate/f2fb40209e6665909f737ace25383b3f.png)
该性质可推广到有限个函数相加
对数函数性质:
![](https://i-blog.csdnimg.cn/blog_migrate/0463c33c79d0a15711628e79e1481729.png)
性质证明:
![](https://i-blog.csdnimg.cn/blog_migrate/f95de4bd2ec04ee545c308edc58dc5e4.png)
![](https://i-blog.csdnimg.cn/blog_migrate/09f77c1690cf6f465289f41ef2b9379e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/c9a58e76f335f6ee7295ef9dc19609b3.png)
斯特林公式:
![](https://i-blog.csdnimg.cn/blog_migrate/fd32207f4571320edd0f8e9cfb45417c.png)
重要结论:
![](https://i-blog.csdnimg.cn/blog_migrate/5eb868024580febec8b9c015d479f9d3.png)
估计搜索空间大小:
![](https://i-blog.csdnimg.cn/blog_migrate/a005dcc6250f5599d032efaeae7c5bae.png)
![](https://i-blog.csdnimg.cn/blog_migrate/ba78f167bd71e64f36b780f7c671429b.png)
![](https://i-blog.csdnimg.cn/blog_migrate/801ed7d2cc4b6b15fb23206805131a9e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/39936cff0705c51bbf051c8d41319882.png)
取整函数:
![](https://i-blog.csdnimg.cn/blog_migrate/2c903ad12388ff39e5f4f4a4c101fc14.png)
性质:
![](https://i-blog.csdnimg.cn/blog_migrate/c24fac67d35d6556b1f5ee31f449c8fc.png)
数列求和公式:
等比数列:
![](https://i-blog.csdnimg.cn/blog_migrate/e52a91ae5a9551c65205fcb9ae22d800.png)
调和级数:
![](https://i-blog.csdnimg.cn/blog_migrate/18d88270c1638acc88f243c6991ac8ef.png)
公式运用举例:
![](https://i-blog.csdnimg.cn/blog_migrate/b4824db24f1b05a090b07d66f1465ca8.png)
二分检索法比较:
比较t次的输入个数:
![](https://i-blog.csdnimg.cn/blog_migrate/3b7b0f2ffdd3c5966f8116dce3af96d7.png)
平均时间复杂度:
![](https://i-blog.csdnimg.cn/blog_migrate/c15e6a6c80610291527e19140a3da47d.png)
估计和式上界:
![](https://i-blog.csdnimg.cn/blog_migrate/e306445d22fab91d83d289713d9c366d.png)
![](https://i-blog.csdnimg.cn/blog_migrate/c48f1dfb9d98a9ac1425289636fedf80.png)
举例:
![](https://i-blog.csdnimg.cn/blog_migrate/bfd3ff7768644073a54cc580a6518c96.png)
![](https://i-blog.csdnimg.cn/blog_migrate/811e4eece5abe8f610f6722edb895353.png)
编写总结:
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();释放该内存
总结:
本章介绍了算法的基本概念,为之后的学习打下了理论基础,做准备