LaTeX中插入代码
minted是一个可以在LaTex中插入代码的包,可以通过以下方式使用:
配置
1 | \usepackage{xcolor} |
使用
1 | \begin{listing}[htbp] |
以上片段编译后的形式如下:
minted是一个可以在LaTex中插入代码的包,可以通过以下方式使用:
1 | \usepackage{xcolor} |
1 | \begin{listing}[htbp] |
以上片段编译后的形式如下:
更新了Blog的Theme为Icarus:
后续题解会尽快补充
近日实现了一下拓扑排序,在这里记录一下拓扑排序的思想,并附上一个具体的题目
这里使用bfs实现
对一个有向无环图(DAG-Directed Acyclic Graph)G进行拓扑排序,将G中的所有顶点拍成一个线性序列,使得图中任何一对顶点u和v,若(u, v) 属于 E(G),则u在线性序列中出现在v之前。
也就是说,由某集合上的偏序得到这个集合的全序
除了以上提到的用途,还可以判断有向图中是否有环:
根据出队元素的个数,若出队元素的个数等于图中节点的个数,则该图无环;否则该有向图存在环
题目大意就是进行拓扑排序,来获得比赛的名次,但是名次的排列要按照最小的字典序–即同等排名的元素,编号小的放在前面,这里使用了两种方式
使用priority_queue
代替queue
保证每次出队的元素都是最小的那个,具体AC代码如下:
1 |
|
对于in-degree,每次从头开始寻找in-degree为0的节点,所以每次找到的都是当前编号最小的节点
1 |
|
受到上篇C++ STL中map的排序方式的启发,这次又来探究一下Java中对于map的不同排序方式
依然分为两种排序
打印map的元素使用以下的show()
方法:
1 | public static void show(Map<String, Integer> map) { |
Java中对于Map
的value进行排序依然需要借助其他容器,这里使用ArrayList
1 | /** |
这里将Map
中的entry都放到了一个List
中,然后使用自定义Comparator
的方式对entry进行排序;
同时也使用了一种新的Map
–LinkedHashMap
LinkedHashMap
是有序的,它会按照元素的插入顺序对元素进行排序
结果如下:
1 | 🚀 SORT BY VALUE ASC: |
同理,只是更换一下Comparator
:
1 | /** |
结果如下:
1 | 🚀 SORT BY VALUE DESC |
对于key的排序也可以按照对value的排序一样,借助ArrayList
和LinkedHashMap
,但这里采用另一种方式,借助TreeMap
进行排序
TreeMap
是另一种Map
,会对Map
中的元素按照key大小进行排序
1 | /** |
对
Comparable
对象的升序排序可以使用Comparator.naturalOrder()
返回的Comparator
来指定
执行的结果如下:
1 | 🚀 SORT BY KEY ASC |
同理,只是需要更改Comparator
:
1 | /** |
对
Comparable
对象的降序排序可以使用Comparator.reverseOrder()
返回的Comparator
来指定
结果如下:
1 | 🚀 SORT BY KEY DESC |
1 | import java.util.*; |
近日做题用到了C++中STL的map容器,在涉及map的排序过程时,通常有两种方式进行排序
为了加深这两种排序方式的写法,我又写了一个demo来梳理两种排序方式的写法
1 | template < class Key, // map::关键字类型 |
默认情况下,map
按照key的大小升序排序,即less<Key>
1 | void show(map<string, int>& map) { |
所以打印结果如下:
1 | 🚀 DEFAULT: |
我们可以通过修改map的第三个参数来改变排序规则,使map按照Key的降序排列:
1 | void show(map<string, int, greater<string>>& map) { |
打印结果为:
1 | 🚀 DESC: |
对map的value进行排序需要借助别的容器,比如vector
,将每一个map中的entry放到一个新的vector
中,然后使用sort()
函数加上自定义比较规则cmp
即可对map中的元素按照value进行排序:
demo中使用的比较函数将按照value升序排序:
1 | // 升序排列 |
打印结果如下:
1 | 🚀 SORT BY VALUE |
1 |
|
大写字母表示举证,大写字母表示向量
$$
X^{(i)} = \left(
\begin{matrix}
5.1 \
3.5 \
1.4 \
0.2
\end{matrix}
\right)
$$
$$
\left(
\begin{matrix}
(X^{ (1)} )^T \
(X^{ (2)} )^T \
(X^{ (3)} )^T
\end{matrix}
\right)
$$
监督学习主要处理分类和回归问题
很多复杂的问题可以转换成多分类问题
给机器的训练数据拥有"标记"or"答案"
给机器的训练数据没有任何"标记"或者“答案”
对没有"标记"的数据进行分类-聚类分析
对数据进行降维处理
降维处理可以方便可视化
异常检测
一部分数据标有"标记"或者"答案",另一部分数据没有
更常见:各种原因产生的标记缺失
通常都先使用无监督学习手段对数据做处理,之后使用监督学习手段做模型的训练和预测
根据周围环境的情况,采取行动,根据采取行动的结果,学习行动方式
行动-反馈
奖赏或惩罚机制
输入样例和正确结果迭代进入机器学习算法
e.g. 假设模型定为 $f(x) = ax + b$,那么机器学习的任务就是找到合适的 $a$ 和 $b$
特点:一旦学到了参数,就不再需要原有的数据集
没有什么别的愿望,只是希望2020年别再像2019这么烂了。
2019.12.31
23:55
JSR303是一项标准,JSR-349是其的升级版本,添加了一些新特性,他们规定一些校验规范即校验注解,如@Null,@NotNull,@Pattern,他们位于javax.validation.constraints包下,只提供规范不提供实现。而hibernate-validator是对这个规范的实践(不要将hibernate和数据库orm框架联系在一起),他提供了相应的实现,并增加了一些其他校验注解,如@Email,@Length,@Range等等,他们位于org.hibernate.validator.constraints包下。而万能的spring为了给开发者提供便捷,对hibernate validator进行了二次封装,
使用validation-api
,通过注解形式进行数据校验
校验注解包含在spring-boot-starter-web
里面
1 | <dependency> |
查看spring-boot-starter-web
的子依赖:
1 | <dependency> |
子依赖中包含了spring-boot-starter-validation
,再查看该依赖的子依赖:
1 | <dependency> |
可以发现,该子依赖中包含了validation-api
,同时包含了它的实现hibernate-validator
限制 | 说明 |
---|---|
@Null |
限制只能为null |
@NotNull |
限制必须不能为null |
@AssertFalse |
限制必须为false |
@AssertTrue |
限制必须为true |
@DecimalMax(value) |
限制必须为一个不大于指定值的数字 |
@DecimalMin(value) |
限制必须为一个不小于指定值的数字 |
@Digits(integer,fraction) |
限制必须为一个小数,且整数部分的位数不能超过integer,小数部分的位数不能超过fraction |
@Future |
限制必须是一个将来的日期 |
@FutureOrPresent |
限制必须是将来的日期或现在 |
@PastOrPresent |
限制必须是过去的日期或现在 |
@Past |
限制必须是一个过去的日期 |
@Min(value) |
限制必须为一个不小于指定值的数字,@Min and @Max supports primitives and their wrappers. |
@Max(value) |
限制必须为一个不大于指定值的数字 |
@Pattern(regrexp) |
限制必须符合指定的正则表达式,通过regrexp 指定正则表达式 |
@Size(max,min) |
限制字符长度必须在min到max之间,supports String , Collection , Map and arrays |
@NotEmpty |
验证注解的元素值不为null且不为空(字符串长度不为0、集合大小不为0) |
@NotBlank |
验证注解的元素值不为空(不为null、去除首位空格后长度为0),不同于@NotEmpty ,@NotBlank 只应用于字符串且在比较时会去除字符串的空格(The difference to @NotEmpty is that this constraint can only be applied on character sequences and that trailing white-spaces are ignored.) |
@Email(regrexp, flags) |
验证注解的元素值是Email,也可以通过正则表达式和flag指定自定义的email格式 |
@RequestBody
)进行数据校验直接在dto的类中的属性上加上校验注解。但是仅仅这样的话,该注解不会生效
需要在controller中需要校验的参数前加上@Validated
注解:
e.g.
1 | "/register") ( |
@RequestParam
)进行数据校验对@RequestParam
注解的参数通常没有专门的类,需要直接在controller方法的参数处加上校验注解:
1 | "/check-code") ( |
仅仅这样,注解也不会生效。切记需要在controller类上加入@Validated
注解才可以生效:
1 | 4j |