2 复杂度

1 开发环境搭建

开发环境

■ 开发工具

eclipse(或者IntelliJ IDEA)

✔ 明亮、简洁、舒服

✔ 多个项目可以在同一个窗口展示

✔ 学习过程中不会使用到后台开发的框架

□ 支持Mac、Windows平台

□ 下载地址

✔ https://www.eclipse.org/downloads/

 

■ JDK

□ 版本≥ 1.8

□ 下载地址

✔ https://www.oracle.com/java/technologies/javase-downloads.html

 

配置环境变量(windows)

  

字体设置

■ Mac

■ Windows

行号设置

■ 点击红色区域,然后勾选:Show Line Numbers

常用快捷键

■ 代码提示

□ Mac:Option + /

□ Windows:Alt + /

■ 错误修复

□ Mac:Command + 1

□ Windows:Ctrl + 1

■ 快速生成代码

□ Mac:Option + Command + S

□ Windows:Alt + Shift + S

■ 自动导入所需要的类

□ Mac:Command + Shift + O

□ Windows:Ctrl + Shift + O

代码提示增强

■ 将需要代码提示的字符输入到下面的文本框

□ 比如输入.ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789

修改工作空间默认编码

导入已经存在的项目

■ 右键

 

 

2 斐波那契数

什么是算法

■ 算法是用于解决特定问题的一系列的执行步骤

■ 使用不同算法,解决同一个问题,效率可能相差非常大

□ 比如:求第n个斐波那契数(fiboncci number)

3 算法的评估

如何评判一个算法的好坏?

■ 如果单从执行效率上进行评估,可能会想到这么一种方案

□ 比较不同算法对同一组输入的执行处理时间

□ 这种方案也叫做:事后统计法

■ 上述方案有比较明显的缺点

□ 执行时间严重依赖硬件以及运行时各种不确定的环境因素

□ 必须编写相应的测算代码

□ 测试数据的选择比较难保证公正性

■ 一般从以下维度来评估算法的优劣

□ 正确性、可读性、健壮性(对不合理输入的反应能力和处理能力)

□ 时间复杂度(time complexity):估算程序指令的执行次数(执行时间)

□ 空间复杂度(space complexity):估算所需占用的存储时间)

4 时间复杂度的估算

    

5 大O表示法

大O表示法(Big O)

■ 一般用大O表示法来描述复杂度,它表示的是数据规模n对应的复杂度

■ 忽略常数、系数、低阶

□ 9 >> O(1)

□ 2n + 3 >> O(n)

□ n² + 2n + 6 >> O(n²)

□ 4n³ + 3n² + 22n + 100 >> O(n³)

□ 写法上,n³ 等价于 n^3

■ 注意:大O表示法仅仅是一种粗略的分析模型,是一种估算,能帮助我们短时间内了解一个算法的执行效率

对数阶的细节

■ 对数阶一般省略底数

■ 

常见的复杂度

■ 可以借助函数生成工具对比复杂度的大小

□ https://zh.numberempire.com/graphingcalculator.php

数据规模较小时

数据规模较大时

6 斐波那契数复杂度分析

fib函数的时间复杂度分析

■ 

■ 

■ 呈现的是指数级增长的趋势

 

■ 他们的差别有多大?

□ 

□ 

□ 

□ 有时候算法之间的差距,往往比硬件方面的差距还要大

斐波那契的线性代数解法 -特殊方程

 

时间复杂度:视为 O(1)

算法的优化方向

■用尽量少的存储空间

■ 用尽量少的执行步骤(执行方向)

■ 根据情况,可以

□ 空间换时间

□  时间换空间

多个数据规模的情况

更多知识

■ 最多复杂度的知识,会在后续的数据结构、算法中穿插

□ 最好、最坏复杂度

□ 均摊复杂度

□ 复杂度震荡

□ 平均复杂度

□ ......

7 leetcode

leetcode

■ 一个用于联系算法的好网站

□ https://leetcode.com/

□ https://leetcode-cn.com/

■ 斐波那契数

□ https://leetcode-cn.com/problems/fibonacci-number/

猜你喜欢

转载自blog.csdn.net/weixin_43909650/article/details/113779282