摘要: KMeans算法是一种无监督学习,它会将相似的对象归到同一类中。 其基本思想是: 1.随机计算k个类中心作为起始点。 2. 将数据点分配到理其最近的类中心。 3.移动类中心。 4.重复2,3直至类中心不再改变或者达到限定迭代次数。 具体的实现如下: 阅读全文
posted @ 2019-10-02 19:21 Jamest 阅读(1873) 评论(0) 推荐(0)
摘要: 这是Leetcode第220题,给定一个整数数组,问是否存在两个数差距最多为$t$,两数的间隔最大为$k$。 很明显,这里需要用到一个大小为$K$的窗口,每次判断窗口内是否存在每个数差值满足$ bool: n=len(nums) if t==0 and n==len(set(nums)): retu 阅读全文
posted @ 2019-10-02 14:50 Jamest 阅读(164) 评论(0) 推荐(0)
摘要: 这是Leetcode第215题,求无序数组第K大的数。 求第K大/小的数也是一个经典的问题了,一般来说有两种方法:堆思想和快排思想。其时间复杂度分别达到$O(NlogK)$和$O(N)$。我们先分析这两种算法,然后分析一个优化算法。 堆 一般来说,求第K大数使用最小堆,求K小数使用最大堆。时间复杂度 阅读全文
posted @ 2019-09-30 10:03 Jamest 阅读(296) 评论(0) 推荐(0)
摘要: 这是Leetcode第145题,求二叉树的后序遍历。后序遍历相对于先序遍历以及中序遍历,非递归求解方式更加复杂。这里,我使用的方法是双压栈法。 具体代码如下: 阅读全文
posted @ 2019-09-28 14:35 Jamest 阅读(128) 评论(0) 推荐(0)
摘要: 这是Leetcode第96题,给定一个 $n$,求共有多少种不同的 $BST$(二叉搜索树)。 这道题实际上是 卡塔兰数 (Catalan Numbe) 的一个例子,也是很经典的一个问题了。下面,了解一下什么是卡特兰数以及它的性质。 卡特兰数是一种经典的组合数,经常出现在各种计算中,其前几项为 : 阅读全文
posted @ 2019-09-27 16:44 Jamest 阅读(252) 评论(0) 推荐(0)
摘要: LeetCode上牵扯到Rotated Sorted Array问题一共有四题,主要是求旋转数组的固定值或者最小值,都是考察二分查找的相关知识。在做二分查找有关的题目时,需要特别注重边界条件和跳出条件。在做题的过程中,不妨多设几个测试案例,自己判断一下。 下面是这四题的具体解答。 33.Search 阅读全文
posted @ 2019-09-25 11:19 Jamest 阅读(396) 评论(0) 推荐(0)
摘要: 这是Leetcode第28题,实现strStr()函数,即在haystack中找出needle第一次出现的位置,如果不存在,那么就返回 1。 又是一个经典的算法:KMP算法,这是和之前的Manacher算法并列的两大经典算法。 KMP算法本质是通过next 数组实现当模式串中的某个字符跟文本串中的某 阅读全文
posted @ 2019-09-24 21:38 Jamest 阅读(160) 评论(0) 推荐(0)
摘要: 这段时间重新刷了一下Leetcode,在此记录下自己容易出错的和经典的题目。 这是Leetcode第5题,寻找最长回文子序列,就是给定一个字符串S,找出其中的最长回文子串,并返回该子串。常用的方法有中心扩展法与Manacher算法,其中 Manacher算法 时间复杂度可以达到$O(N)$, 空间复 阅读全文
posted @ 2019-09-23 22:53 Jamest 阅读(169) 评论(0) 推荐(0)
摘要: Xgboost是GBDT算法的高效实现,在工业界的传统算法中,Xgboost几乎占据了半壁江山。这里,我们将深度探讨xgboost原理以及其高效实现。 原理部分参考 "集成学习" 目标函数 事实上,如果不考虑工程实现、解决问题上的一些差异,xgboost与gbdt比较大的不同就是目标函数的定义。xg 阅读全文
posted @ 2019-09-22 22:32 Jamest 阅读(3300) 评论(0) 推荐(2)
摘要: 逻辑回归模型是针对线性可分问题的一种易于实现而且性能优异的分类模型。我们将分别使用Numpy和TensorFlow实现逻辑回归模型训练和预测过程,并且探讨在大规模分布式系统中的工程实现。 从零构建 首先,我们通过Numpy构建一个逻辑回归模型。 我们定义shape如下: $X$:(n,m) $Y$: 阅读全文
posted @ 2019-09-20 22:45 Jamest 阅读(3068) 评论(0) 推荐(0)