十大排序算法
常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。
排序算法
平均时间复杂度
最好情况
最坏情况
空间复杂度
排序方式
稳定性
冒泡排序
$O(n^2)$
$O(n)$
$O(n^2)$
$O(1)$
In-place
稳定
选择排序
$O(n^2)$
$O(n^2)$
$O(n^2)$
$O(1)$
In-place
不稳定
插入排序
$O(n^2)$
$O(n^2)$
$O(n^2)$
$O(1)$
In-place
稳定
希尔排序
$O(\log(n))$
$O(n\log^2(n))$
$O(n\log^2(n))$
$O(1)$
In-place
不稳定
归并排序
$O(\log(n))$
$O(\log(n))$
$O(\log(n))$
$O(n)$
Out-place
稳定
快速排序
$O(\log(n))$
$O(\log(n))$
$O(n^2)$
$O(\log(n))$
In-place
不稳定
堆排序
$O(\log(n))$
$O(\log(n))$
$O(\log(n) ...
动态规划总结
动态规划利用历史记录,避免重复计算
定义数组元素含义,用来保存历史数组。
找出元素之间的关系(类似归纳法)
找出初始值
例子一维DP
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
定义$dp[i]$为青蛙跳到地$i$级台阶的总跳法。
青蛙跳到第$i$个台阶有两种跳法,分别是从$i-1$和$i - 2$阶跳过来,所以有$dp[i]=dp[i-1]+dp[i-2]$
下标不允许为负,如果$dp[2]=dp[1]+dp[0]$,第0个台阶就为0种跳法,$dp[1]=1$,此时$dp[2]=1$但是如果有两阶应该有两种跳法才对,因此$dp[2]=2$也是初始值。
代码如下:
1234567891011int f(int n) { if(n <= 2) return n; int dp[n+1]; dp[0] = 0; dp[1] = 1; dp[2] = 2; for(int i = 3; i <= n; i ++) { dp[i] = dp[i-1 ...
synchronized底层原理
并发编程中的三个问题可见性(Visibility)一个线程对共享变量进行修改,另一个线程立即得到修改后的最新值
演示:一个线程根据boolean类型的标记flag,while循环,另一个线程改变这个flag变量的值,另一个线程并不会停止循环。
1234567891011121314151617181920212223242526272829/** * 演示可见性问题 * 1.创建一个共享变量 * 2.创建一条线程不断读取共享变量 * 3.创建一条线程修改共享变量 * * */class VisibilityTest { // 1.创建一个共享变量 private static boolean flag = true; public static void main(String[] args) throws InterruptedException { // 2.创建一条线程不断读取共享变量 new Thread(()->{ while(flag) { } }).start(); Thread. ...
(四)SpringBoot-web
四、Web开发1、简介使用SpringBoot;
创建SpringBoot应用,选中我们需要的模块
SpringBoot已经默认将这些场景配置好了,只需要在配置文件中指定少量配置就可以运行起来
自己编写业务代码;
自动配置原理?
这个场景SpringBoot帮我们配置了什么?能不能修改?能修改哪些配置?能不能扩展?xxx
xxxxAutoConfiguration:帮我们给容器中自动配置组件;xxxxProperties:配置类来封装配置文件的内容;
2、SpringBoot对静态资源的映射规则123@ConfigurationProperties(prefix = "spring.resources", ignoreUnknownFields = false)public class ResourceProperties implements ResourceLoaderAware { //可以设置和静态资源有关的参数,缓存时间等
12345678910111213141516171819202122232425262728293031 ...
(三)SpringBoot-Log
日志1、日志框架 1、System.out.println(“”);将关键数据打印在控制台;去掉?写在一个文件?
2、框架来记录系统的一些运行时信息;日志框架 ; zhanglogging.jar;
3、高大上的几个功能?异步模式?自动归档?xxxx? zhanglogging-good.jar?
4、将以前框架卸下来?换上新的框架,重新修改之前相关的API;zhanglogging-prefect.jar;
5、JDBC—数据库驱动;
写了一个统一的接口层;日志门面(日志的一个抽象层);logging-abstract.jar;
给项目中导入具体的日志实现就行了;我们之前的日志框架都是实现的抽象层;
市面上的日志框架:JUL、JCL、Jboss-logging、logback、log4j、log4j2、slf4j….
日志门面 (日志的抽象层)
日志实现
JCL(Jakarta Commons Logging) SLF4 ...
(二)SpringBoot-Config
配置文件1、配置文件SpringBoot使用一个全局的配置文件,配置文件名是固定的;
•application.properties
•application.yml
配置文件的作用:修改SpringBoot自动配置的默认值;SpringBoot在底层都给我们自动配置好;
YAML(YAML Ain’t Markup Language)
YAML A Markup Language:是一个标记语言
YAML isn’t Markup Language:不是一个标记语言;
标记语言:
以前的配置文件;大多都使用的是 xxxx.xml文件;
YAML:以数据为中心,比json、xml等更适合做配置文件;
YAML:配置例子
2、YAML语法基本语法k:(空格)v:表示一对键值对(空格必须有);
以空格的缩进来控制层级关系;只要是左对齐的一列数据,都是同一个层级的
属性和值也是大小写敏感;
123server: port: 8081 path: /hello
值的写法k: v:字面直接来写;
字符串默认不用加上单引号或者 ...
(一)SpringBoot-HelloWorld
HelloWorld1、创建maven工程,导入依赖1234567891011121314<!-- Inherit defaults from Spring Boot --><parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.2.RELEASE</version></parent><!-- Add typical dependencies for a web application --><dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot- ...
用tf.data读取TFRecord
tf.TFRecordReader()可能会弃用,官方推荐用tf.data读取TFRecord,用起来也相对方便。实现代码如下:
1234567891011121314151617181920212223242526272829303132333435363738394041424344import tensorflow as tfimport randomimport numpy as npimport matplotlib.pyplot as pltfrom PIL import Imageimg_size = 224def parse_exmp(serial_exmp): features = tf.parse_single_example(serial_exmp, features={ 'label': tf.FixedLenFeature([], tf.int64), 'image_raw': tf.FixedLenFeature([], tf.string) }) ...
图片与TFRecord的相互转化
简介TFRecord是一种二进制格式文件,理论上可以保存任何格式的信息,可以将任何类型数据转化为Tensorflow所支持的格式,这种方法可以让数据集和网络架构更容易相互匹配。TFRecord文件包含了tf.train.Example协议内存块(protocol buffer)。可以将数据填入Example协议内存块(protocol buffer),将协议内存块序列化为一个字符串,并且通过tf.python_io.TFRecordWriter写入到TFRecord文件。
Protocol Buffer(protobuf)是Google公司出口的一种独立于开发语言,独立于平台的可扩展结构化徐磊机制。与xml、json类似。是一种数据交互格式协议。
Example消息体:
123456789101112131415161718192021222324252627message Example { Features features = 1;};message Features { // Map from feature name to feature. ...
深度学习-权重衰减
权重衰减(weight decay)是应对过拟合方法的常用方法。
方法权重衰减等价于$L_2$范数正则化(regularization)。正则化是通过模型损失函数添加惩罚项来使得训练后的模型参数值较小,是应对过拟合的常用方法。
$L_2$范数正则化在模型原来的损失函数基础上添加$L_2$范数称惩罚项。从而得到训练所需最小的函数。$L_2$范数惩罚项是模型权重参数每个元素的平方和与一个正的常数的乘积。以线性回归为例:
$$l(w_1,w_2,b) = \frac{1}{n}\sum_{i=1}^{n} \frac{1}{2}(x_1^{(i)}+x_2^{(i)}+b-y^{(i)})^2$$
其中$w_1,w_2$为权重参数,$b$是偏置参数,样本$i$的输入为$x^{(i)}, x^{(i)}$,标签为$y^{(i)}$,样本数为$n$。将权重参数用向量$w=[w_1,w_2]$表示,带$L_2$范数惩罚项的新函数为
$$l(w_1,w_2,b)+\frac{k}{2n}||w||^2$$
其中超参数$k>0$。当权重参数均为0时,惩罚项最小。当$ ...







