A
将整数1-3999转化为罗马数字,转化关系如图:
由于给出的整数范围是1-3999,所以这题还是比较简单的,可以千、百、十、个位各设一个数组,在第零位到第九位依次列出千、百、十、个位所对应的罗马数字,然后返回到这四个数位相加的值,即可得出数字所转化的罗马数字。
R
读了一篇讲述K-means聚类算法原理的文章。分类与聚类是数据挖掘领域两大基础方法,在数学建模中也经常用到。分类被用于监督学习中而聚类算法属于无监督的。聚类算法主要是将相似的数据聚合在一起形成不同的组别,但是组与组之间相差很大。
K-means算法可以被应用到无标签的数据中。这个算法的目的就是要找到数据的分组,分组的数目由K指定。这个算法基于提供的特征,迭代地将数据分配到K个组别的其中一个。数据是基于数据相似性被聚类的。K-means聚类算法的结果就是:
① K个聚类中心,可以用来标注新的数据
②数据标签,每个数据都被分配给一个簇
基本K-means算法的相似性度量是基于距离计算的,最典型的就是欧几里得距离。欧几里得距离计算给定两点之间的距离,公式如下:
算法流程
K-means算法的流程很简单,具体如下:
1、首先,随机确定k个初始点作为质心。
2、然后将数据集中的每个点分配到一个簇中,具体来讲,为每个点找距其最近的质心,并将其分配给该质心所对应的簇。
3、将每个簇的质心更新为该簇所有点的平均值
4、如果质心不再变化或者说变化很小,退出循环,否则返回到第二步
k的确定
这个k值选择的问题,据我翻看博文,一般都是实际业务场景,靠工程经验(玄学)去判定k的取值。
距离计算
上面K-means的实现我们是基于欧几里得距离的,但是实际业务场景中有很多的距离计算方式,有个叫”distance metric learning”的实现方法可以用来做这件事情。
T
二叉搜索树与双向链表
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
二叉搜索树(Binary Search Tree, BST):它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。
中序遍历一颗二叉搜索树,就能一个有序的序列。
S
分享一篇比较好用的树莓派开机教程